IT is IT.

空想イノベーション

ディープラーニング+強化学習

2013年に、DeepMind社が、ディープラーニングと強化学習を組み合わせたゲームのブロック崩しの動画を公開した。


DQN Breakout
この動画では、人間を上回る記録を残し、大きな反響となった。

この強化学習では、Q学習(Q learning)と呼ばれる手法が使われ、ディープラーニングと組み合わせることで、DQN(Deep Q-Network)と呼ばれ、これ以降、

  • Double DQN
  • Dueling Network
  • Categorical DQN
  • Rainbow

といったいくつかの改良版モデルが開発された。

スポンサーリンク
 

また、2015年には、同じくDeepMind社が開発したAlphaGo(アルファ碁)が人間の世界チャンピオンに勝利し、話題になった。
AlphaGoは、畳み込みニューラルネットワークが用いられ、どのような手を打つかの探索は、モンテカルロ木探索が使われている。

さらには、2017年に、完全に自己学習のみで学習を行なっているAlphaGo Zeroが、AlphaGoを完全に超える強さにまで学習を行い、話題となった。

教師あり学習と強化学習の違い

f:id:itry:20190224210911j:plain
機械学習においては、教師あり学習と、教師なし学習についてこれまで触れてきたが、もう一つ、強化学習というものが存在する。
強化学習とは、行動を学習する仕組みである。
ある環境において、目的とするスコアを最大化するためにどのように行動すればよいか、を学習するものである。
これは、一連の行動系列の結果としてのスコアを最大とするように学習することを意味する。

スポンサーリンク
 

簡単な例として、教師あり学習のケースと比較する。

ロボットの歩行制御に関する学習

教師あり学習の場合
ロボットの関節の角度や動かす速度がどれくらいのときに、どれくらいの歩幅で歩けばよいかを入力と出力のペアで用意し学習を行う

強化学習の場合
歩けやた距離をスコアとして与えることで、歩行距離を最大化するために、自ら行動(歩く方法)を変え、歩行距離が伸びるような学習を行う

決定的な違いは、強化学習では、状態をいかに表現できるか、また、その状態に基づいていかに行動に結びつけることができるか、というアプローチをとることである。

様々なリカレントニューラルネットワーク

f:id:itry:20190224150714j:plain

Bidirectional RNN

通常のLSTMは、過去から未来への一方通行にのみ対応しているが、ケースによっては、過去と未来の両方の情報を使って予測する方が効果的な場合もある。
こういった場合、LSTMを2つ組み合わせることで、過去から未来、未来から過去の両ケースでの学習が可能となる。
このモデルを、Bidirectional RNN(BiRNN)と呼ぶ。

Bidirectional RNNでは過去用と未来用の2つの時間軸に沿って、それぞれ独立してデータが展開されているのみで、構造としては非常に単純なものである。

RNN Encoder-Decoder

入力が時系列の場合、出力も時系列で行いたい場合の問題を、sequence-to-sequenceと呼ぶ。
これは、自然言語処理の分野で研究が進んでいる。

このケースのアプローチも、Bidirectional RNN同様、LSTMを2つ組み合わせることで、入力と出力のそれぞれにLSTMを対応している。
RNN Encoder-Decoderとは、その名の通り、エンコーダとデコーダの2つのLSTMに分かれており、エンコーダが入力データを、デコーダが出力データをそれぞれ処理する。
出力が時系列であるため、全ての出力を一気に行うことができないため、デコーダの出力を、次のステップの入力として受け取って処理することになる。

スポンサーリンク
 

Attention

リカレントニューラルネットワークでは、その時点の状態が、まとまって過去の隠れ層として反映されており、どの時点がどれだけ影響を持っているか、までは直接的に行うことができない。
Attentionは、時間の重みをネットワークに組み込んだもので、過去の時点それぞれの重みを学習することで、時間の重みを考慮したモデルを実現している。

ただし、直近の過去しか重み付けできないのではないか、という指摘があがっている。

リカレントニューラルネットワークの勾配消失問題対策

f:id:itry:20190224141301j:plain
リカレントニューラルネットワークにおいても、通常のニューラルネットワーク同様、勾配消失問題がある。
さらに、時系列を扱ううえで固有の問題として、現時点では関係性が少なくても、将来は関係性がある、というような入力があった場合に、重みを大きすべきものであると同時に、重みを小さくしなくてはいけない、という矛盾が生じてしまう。
これを、入力重み衝突と呼び、リカレントニューラルネットワークでの学習の妨げの大きな要因となっている。
出力に関しても同様で、出力重みの衝突の問題が存在している。

こういった問題を対策するために、リカレントニューラルネットワークの一種である、LSTM(Long Short Term Memory)と呼ばれる手法が存在する。
通常のニューラルネットワークでは、勾配消失問題を、活性化関数の工夫により対処するようにしていたが、LSTMも同様、隠れ層の構造を変えることで、勾配消失や重み衝突の問題を回避している。

LSTMは、LSTMブロックと呼ばれる機構で、時系列の情報をネットワークに保持できるような仕組みになっている。
LSTMブロックの構造は、大きく、2つの機構で構成されている。

  • 誤差を内部にとどまらせるためのセル
  • 必要な情報を必要なタイミングで保持・焼却させるためのゲート

セル

セルとは、CEC(Constant Error Carousel)とも呼ばれ、誤差を内部にとどめ、勾配消失を防ぐためのものである。

ゲート

ゲートは、入力ゲート出力ゲート忘却ゲートの3つで構成されている。
入力ゲートは入力重み衝突を、出力ゲートは出力重み衝突のためのゲート機構になっている。
そして忘却ゲートで、誤差が過剰にセルに停留するのを防ぐためにリセットするゲート機構になっている。

スポンサーリンク
 

こういった仕組みで、リカレントニューラルネットワークでは、勾配消失や、入力重み衝突、出力重み衝突などの問題に対処しているが、LSTMはセルやゲートをそれぞれ最適化するために、膨大な計算を必要とする。
そのため、LSTMを簡略化したGRU(Gated Recurrent Unit)という手法を用いることもある。

GRUでは、リセットゲート、更新ゲートが、入力ゲート、出力ゲート、忘却ゲートの代わりを果たしている。

リカレントニューラルネットワークの基本的な仕組み

f:id:itry:20190224002236j:plain
時間依存性を学習するリカレントニューラルネットワークの仕組みとは一体どのようになっているのか。
実はそんなに難しいことではなく、通常のニューラルネットワークが持つ隠れ層と同様に、過去の隠れ層が追加されているものが、リカレントニューラルネットワークということになる。

スポンサーリンク
 

流れとしては、このリカレントニューラルネットワークのモデルに対し、時間軸に沿った順番でデータを古いものから入力するだけだ。
ここからは、通常のニューラルネットワーク同様、隠れ層に重みを与えることで情報が伝わっていくが、リカレントニューラルネットワークでは、ここからさらに、過去の隠れ層から、現在の隠れ層に対してつながり(重み)を持たせる、ということが追加される。

誤差の逆伝播も同様で、過去に遡って反映する必要があることも注意が必要となる。
この時間軸に沿って誤差を反映していくことを、BackPropagation Through-Time(BPTT)と呼ぶ。

時系列に処理をしたいのならリカレントニューラルネットワーク

f:id:itry:20190223232924j:plain
例えば、こんな事例がある。

  • 電車は朝と夕方に混雑する
  • 電気代は夏と冬に高くなりやすい
  • 年末・年始、ゴールデンウィーク、お盆に外国への旅行者が増加する
  • 世界の人口は緩やかに上昇している

これらは、いずれも時間軸に対してパターンを持っている、という共通点がある。

スポンサーリンク
 

通常のニューラルネットワークでは、事象とともに時間の情報を入力したとしても、どうしても時間の持つ情報が削ぎ落とされてしまうことになる。
そこで、時間情報を反映し、時間依存性を学習することができるモデルが考案された。
それが、リカレントニューラルネットワーク(Recurrent Neural Network:RNN)である。

既存のものを活用する転移学習

f:id:itry:20190223161155j:plain
ディープニューラルネットワークで、様々な手法の開発により、より深く、複雑な学習が行えるようになった一方で、GPUマシンが1台や2台あったところで、その膨大な計算量を捌ききるのは至難の業ともいえる。

機械学習において重要なのは、最適化されたネットワークの重みであり、その重みを得るためのステップに、膨大な計算と時間を要することになる。
従って、既に学習済みのネットワークがあれば、わざわざ一から学習する必要がない。

スポンサーリンク
 

例えば、VGGやGoogLeNet、ResNetといった巨大なネットワークは、ImageNetで学習済みのモデルが公開されている。 www.image-net.org 公開済みのモデルは万能なものではないので、ここに、新たに何層か追加してファインチューニングを行うことで、それぞれが目的とする高性能なネットワークを得ることができる。

このように、既に学習済みのネットワークを利用して、新しいタスクの識別に活用することを転移学習と呼ぶ。