用語集 · 強化学習
分離型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つの役割を分けました。
- 挙動方策 : 実際にデータを集めた方策
- 近接方策 : 更新が大きく離れてはいけない、最近の方策
更新では、重要度重みでずれを補正し、近接方策を基準にクリップします。
これで少し古いデータも正しく使え、PPO のステップ幅の制御もそのまま機能します。
このプロジェクトでは
52個のワーカープロセスはそれぞれ、ロールアウト1回分の間、自分の方策(ポリシー)のコピーを動かすので、収集と更新が重なります。データは1更新分古くなります。クリップは更新開始時の方策を中心にし、各サンプルには の重みを付け、まれな行動が支配しないように上限を2にしています。同じ 64-vCPU のマシンで、スループットは1時間あたり約 14 M ステップから 24 M ステップに、CPU 使用率は 28 % から 65 % に上がりました。
2人のファイターと視覚では、96-vCPU のマシン上のブロックの環境は更新側がボトルネックでした。学習器が1.9秒の反復をまるごと使う一方で、ワーカーは1.34秒でロールアウトを終えて待っていました。