最近在整理電腦文件劈猪,看到一份當初給同事講解TRPO算法原理時寫的PPT昧甘,感覺要比先前那篇寫的更加清楚明白,加之這幾天剛好在復習RL相關的知識战得,然后便將PPT的內容加上我比當時更加深入的理解充边,整理成了這篇文章,分享給大家常侦。
策略梯度方法及其缺點
相對于Value Based的方法浇冰,基于策略梯度的強化學習方法的很明顯的優(yōu)勢是它可以直接去學習Policy本身,這樣學習速度會更快聋亡,并且更關鍵的是它可以用于連續(xù)動作空間的情況肘习。
它的基本思想是通過最大化狀態(tài)價值來更新策略函數的參數,即最大化目標函數,其中
為策略函數的參數坡倔, 具體的優(yōu)化過程如下:
- agent觀察到一個環(huán)境狀態(tài)
- 可以計算
關于策略函數參數
的梯度
- 基于策略
隨機采樣一個動作 a,求隨機梯度
當然漂佩,上式子中的和
是未知的脖含,我們可以使用一個參數為
的神經網絡
來近似
,而
我們可以使用走完一整個episode后的真實回報
投蝉, 或者使用
來近似养葵,這樣我們就得到了隨機梯度
- 在通過梯度上升最大化
的參數
, 其中
為學習率
這種方法的缺點也是顯而易見的,因為強化學習環(huán)境的變化往往非常大瘩缆,也導致Value的方差比普通的深度學習數據要大的多关拒,很難選擇到一個合適的學習率可以保障更新參數之后的價值比現在的好,一旦選擇了這個更不好的策略進行采樣學習咳榜,再次更新的參數會更差夏醉,因此很容易導致越學越差,一直無法收斂涌韩。
價值崩潰
對于怎么選擇這個合適的學習率是一個相當棘手的問題畔柔,然而不愧是Shulman博士,并沒有糾結于表面上的學習率臣樱,而是從問題的本質出發(fā)靶擦,從而另辟蹊徑給出了TRPO的解決方案。(P.S. 這就是馬斯克所謂的第一性原理的實踐案例吧~)
Trust Region Policy Optimization
TRPO算法盡量通過能提高狀態(tài)價值的方式來更新策略雇毫。它通過在新舊策略之間增加約束玄捕,將整個參數空間的變化限制在一個小范圍之內,從而避免了錯誤決策導致Value的崩塌棚放,盡可能的保持快速而單調的提升枚粘。
我們用來表示參數為
的策略函數,那么TRPO的參數更新方式可以表示為:
這里的 是原始策略梯度最大化目標
在
限制范圍內的近似:
其中 是優(yōu)勢函數馍迄,表示選擇動作
所帶來的優(yōu)勢,直觀上看局骤,如果
說明動作
不好攀圈,應該降低
的概率,于是應該減小動作
的概率峦甩,那么
應該小于1赘来,越接近0越好,正好符合
的最大化凯傲,反之亦成立犬辰,因此從直觀上看,這個替代的目標函數是符合要求的泣洞。但是這個替代函數到底是怎么來的呢忧风?
其實非常簡單,我們只需要對 做一點微小的變換:
雖然推出了優(yōu)化目標球凰,但是要怎么來解這個帶約束的優(yōu)化問題呢狮腿?其實就是參考了 Trust Region 算法的求解過程,這也是TRPO這個算法名字的由來呕诉。
Trust Region
我們先來看一下Trust Region算法是怎么來最大化目標函數的缘厢,TRPO用的也是同樣的方法。
第一步甩挫, 我們定義參數 的鄰域
,
是該鄰域內的點,滿足
和
比較接近伊者,常見的方式就是保證:
-
然后我們在這個鄰域內找到的相似函數
找鄰域內的相似函數
第二步英遭,在鄰域內求
的最大值:
第三步亦渗,重復上面兩步挖诸,直到收斂:
TRPO的更新過程
顯然TRPO算法的訓練過程就是在策略梯度方法的基礎上,套用了Trust Region 法精。
在鄰域
內找到
的近似函數
我們使?蒙特卡洛來作為期望的近似多律,使?當前策略來和環(huán)境交互,除了記錄transition之外搂蜓,還記錄每一步的
,就可以得到公式中的
,另外用一個神經網絡來近似
, 利用TD算法可以求出公式中的Advantage狼荞,這樣近似函數就找到了,另外我們使用
和
的平均KL散度來增加這個約束帮碰。
但是從理論上來說相味,上面所說的TRPO更新十分難求,于是需要做進一步的近似殉挽。
我們使用泰勒級數來估計和
散度的均值丰涉,將
展開到一階,KL散度展開到二階:
就得到了這樣一個近似的優(yōu)化問題:
最大化
這個近似問題可以?拉格朗?對偶?法解析求解:
如果我們只使用這個結果此再,算法將精確計算自然策略梯度昔搂。但是這樣有一個問題,由于泰勒展開式引入了近似誤差输拇,可能會導致不滿足KL散度的約束摘符,或者實際提高了相應動作的優(yōu)勢,于是TRPO對這個更新規(guī)則增加了一個修改策吠,稱之為回溯線搜索:
其中是回溯系數逛裤,
是
滿足KL散度約束并產生正向替代優(yōu)勢的最小非負整數。
另外猴抹,當神經網絡有數百萬個參數時带族,計算和存儲矩陣的代價是很大的。TRPO通過使?共軛梯度算法計算
來避免求解
.這樣我們就可以只??個函數來計算
,從而避免直接存儲整個矩陣 .(其實這個?法跟梯度下降有點像)蟀给。
沿著更新方程迭代直到收斂...
Proximal Policy Optimization
看了上面的更新過程蝙砌,我們其實就會發(fā)現阳堕,當我們使用神經網絡來近似策略時,參數非常多择克,TRPO的二階解法計算量會非常大恬总,于是就有了后來的PPO算法。它們的動機是完全一樣的肚邢,就是為了讓當前策略上進行有效更新時不至于導致Value的崩潰壹堰。PPO算法可以看作時TRPO的一階近似,它的試用范圍更廣骡湖、計算效率更高贱纠、更容易實現,并且從OpenAI的經驗上來看响蕴,至少效果是不比TRPO差的谆焊。PPO也成為了SOTA強化學習算法中最常用的之一。
PPO主要有兩種變體:PPO-Penalty 和 PPO-Clip 换途。
- PPO-Penalty修改了KL散度的約束方式懊渡,它不再添加硬約束,而是通過在目標函數中加入KL散度的正則項的方式來處理約束問題军拟。
- PPO-Clip 則刪除了約束剃执,直接使用強制剪裁的暴力方式來讓
的更新保持在一定范圍之內。
實踐證明,PPO-Clip這種暴力的方式反而更有效,因此現在主流的PPO用的都是PPO-Clip始藕,因此俏竞,本文也就只講PPO-Clip的原理和實現寄狼。
PPO-Clip的目標函數可以改寫為:
這個公式非常復雜,我們將其拆解成兩種情況來看...
當優(yōu)勢A大于0:, 說明動作a是好的,于是應該讓大于1且范圍內越大越好遣耍,當
時就截取到
, 否則取原值
.
當優(yōu)勢A小于等于0:,說明動作a是不好的炮车,于是應該讓 < 1且范圍內越小越好舵变,當
, 則截取到
瘦穆, 否則
纪隙,此時應該是取max,但是因為A是負的扛或,于是又變成了取min绵咱,這樣就剛好對應上面的公式。
然后價值網絡和策略網絡的設計方式和普通的actor-critic并沒有區(qū)別熙兔,分別用td算法來有優(yōu)化value網絡悲伶,用梯度上升來優(yōu)化policy網絡訓練即可艾恼。
GAE
另外值得一提的還有generalized advantage estimator算法,因為我們一般在實現PPO的時候并不會用最原始的Advantage function拢切,而是GAE蒂萎,GAE實際上就是multi-step td的Advantage的指數加權移動平均秆吵,正如multi-step的td算法比one-step的會好淮椰,gae可以讓優(yōu)勢估計更加平滑和穩(wěn)定,因為GAE的效果更好纳寂,因此在后期GAE版本的TRPO和PPO才是標準的實現主穗。
參考Multi-step TD target的思想, 我們將作為狀態(tài)價值的近似毙芜,折扣系數為
,定義
, 則n步的Adventage的
估計應該是這樣的:
但是我們到底選幾步的優(yōu)勢是最好的呢忽媒?又是否存在這樣一個最好的n呢?
在不知道選哪個預測值的情況下腋粥,數值優(yōu)化算法上有一種很常見的作法晦雨,就是取附近值的指數加權移動平均,這便是GAE了隘冲,我們將加權系數設置為 :
當 時闹瞧,
, 相當于one-step的TD展辞。
當 時奥邮,
, 相當于玩完整局菜更新的Reinforce罗珍。
這個權重系數 就是用來控制取多少步的洽腺,比如
, 此時
很小,我們可以認為平均了2步覆旱,再設大一些就會多取幾步蘸朋。
總結
PPO通過on-policy的方式訓練隨機策略,這意味它通過最新版本的隨機策略來對環(huán)境進行采樣扣唱,但是實際分布式采樣和訓練的時候往往有策略更新的延遲的情況藕坯,因此也可以算作是有點off-policy的...
基礎實現的代碼可以參考我教程中的實現tutorials/ppo ,不過請注意画舌,這個單worker的版本僅用于學習基本的原理堕担,實際并沒有什么用,真正有用的請參考進階版中的多worker實現曲聂。
參考
Trust Region Policy Optimization, Schulman et al. 2015
Approximately Optimal Approximate Reinforcement Learning, Kakade and Langford 2002
Proximal Policy Optimization Algorithms, Schulman et al. 2017
High Dimensional Continuous Control Using Generalized Advantage Estimation, Schulman et al. 2016
Emergence of Locomotion Behaviours in Rich Environments, Heess et al. 2017
Trust Region Policy Optimization, spinningup.openai