高校生のためのコンピュータサイエンスオンラインセッション2020

面白い体験をつくるクリエイティブな仕事とコンピュータサイエンス

飯塚 修平さん

Google Brand Studio APAC  UX エンジニア/クリエイティブ テクノロジスト

 

「クリエイティブテクノロジスト」という仕事を知っていますか。文字通り「クリエイティブ=創造的な」、「テクノロジスト=技術者」で、誰も予想しなかったような創造的なテクノロジーの使い方を提案し、実際に作るという仕事です。

 

今回は、Google のクリエイティブテクノロジスト 飯塚さんに、コンピュータサイエンスを使って新しいものを生み出す仕事について、お話ししていただきました。

 

写真提供 Google
写真提供 Google

現在注目のテクノロジーの一つの例が人工知能です。人工知能の裏側には、機械学習と呼ばれる技術が用いられていて、それがソフトウエアに賢い振る舞いをさせるように動いています。

 

コンピュータサイエンスの分野は、新しいテクノロジーがどんどん出てきます。そのテクノロジーと私たちの身の回りに接点を見つけて、新しい体験を生み出す。そういった接点を日々提案することを心がけて、仕事をしています。

 

飯塚さんがコンピュータサイエンスに取り組むことになったきっかけを教えてください。

 

画像提供: Google
画像提供: Google

 

私とコンピュータサイエンスの本格的な出会いは、大学に進学してからです。在学中に、アメリカのシリコンバレーに訪れる機会があり、そこでウェブの世界に出会いました。帰国後、Googleでインターンシップに参加する機会があり、ウェブエンジニアとして勤務しました。

 

画像提供: Google
画像提供: Google

 

この研修旅行から帰ってきた後はプログラミング漬けの日々で、大学の有志でプログラミングの勉強会を企画したり、実際にウェブサービスを運営したりして、たくさんの経験を積みました。このとき学んだことは、今でも貴重な財産になっています。

 

その後、修士課程を修了してGoogleに入社しましたが、半年くらいした頃、もう少し研究を深掘りしてみたくなって、社会人博士としてGoogleに勤めながら、大学院に通いました。博士課程を修了した今はGoogleの仕事に専念しています。

 

皆さんは、高校を卒業したら大学→修士→博士と一直線に進むキャリアパスを想像されると思いますが、私のようにループを描いたり、枝分かれしたりするような進み方もあるということを、ぜひ知っていただけたらと思います。

 

 

飯塚さんは、コンピュータサイエンスを使って様々なものをデザインすることに取り組んでいます。でも、コンピュータは教えられたことはできるけれど、コンピュータ自体が新しいものを生み出すことはできない、と考えられてきました。コンピュータにデザインをさせるとはどんなことなのでしょうか。

 

人が何か物を作るときには、デザインという行為が必要です。デザインとは「設計」のことで、人間と人工物の関わりを考える広い概念を指しています。

 

デザインをコンピュータサイエンスで行うためには、デザインという行為をコンピュータが解釈できる形に捉え直す必要があります。

 

画像提供: Google
画像提供: Google

 

例えば、「座り心地がいい椅子をデザインする」という場合、数学的視点から見ると、「座り心地がいい」とは硬さはどのくらいか、テクスチャーはどんなものか、といったことを具体的な数値で表現する必要があります。

 

つまり、「座り心地」を評価関数f(x)、その椅子の形状、例えば硬さをxとして、このf(x)の値を最大にするxを探す、という数学的な問題に置き換えるわけです。そして、高校で習う微積分を使ってこのf(x)の導関数を見つけ、その導関数が0となるような方程式を解いて、最大値を求めます。

 

このように問題を抽象化していくことで、デザインを「最適化問題」という数学の問題に捉え直し、数学の様々な知見をデザインに応用できるようになります。

 

難しいのは、例えばxを椅子の硬さとすると、それに対する座り心地がどのような数式で表されるかは誰もわからないことです。むしろ、数式で表せるのかさえ怪しく、導関数を求めることもできません。デザインを最適化問題として捉えるときは、このように、まずどのように最適化するか、ということ自体を考えるところから始まります。

 

 

具体的にはどのような手順で最適化の方法を見つけるのですか。

 

椅子の硬さを変数xに設定して、実際にいろいろな人にある硬さの椅子に座ってもらい、「ちょっと硬い」「柔らかすぎる」と採点してもらいます。それがこのx=0のときのf(x)の値になります。その後、硬さを少しずつ変えて、それぞれ座り心地を評価します。

 

これを繰り返すうちに、座り心地、つまり評価関数f(x)が高くなる点が見えてきます。それをさらに繰り返して、だいたいどこに落ち着くかがわかります。これが最適化問題の解法です。

 

画像提供: Google
画像提供: Google
画像提供: Google
画像提供: Google

 

しかし、実はその隣にさらに大きい山、つまり最適解があるかもしれません。

 

これは、最適化問題で頻出する問題で「局所解」と「大域的最適解」と呼ばれます。つまり、心地よさを目指すためには、一時的に下がることを許すとか、複数のところからスタートしてみるといった工夫が必要なのです。

 

こういった工夫をいろいろ考えることが、まさにアルゴリズムを考えるということです。最適化の研究は、良いアルゴリズムを研究することなのです。

 

今後デザインの全てをコンピュータに任せることができるようになるのでしょうか。

 

コンピュータと協力して何かをデザインするというときには、人間が得意な部分と、コンピュータが得意な部分というものがあります。

 

例えば、評価関数となる「座り心地」をどのように定義するか。アンケートの結果か、脳波を測定するのかなど、様々な方法がありますが、コンピュータが解釈できる形するために、この部分は人間が考えなければなりません。さらに解となるxは、硬さなのか、テクスチャーなのか、形状なのか。それをどう表すのか、という点は、人間がコンピュータと対話して考えるべきだと思います。

 

一方で、コンピュータは同じ手順を高速で繰り返すことが得意です。探索を効率よく行ったり、デザイン画のを描画をコンピュータにまかせることで、人間とコンピュータがより良く対話でき、協力してデザインできるようになります。

 

 

コンピュータサイエンスを目指す皆さんへ

 

今日は、最適化アルゴリズムをクリエイティブに使うお話をしましたが、数学や工学、コンピュータサイエンスの基礎をマスターすることで、その上にある様々な応用が広がってくると思います。

 

世の中にはたくさんのテクノロジーが溢れていて、皆さんに使われることを待っています。特にコンピュータサイエンスの世界は進歩が早くて、様々なテクノロジーが日々生まれています。個人的には、今は生まれるスピードが速すぎて、使う方のスピードが追いついていない状態だと思います。

 

同時に、皆さんの周りには解かれることを待っている「問題」があります。先程の椅子の心地よさも「問題」です。だから、身の回りをよく見て、この問題はコンピュータサイエンスで解けないかな、と考えてみてください。もしあなたにしか見つけられない問題があれば、それはあなたにとっての宝物です。そういった問題を見つけたら、コンピュータサイエンスを味方にして、その問題の解決に夢中になってくれたら、こんなに嬉しいことはありません。