強化学習を勉強したのでまとめてみます。勉強時間はかなり短時間ですが、割と分かった気になったので、ポイントを記載してみたいと思います(数式は一切用いません)。このポイントを押さえてソースコードを読むと、理解が早いです。一部用語は私が勝手に定義したものもありますが、その他間違えていたら遠慮なくご指摘お願いします。
強化学習
強化学習を理解するにあたって、環境・エージェント・トレーナーの3人が登場します。その登場人物をベースに説明します。環境、エージェントは一般的に使われる用語ですが、トレーナーは筆者が勝手に名付けています。
環境
エージェントが学習を行う舞台です。オセロだったりシューティングゲームだったりブロック崩しだったり。環境は定量的な状態と行動パターン、ルール(状態と行動を入力として次の状態と報酬を決定)を持ちます。ブロック崩しの場合を例に説明してみます。
- 定量的な状態: 現在のブロックの数やボールの位置。
- 行動パターン: バーを右に動かすか左に動かすかの2種類。
- ルール: バーがボールに当たれば報酬は+5、ブロックを1つ崩せば+1、ボールを落とすと-50。
といった具合です。Open AI Gymというサービスがありますが、これは環境を提供しているため、エージェントとトレーニングを実装すれば試すことができます。
エージェント
実際に学習を行って成長する個体です。ブロック崩しの場合、バーを操作する仮想のプレイヤーということになります。環境の定量的な状態を入力として、取るべき行動を決めます。ここでの行動決め(ポリシー)を学習によって最適化していくわけです。行動を決定する方法としては、ε-greedy法がよく使われます。
学習した結果を元にポリシーを決定するのは無難な選択ですが、実はそれ以外にもっと良い選択肢があるかもしれないのに、その可能性を潰すことにもなります。ε-greedy法では、一定の確率でランダムに行動を決めます。こうすることで、より良い結果を得る可能性が高まります。
トレーナー
トレーナーは環境とエージェントをコントロールし、エピソードという単位で学習を繰り返します。1回のエピソードの中で、環境を初期化し、エージェントに行動をさせ、受け取った報酬を元にエージェントの行動モデルを最適化していきます。最適化の方法としては、TD学習がよく使われます。ある時点の行動の価値は、その次の行動、さらにその次の次の行動、と繰り返し予測していって最終的にゴールにたどり着けるかどうかによって初めて分かります。しかしこれでは計算コストが大きいため、ある時点の行動と次の行動の予測結果によってのみ決めようというのがTD学習です。
Q学習とDQN
最後に深層学習による強化学習の手法の変化について簡単に記載します。
深層学習が登場する以前のQ学習では、ポリシーを状態と行動のマトリクスで保持していました。ある状態に対するある行動の価値はどれくらいかというのをマトリクスで管理し、より価値の高い行動を選択します。そのため、例えば定量的な状態に座標のような連続した値を持たせようものなら、マトリクスが膨れ上がってしまうため、限度がありました。
深層学習の登場によって、ポリシーをマトリクスの代わりにニューラルネットワークで管理できるようになりました。これがDQNです。周知の通り、深層学習では特徴量を抽出できるため、環境の定量的な状態を人が選定してあげる必要はなく、画像をそのまま渡すことができます。つまり人が視認して学習するのに近い学習の形が可能となったわけです。