Policy \( π_θ( a | s ) \):
「状態を見てどの行動をどの確率で選ぶかを決める
ニューラルネット」
「ポリシーの更新」 の方法論
「性能目的の最適化」 を, 「累積報酬の期待値の最大化」 に表現。
ポリシーの更新 (NN のパラメータ値の更新) を,「累積報酬の期待値の最大化」 と一致させる。
期待報酬を大きくする形は,
「よい結果につながった行動の確率を上げ,
悪い結果につながった行動の確率を下げる」
ポリシーの更新は,ポリシーを壊す危険がある。
そこで,つぎの考えを加える:
「一気に変えず,ちょっとずつ良くする」
→ 前の Policy と新しい Policy の差が
大きくなり過ぎないように,
更新量をクリップする
- 行動選択確率の新旧比 \( r( \theta ) \
(新 Policy で s_t に対し a_t が選ばれる確率)
÷ (旧 Policy で s_t に対し a_t が選ばれる確率)
\[
r_t( \theta ) = \frac
{ \pi_\theta ( a_t | s_t ) }
{ \pi_{\theta_{old}} ( a_t | s_t ) }
\]
- クリップ付き目的関数 \( L^{CLIP} \)
\[
L^{CLIP}(\theta) = \\
\mathbb{E}_t \left[ \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) \right]
\]
ここで,
\( A_t \) は,Advantage推定値
(「その行動が,平均よりどれだけよかったか」)
\( \epsilon \) は,クリッピングパラメータ
(更新幅の許容量,通常,0.1〜0.2)
直感的な意味:
行動が良かった(\(A_t\) > 0)なら,
その行動の確率を上げる
しかし,上げ過ぎると危ないので,(1+ϵ) までに制限
行動が悪かった(\(A_t\) < 0)なら,
その行動の確率を下げる
しかし,下げ過ぎると探索が死ぬので,(1−ϵ) までに制限
「良い方向には進むが,暴走はさせない」
この 「クリップ付き目的関数」 が,PPO の革新点。
- 目的関数の勾配
\[
\frac{\partial L^{CLIP}}{\partial \theta} \\
= \begin{cases}
\frac{\partial r_t(\theta)}{\partial \theta} A_t &
\text{if } \ \ 1-\epsilon < r_t(\theta) < 1+\epsilon \\
0 & \text{otherwise}
\end{cases}
\]
重要度比がクリッピング範囲内にある場合は,
通常の Policy 勾配として動作する。
範囲外では,勾配がゼロになる。
- Policy 勾配で,パラメータ値θを更新
「Policy π_θ の更新」 の内容は:
「目的関数を最大にするように,
勾配降下(実際には「上昇」)を行う」
\[
\theta ← \theta + \alpha \nabla_\theta L^{CLIP}(\theta)
\]
|