時間線:
OpenAI 發表的 Trust Region Policy Optimization,
Google DeepMind 看過 OpenAI 關於 TRPO后, 2017年7月7號,搶在 OpenAI 前面 把 Distributed PPO給先發布了.
OpenAI 還是在 2017年7月20號 發表了一份拿得出手的 PPO 論文 。(ppo+ppo2)
Proximal Policy Optimization
PPO是off-policy的方法。
跟環境互動的agent與用來學習得agent 不是同一個agent,可以理解為PPO 是一套 Actor-Critic 結構, Actor 想最大化 J_PPO
, Critic 想最小化 L_BL
.
利用importance sampling
通過KL散度加一個懲罰,使梯度更新的時候幅度不要太大。
總的來說 PPO 是一套 Actor-Critic 結構, Actor 想最大化 J_PPO
, Critic 想最小化 L_BL
. Critic 的 loss 好說, 就是減小 TD error. 而 Actor 的就是在 old Policy 上根據 Advantage (TD error) 修改 new Policy, advantage 大的時候, 修改幅度大, 讓 new Policy 更可能發生. 而且他們附加了一個 KL Penalty (懲罰項, 不懂的同學搜一下 KL divergence), 簡單來說, 如果 new Policy 和 old Policy 差太多, 那 KL divergence 也越大, 我們不希望 new Policy 比 old Policy 差太多, 如果會差太多, 就相當於用了一個大的 Learning rate, 這樣是不好的, 難收斂.
Trust Region Policy Optimization
ppo是吧懲罰項放在了目標函數中,而TRPO 是以 constrain的形式。不好求解。
PPO2
看圖,橫坐標是 ,當A>0時候,獎勵是正的,更新的幅度越大越好,但是為了
加入懲罰,所以更新的幅度在橫坐標大於時候,就不增加同一個幅度,所以是一條橫線,不會無限制增大。
同理,當A<0時候,橫坐標是更新的幅度,因為獎勵是負數,正常應該 更新是越小越好,但是不能無限小啊,所以假如
懲罰就是不能無限小。
Distributed Proximal Policy Optimization
摘自:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/6-4-DPPO/
Google DeepMind 提出來了一套和 A3C 類似的並行 PPO 算法. paper
取而代之, 我覺得如果采用 OpenAI 的思路, 用他那個 “簡陋” 偽代碼, 但是弄成並行計算倒是好弄點. 所以我就結合了 DeepMind 和 OpenAI, 取他們的精華, 寫下了這份 DPPO 的代碼.
總結一下我是怎么寫的.
- 用 OpenAI 提出的
Clipped Surrogate Objective
- 使用多個線程 (workers) 平行在不同的環境中收集數據
- workers 共享一個 Global PPO
- workers 不會自己算 PPO 的 gradients, 不會像 A3C 那樣推送 Gradients 給 Global net
- workers 只推送自己采集的數據給 Global PPO
- Global PPO 拿到多個 workers 一定批量的數據后進行更新 (更新時 worker 停止采集)
- 更新完后, workers 用最新的 Policy 采集數據