GTC 2015 2日目の基調講演は、Google Senior Fellowのジェフ・ディーン(Jeff Dean)氏。同氏は、ニューラルネットワークの研究者だ。講演のタイトルは「Large Scale Deep Learning」で、やはりディープラーニングがメインテーマ。
講演は、基本的なところから入り、後半でGoogleでのディープラーニングを語るもので、ディープラーニングの入門としては非常にわかりやすいものだった。
最初に「How Can We Build More Intelligent Computer System?」(どのようにしてもっと知的なコンピュータシステムを作ることができるか?)と聴衆に問いかけたディーン氏。続いて、「世界を知覚して理解するために必要なこと」として基本的な会話や視覚、言語の理解、ユーザーの振る舞いの予測などのさまざまな項目を挙げた。
しかし、これらのさまざまな作業すべてに対してプログラム(アルゴリズム)を書くことはできない。そこで「観察から学習する汎用のアルゴリズム」が必要だという。つまり、その「観察から学習する汎用のアルゴリズム」が「ディープラーニング」なのだという。
その後、しばらくディープラーニングに対する一般的な説明が続くがそこは省略して、Googleでのディープラーニング利用のところに話を進める。Googleでのディープラーニングの研究目標は「シンプルにすること」であり、それは
- 独自のディープラーニング用フレームワークを社内の誰でも利用可能にする(研究用としても製品用として利用可能なもの。すでに現実で起こっている問題のためにニューラルネットワークを使う開発が多数始まっている)。
- ニューラルネットのアーキテクチャや学習の方法を簡単に記述できるようにする
- ユーザーからのわずかな単純なヒントで耐故障性やリカバリー、並列化などを可能にすること
だとしている。
ディーン氏によると、ニューラルネットワークの学習時間は、研究に大きく影響するという。Googleでは学習時間に一月を超えるようなものはそもそも研究の対象にならない。1週間を超えるものでも重要な研究のみに限られる。数日かかるようなものは、許容範囲だが処理の並列化の研究対象でしかない。数時間以下の学習のものだけがインタラクティブな研究対象となり得るとしている。
巨大なニューラルネットワークの学習時間を短縮するには、処理を並列に行う必要があるが、それには、モデルを並列化する方法とデータを分割して行う方法がある。
モデルを分割して並列処理する場合、ニューラルネットワークをレイヤーと垂直に分割し、GPUやほかのマシンを割り当てていく。この場合、ニューラルネットワークのレイヤーにある、「特定の部分だけを受容する領域」(Local Receptive Fields)に注意する必要がある。「特定の部分だけを受容する領域」を分割してしまうと、通信量が増えるという問題が起きるてしまう。
一方のデータを分割する方法では、パラメーターを特定のサーバーで記憶しておき、複数のモデルに異なるデータを与えて、学習を並列に行う。初期値として、その時点でサーバーに保存されているパラメーターを利用し、学習前と学習後の差、さらに以前のパラメーターを加算したものが新しい状態となる(同期分散した統計勾配降下法)。この構造を使うと、複数のニューラル・ネットワークに異なるデータを与えて複数のモデルを並列に学習させることが可能になるという。
また、ニューラルネットワークは、計算精度に対する許容量が高く、32bit表現の浮動小数点を16bit表現にしても、ほとんど結果がかわらないことが知られていて、これを使うことで学習の高速化もできる。
Googleは、最新の人工知能基盤の開発に数十人年のシステムエンジニアと人工知能研究者を投入している。また、1000程度のCPUやGPUで10億以上のデータサンプルを並列に学習させることも少なくないという。さらに、ディープラーニングを実際の製品に利用して急速に経験を積んでいる。例えば、写真検索やAndroidの音声認識機能、ストリートビューや広告の配置などにディープラーニングが応用されている。
音声認識では、Googleのスピーチチームと共同して、800台のマシンを使って5日間の学習を行い、単語のエラーを30%削減した。これは、2012年にAndroid 4.1(Jellybean)に組み込まれている。
ビジネスにディープラーニングを利用する一方で、イメージやスピーチ認識といった領域でアカデミックな挑戦をしばしば優先し、頻繁に論文を出してい。これはGoogleから出ている論文を見れば、いろいろな分野を広く手がけていることが分かるはずだ。
ディーン氏はここで、具体的なディープラーニングの事例を紹介した。YouTubeにある1000万の動画から1つのフレームを抜きだしサンプルとし、オートエンコーダーという技法を使い、三層で最上位に6万のニューロンを置いて学習させた。これには1万6000個のCPUコアによるシステムで1週間かかったという。
最上位のニューロンには、高いレベルのコンセプトが見つかった。例えば、あるニューロンは、人の顔の検出器になっていたが、ほかにも純粋に教師なし学習で画像を学習させ顔を認識するニューロンや猫を認識するニューロンも作るができたという。
ディープラーニングによる学習の精度も大きく向上している。ディーン氏が例としてあげたのは、画像を認識する「Imagenet」というコンテストでのデータだ。2011年の優勝者はTop5の誤差が25.7%だった。この値は、何年もかかって徐々に改善してきた結果である。
しかし翌年の2012年にCNN(畳み込みニューラル・ネットワーク)を利用したシステムが16.4%を達成した。さらに2013年には、Googleのチームが6.66%という誤差で優勝し、2014年3月2日にGoogleの出した論文では4.8%にまで来た。ちなみに同じ画像の認識を人間が行うと5.1%とのことから、ついにコンピュータが人間と並び、超えつつある。
Googleの画像認識では、例えば、ハイビスカスとダリアを区別できる一方、さまざまな国の料理や料理が乗っているテーブルを「食事」として認識できる。ただその一方でナメクジをヘビと認識してしまったり、一部しか見えない他の動物をイヌと認識してしまうことはある。
画像から文字を抜き出すニューラルネットワークの実行結果を視覚化したもの。これにより、普通の写真の中から文字である可能性の高い部分を抜きだし、そこにだけ文字認識のニューラルネットワークを適用させることができる |
最後にロンドンにあるGoogleの研究拠点で行われた、ゲームの自動理解のデモビデオが再生された。これは、画面とスコア、ボタンなどを入力とし、アタリ2600※のゲームを自動でプレイするニューラル・ネットワークを作成した。なお、ボタンの意味は教えず、ゴールは得点を最大にすることだけだという。
※8bit CPUを使ったゲームマシン。Video Computer System:VCSという名称で販売されていた。日本ではエポックが取り扱っていたことがある。カートリッジ式ゲームの元祖的存在といえる。
学習が進むにつれ、インベーダーゲームであれば、敵の弾をよけ、敵を確実に撃つようになり、上を飛ぶUFOも狙う。また、ブロック崩しでは、跳ね返ってきた弾を確実に撃ち返せるようになり、意図的に端を狙って、ブロックの上に玉が入るようにするなどの行動が可能になった。