如何理解看待 OpenAI 公布PPO演算法?
OpenAI 博客地址 Proximal Policy Optimization
演算法實現地址 Github :openai/baselines
中文報道: 策略梯度下降過時了,OpenAI 拿出一種新的策略優化演算法PPO
我覺得 DeepMind 有點搶了 OpenAI 的功勞, TRPO (trust region policy optimization) 是OpenAI 的演算法, PPO 也是 OpenAI 的, 但是 OpenAI 有次 tutorial 提到了 PPO (當時 PPO 還沒發表), 但是在2017年7月7號, DeepMind 發布了基於 那次 tutorial 上 PPO的 Distributed PPO (雖然關於PPO的部分都引用了OpenAI). 但是OpenAI 自己的 PPO paper 卻在 2017年7月20號才發. 估計是因為看見 Google 這麼趕, 自己馬上發一篇. (發表了一堆對公司間的個人看法).
不過看到 OpenAI 和 DeepMind 的實驗效果, 感覺非常好.
PPO 的基本概念前面的答者已經概括了. 就是限制 new Policy 的更新幅度, 不讓 new Policy 被 learning rate "沖昏了頭腦", 導致"物極必反".
最主要的 Policy 更新公式是這兩個中你最喜歡的一個(我喜歡 L_CLIP):
我也實踐了一下 Python 的簡單 PPO 演算法. 畢竟 OpenAI 開源的那個 baselines 太複雜了, 看半天源碼也看不懂. 所以下定決心自己寫一個比他們的簡單好多倍的代碼. 自己寫的教程在這裡: 結合了 OpenAI 和 DeepMind 的 PPO
簡述一下自己寫代碼的感想. OpenAI 的 PPO 感覺是個單線程的, DeepMind 的 DPPO 是多線程的, 但是代碼實踐起來比較困難, 需要推送不同 worker 的 gradient. 我取了 OpenAI 和 DeepMind 兩者的精華. 用 OpenAI 中性能最好的 Policy 更新策略 (clipped surrogate) + DeepMind parallel training (但不是推送 gradient, 只是推送 collected data). 讓原本單線程的 PPO 速度飛起來了.
策略梯度演算法中,訓練不穩定: 1、reward稀疏;2、target不固定,而是採樣得到。
這樣呢,易「步子邁太大,容易扯著蛋」、「撿了芝麻,丟了西瓜」。
於是在策略梯度演算法基礎上,添加約束: 更新前後的策略不要相差太大。
TRPO直接約束: 更新前後兩個策略的 KL 距離不超過一定閾值;
PPO說TRPO你同一個閾值不適用於所有模型,也不適用於同一個模型的不同訓練階段,且實現複雜。
PPO把約束轉換到loss函數中:
- 如果新策略 較舊策略在向好的方向變化,超過一定閾值,那新策略就不再優化了;但如果向壞的方向變化,該怎麼優化怎麼優化。
- 如果新的狀態值 較舊狀態更接近 target,超過一定閾值,那新狀態值函數就沒有必要優化;但較舊狀態更遠離 target,還是乖乖優化吧。
PPO得到的結果是TRPO(trust region policy optimization)的近似解。TRPO要求解一個constrained optimization(KL divergence要小於某個值),PPO則將constraints直接放在objective里。
在TRPO里,這個optimization是用conjugate gradient近似解的,需要求KL divergence這個constraint的二次導,因此問題很大的時候會很費資源。而PPO則只需要一次導的信息,因此大大節約了資源,可以應用於規模更大的問題(當然需要加入一些細節讓得出的結果不會和TRPO差太多)。Deepmind最近的一篇文章Emergence of Locomotion Behaviours in Rich Environments就用到了PPO來解決大規模問題(他們加入了分散式計算的元素,管新演算法叫Distributed PPO(DPPO)).
現在openai已經把PPO當成默認演算法,deepmind在最近的幾篇文章也用到了它,因此我覺得有什麼深度強化學習的問題,那就大膽地使用這個演算法吧。
A3C 和PPO 比較,哪個更好呢?
確實牛
推薦閱讀:
※深度強化學習當中加入Memory replay的原因和作用是什麼?
※如何利用深度學習打敗水哥王昱珩?
※是否可把CNN用於一維的信號?
※如何評價Momenta ImageNet 2017奪冠架構SENet?
TAG:深度學習DeepLearning | 強化學習ReinforcementLearning | openai |