![7 深度強(qiáng)化學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)揭秘_第1頁(yè)](http://file4.renrendoc.com/view/27fd64def5c93e3a0b456b832a8c415b/27fd64def5c93e3a0b456b832a8c415b1.gif)
![7 深度強(qiáng)化學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)揭秘_第2頁(yè)](http://file4.renrendoc.com/view/27fd64def5c93e3a0b456b832a8c415b/27fd64def5c93e3a0b456b832a8c415b2.gif)
![7 深度強(qiáng)化學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)揭秘_第3頁(yè)](http://file4.renrendoc.com/view/27fd64def5c93e3a0b456b832a8c415b/27fd64def5c93e3a0b456b832a8c415b3.gif)
![7 深度強(qiáng)化學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)揭秘_第4頁(yè)](http://file4.renrendoc.com/view/27fd64def5c93e3a0b456b832a8c415b/27fd64def5c93e3a0b456b832a8c415b4.gif)
![7 深度強(qiáng)化學(xué)習(xí)深度強(qiáng)化學(xué)習(xí)揭秘_第5頁(yè)](http://file4.renrendoc.com/view/27fd64def5c93e3a0b456b832a8c415b/27fd64def5c93e3a0b456b832a8c415b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
哈工大SCIR2017-11-14哈工大SCIR2017-11-14原文【深度強(qiáng)化學(xué)習(xí)】深度強(qiáng)化學(xué)習(xí)揭秘原文:DemystifyingDeepReinforcementLearning原文”訪問(wèn))原文:DemystifyingDeepReinforcementLearning原文”訪問(wèn))(點(diǎn)擊文末“閱讀譯者:哈工大SCIR劉一佳兩年前,倫敦的一家叫DeepMind的小公司在Arxiv上發(fā)表了一篇名為“PlayingAtariwithDeepReinforcementLearning”的先驅(qū)性文章。這篇文章引見(jiàn)了如何讓計(jì)算機(jī)學(xué)習(xí)玩Atari玩耍。文中計(jì)算機(jī)的學(xué)習(xí)方法僅限于觀看玩耍機(jī)屏幕以及分?jǐn)?shù)嘉獎(jiǎng)。由于運(yùn)轉(zhuǎn)在Atari上的玩耍玩法各不相同,目標(biāo)也不盡全都,這篇文章的過(guò)人之處在于接受完全相同的框架玩不同的玩耍,并且取得了格外好的成人類水平。作為通用人工智能的第一步(具體指同一人工智能程序可以順應(yīng)不同環(huán)境,而非針對(duì)某些具體任務(wù)設(shè)計(jì)人工智能程序),這篇文章遭到了廣泛關(guān)注。DeepMind也不出不測(cè)地被谷歌公司收購(gòu)并站在了深度學(xué)廣泛關(guān)注。DeepMind也不出不測(cè)地被谷歌公司收購(gòu)并站在了深度學(xué)習(xí)爭(zhēng)辯的前沿。在2015年2月,他們的文章“Human-levelcontrolthroughdeepreinforcementlearning”被Nature雜志以封面文章的形式發(fā)表。在這篇文章中,他們的人工智能程序已經(jīng)能玩49種不同的玩耍了。更感動(dòng)人心的是,其中半數(shù)玩耍中的表現(xiàn)已經(jīng)超越了人類的頂尖選手。雖然在學(xué)術(shù)界,深度學(xué)習(xí)模型已經(jīng)在監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)問(wèn)題上廣泛地使用,深度強(qiáng)化學(xué)習(xí)仍帶有奇怪的顏色。在這篇文章中,我將試著揭掉它奇怪的面紗并將背后的基本原理呈現(xiàn)給讀者。這篇文章該當(dāng)格外適合那些具備機(jī)器學(xué)習(xí)以及深度學(xué)習(xí)基礎(chǔ),但還沒(méi)花時(shí)間認(rèn)真爭(zhēng)辯深度強(qiáng)化學(xué)習(xí)的讀者們。 在進(jìn)入主題之前,首先簡(jiǎn)要引見(jiàn)一下本的組織方式:強(qiáng)化學(xué)習(xí)的次要挑戰(zhàn)是什么?本節(jié)將用功勞支配問(wèn)題作為例子并強(qiáng)化學(xué)習(xí)的次要挑戰(zhàn)是什么?本節(jié)將用功勞支配問(wèn)題作為例子并且引見(jiàn)探究-利用順境。如何對(duì)強(qiáng)化學(xué)習(xí)進(jìn)行數(shù)學(xué)定義?用他來(lái)定義強(qiáng)化學(xué)習(xí)。強(qiáng)化學(xué)習(xí)中如何制定長(zhǎng)期決策? 本節(jié)將定義“打折的將來(lái)嘉獎(jiǎng)而這確定義是后續(xù)部分基礎(chǔ)。強(qiáng)化學(xué)習(xí)中如何估量或者近似將來(lái)嘉獎(jiǎng)? 本節(jié)將引見(jiàn)一種簡(jiǎn)約基于表的Q-learning算法。假如外形過(guò)多(基于表的方法不行行時(shí))如何估量或者近似將嘉獎(jiǎng)?本節(jié)將引見(jiàn)如何使用深度學(xué)習(xí)的方式替換 Q表。如何才能從數(shù)據(jù)中學(xué)習(xí)模型使其真正工作? 本節(jié)將引見(jiàn)一種能添加模型穩(wěn)定性的技術(shù)——“閱歷回放技術(shù)”。將來(lái)工作,文章的最終將引見(jiàn)一種探究 -利用順境的簡(jiǎn)易處理案。強(qiáng)化學(xué)習(xí)首先,讓我們簡(jiǎn)約引見(jiàn)一下 Breakout 這個(gè)玩耍。在這個(gè)玩耍中,需要把握屏幕底端的一根橫桿左右移動(dòng),將飛向底端的球反彈回去并清除屏幕上方的磚塊。每次你擊中并清除了磚塊,你的分?jǐn)?shù)都會(huì)添加——你獲得了嘉獎(jiǎng)。圖1,AtariBreakout玩耍,(圖片來(lái)源:DeepMind)所構(gòu)成的圖片,輸出是三種動(dòng)作:向左,向右以及開火(把球射出)。把這個(gè)問(wèn)題建模為分類問(wèn)題是很合理的——對(duì)于每個(gè)屏幕畫分了,其他的依靠我們本身的學(xué)習(xí)機(jī)制完成。 這個(gè)問(wèn)題就是強(qiáng)化學(xué)嘗試處理的問(wèn)題。強(qiáng)化學(xué)習(xí)處于監(jiān)督學(xué)習(xí)與無(wú)監(jiān)督學(xué)習(xí)的兩頭地帶。在監(jiān)督學(xué)習(xí)中,每個(gè)訓(xùn)練實(shí)例都有一個(gè)正確標(biāo)簽;在無(wú)監(jiān)督學(xué)習(xí)中,訓(xùn)練實(shí)例并沒(méi)有標(biāo)簽。在強(qiáng)化學(xué)習(xí)中,訓(xùn)練實(shí)例有稀疏并延時(shí)的標(biāo)簽上述的觀點(diǎn)看起來(lái)很直觀,但是實(shí)際存在很多挑戰(zhàn)。舉例來(lái)講,在Breakout 這個(gè)玩耍中,擊中磚塊并且得分和前一時(shí)辰如何移動(dòng)橫沒(méi)有直接關(guān)系。最相關(guān)的是前面如何將橫桿移動(dòng)到正確位置并反彈球。這個(gè)問(wèn)題叫做信譽(yù)支配問(wèn)題(creditassignment problem即:建模獲得嘉獎(jiǎng)之前的哪些動(dòng)作對(duì)獲得嘉獎(jiǎng)產(chǎn)生貢獻(xiàn)以及貢獻(xiàn)的大小。假如你已經(jīng)獲得了某種策略并且通過(guò)它得了不少嘉獎(jiǎng),你該當(dāng)連續(xù)堅(jiān)持這種策略還是試試其他的可能獲得更高分的策略?仍舉 這個(gè)玩耍為例,在玩耍開頭時(shí),你把橫桿停在左邊并把球射出去,假如你不移動(dòng)橫桿,你總是能得 10分的(當(dāng)然得分的下一秒,你就死了)。你滿足于這個(gè)得分嗎,或者你想不想再多得幾分?這種現(xiàn)象有一個(gè)特地的名詞——探究-利用順境(exploration-exploitationdilemma)。決策時(shí)該當(dāng)一直延用現(xiàn)有的策略還是試試其他更好的策略?強(qiáng)化學(xué)習(xí)是人類(或者更一般的講,動(dòng)物)學(xué)習(xí)的一種重要模式。父母的鼓舞,課程的分?jǐn)?shù),工作的薪水——這些都是我們生活中的嘉獎(jiǎng)。功勞支配問(wèn)題以及探究 -利用順境在我們?nèi)粘I罟ぷ髦薪?jīng)常生。這就是我們爭(zhēng)辯強(qiáng)化學(xué)習(xí)的緣由。而對(duì)于強(qiáng)化學(xué)習(xí),玩耍是嘗試新方法的最佳的沙盒。馬爾科夫決策過(guò)程下面,我們的問(wèn)題是如何形式化定義強(qiáng)化學(xué)習(xí)問(wèn)題使其支持推斷。最馬爾科夫決策過(guò)程下面,我們的問(wèn)題是如何形式化定義強(qiáng)化學(xué)習(xí)問(wèn)題使其支持推斷。最常用的表示方式是馬爾科夫決策過(guò)程。假想你是一個(gè)智能體(agent),面對(duì)某種場(chǎng)景(比如說(shuō)Breakout玩耍)。你所處的環(huán)境可以定義為外形(state)(比如橫桿的位置,球的位置,球的方向,當(dāng)前環(huán)境中的磚塊等等)。智能體能夠在環(huán)境中實(shí)行一些動(dòng)作(actions)(比如向左或向右移動(dòng)橫桿)。這些動(dòng)作會(huì)導(dǎo)致一些嘉獎(jiǎng)(reward)(比如分?jǐn)?shù)的添加)將導(dǎo)致新的環(huán)境,也就是新的外形。在新的外形下,智能體能夠連續(xù)實(shí)舉動(dòng)作,循環(huán)往復(fù)。你實(shí)行舉動(dòng)的準(zhǔn)繩叫做策略( policy)。通常來(lái)講,環(huán)境是很簡(jiǎn)約的,智能體的下一外形可能帶有確定的隨機(jī)性(比如當(dāng)你得到一個(gè)球放射另一個(gè)球時(shí),它的方向是隨機(jī)的)。圖2:左:強(qiáng)化學(xué)習(xí)問(wèn)題,右:馬爾科夫決策過(guò)程一系列的外形、動(dòng)作、以及實(shí)舉動(dòng)作的規(guī)章構(gòu)成了一個(gè)馬爾科夫決策過(guò)程(Markovdecisionprocess)。一個(gè)馬爾科夫決策過(guò)程(比如一局玩耍)由一串無(wú)限個(gè)數(shù)的外形、動(dòng)作、反饋組成,形式化地表示為:siairi+1是實(shí)舉動(dòng)作后的嘉獎(jiǎng)。當(dāng)外形序列達(dá)到終止外形sn時(shí)(比如“GameOver”畫面),一個(gè)馬爾科夫決策過(guò)程結(jié)束。馬爾科夫決策過(guò)程聽(tīng)從馬爾科夫假設(shè),也就是說(shuō),下一外形si+1只與當(dāng)前外形si和ai有關(guān),與之前的外形或動(dòng)作無(wú)關(guān)。打折的將來(lái)嘉獎(jiǎng)為了在長(zhǎng)期決策過(guò)程中表現(xiàn)的更好,我們不但要考慮實(shí)行一個(gè)動(dòng)作后打折的將來(lái)嘉獎(jiǎng)為了在長(zhǎng)期決策過(guò)程中表現(xiàn)的更好,我們不但要考慮實(shí)行一個(gè)動(dòng)作后當(dāng)如何建模這個(gè)將來(lái)嘉獎(jiǎng)?算:而t時(shí)辰的將來(lái)嘉獎(jiǎng)可以表示為:獲得的嘉獎(jiǎng)越不相同。所以,我們一般接受一種“ 打折的將來(lái)嘉獎(jiǎng)”為t時(shí)辰將來(lái)嘉獎(jiǎng)的代替。這里,gamma是一個(gè)0到1的值。這個(gè)gamma值使得我們更少地考慮哪些更長(zhǎng)遠(yuǎn)將來(lái)的嘉獎(jiǎng)。數(shù)學(xué)直覺(jué)好的讀者可以很快地看出Rt可以用Rt+1來(lái)表示,從而將上式寫成一種遞推的形式,即:假如gamma是0,我們將會(huì)實(shí)行一種短視的策略。也就是說(shuō),我們只考慮即刻嘉獎(jiǎng)。假如我們期望在即刻嘉獎(jiǎng)與將來(lái)嘉獎(jiǎng)之間尋求一種平衡,我們?cè)摦?dāng)使用像 0.9這樣的參數(shù)。假如我們所處的環(huán)境對(duì)于作的嘉獎(jiǎng)是固定不變的,也就是說(shuō)相同的動(dòng)作總會(huì)導(dǎo)致相同的嘉獎(jiǎng),那么gamma該當(dāng)?shù)扔?。好的策略該當(dāng)是:智能體在各種環(huán)境下接受最大(打折的)的策略。Q-learningQ-learning在Q-learning中,我們定義一個(gè)Q(s,a)函數(shù),用來(lái)表示智能體在s外形下接受a直觀講,Q(s,a)是智能體“在s外形下實(shí)行a動(dòng)作所能獲得的最好的將來(lái)嘉獎(jiǎng)”。由于這個(gè)函數(shù)反映了在s外形下實(shí)行a動(dòng)作的質(zhì)量(Quality),我們稱之為Q-函數(shù)。的事情說(shuō)三遍,“Q-函數(shù)存在,QQQ能否存在呢?(笑)假如你還不信任,我們可以在假設(shè) Q-函數(shù)存在的情況下想一想會(huì)發(fā)生什么。假設(shè)智能體處在某個(gè)外形并且思考到底該當(dāng)接受 a動(dòng)作還b動(dòng)作,你當(dāng)然期望選取使玩耍結(jié)束時(shí)分?jǐn)?shù)最大的動(dòng)作。假如你有那個(gè)奇怪的Q-函數(shù),你只需選取Q-函數(shù)值最大的動(dòng)作。上式中,\pi表示在s外形下選取動(dòng)作的策略。然后,我們?cè)摦?dāng)如何獲得 Q-函數(shù)呢?首先讓我們考慮一個(gè)轉(zhuǎn)移。我們可以接受與打折的將來(lái)嘉獎(jiǎng)相同的方式定義這一外形下的 Q函數(shù)形最大將來(lái)嘉獎(jiǎng)之和。Q-learning的核心思想是:我們能夠通過(guò)貝爾曼公式迭代地近似Q-函數(shù)。最簡(jiǎn)約的情況下,我們可以接受一種填表的方式學(xué)習(xí)Q數(shù)。這個(gè)表包含外形空間大小的行,以及動(dòng)作個(gè)數(shù)大小的列。填表的算法偽碼如下所示:其中\(zhòng)alpha是在更新Q[s,a]時(shí),調(diào)整舊Q[s,a]與新Q[s,a]比例的學(xué)習(xí)速率。假如\alpha=1,Q[s,a]就被消掉,而更新方式就完全與貝爾曼公式相同。使用max_a’Q[s’,a’]作為將來(lái)嘉獎(jiǎng)來(lái)更新Q[s,a]只是一種近似。在算法運(yùn)轉(zhuǎn)的初期,這個(gè)將來(lái)嘉獎(jiǎng)可能是完全錯(cuò)誤的。但是隨著算法迭代,Q[s,a]會(huì)越來(lái)越準(zhǔn)(它的收斂性已經(jīng)被證明)。我們只需不斷迭代,終有一天它會(huì)收斂到真實(shí)的QDeepQNetworkBreakout玩耍的外形可以用橫桿的位置,球的位置,球的方向或者DeepQNetworkBreakout玩耍的外形可以用橫桿的位置,球的位置,球的方向或者方向也可以得到表示。假如DeepMind 的論文接受離散的玩耍屏幕作為外形表示,讓我們計(jì)算一下使用連續(xù)四步的屏幕作為外形,可能的外形空間。屏幕大小84*84,每個(gè)像素點(diǎn)有 256 個(gè)灰度值,那么就256^(84*84*4)~10^67970 種可能的外形。也就是說(shuō),我們的 Q-表將要有10^67970行。這個(gè)數(shù)字甚至少于宇宙中的原子個(gè)數(shù)!有人會(huì)說(shuō):有些屏幕外形永世不會(huì)毀滅,或者,能不能只用在學(xué)習(xí)過(guò)程中遇到過(guò)的外形作為 Q-表的外形呢?即便如此,這種稀疏表示的 Q-里仍包含很多外形,并且需要很長(zhǎng)時(shí)間收斂。抱負(fù)的情況是,即便某些外形沒(méi)有見(jiàn)過(guò),我們的模型也能對(duì)它進(jìn)行比較合理的估量。在這種情況下,深度學(xué)習(xí)就進(jìn)入了我們的視野。深度學(xué)習(xí)的一大優(yōu)勢(shì)是從結(jié)構(gòu)數(shù)據(jù)中抽取特征(對(duì)數(shù)據(jù)進(jìn)行很好的表示)。我們可以用一個(gè)神經(jīng)網(wǎng)絡(luò)對(duì) Q-函數(shù)進(jìn)行建模。這個(gè)神經(jīng)網(wǎng)絡(luò)接收一個(gè)外形(連續(xù)四步的屏幕)和一個(gè)動(dòng)作,然后輸出對(duì)應(yīng)的 Q-函數(shù)的值。當(dāng)然,個(gè)網(wǎng)絡(luò)也可以只接受一個(gè)外形作為輸入,然后輸出全部動(dòng)作的分?jǐn)?shù)(具體來(lái)講是動(dòng)作個(gè)數(shù)大小的向量)需要做一次前向過(guò)程就可以獲得全部動(dòng)作的分?jǐn)?shù)。圖3:左:樸實(shí)的Q-函數(shù)網(wǎng)絡(luò)右:在DeepMind論文中使用優(yōu)化的Q網(wǎng)絡(luò)DeepMind在論文中使用的網(wǎng)絡(luò)結(jié)構(gòu)如下:這個(gè)網(wǎng)絡(luò)是一般的神經(jīng)網(wǎng)絡(luò):從輸入開頭,三個(gè)卷積層,接著兩個(gè)全連接層。生疏使用神經(jīng)網(wǎng)絡(luò)做物體識(shí)別的讀者或許會(huì)生疏到,這個(gè)網(wǎng)絡(luò)沒(méi)有池化層(poolinglayer)。但是細(xì)想一下我們就曉得,池化層帶來(lái)位置不變性,會(huì)使我們的網(wǎng)絡(luò)對(duì)于物體的位置不敏感,從而無(wú)法無(wú)效地識(shí)別玩耍中球的位置。而我們都曉得,球的位置對(duì)于打算玩耍潛在的嘉獎(jiǎng)來(lái)講有格外大的意義,我們不該當(dāng)丟掉這部分信息。輸入是84x84 的灰度圖片,輸出的是每種可能的動(dòng)作的 Q-值。這神經(jīng)網(wǎng)絡(luò)處理的問(wèn)題變成了一個(gè)典型的回歸問(wèn)題。簡(jiǎn)約的平方誤差可以用作學(xué)習(xí)目標(biāo)。給定一個(gè)轉(zhuǎn)移,Q-表的更新算法只需替換成如下流程就可以學(xué)習(xí) 網(wǎng)絡(luò)。對(duì)于當(dāng)前外形對(duì)于當(dāng)前外形s,通過(guò)前向過(guò)程獲得全部動(dòng)作的Q-值對(duì)于下一個(gè)外形s’,通過(guò)前向過(guò)程計(jì)算Q-值最大的動(dòng)作max_a’Q(s’a’)r+\gammamax_a’Q(s’,a’)作為學(xué)習(xí)目標(biāo),對(duì)于其他動(dòng)作,設(shè)定第一步獲得的Q(也就是不會(huì)在反向過(guò)程中更新參數(shù))4.使用反向傳播算法更新參數(shù)。4.使用反向傳播算法更新參數(shù)。閱歷回放到現(xiàn)在,我們已經(jīng)曉得如何用Q-learning 的算法估量將來(lái)嘉獎(jiǎng),并能夠用一個(gè)卷積神經(jīng)網(wǎng)絡(luò)近似Q-函數(shù)。但使用Q值近似非線性的Q-閱歷回放到現(xiàn)在,我們已經(jīng)曉得如何用Q-learning 的算法估量將來(lái)嘉獎(jiǎng),并能夠用一個(gè)卷積神經(jīng)網(wǎng)絡(luò)近似Q-函數(shù)。但使用Q值近似非線性的Q-函數(shù)可能格外不穩(wěn)定。你需要很多小技巧才能使這個(gè)函數(shù)收斂。即便如此,在單GPU上也需要一個(gè)星期的時(shí)間訓(xùn)練模型。這其中,最重要的技巧是閱歷回放( experience replay)。在玩玩耍的過(guò)程中,全部經(jīng)受的都被記錄起來(lái)。當(dāng)我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),我們從這些記錄的中隨機(jī)選取一些 mini-batch 作為訓(xùn)練數(shù)據(jù)訓(xùn)練,不是依據(jù)時(shí)序地選取一些連續(xù)的。在后一種做法中,訓(xùn)練實(shí)例之間相像性較大,網(wǎng)絡(luò)很簡(jiǎn)約收斂到局部最小值。同時(shí),閱歷回放也使 learning 算法更像傳統(tǒng)監(jiān)督學(xué)習(xí)。我們可以收集一些人類玩家的記錄,并從這些記錄中學(xué)習(xí)。探究-利用順境Q-learning 算法嘗試處理信譽(yù)支配問(wèn)題。通過(guò) Q-learning,嘉獎(jiǎng)被回饋到關(guān)鍵的決策時(shí)辰。然而,我們還沒(méi)有處理探究 -利用順境。我們第一個(gè)觀看是:在玩耍開頭階段, Q-表或Q-網(wǎng)絡(luò)是隨機(jī)初始化的。它給出的機(jī)的“探究”。當(dāng)QQQ-learning 中包含“探究”的成分。但是這種探究是“貪欲”的,它只會(huì)探究當(dāng)前模型認(rèn)為的最好的策略。對(duì)于這個(gè)問(wèn)題,一個(gè)簡(jiǎn)約的修正技巧是使用\epsilon-貪欲探究。在學(xué)習(xí)Q-函數(shù)時(shí),這種技巧以\epsilon 的概率選取隨機(jī)的動(dòng)作做為下一步動(dòng)作,1-\epsilon 的概率選取分?jǐn)?shù)最高的動(dòng)作。在 DeepMind的系統(tǒng)中,\epsilon隨著時(shí)間從1削減到0.1。這意味著開頭時(shí),系統(tǒng)完全隨機(jī)地探究外形空間,最終以固定的概率探究。系統(tǒng)中,\epsilon隨著時(shí)間從1削減到0.1。這意味著開頭時(shí),系統(tǒng)完全隨機(jī)地探究外形空間,最終以固定的概率探究。DeepQ-learning算法DeepQ-learning算法最終給出訪用閱歷回放的DeepQ-learning 算法除了上述技巧,DeepMind還使用了一系列其他的技巧,比如:目標(biāo)網(wǎng)絡(luò)、誤差截?cái)?、回饋截?cái)嗟鹊?。但是這些已經(jīng)超出本文的范疇了。最令人驚喜的是這種算法可以應(yīng)對(duì)各種學(xué)習(xí)問(wèn)題。在算法的運(yùn)轉(zhuǎn)初期,Q-函數(shù)用來(lái)學(xué)習(xí)模型參數(shù)的數(shù)據(jù)幾乎完全是(隨機(jī)猜想的)垃圾數(shù)據(jù),在運(yùn)轉(zhuǎn)過(guò)程中,也只能通過(guò)一些偶然的嘉獎(jiǎng)學(xué)習(xí)參數(shù)。這種事情想想就很瘋狂,它是怎樣學(xué)到一個(gè)很好的模型呢?但現(xiàn)實(shí)上,它的確學(xué)到了一個(gè)很好的模型。最終要留意的問(wèn)題最終要留意的問(wèn)題自從DeepQ-learning提出之后,很多工作嘗試對(duì)他進(jìn)行提升,其自從DeepQ-learning提出之后,很多工作嘗試對(duì)他進(jìn)行提升,其中包括:DoubleQ-learning,PrioritizedExperienceReplay,DuelingNetworkArchitecture,extensiontocontinuousactionspace等等。假如要跟進(jìn)最新的爭(zhēng)辯成果,可以關(guān)注NIPS2015deepreinforcementlearningworkshop以及ICLR2016(用“reinforcement”作為關(guān)鍵詞搜索)。有一點(diǎn)需要留意的是DeepQ-learning已經(jīng)被谷歌申請(qǐng)專利了。我們常說(shuō)我們還沒(méi)搞清楚什么是人工智能。一旦我們搞清其中的工作原理,它看起來(lái)就不那么智能。但是深度 Q-網(wǎng)絡(luò)仍在不斷地給我來(lái)驚喜。觀看 Q-learning 學(xué)習(xí)玩一個(gè)新玩耍的過(guò)程就像觀看野外的動(dòng)物。通過(guò)不斷地與環(huán)境交互獲得嘉獎(jiǎng)從而成為更強(qiáng)的物種。原文致謝感激ArdiTampuu,原文致謝感激ArdiTampuu,TanelP?rnamaa, JaanAru,IlyaKuzovkin,ArjunBansalandUrsK?ster 在本文成文過(guò)程中給出的建議。翻譯術(shù)語(yǔ)表英文Q-learningQ-networkQ-functionQ-valueStateActionRewardFuturerewardDiscountedfuturerewardCredit-assignmentproblem
中文QQQ-值外形動(dòng)作嘉獎(jiǎng)將來(lái)嘉獎(jiǎng)打折的將來(lái)嘉獎(jiǎng)信譽(yù)支配問(wèn)題PolicyBellman-equationMarkovDecisionProcessexploration-exploitationdilemmaExperiencereplay\epsilongreedyexploration
策略貝爾曼公式馬爾科夫決策過(guò)程探究-利用順境閱歷回放\epsilon-貪欲探究校對(duì):車萬(wàn)翔,郭江來(lái)源:人工智能頭條作者|黃文堅(jiān)來(lái)源:人工智能頭條作者|黃文堅(jiān)淺析強(qiáng)化學(xué)習(xí)強(qiáng)化學(xué)習(xí)(Reinforcement Learning)是機(jī)器學(xué)習(xí)的一個(gè)重要分支,次要用來(lái)處理連續(xù)決策的問(wèn)題。強(qiáng)化學(xué)習(xí)可以在簡(jiǎn)約、不確定的環(huán)境中學(xué)習(xí)如何實(shí)現(xiàn)我們?cè)O(shè)定的目標(biāo)。強(qiáng)化學(xué)習(xí)的使用場(chǎng)景格外廣,幾乎包括了全部需要做淺析強(qiáng)化學(xué)習(xí)及使用 Policy淺析強(qiáng)化學(xué)習(xí)及使用 PolicyNetwork實(shí)現(xiàn)自動(dòng)化把握一系列決策的問(wèn)題,比如把握機(jī)器人的電機(jī)讓它執(zhí)行特定任務(wù),給商品定價(jià)或者庫(kù)存管理,玩視頻或棋牌玩耍等。強(qiáng)化學(xué)習(xí)也可以使用到有序列輸出的問(wèn)題中,由于它可以針對(duì)一系列變化的環(huán)境外形,輸出一系列對(duì)應(yīng)的舉動(dòng)。舉個(gè)簡(jiǎn)約的例子,圍棋(乃至全部棋牌類玩耍)可以歸結(jié)為一個(gè)強(qiáng)化學(xué)習(xí)問(wèn)題,我們需要學(xué)習(xí)在各種局勢(shì)下如何走出最好的招法。一個(gè)強(qiáng)化學(xué)習(xí)問(wèn)題包含三個(gè)次要概念,即環(huán)境外形(EnvironmentState)、舉動(dòng)(Action)和嘉獎(jiǎng)(Reward),而強(qiáng)化學(xué)習(xí)的目標(biāo)是獲得最多的累計(jì)嘉獎(jiǎng)。在圍棋中,環(huán)境外形就是已經(jīng)下出來(lái)的某個(gè)局勢(shì),舉動(dòng)是在某個(gè)位置落子,嘉獎(jiǎng)則是當(dāng)前這步棋獲得的目數(shù)(圍棋中存在不確定性,在結(jié)束對(duì)弈后計(jì)算的目數(shù)是精確 的,棋局中獲得的目數(shù)是估量的),而最終目標(biāo)就是結(jié)束對(duì)弈時(shí)總目數(shù)超過(guò)對(duì)手,博得成功。我們要讓強(qiáng)化學(xué)習(xí)模型依據(jù)環(huán)境外形、舉動(dòng)和嘉獎(jiǎng),學(xué)習(xí)出最佳策略,并以最終結(jié)果為目標(biāo),不能只看某個(gè)舉動(dòng)當(dāng)下帶來(lái)的利益(比如圍棋中通過(guò)某一手棋獲得的實(shí)地),還要看到這個(gè)舉動(dòng)將來(lái)能帶來(lái)的價(jià)值(比如圍棋中外勢(shì)可以帶來(lái)的潛在價(jià)值)。我們回顧一下,AutoEncoder 屬于無(wú)監(jiān)督學(xué)習(xí),而 MLP、CNN和RNN都屬于監(jiān)督學(xué)習(xí),但強(qiáng)化學(xué)習(xí)跟這兩種都不同。它不像無(wú)監(jiān)督學(xué)習(xí)那樣完全沒(méi)有學(xué)習(xí)目標(biāo),也不像監(jiān)督學(xué)習(xí)那樣有格外明確的目標(biāo)(即 label),強(qiáng)化學(xué)習(xí)的目標(biāo)一般是變化的、不明確的,甚至可能不存在確定正確的標(biāo)簽。強(qiáng)化學(xué)習(xí)已經(jīng)有幾十年的歷史,但是直到最近幾年深度學(xué)習(xí)技術(shù)的突破,強(qiáng)化學(xué)習(xí)才有了比較大的進(jìn)展。 Google DeepMind 結(jié)合強(qiáng)化學(xué)習(xí)與深度學(xué)習(xí),提出DQN(DeepQ-Network,深度Q網(wǎng)絡(luò)),它可以自動(dòng)玩Atari2600系列的玩耍,并取得了超過(guò)人類的水平。而DeepMind的AlphaGo結(jié)合了策略網(wǎng)絡(luò)(Policy Network)、估值絡(luò)(ValueNetwork,也即DQN)與蒙特卡洛搜索樹(MonteCarloTreeSearch),實(shí)現(xiàn)了具有超高水平的圍棋對(duì)戰(zhàn)程序,并打敗了世界冠軍李世石。DeepMind使用的這些深度強(qiáng)化學(xué)習(xí)模型(DeepReinforcementLearning,DRL)本質(zhì)上也是神經(jīng)網(wǎng)絡(luò),次要分為策略網(wǎng)絡(luò)和估值網(wǎng)絡(luò)兩種。深度強(qiáng)化學(xué)習(xí)模型對(duì)環(huán)境沒(méi)有特殊強(qiáng)的限制,可以很好地推廣到其他環(huán)境,因此對(duì)強(qiáng)化學(xué)習(xí)的爭(zhēng)辯和進(jìn)展具有格外嚴(yán)峻的意義。下面我們來(lái)看看深度強(qiáng)化學(xué)習(xí)的一些實(shí)際使用例子。我們也可以使用深度強(qiáng)化學(xué)習(xí)自動(dòng)玩玩耍,如圖 1所示,用DQN可學(xué)習(xí)動(dòng)玩Flappy Bird。DQN前幾層通常也是卷積層,因此具有了對(duì)玩耍圖像像素(rawpixels)直接進(jìn)行學(xué)習(xí)的力氣。前幾層卷積可理解和識(shí)別玩耍圖像中的物體,后層的神經(jīng)網(wǎng)絡(luò)則對(duì) Action 的期望價(jià)值進(jìn)行學(xué)習(xí),結(jié)合這兩個(gè)部分,可以得到能依據(jù)玩耍像素自動(dòng)玩 Flappy Bird的強(qiáng)化學(xué)習(xí)策略。而且,不只是這類簡(jiǎn)約的玩耍,連格外簡(jiǎn)約的包含大量戰(zhàn)術(shù)策略的《星際爭(zhēng)霸2》也可以被深度強(qiáng)化學(xué)習(xí)模型把握。目前,DeepMind就在探究如何通過(guò)深度強(qiáng)化學(xué)習(xí)訓(xùn)練一個(gè)可以打敗《星際爭(zhēng)霸 2》世界冠軍的人工智能,這之后的進(jìn)展讓我們拭目以待。圖1 使用深度強(qiáng)化學(xué)習(xí)自動(dòng)玩Flappy Bird深度強(qiáng)化學(xué)習(xí)最具有代表性的一個(gè)里程碑自然是AlphaGo。在2016年,GoogleDeepMind的AlphaGo以4:1的比分打敗了人類的世界冠軍李世石,如圖2所示。圍棋可以說(shuō)是棋類玩耍中最為簡(jiǎn)約的,19×19 的棋盤給它帶來(lái)了 3361外形,除去其中非法的違反玩耍規(guī)章的外形,計(jì)算機(jī)也是無(wú)法通過(guò)像深藍(lán)那樣的暴力搜索來(lái)打敗人類的,要在圍棋這個(gè)項(xiàng)目上打敗人類,就必需給計(jì)算機(jī)籠統(tǒng)思維的力氣,而AlphaGo做到了這一點(diǎn)。圖2 AlphaGo代表了深度強(qiáng)化學(xué)習(xí)技術(shù)的巔峰在AlphaGo中使用了快速走子(FastRollout)、策略網(wǎng)絡(luò)、估值網(wǎng)絡(luò)和蒙特卡洛搜索樹等技術(shù)。圖 3所示為AlphaGo的幾種技術(shù)單獨(dú)使用時(shí)的現(xiàn),橫坐標(biāo)為步數(shù),縱坐標(biāo)為猜想的誤差(可以理解為誤差越低模型效果越好),其中簡(jiǎn)約的快速走子策略雖然效果比較一般,但是已經(jīng)遠(yuǎn)勝隨機(jī)策略。估值網(wǎng)絡(luò)和策略網(wǎng)絡(luò)的效果都格外好,相對(duì)來(lái)說(shuō),策略網(wǎng)絡(luò)的功能更勝一籌。AlphaGo 融合了全部這些策略,取得了比單一策略更好的功能,在戰(zhàn)中表現(xiàn)出了驚人的水平。圖3 AlphaGo中隨機(jī)策略、快速走子、估值網(wǎng)絡(luò)和策略網(wǎng)絡(luò)(SL和RL兩種)的功能表現(xiàn)Policy-Based(或者PolicyGradients)和Value-Based(或者Q-Learning)是強(qiáng)化學(xué)習(xí)中最重要的兩類方法,其次要區(qū)分在于Policy-Based的方法直接猜想在某個(gè)環(huán)境外形下該當(dāng)實(shí)行的Action,而ValueBased的方法則猜想某個(gè)環(huán)境外形下全部Action的期望價(jià)值(Q值),之后可以通過(guò)選擇Q值最高的Action執(zhí)行策略。這兩種方法的動(dòng)身點(diǎn)和訓(xùn)練方式都有不同,一般來(lái)說(shuō),ValueBased方法適合僅有少量離散取值的Action的環(huán)境,而Policy-Based方法則更通用,適合Action品種格外多或者有連續(xù)取值的Action的環(huán)境。而結(jié)合深度學(xué)習(xí)后,Policy-Based的方法就成了PolicyNetwork,而Value-Based的方法則成了ValueNetwork圖4所示為AlphaGo中的策略網(wǎng)絡(luò)猜想出的當(dāng)前局勢(shì)下該當(dāng)實(shí)行的Action,圖中標(biāo)注的數(shù)值為策略網(wǎng)絡(luò)輸出的該當(dāng)執(zhí)行某個(gè)Action的概率,即我們?cè)摦?dāng)在某個(gè)位置落子的概率。圖4 AlphaGo中的策略網(wǎng)絡(luò),輸出在某個(gè)位置落子的概率圖5所示為AlphaGo中估值網(wǎng)絡(luò)猜想出的當(dāng)前局勢(shì)下每個(gè) Action的期價(jià)值。估值網(wǎng)絡(luò)不直接輸出策略,而是輸出 Action對(duì)應(yīng)的Q值,即在某個(gè)位置落子可以獲得的期望價(jià)值。隨后,我們可以直接選擇期望價(jià)值最大的位置落子,或者選擇其他位置進(jìn)行探究。圖5 AlphaGo中的估值網(wǎng)絡(luò),輸出在某個(gè)位置落子的期望價(jià)值在強(qiáng)化學(xué)習(xí)中,我們也可以建立額外的 model 對(duì)環(huán)境外形的變化進(jìn)行想。一般的強(qiáng)化學(xué)習(xí)直接依據(jù)環(huán)境外形猜想出舉動(dòng)策略,或舉動(dòng)的期望價(jià)值。假如依據(jù)環(huán)境外形和實(shí)行的舉動(dòng)猜想接下來(lái)的環(huán)境外形,并利用這個(gè)信值。假如依據(jù)環(huán)境外形和實(shí)行的舉動(dòng)猜想接下來(lái)的環(huán)境外形,并利用這個(gè)信息訓(xùn)練強(qiáng)化學(xué)習(xí)模型,那就是model-based RL。對(duì)于簡(jiǎn)約的環(huán)境外形,比如視頻玩耍的圖像像素,要猜想這么大量且簡(jiǎn)約的環(huán)境信息是格外困難的。假如環(huán)境外形是數(shù)量不大的一些離散值(m),并且可實(shí)行的舉動(dòng)也是數(shù)量較小的一些離散值(n),那么環(huán)境model只是一個(gè)簡(jiǎn)約的m×n的轉(zhuǎn)換矩陣。對(duì)于一個(gè)一般的視頻玩耍環(huán)境,假設(shè)圖像像素為64×64×3,可選舉動(dòng)有18種,那么我們光存儲(chǔ)這個(gè)轉(zhuǎn)換矩陣就需要大的難以想象的內(nèi)存空間(25664×64×3×18)。對(duì)于更簡(jiǎn)約的環(huán)境,我們就更難使用model 猜想接下來(lái)的環(huán)境外形。而model-free 類型的強(qiáng)化學(xué)習(xí)則不需要對(duì)環(huán)境外形進(jìn)行任何猜想,也不考慮舉動(dòng)將如何影響環(huán)境。model-free RL直接對(duì)策略或者Action的期望價(jià)值進(jìn)行猜想,因此計(jì)算效率格外高。當(dāng)然,假如有一個(gè)良好的model可以高效、精確地對(duì)環(huán)境進(jìn)行猜想,會(huì)對(duì)訓(xùn)練 RL帶來(lái)好處;但是一個(gè)不那么精準(zhǔn)的model反而會(huì)嚴(yán)峻干擾 RL的訓(xùn)練。因此,對(duì)大多數(shù)簡(jiǎn)約環(huán)境,我們次要使用model-free RL,同時(shí)供應(yīng)更多的樣本給RL訓(xùn)練,用來(lái)彌補(bǔ)沒(méi)有model猜想環(huán)境外形的問(wèn)題。使用策略網(wǎng)絡(luò)實(shí)現(xiàn)自動(dòng)化把握使用策略網(wǎng)絡(luò)實(shí)現(xiàn)自動(dòng)化把握前面提到了強(qiáng)化學(xué)習(xí)中格外重要的3個(gè)要素是Environment StateAction和Reward。在環(huán)境中,強(qiáng)化學(xué)習(xí)模型的載體是 Agent,它擔(dān)當(dāng)執(zhí)行模型給出的舉動(dòng)。環(huán)境是 Agent無(wú)法把握的,但是可以進(jìn)行觀看;依據(jù)觀看的結(jié)果,模型給出舉動(dòng),交由 Agent來(lái)執(zhí)行;而Reward是在某個(gè)環(huán)境外形下執(zhí)行了某個(gè)Action而獲得的,是模型要爭(zhēng)取的目標(biāo)。在很多任務(wù)中,Reward是延遲獵取的(Delayed),即某個(gè)Action除了可以即時(shí)獲得Reward,也可能跟將來(lái)獲得的Reward有很大關(guān)系。所謂策略網(wǎng)絡(luò),即建立一個(gè)神經(jīng)網(wǎng)絡(luò)模型,它可以通過(guò)觀看環(huán)境外形,直接猜想出目前最該當(dāng)執(zhí)行的策略(Policy),執(zhí)行這個(gè)策略可以獲得最大的期望收益(包括現(xiàn)在的和將來(lái)的Reward)。與一般的監(jiān)督學(xué)習(xí)不同,在強(qiáng)化學(xué)習(xí)中,可能沒(méi)有確定正確的學(xué)習(xí)目標(biāo),樣本的feature不再和label逐一對(duì)應(yīng)。對(duì)某一個(gè)特定的環(huán)境外形,我們并不曉得它對(duì)應(yīng)的最好的 Action是什么,只曉得當(dāng)前 Action獲得的Reward還有試驗(yàn)后獲得的將來(lái)的Reward。我們需要讓強(qiáng)化學(xué)習(xí)模型通過(guò)試驗(yàn)樣本本人學(xué)習(xí)什么才是某個(gè)環(huán)境外形下比較好的ActionAction曉得正確的答案(即樣本沒(méi)有確定正確的label,只需估算出的label)。我們的學(xué)習(xí)目標(biāo)是期望價(jià)值,即當(dāng)前獲得的Reward,加上將來(lái)潛在的可獵取的reward。為了更好地讓策略網(wǎng)絡(luò)理解將來(lái)的、潛在的 Reward,策略網(wǎng)絡(luò)不只是使用當(dāng)前的Reward作為label,而是使用Discounted Future Reward,把全部將來(lái)嘉獎(jiǎng)依次乘以衰減系數(shù) γ。這里的衰減系數(shù)一般是一個(gè)略小于但接近1的數(shù),防止沒(méi)有損耗地積累導(dǎo)致Reward目標(biāo)發(fā)散,同時(shí)也代表了對(duì)將來(lái)嘉獎(jiǎng)的不確定性的估量。我們使用被稱為 Policy Gradients 的方法來(lái)訓(xùn)練策略網(wǎng)絡(luò)。PolicyGradients 指的是模型通過(guò)學(xué)習(xí)Action在Environment 中獲得的反饋,使用梯度更新模型參數(shù)的過(guò)程。在訓(xùn)練過(guò)程中,模型會(huì)接觸到好 Action 它們帶來(lái)的高期望價(jià)值,和差 Action 及它們帶來(lái)的低期望價(jià)值,因此通過(guò)對(duì)這些樣本的學(xué)習(xí),我們的模型會(huì)漸漸添加選擇好 Action 的概率,并降低選擇壞Action的概率,這樣就漸漸完成了我們對(duì)策略的學(xué)習(xí)。和Q-Learning 或估值網(wǎng)絡(luò)不同,策略網(wǎng)絡(luò)學(xué)習(xí)的不是某個(gè) Action對(duì)應(yīng)期望價(jià)值 Q,而是直接學(xué)習(xí)在當(dāng)前環(huán)境該當(dāng)實(shí)行的策略,比如選擇每個(gè)Action的概率(假如是無(wú)限個(gè)可選 Action,好的Action該當(dāng)對(duì)應(yīng)較或許率,反之亦然),或者輸出某個(gè) Action的具體數(shù)值(假如 Action不是散值,而是連續(xù)值)。因此策略網(wǎng)絡(luò)是一種 End-to-End(端對(duì)端)的方法,可以直接產(chǎn)生最終的策略。PolicyBased的方法相比于Value-Based,有更好的收斂性(通常可以保證收斂到局部最優(yōu),且不會(huì)發(fā)散),對(duì)高維或者連續(xù)值的Action格外高效(訓(xùn)練和輸出結(jié)果都更高效),同時(shí)能學(xué)習(xí)出帶有隨機(jī)性的策略。例如,在石頭剪刀布的玩耍中,任何有規(guī)律的策略都會(huì)被別人學(xué)習(xí)到并且被針對(duì),因此完全隨機(jī)的策略反而可以立于不敗之地(最少不會(huì)輸給別的策略)。在這種情況下,可以利用策略網(wǎng)絡(luò)學(xué)到隨機(jī)出剪刀、石頭、布的策略(三個(gè)Action的概率相等)。我們需要使用Gym幫忙我們進(jìn)行策略網(wǎng)絡(luò)的訓(xùn)練。Gym是OpenAI推出的開源的強(qiáng)化學(xué)習(xí)的環(huán)境生成工具。在Gym中,有兩個(gè)核心的概念,一個(gè)是Environment,指我們的任務(wù)或者問(wèn)題,另一個(gè)就是Agent寫的策略或算法。Agent會(huì)將執(zhí)行的Action傳給Environment,Environment接受某個(gè)Action后,再將結(jié)果Observation(即環(huán)境外形)和Reward前往給AgentGym中供應(yīng)了完整的Environment的接口,而Agent則是完全由用戶編寫。下面我們就以Gym中的CartPole環(huán)境作為具體例子。CartPole任務(wù)最早由論文《Neuronlike Adaptive Elements ThatCanSolve DifficultLearning Control Problem》提出,是一個(gè)經(jīng)典的可用強(qiáng)化學(xué)習(xí)來(lái)處理的把握問(wèn)題。如圖6所示,CartPole 的環(huán)境中有一輛小車,在一個(gè)一維的無(wú)阻力軌道上舉動(dòng),在車上綁著一個(gè)連接不太堅(jiān)固的桿,這個(gè)桿會(huì)左右搖擺。我們的環(huán)境信息observation 并不是圖像像素,而只是一個(gè)有 4個(gè)值的數(shù)組,包含環(huán)境中的各種信息,比如小車位置、速度、桿的角度、速度等。我們并不需要曉得每個(gè)數(shù)值對(duì)應(yīng)的具體物理含義,由于我們不是要依據(jù)這些數(shù)值本人編寫規(guī)律把握小車,而是設(shè)計(jì)一個(gè)策略網(wǎng)絡(luò)讓它本人從這些數(shù)值中學(xué)習(xí)到環(huán)境信息,并制定最佳策略。我們可以實(shí)行的 Action 格外簡(jiǎn)約,給小車施加一個(gè)正向的力或者負(fù)向的力。我們有一個(gè) Action Space的概念即Action 的離散數(shù)值空間,比如在 CartPole 里Action Space 就Discrete(2),即只需0或1,其他簡(jiǎn)約一點(diǎn)的玩??赡苡懈嗫梢赃x擇的值。我們并不需要曉得這里的數(shù)值會(huì)具體對(duì)應(yīng)哪個(gè) Action,只需模型可以學(xué)習(xí)到實(shí)行這個(gè)Action之后將會(huì)帶來(lái)的影響就可以,因此Action都只是一個(gè)編碼。CartPole的任務(wù)目標(biāo)很簡(jiǎn)約,就是盡可能地保持桿豎直不傾倒,當(dāng)小車偏離中心超過(guò)2.4個(gè)單位的距離,或者桿的傾角超過(guò)15度時(shí),我們的任務(wù)宣告失敗,并自動(dòng)結(jié)束。在每堅(jiān)持一步后,我們會(huì)獲得+1的reward需要堅(jiān)持盡量長(zhǎng)的時(shí)間不導(dǎo)致任務(wù)失敗即可。任務(wù)的Reward恒定,對(duì)任何Action1的Reward型必需有遠(yuǎn)見(jiàn),要可以考慮到長(zhǎng)遠(yuǎn)的利益,而不只是學(xué)習(xí)到當(dāng)前的Reward圖6 CartPole環(huán)境中包含一個(gè)可以把握移動(dòng)方向的小車和不穩(wěn)的桿當(dāng)我們使用 env.reset()方法后,就可以初始化環(huán)境,并獵取到環(huán)境的第一個(gè)Observation。此后,依據(jù)Observation猜想出該當(dāng)實(shí)行的Action,并使用env.step(action)在環(huán)境中執(zhí)行 Action,這時(shí)會(huì)前往 Observation(在CartPole中是4維的籠統(tǒng)的特征,在其他任務(wù)中可能是圖像像素)、reward(當(dāng)前這步Action 獲得的即時(shí)嘉獎(jiǎng))、done(任務(wù)能否結(jié)束的記,在CartPole 中是桿傾倒或者小車偏離中心太遠(yuǎn),其他玩耍中可能是被敵人擊中。假如為True,該當(dāng)reset任務(wù))和info(額外的診斷信息,比如標(biāo)識(shí)了玩耍中一些隨機(jī)大事的概率,但是不該當(dāng)用來(lái)訓(xùn)練Agent)。這樣我們就進(jìn)入Action-Observation的循環(huán),執(zhí)行Action,獲得Observation,再執(zhí)行Action,如此往復(fù)直到任務(wù)結(jié)束,并期望在結(jié)束時(shí)獲得盡可能高的嘉獎(jiǎng)。我Action,如此往復(fù)直到任務(wù)結(jié)束,并期望在結(jié)束時(shí)獲得盡可能高的嘉獎(jiǎng)。我們可執(zhí)行的 Action 在CartPole 中是離散的數(shù)值空間,即無(wú)限的幾種能,在別的任務(wù)中可能是連續(xù)的數(shù)值,例如在賽車玩耍任務(wù)中,我們執(zhí)行的動(dòng)作是朝某個(gè)方向移動(dòng),這樣我們就有了擇。0~360度的連續(xù)數(shù)值空間可以選下面就使用TensorFlow創(chuàng)建一個(gè)基于策略網(wǎng)絡(luò)的Agent來(lái)處理CartPole問(wèn)題。我們先安裝OpenAI開源實(shí)現(xiàn)。Gym。本節(jié)代碼次要來(lái)自DeepRL-Agents的pipinstall gympipinstall gym接 著 , 載 NumPy 、 TensorFlow和gym 。 這 里 用gym.make(‘CartPole-v0’)創(chuàng)建CartPole問(wèn)題的環(huán)境env。importimportimportnumpy asnptensorflowgymastfenv=gym.make('CartPole-v0')先測(cè)試在 CartPole 環(huán)境中使用隨機(jī) Action 的表現(xiàn),作為接下來(lái)對(duì)比的baseline。首先,我們使用env.reset()初始化環(huán)境,然后進(jìn)行10次隨機(jī)試驗(yàn),這里調(diào)用env.render()將CartPole 問(wèn)題的圖像渲染出來(lái)。使np.random.randint(0,2) 產(chǎn)生隨機(jī)的Action,然后用env.step()執(zhí)行隨機(jī)的Action,并獵取前往的observation、reward和done。假如done標(biāo)記為True,則代表這次試驗(yàn)結(jié)束,即傾角超過(guò) 15度或者偏離中心過(guò)遠(yuǎn)導(dǎo)致任務(wù)失敗。在一次試驗(yàn)結(jié)束后,我們呈現(xiàn)這次試驗(yàn)累計(jì)的嘉獎(jiǎng)reward_sum并重啟環(huán)境。env.reset()random_episodes =0reward_sum =0while random_episodes <env.render()observation, reward, done,_=env.step(np.random.randint(0,2))reward_sum +=reward_sum +=rewardifdone:random_episodes +=1print("Rewardreward_sumenv.reset()forthisepisode=0was:",reward_sum)可以看到隨機(jī)策略獲得的嘉獎(jiǎng)總值差不多在 10~40 之間,均值該當(dāng)在20~30,這將作為接下來(lái)用來(lái)對(duì)比的基準(zhǔn)。我們將任務(wù)完成的目標(biāo)設(shè)定為拿到200的Reward,并期望通過(guò)盡量少次數(shù)的試驗(yàn)來(lái)完成這個(gè)目標(biāo)。Rewardforthisepisodewas:12.0Rewardforthisepisodewas:17.0Rewardforthisepisodewas:20.0Rewardforthisepisodewas:44.0Rewardforthisepisodewas:28.0Rewardforthisepisodewas:19.0Rewardforthisepisodewas:13.0Rewardforthisepisodewas:30.0Rewardforthisepisodewas:20.0Rewardforthisepisodewas:26.0我們的策略網(wǎng)絡(luò)使用簡(jiǎn)約的帶有一個(gè)隱含層的 MLP。先設(shè)置網(wǎng)絡(luò)的各個(gè)超參數(shù),這里隱含節(jié)點(diǎn)數(shù)H設(shè)為50,batch_size 設(shè)為25,學(xué)習(xí)速率learning_rate 為0.1,環(huán)境信息observation的維度D為4,gamma即Reward的discount比例設(shè)為0.99。在估算Action 的期望價(jià)值(即估算樣本的學(xué)習(xí)目標(biāo))時(shí)會(huì)考慮 DelayedReward,會(huì)將某個(gè)Action之后獲得的全部Reward做discount并累加起來(lái),這樣可以讓模型學(xué)習(xí)到將來(lái)可能毀滅的潛在 Reward。留意,一般discount比例要小于1,防止Reward被無(wú)損耗地不斷累加導(dǎo)致發(fā)散,這樣也可以區(qū)分當(dāng)前Reward和將來(lái)Reward的價(jià)值(當(dāng)前Action直接帶來(lái)的Reward不需要discount,而將來(lái)的Reward因存在不確定性所以需要discount)。H=50H=50batch_size =batch_size =25learning_rate =D=4gamma =0.99下面定義策略網(wǎng)絡(luò)的具體結(jié)構(gòu)。這個(gè)網(wǎng)絡(luò)將接受observations 作為輸入信息,最終輸出一個(gè)概率值用以選擇 Action(我們只需兩個(gè)Action,向左施加力或者向右施加力,因此可以通過(guò)一個(gè)概率值打算)。我們創(chuàng)建輸入信息observations的placeholder,其維度為D。然后使用 tf.contrib.layers.xavier_initializer初始化算法創(chuàng)建隱含層的權(quán)重W1,其維度為[D,H]。接著用tf.matmul將環(huán)境信息observation乘上W1再使用ReLU激活函數(shù)處理得到隱含層輸出layer1,這里留意我們并不需要加偏置。同樣用xavier_initializer算法創(chuàng)建最終Sigmoid輸出層的權(quán)重W2,將隱含層輸出layer1乘以W2后,使用Sigmoid激活函數(shù)處理得到最終的輸出概率。observations =observations =tf.placeholder(tf.float32, [None,D] ,name="input _x")W1=tf.get_variable("W1", shape=[D, H],layer1 =tf.nn.relu(tf.matmul(observations,W1))W2=tf.get_variable("W2", shape=[H, 1],score =tf.matmul(layer1,W2)probability =tf.nn.sigmoid(score)這里模型的優(yōu)化器使用 Adam算法。我們分別設(shè)置兩層神經(jīng)網(wǎng)絡(luò)參數(shù)的梯度的placeholder——W1Grad和W2Grad,并使用adam.apply_gradients定義我們更新模型參數(shù)的操作 updateGrads。之后計(jì)算參數(shù)的梯度,當(dāng)積累到確定樣本量的梯度,就傳入W1Grad 和W2Grad,并執(zhí)行updateGrads更新模型參數(shù)。這里留意,深度強(qiáng)化學(xué)習(xí)的訓(xùn)練和其他神經(jīng)網(wǎng)絡(luò)一樣,也使用batchtraining 的方式。我們不逐一樣本地更新參數(shù),而是累計(jì)一個(gè)batch_size的樣本的梯度再更新參數(shù),防止單一樣本隨機(jī)擾動(dòng)的噪聲對(duì)模型帶來(lái)不良影響。的樣本的梯度再更新參數(shù),防止單一樣本隨機(jī)擾動(dòng)的噪聲對(duì)模型帶來(lái)不良影響。adam=tf.train.AdamOptimizer(learning_rate=learning_rate)W1Grad =tf.placeholder(tf.float32,name="batch_grad1")W2Grad =tf.placeholder(tf.float32,name="batch_grad2")batchGrad =[W1Grad,W2Grad]updateGrads =adam.apply_gradients(zip(batchGrad,tvars))下面定義函數(shù)discount_rewards,用來(lái)估算每一個(gè) Action對(duì)應(yīng)的潛在價(jià)值discount_r。由于 CartPole 問(wèn)題中每次獲得的 Reward 都和前面的Action 有關(guān),屬于 delayed reward。因此需要比較精準(zhǔn)地衡量每一個(gè)Action 實(shí)際帶來(lái)的價(jià)值時(shí),不能只看當(dāng)前這一步的 Reward,而要考慮后面的 Delayed Reward。那些能讓 Pole 長(zhǎng)時(shí)間保持在空中豎直Action,該當(dāng)擁有較大的期望價(jià)值,而那些最終導(dǎo)致 Pole 傾倒Action,則該當(dāng)擁有較小的期望價(jià)值。我們推斷越靠后的 Action的期望價(jià)值越小,由于它們更可能是導(dǎo)致 傾倒的緣由,并且推斷越靠前的 Action 的期望價(jià)值越大,由于它們長(zhǎng)時(shí)間保持了Pole的豎直,和傾倒的關(guān)系沒(méi)有那么大。我們倒推整個(gè)過(guò)程,從最終一個(gè)Action開頭計(jì)算全部Action該當(dāng)對(duì)應(yīng)的期望價(jià)值。輸入數(shù)據(jù)r為每一個(gè)Action實(shí)際獲得的Reward,在CartPole問(wèn)題中,除了最終結(jié)束時(shí)的Action為0,其余均為1。下面引見(jiàn)具體的計(jì)算方法,我們定義每個(gè) Action 除直接獲得的 Reward 外的潛在價(jià)值running_add,running_add是從后向前累計(jì)的,并且需要經(jīng)過(guò) discount衰減。而每一個(gè)Action的潛在價(jià)值,即為后一個(gè) Action的潛在價(jià)值乘以衰減系數(shù) gamma 再加上它直接獲得的 reward ,running_add*gamma+r[t] 。這樣從最終一個(gè) Action 開頭不斷向前累計(jì)計(jì)算,即可得到全部 Action 的潛在價(jià)值。這種對(duì)潛在價(jià)值的估算方法符合我們的期望,越靠前的Action潛在價(jià)值越大。defdiscount_rewards(r):defdiscount_rewards(r):discounted_r =np.zeros_like(r)running_add =0fortinreversed(range(r.size)):running_add =running_add *gamma +discounted_r[t] =running_addreturn discounted_r我們定義人工設(shè)置的虛擬 label(下文會(huì)講解其生成原理,其取值為 0或1)的 placeholder——input_y,以及每個(gè) Action 的潛在價(jià)值placeholder——advangtages。這里loglik 的定義略顯簡(jiǎn)約,我們來(lái)看一下loglik到底代表什么。Action取值為1的概率為probability(即策略網(wǎng)絡(luò)輸出的概率),Action取值為0的概率為1-probability,label取值與Action相反,即label=1-Action。當(dāng)Action為1時(shí),label為0,此時(shí) loglik=tf.log(probability) ,Action 取值為 1的概率的對(duì)數(shù);當(dāng)Action 為0時(shí),label 為1,此時(shí)loglik=tf.log(1-probability) ,Action取值為0的概率的對(duì)數(shù)。所以,loglik其實(shí)就是當(dāng)前Action對(duì)應(yīng)的概率的對(duì)數(shù),我們將 loglik與潛在價(jià)值advantages 相乘,并取負(fù)數(shù)作為損失,即優(yōu)化目標(biāo)。我們使用優(yōu)化器優(yōu)化時(shí),會(huì)讓能獲得較多 advantages的Action的概率變大,并讓能獲得較少 advantages 的Action的概率變小,這樣能讓損失變小。通過(guò)不斷的訓(xùn)練,我們便能持續(xù)加大能獲得較多advantages的Action的概率,即學(xué)習(xí)到一個(gè)能獲得更多潛在價(jià)值的策略。最終,使用tf.trainable_variables()獵取策略網(wǎng)絡(luò)中全部可訓(xùn)練的參數(shù)tvars,并使用tf.gradients求解模型參數(shù)關(guān)于loss的梯度。input_y =input_y =tf.placeholder(tf.float32,[None,1],name="input_y")advantages =tf.placeholder(tf.float32,name="reward_signal")loglik =tf.log(input_y*(input_y -probability) +\(1-input_y)*(input_y +probability))loss=-tf.reduce_mean(loglik *advantages)tvars =tf.trainable_variables()newGrads =tf.gradients(loss,tvars)在正式進(jìn)入訓(xùn)練過(guò)程前,我們先定義一些參數(shù),xs為環(huán)境信息在正式進(jìn)入訓(xùn)練過(guò)程前,我們先定義一些參數(shù),xs為環(huán)境信息observation的列表,ys為我們定義的label的列表,drs為我們記錄的每一個(gè)Action的Reward。我們定義累計(jì)的Reward為reward_sum,總試驗(yàn)次數(shù)total_episodes為10000,直到達(dá)到獵取200的Reward才停止訓(xùn)練。xs,ys,drs =xs,ys,drs =[],[],[]reward_sum =0episode_number =1total_episodes =10000我們創(chuàng)建默認(rèn)的Session,初始化全部參數(shù),并在一開頭將 render的標(biāo)志關(guān)閉。由于render 會(huì)帶來(lái)比較大的延遲,所以一開頭不太成熟的模型還沒(méi)必要去觀看。先初始化CartPole 的環(huán)境并獲得初始外形。然后使sess.run 執(zhí)行tvars獵取全部模型參數(shù),用來(lái)創(chuàng)建儲(chǔ)存參數(shù)梯度的緩沖器gradBuffer,并把gardBuffer 全部初始化為零。接下來(lái)的每次試驗(yàn)中,我們將收集參數(shù)的梯度存儲(chǔ)到 gradBuffer 中,直到完成了一個(gè) batch_size的試驗(yàn),再將匯總的梯度更新到模型參數(shù)。withtf.Session() assess:rendering =Falseinit=tf.global_variables_initializer()sess.run(init)observation =env.reset()gradBuffer =sess.run(tvars)forix,grad inenumerate(gradBuffer):gradBuffer[ix] =grad*0下面進(jìn)入試驗(yàn)的循環(huán),最大循環(huán)次數(shù)即為total_episodes。當(dāng)某個(gè) batch的平均Reward達(dá)到100以上時(shí),即Agent表現(xiàn)良好時(shí),調(diào)用env.render()對(duì)試驗(yàn)環(huán)境進(jìn)行呈現(xiàn)。先使用tf.reshape將observation變形為策略網(wǎng)絡(luò)輸入的格式,然后傳入網(wǎng)絡(luò)中,使用sess.run執(zhí)行probability獲得網(wǎng)絡(luò)輸出的概率tfprob,即Action取值為1的概率。接下來(lái)我們?cè)冢?,1)間隨機(jī)抽樣,若隨機(jī)值小于tfprob,則令A(yù)ction取值下來(lái)我們?cè)冢?,1)間隨機(jī)抽樣,若隨機(jī)值小于tfprob,則令A(yù)ction取值為1,否則令A(yù)ctiontfprob。取值為0,即代表Action取值為1的概率為while episode_number <=while episode_number <=total_episodes:ifreward_sum/batch_sizeenv.render()>100orrendering ==True:rendering =Truex=np.reshape(observation,[1,D])tfprob =sess.run(probability,feed_dict={observations:x})action=1ifnp.random.uniform()<tfprobelse0然后將輸入的環(huán)境信息observation添加到列表xs中。這里我們制造虛擬的label——y,它取值與Action相反,即y=1-action,并將其添加到列表ys中。然后使用env.step執(zhí)行一次Action,獵取observation、reward、done和info,并將reward累加到reward_sum,同時(shí)將reward添加到列表drs中。xs.append(x)y=1-actionys.append(y)observation,reward_sumreward,done,info=env.step(action)+=rewarddrs.append(reward)當(dāng)done為True,即一次試驗(yàn)結(jié)束時(shí),將episode_numer加1。同時(shí)使用np.vstack將幾個(gè)列表xs、ys、drs中的元素縱向堆疊起來(lái),得到epx和eprxs、ys、drs清空以備下次試驗(yàn)使用。這里留意,epxepy、drs即為一次試驗(yàn)中獲得的全部observation、labelreward的列表。我們使用前面定義好的discount_rewards函數(shù)計(jì)算每一步Action的潛在價(jià)值,并進(jìn)行標(biāo)準(zhǔn)化(減去均值再除以標(biāo)準(zhǔn)差),得到一個(gè)零均值標(biāo)準(zhǔn)差為差為1的分布。這么做是由于 discount_reward 會(huì)參與到模型損失的計(jì)算,而分布穩(wěn)定的discount_rewad 有利于訓(xùn)練的穩(wěn)定。ifdone:episode_number +=epx=np.vstack(xs)epy=np.vstack(ys)epr=np.vstack(drs)xs,ys,drs =[],[],[]discounted_epr =discount_rewards(epr)discounted_epr -=np.mean(discounted_epr)discounted_epr /=np.std(discounted_epr)我們將epx、epy 和discounted_epr 輸入神經(jīng)網(wǎng)絡(luò),并使用操作newGrads求解梯度。再將獲得的梯度累加到 gradBuffer中去。tGrad =tGrad =sess.run(newGrads,feed_dict={observations:input_y: epy,advantages:epx,discounted_epr})forix,grad inenumerate(tGrad):gradBuffer[ix] +=grad當(dāng)進(jìn)行試驗(yàn)的次數(shù)達(dá)到batch_size的整倍數(shù)時(shí),gradBuffer中就累計(jì)了足夠多的梯度,因此使用updateGrads操作將gradBuffer中的梯度更新到策略網(wǎng)絡(luò)的模型參數(shù)中,并清空gradBuffer,為計(jì)算下一個(gè)batch的梯度做預(yù)備。這里留意,我們是使用一個(gè)batch的梯度更新參數(shù),但是每一個(gè)梯度是使用一次試驗(yàn)中全部樣本(一個(gè)Action對(duì)應(yīng)一個(gè)樣本)計(jì)算出來(lái)的,因此一個(gè)batch中的樣本數(shù)實(shí)際上是25(batch_size)次試驗(yàn)的樣本數(shù)之和。同時(shí),我們呈現(xiàn)當(dāng)前的試驗(yàn)次數(shù) episode_number,和batch內(nèi)每次試驗(yàn)平均獲得的reward。當(dāng)我們batch內(nèi)每次試驗(yàn)的平均 reward大于時(shí),我們的策略網(wǎng)絡(luò)就成功完成了任務(wù),并將終止循環(huán)。假如沒(méi)有達(dá)到目標(biāo),則清空reward_sum,重新累計(jì)下一個(gè)batch的總reward。同時(shí),在每次試驗(yàn)結(jié)束后,將任務(wù)環(huán)境env重置,便利下一次試驗(yàn)。ifepisode_number %batch_size ==sess.run(updateGrads,feed_dict={W1Grad: gradBuffer[0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯報(bào)在項(xiàng)目管理中的重要作用
- 現(xiàn)代市場(chǎng)營(yíng)銷中的網(wǎng)絡(luò)直播工具選擇與應(yīng)用
- 現(xiàn)代商業(yè)項(xiàng)目中的綠色建筑策略
- Unit 3 Transportation Period 1(說(shuō)課稿)-2024-2025學(xué)年人教新起點(diǎn)版英語(yǔ)四年級(jí)上冊(cè)
- 2024-2025學(xué)年高中地理上學(xué)期第十三周 中國(guó)地理分區(qū) 第一節(jié) 北方地區(qū)說(shuō)課稿
- 2024年三年級(jí)品社下冊(cè)《這周我當(dāng)家》說(shuō)課稿 遼師大版
- 5 數(shù)學(xué)廣角 - 鴿巢問(wèn)題(說(shuō)課稿)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- 16 表里的生物(說(shuō)課稿)-2023-2024學(xué)年統(tǒng)編版語(yǔ)文六年級(jí)下冊(cè)
- 2023九年級(jí)數(shù)學(xué)下冊(cè) 第24章 圓24.4 直線與圓的位置關(guān)系第2課時(shí) 切線的判定定理說(shuō)課稿 (新版)滬科版
- 7《花 果實(shí) 種子》說(shuō)課稿-2023-2024學(xué)年科學(xué)三年級(jí)下冊(cè)人教鄂教版
- 春節(jié)后安全生產(chǎn)開工第一課
- 2025光伏組件清洗合同
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年網(wǎng)格員考試題庫(kù)完美版
- 《建筑與市政工程防水規(guī)范》解讀
- 審計(jì)合同終止協(xié)議書(2篇)
- 2024年重慶市中考數(shù)學(xué)試題B卷含答案
- 腰椎間盤突出癥護(hù)理查房
- 醫(yī)生給病人免責(zé)協(xié)議書(2篇)
- 外購(gòu)?fù)鈪f(xié)管理制度
- 人教版(2024年新教材)七年級(jí)上冊(cè)英語(yǔ)Unit 7 Happy Birthday 單元整體教學(xué)設(shè)計(jì)(5課時(shí))
評(píng)論
0/150
提交評(píng)論