エンタープライズギークス (Enterprise Geeks)

企業システムの企画・開発に携わる技術者集団のブログです。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。

ニュースになったディープラーニング関連の論文を紐解く

2012年あたりから、急激にディープラーニング関連の驚くべきニュースを目にする機会が増えた。たとえば以下のようなものである。

  • 2012年: Googleのコンピュータが自動的に猫を認識できるようになった
  • 2012年: 画像認識コンペティションディープラーニングが圧勝した
  • 2015年: LSTMで上手な受け答えが可能なチャットボットが作れた
  • 2015年: Atariのゲームを試行錯誤しながら上手にプレイできるように
  • 2016年: AlphaGoが世界棋士レーティングで4位のイ・セドルに勝利した

この他にも、最近の音声認識が急激に実用段階に入ったのはディープラーニングのおかげであるとか、画像に対して説明文を英語で付与してくれるプログラムが作れたとか、いろいろな画像を画家の作風を真似た画像に自動変換するプログラムが作れた、などなど、ニュースになったディープラーニング関連の技術は枚挙にいとまがない。

これらのニュースの背後には、実際には元となった論文が存在する。これらのニュースの元となった論文を紐解き、整理しておくことには意味があると思い、以下のスライドを作成し、2016年3月に社内勉強会を開催した。

複数の論文を簡単に総括するには

勉強会の実施に当たっては、ディープラーニング系の複数の論文を、2時間という短い時間枠で簡単に総括するためにどうすれば良いか悩んだ結果、以下の方針で総括することとした。

  • ディープラーニングでは、全結合層、softmax層、regression層、convolution層、pooling層、LCN層、LSTM層などの特徴的な層を用いる。これらの層の役割や内容を説明することにより、受講者側にディープラーニングを理解するための前提知識を蓄えてもらう。
  • ディープラーニングでは上記のようなさまざまな役割を持つ層を目的に合わせて積み重ねる。各論文でのニューラルネットワークを説明する際に、どのような層を重ねてネットワークが構成されているかを説明する。層の役割を理解してもらった上で、各ニューラルネットワークの層の重なり方を説明することで、おおよそ各ニューラルネットワークの設計意図を想像出来る事を期待した。
  • 本来は、ネットワークをトレーニングする方法を説明すべきだが、ここを説明しても受講者の感動は得られないと思い、省略した。

このような方針でスライドを作成した結果、かなりコンパクトにまとめる事が出来た。

各種論文を読んでいく中で気付いた知見

さまざまな論文を読んでいく中で、以下の様な事に気付くことが出来た。

ReLUは偉大

古めのディープラーニング系の解説記事を読むと、「ディープラーニングのように深いニューラルネットワークを学習させることはこれまで困難だったが、autoencoderやRestricted Boltzmann Machineなどの事前学習の登場によって、深いニューラルネットワークの学習が可能となった」といった記事を目にすることがある。

しかし、2011年以降、このような解説は、多くの場合正しくなくなっている。というのも、2011年にrectified linear unit(略してReLU)と呼ばれる活性化関数が発見されたことにより、状況が一変しているためである。このReLUという活性化関数は非常に強力で、広い領域において、autoencoderやRestricted Boltzmann Machineを不要にし、旧来のバックプロパゲーションによる学習を可能にしてしまったのである。

以前よく使用されてきたシグモイド関数などの旧来の活性化関数では、どうしても勾配消失問題が発生し、深いニューラルネットワークの学習が出来なかったために、autoencoderやRestricted Boltzmann Machineといった事前学習(pre-training)が必要だった。ReLUは、この勾配消失問題を大幅に軽減し、多くの領域において事前学習を不要にしたのである。ReLUは偉大である。

論文によってはソースコードが公開されている

Atariのゲームを攻略するディープラーニングのプログラムは、ソースコードが公開されている。以下の場所である。

https://sites.google.com/a/deepmind.com/dqn/

このリンク先に進むと、"Please click here to download the code" と書かれているページが表示される。"here"のリンク先が実際のソースコードである。

記述に使われているプログラミング言語Luaであり、ライブラリーとしてはTorchが使われている。LuaJavaScriptが読める人であれば簡単に読めるため、プログラミング言語上の障壁は低いと思われる。

このプログラムはディープラーニングの強化学習への応用であるDeep Q Learningの実装であるため、特に興味深い。

さまざまな論文を見た後で

ディープラーニング関連技術がこれからどこへ向かうか全く分からないが、著者としてはディープラーニングをロボットの制御へ応用する事に関心がある。つまり、Deep Q Learningなどの強化学習を、ロボットの制御に用いるのである。

具体例を挙げると、人型ロボットの姿勢制御や自動運転車の制御への応用である。

現状、ロボットの制御といえば、力学計算にもとづいて制御を行うが、そのような力学計算を不要にした上で、より自然な制御を可能にするための技術として普及していく事を期待している。

[近棟 稔]