訓練アルゴリズムは,訓練対象の運動脳 NN の外部モジュールとして,
価値関数 NN :
状態 s の入力に対し s の価値 V(s) を出力
を用いる。
運動脳 NN と価値関数 NN は,並行して訓練される。
それぞれのパラメータ更新が,
θ(1) → θ(2) → ・・・
φ(1) → ϕ(2) → ・・・
と並んで進行する。
その訓練の中で,データのやりとりをする。
即ち,運動脳の訓練では,行動 a_t のアドバンテージ A_t の導出に V(s_t), V(s_{t+1}), ‥‥, V(s_{n-1-t}) を用いるが,これは価値関数 NN から取得する:
s_{t+k} を 価値関数 NN に入力
価値関数 NN は,V(t+k) を出力
一方,価値関数 NN は,運動脳 NN が生成する試行データの
s_t → ( r_t, r_{t+1}, ‥‥, r_{n-1-t} )
で,学習する。
ともに訓練しながらのデータのやりとりであるから,最初のうちは出鱈目なデータのやりとりになる。
しかし,データのやりとりは正のフィードバック関係になっているので,訓練の中でだんだんと出鱈目が鎮まり,うまく協調する関係になっていく。
φ が改善するほど,θ上のアドバンテージ計算が安定する。
θ が改善するほど,φを訓練する教師信号が良くなる。
- actor - critic
運動脳 NN と価値関数 NN の関係は,
actor - critic
の関係に見ることができる:
actor (運動脳 NN) は,状態に対し行動を起こす
critic (価値関数 NN ) は,状態に対しこれを評価する
そして,
「actor のパラメータ値更新に,critic を用いる」
が,方法論 GAE (Generalized Advantage Estimation) というわけである。
- 価値関数 NN の訓練
○ 教師信号
教師信号は,次のどちらか:
・割引累積報酬(Return)
R_t = ∑ { γ^k r_{t+k} | k=0, ‥‥ }
(実際に得られた累積報酬)
・GAE の「価値ターゲット」
\[
V^{target}_t \ = A_t + V(s_t)
\]
○ 損失関数
・教師信号が R_t の場合
LV(τ,t) = ( V(s_t) − R_t )^2
読み方は,
「価値関数 V(s_t) を R_t に近づけるための二乗誤差」)
これを 4096 × n 個の (τ,t) について平均:
LV(φ) = E_(τ,t) [ LV(τ,t) ]
・教師信号が V_t_target の場合
\[
LV(τ,t) = ( V(s_t) − V^{target}_t \ )^2 \\
LV(\phi) = E_{(τ,t)} [\ LV(τ,t)\ ]
\]
○ パラメータ値φの更新
LV(φ) を最小化するように更新する。(勾配下降)
φ ← φ − α_φ∇_φ LV(φ)
PPO の実装では GAE が一般的。
理由は,GAE の方がノイズが少なく,学習が安定するため。
註:
V(s_t) は,つぎの式がこれの定義になる:
V(s_t) = E[ ∑ { γ^k r_{t+k} | k = 0,‥‥, n-1-t } ]
しかしこの期待値は,解析的に計算するものではない。
実際,「解析的に計算する」 は,あり得ない:
ロボットの状態遷移は複雑
ノイズがある
乱数がある
未来の報酬は無数の可能性に分岐する
その確率分布を解析的に書けない
期待値の式は,「定義」であって,計算可能な式ではない。
そして,このような式を 「計算」 するところに,NN の真骨頂がある。
価値関数 NN は,学習によって,つぎをするものになる:
V_φ(s_t) ≈ E[ ∑ { γ^k r_{t+k} | k = 0,‥‥, n-1-t } ]
φ : 現パラメータ値
|