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された代理目的関数を比較し小さい方を採用します。 数式だと分かりづらいですが、コードだと以下です。

https://qiita.com/pocokhc/items/1a68dc661eaa98dcacb2