用語集 · 強化学習

分離型PPO

別名:Decoupled PPO、デカップルドPPO、非同期PPO、asynchronous PPO、batch size-invariant PPO、バッチサイズ不変PPO

PPO の変種で、学習器が更新している間、データ収集を少し古い方策のコピーで続けられるようにし、両者を重ねて動かせるようにしたものです。

普通の PPO は交互に動きます。学習器が更新している間、すべてのワーカーは収集を止め、新しい重みを待ちます。大きなマシンでは、CPU は多くの時間なにもせずに待っています。

この2つを重ねるのはコードとしては簡単です。学習器が更新している間も、ワーカーは手持ちの重みで収集を続ければよいのです。しかしそうすると、データは1つか2つ古いバージョンの挙動方策から来ることになり、普通の PPO の比率とクリップは、データが現在の方策から来ていることを前提にしています。

解決策

Hilton、Cobbe、Schulman(2022)は、普通の PPO が1つの「古い方策」にまとめている2つの役割を分けました。

  • 挙動方策 πbehav\pi_{\text{behav}}: 実際にデータを集めた方策
  • 近接方策 πprox\pi_{\text{prox}}: 更新が大きく離れてはいけない、最近の方策

更新では、重要度重みでずれを補正し、近接方策を基準にクリップします。

L(θ)=Et ⁣[πprox(at∣st)πbehav(at∣st) min⁡ ⁣(ρtA^t,  clip⁡(ρt,1−ϵ,1+ϵ) A^t)],ρt=πθ(at∣st)πprox(at∣st)L(\theta) = \mathbb{E}_t\!\left[\frac{\pi_{\text{prox}}(a_t \mid s_t)}{\pi_{\text{behav}}(a_t \mid s_t)}\,\min\!\Big(\rho_t \hat{A}_t,\; \operatorname{clip}(\rho_t, 1-\epsilon, 1+\epsilon)\,\hat{A}_t\Big)\right], \qquad \rho_t = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\text{prox}}(a_t \mid s_t)}

これで少し古いデータも正しく使え、PPO のステップ幅の制御もそのまま機能します。

このプロジェクトでは

52個のワーカープロセスはそれぞれ、ロールアウト1回分の間、自分の方策(ポリシー)のコピーを動かすので、収集と更新が重なります。データは1更新分古くなります。クリップは更新開始時の方策を中心にし、各サンプルには πprox/πbehav\pi_{\text{prox}} / \pi_{\text{behav}} の重みを付け、まれな行動が支配しないように上限を2にしています。同じ 64-vCPU のマシンで、スループットは1時間あたり約 14 M ステップから 24 M ステップに、CPU 使用率は 28 % から 65 % に上がりました。

2人のファイターと視覚では、96-vCPU のマシン上のブロックの環境は更新側がボトルネックでした。学習器が1.9秒の反復をまるごと使う一方で、ワーカーは1.34秒でロールアウトを終えて待っていました。

関連用語

この用語が出てくる記事

← すべての用語