PPOとは - Shinichi0713/Reinforce-Learning-Study GitHub Wiki
概要
方策を直接学習するアルゴリズムとして方策勾配法がありました。(方策勾配法についてはこちらの記事を参照)
方策勾配法は方策の更新として方向のみしか教えてくれず、更新幅が分からないという問題がありました。 方策の大幅な変更は方策が劣化する可能性があります。
方策が劣化すると報酬の少ないサンプルのみを収集し、更に方策が劣化するという悪循環に陥る可能性があります。
そこで、TRPO(Trust Region Policy Optimization)では方策の大幅な変更を回避するために、更新幅に制約を設けて学習する手法を提案しました。
TPROは良いアルゴリズムでしたが以下の課題が存在していました。
- 計算がとても複雑
- ノイズ(Dropout層など)を組み込めない
- ActorとCriticでパラメータを共有するアーキテクチャが使えない これらの課題を解決するためにTRPOとは違ったアプローチで更新幅を制限した手法がPPOとなります。
Clipped Surrogate Objective
TRPOでは以下の式(代理目的関数:Surrogate Objective)を最大化しつつ、KL距離による制約をかけて更新幅を抑える手法を提案しました。
L(\theta) = \mathbb{E}_{\hat{\pi}(a|s)} \left[ \frac{\pi_{\theta}(a|s)}{\hat{\pi}(a|s)} \hat{A} \right]
ただ、この式をKL距離の制約の元で解こうとするととても複雑になります。(ラグランジュ乗数法で解くこと)
そこでPPOではこの条件の代わりに単純にclipすることで更新幅を抑える事を提案しました。
clipの方法は以下となります。 まず、代理目的関数(L(\theta))の更新前の方策(\hat{\pi}{\theta{old}}(a|s))と更新後の方策(\pi_{\theta}(a|s)) の比を (r_t(\theta)) と置きます。
r_t(\theta) = \frac{\pi_{\theta}(a|s)}{\hat{\pi}_{\theta_{old}}(a|s)}
そしてclip条件は以下です。
L^{CLIP} (\theta) = E[min(r_t(\theta)\hat{A}, clip(r_t(\theta), 1 - e, 1 + e )\hat{A})]
$e$ はclip範囲を決めるハイパーパラメータです。 clipしてない代理目的関数とclipされた代理目的関数を比較し小さい方を採用します。 数式だと分かりづらいですが、コードだと以下です。