actor-criticの実装よりアルゴリズム逆読み
強化学習の勉強会でゲーム学習の高速化の解説があった。
これらはActor-criticを基本とした並列化、GPUの使用で高速化を
図っている。ここでActor-criticのアルゴリズムを詳しく見てみた。
DQNは価値関数の改善だけで行っているが、現在の強化学習は価値関数と方策関数の改善も同時に行うActor-criticで構成されることが多い。
損失関数は報酬を反映した目標とする価値と現在の価値関数の差で与えられ、最適なパラメータは損失関数が最小になる様に求める。
しかしDQNとActor-criticは行動の選択が異なる。DQNは最大の価値になる行動を選択するのに対し、Actor-critcは最適な方策で選択される。
Actor-critic
DQNは単に局所的に価値が高い行動を選ぶだけであるが(但しε-greetyは反映されている)、Actor-criticは過去に高い価値関数が得られた履歴から学習された方策関数を採用しているので頑健性があると見做せる。
下記のActor-criticのサイトのプログラムのupdate_modelからアルゴリズムを解釈してみた。
アルゴリズムは以下のシュミレーションと学習を繰返して、価値関数と方策関数の両方を精緻化します。
(1) シュミレーション
①これまで学習した方策関数で行動を決定します。
方策関数は状態を引数でパラメータのニューロとなっています。
②行動後の状態と得た報酬を観測します。
③行動前後の状態と行動と報酬のタプルを履歴メモリーに追加します。
(2) 履歴メモリーからの価値関数と方策関数の学習
④履歴メモリーからランダムにタプルを適切な数を取り出し経験群とします。
⑤新状態群から学習した方策関数で次の行動群を決定します。
⑥新状態群と次の行動群より学習した価値関数から価値を推定します。
この価値は行動と状態を引数としてニューロで解きます。
⑦経験群にある報酬で目標価値を得ます。
⑧損失関数が最小になる様に価値関数のパラメータを更新します。
⑨上記の損失関数の最小化で微小な状態変化での行動の変化も同時に計算します。ニューロなら逆伝播で値が保持されています。
⑩微小な行動変化を入れて最適な方策関数のパラメータを更新して、最適な方策関数を得ます。
これはニューロでは教師データを与えるほかに、差分を与えて解を出力層から取り出すことができます。ニューロに行動の変化を与えて逆伝播で最適方策を得るが出来ます。
①のシュミレーションに戻ります
この様にActor-criticはシュミレーション(Actor)→履歴保存(Replay Memory)→学習(Learnier)のパイプラインになるのでこれを並列化したA3Cが可能になります。しかし下図の様にパイプラインの各要素が非同期で並列化されるGorilaではその整合性の工夫が必要になってくる。
冒頭の強化学習の勉強会での講演者が言っていたが、これらは逐次的に報酬が得られるゲームの高速化に過ぎない。迷路探索等の戦略が必要な場合はUNREAL等の探索アルゴリズムを組み込む必要がある。