0
本文作者: AI研習(xí)社-譯站 | 2019-01-16 10:35 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Proximal Policy Optimization (PPO) with Sonic the Hedgehog 2 and 3
作者 | Thomas Simonini
翻譯 | 安石徒 校對(duì) | 斯蒂芬?二狗子
審核 | 鄧普斯?杰弗 整理 | 菠蘿妹
原文鏈接:
https://towardsdatascience.com/proximal-policy-optimization-ppo-with-sonic-the-hedgehog-2-and-3-c9c21dbed5e
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:以刺猬索尼克游戲?yàn)槔v解PPO
(第六部分)
幾周前,OpenAI在深度強(qiáng)化學(xué)習(xí)上取得了突破性進(jìn)展。由5個(gè)智能體的組成的人工智能團(tuán)隊(duì)OpenAI five擊敗了現(xiàn)實(shí)中的DOTA2玩家。但遺憾的是,該人工智能團(tuán)隊(duì)輸?shù)袅穗S后的第二場(chǎng)比賽。
Dota2
這個(gè)突破性進(jìn)展的取得得益于強(qiáng)大的硬件支持和 PPO 算法(近端策略優(yōu)化 Proximal Policy Optimization)。
PPO的核心思想是避免采用大的策略更新。為此,我們采用變化率表明新舊策略的不同,并縮減該變化率在0.8到1.2之間以保證策略更新不大。
此外,PPO的另一項(xiàng)創(chuàng)新是在訓(xùn)練智能體的k個(gè)epochs過(guò)程中使用了小批量梯度下降法。你可以讀我們之前已經(jīng)實(shí)現(xiàn)的這篇文章 A2C with Sonic The Hedgehog。
今天,我們將深入了解PPO結(jié)構(gòu),并應(yīng)用PPO來(lái)訓(xùn)練智能體學(xué)習(xí)玩刺猬索尼克系列1,2,3。
但是,如果想要理解好PPO,你首先需要掌握A2C( 建議先閱讀上一篇文章簡(jiǎn)單介紹A2C (第五部分))
曾記否,在學(xué)習(xí)策略梯度時(shí),我們了解了策略目標(biāo)函數(shù)(或策略損失函數(shù))。
PG的思想是采用上面的函數(shù)一步步做梯度上升(等價(jià)于負(fù)方向的梯度下降)使智能體在行動(dòng)中獲取更高的回報(bào)獎(jiǎng)勵(lì)。
然而,PG算法存在步長(zhǎng)選擇問(wèn)題(對(duì)step size敏感):
步長(zhǎng)太小,訓(xùn)練過(guò)于緩慢
步長(zhǎng)太大,訓(xùn)練中誤差波動(dòng)較大
面對(duì)訓(xùn)練過(guò)程波動(dòng)較大的問(wèn)題時(shí),PPO可以輕松應(yīng)對(duì)。
PPO近端策略優(yōu)化的想法是通過(guò)限定每步訓(xùn)練的策略更新的大小,來(lái)提高訓(xùn)練智能體行為時(shí)的穩(wěn)定性。
為了實(shí)現(xiàn)上述想法,PPO引入了一個(gè)新的目標(biāo)函數(shù)“Clipped surrogate objective function”(大概可以翻譯為:裁剪的替代目標(biāo)函數(shù)),通過(guò)裁剪將策略更新約束在小范圍內(nèi)。
首先,正如我們?cè)趕tackoverflow中的解釋?zhuān)覀儾徊捎弥悄荏w行動(dòng)的對(duì)數(shù)概率logπ(a|s)(vanilla policy gradient method )來(lái)跟蹤智能體行動(dòng)的效果,而是使用當(dāng)前策略下的行動(dòng)概率(π(a|s))除以上一個(gè)策略的行動(dòng)概率 (π_old(a|s))的比例:
摘自PPO論文:PPO paper
如上所示,rt(θ)表明了新舊策略間概率比:
若 rt(θ)>1,則當(dāng)前策略下的行動(dòng)比原先策略的更有可能發(fā)生。
若 rt(θ)?(0,1),則在當(dāng)前策略下行動(dòng)發(fā)生的概率低于原先的。
據(jù)此,新的目標(biāo)函數(shù)可如下所示:
摘自PPO論文:PPO paper
但是,如果你當(dāng)前策略的行動(dòng)的可能性遠(yuǎn)高于之前策略的情況下,此時(shí)不對(duì)目標(biāo)函數(shù)進(jìn)行約束, 那么 rt(θ)的值就會(huì)非常大,還會(huì)導(dǎo)致PG采取可能破壞策略的大梯度更新。
因此,需要對(duì)目標(biāo)函數(shù)進(jìn)行約束,懲罰那些導(dǎo)致rt(θ)遠(yuǎn)離1的變化(本文中比率僅允許在0.8和1.2之間),這樣可以確保不會(huì)發(fā)生大的策略更新。
為此,我們有兩個(gè)解決方案:
TRPO(Trust Region Policy Optimization,置信區(qū)間策略優(yōu)化)采用的KL散度來(lái)約束策略更新(注:使用目標(biāo)函數(shù)之外的KL散度,來(lái)約束需要更新的策略數(shù)目,以保證梯度單調(diào)上升;此外還有其他方法,例如ACER,Sample Efficient Actor-Critic with Experience eplay)。但是TRPO這種方法使用起來(lái)過(guò)于復(fù)雜,且耗費(fèi)更多的計(jì)算時(shí)間。
使用PPO優(yōu)化的裁剪替代目標(biāo)函數(shù)。
裁剪替代目標(biāo)函數(shù)
通過(guò)該函數(shù),得到兩個(gè)概率比,一個(gè)非裁剪的和一個(gè)裁剪的(在[1?-??, 1+?]區(qū)間,?是一個(gè)幫助我們?cè)O(shè)置范圍的超參數(shù),本文中? = 0.2)。
然后,我們選擇裁剪和非裁剪中的最小值,最終得到的值范圍是小于非裁剪的下界的區(qū)域。
為此,我們需要考慮兩種情況case:
摘自PPO論文
case 1: 當(dāng)優(yōu)勢(shì)A>0
如果?t > 0,即該行動(dòng)好于在該狀態(tài)下的行動(dòng)得分的平均值。因此,我們應(yīng)鼓勵(lì)新策略增加在該狀態(tài)下采取該行動(dòng)的概率。
也就增加了概率比r(t),增加了新策略的概率( At* 新的策略概率),同時(shí)令分母上的先前策略保持不變。
因?yàn)檫M(jìn)行了裁剪,所以rt(?)最大只能增長(zhǎng)到1+ ?。這意味著當(dāng)前行動(dòng)概率相較于原先策略不可能上百倍地提高。
為什么要這樣做?因?yàn)槲覀儾幌脒^(guò)度更新策略。在該狀態(tài)下采取這個(gè)行動(dòng)的估計(jì)結(jié)果只是一次嘗試的得出結(jié)果,并不能證明這個(gè)行動(dòng)總是有較高的正向回報(bào)(說(shuō)白了,防止陷入局部最優(yōu)值),因此,我們就不要貪婪地學(xué)習(xí),以防止智能體選擇糟糕的策略。
總而言之,在(行動(dòng)對(duì)結(jié)果)是積極作用的情況下,需要(在這步梯度上升中)增加一點(diǎn)該行動(dòng)的概率,但不是太多。
case 2:當(dāng)優(yōu)勢(shì)A<0
如果?t < 0,即該行動(dòng)為導(dǎo)致消極結(jié)果的行動(dòng),應(yīng)該被阻止。因此概率比rt(?)會(huì)被減少。但同時(shí)進(jìn)行裁剪,使rt(?)最小只能將降低到1- ?。
同樣,我們不想最大化減少該行動(dòng)被選中的概率,因?yàn)檫@種貪婪學(xué)習(xí)會(huì)導(dǎo)致策略過(guò)大的改變,以至于變得糟糕也說(shuō)不定。
總而言之,多虧裁剪替代目標(biāo)函數(shù),我們約束了新策略相對(duì)舊策略兩種情形下的變動(dòng)范圍。于是,我們把概率比控制在小區(qū)間內(nèi),因此,這種裁剪有利于求策略梯度。如果概率在[1?-??, 1+?]區(qū)間外,梯度值為0。
最終的裁剪替代目標(biāo)損失函數(shù):
現(xiàn)在,我們將準(zhǔn)備實(shí)現(xiàn)一個(gè)A2C類(lèi)型的PPO智能體。A2C類(lèi)型訓(xùn)練包括該文中所述的A2C過(guò)程。
同樣,這個(gè)代碼實(shí)現(xiàn)比以前的代碼要復(fù)雜好多。我們要開(kāi)始復(fù)現(xiàn)最先進(jìn)的算法,因此需要代碼的更高的效率。這也是為什么,我們將整個(gè)代碼分為不同對(duì)對(duì)象和文件來(lái)實(shí)現(xiàn)。
為了實(shí)現(xiàn)一個(gè)PPO智能體,需要讀一讀如下包含完成PPO過(guò)程的筆記和代碼解釋?zhuān)?/p>
這個(gè)實(shí)現(xiàn)在GitHub倉(cāng)庫(kù)中 。
Understand PPO implementation playing Sonic the Hedgehog 2 and 3
如上所述,你已經(jīng)創(chuàng)建了一個(gè)學(xué)習(xí)如何玩刺猬索尼克系列游戲1,2,3的智能體。太棒了!一個(gè)好的智能體需要在一個(gè)GPU上訓(xùn)練10到15小時(shí)。
別忘了自己親自實(shí)現(xiàn)代碼的每一個(gè)部分,因?yàn)檎{(diào)試完善代碼是非常重要的。嘗試更改環(huán)境,調(diào)整超參,嘗試是學(xué)習(xí)的最佳途徑也是最大樂(lè)趣。
花點(diǎn)時(shí)間來(lái)想想我們從第一節(jié)課到現(xiàn)在取得的所有成就:從簡(jiǎn)單的文本游戲(OpenAI taxi-v2)到像毀滅戰(zhàn)士、索尼克這些復(fù)雜的游戲,我們采用越來(lái)越強(qiáng)大的模型結(jié)構(gòu)。這真是極好的!
下一回,我們將學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)中最有趣的的新內(nèi)容之一——好奇心驅(qū)動(dòng)的學(xué)習(xí)。
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長(zhǎng)按鏈接點(diǎn)擊打開(kāi)或點(diǎn)擊【深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:以刺猬索尼克游戲?yàn)槔v解PPO(第六部分)】:
https://ai.yanxishe.com/page/TextTranslation/1408
【點(diǎn)擊查看本系列文章】
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:簡(jiǎn)介篇(第一部分)
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:通過(guò)Q學(xué)習(xí)進(jìn)行強(qiáng)化學(xué)習(xí)(第二部分)
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:以Doom為例一文帶你讀懂深度Q學(xué)習(xí)(第三部分 - 上)
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:進(jìn)一步了解深度Q學(xué)習(xí)(第三部分 - 下)
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:以 Cartpole 和 Doom 為例介紹策略梯度 (第四部分)
深度強(qiáng)化學(xué)習(xí)從入門(mén)到大師:簡(jiǎn)單介紹A3C (第五部分)
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來(lái)譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。