0
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Beating Video Games with Deep-Q-Networks
作者 | Liam Hinzman
翻譯 | ceroo
校對(duì) | 斯蒂芬?二狗子 審核 | 醬番梨 整理 | 立魚王
原文鏈接:
https://towardsdatascience.com/beating-video-games-with-deep-q-networks-7f73320b9592
我愛(ài)死玩電子游戲了。
我每天都玩,然而,乒乓球我連10歲妹妹都打不贏。
蠻挫敗的,所以我決定建立一個(gè)深度Q網(wǎng)絡(luò),用這個(gè)網(wǎng)絡(luò)學(xué)習(xí)如何在任一電子游戲中打敗我的妹妹。
經(jīng)過(guò)幾天的不間斷編程(夜不能寐),這就是我用Deep-Q-Networks所能達(dá)成的實(shí)踐:
偷偷看下我的DQN模型的結(jié)果(綠色球拍)
綠色球拍由DQN模型控制,完全靠它自我對(duì)弈 ,以此學(xué)習(xí)如何玩乒乓球。
隨后,我會(huì)詳細(xì)說(shuō)說(shuō)我的結(jié)果,但首先...
什么是DQN(Deep-Q-Networks),它是如何工作的?
簡(jiǎn)單說(shuō):DQN結(jié)合了深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)來(lái)學(xué)習(xí)如何玩電子游戲,并超過(guò)人類水平。
DQNs結(jié)合強(qiáng)化學(xué)習(xí)和深度學(xué)習(xí)來(lái)玩視頻游戲
你所需要知道的是,深度學(xué)習(xí)(理解DQN)是一種使用神經(jīng)網(wǎng)絡(luò)來(lái)模仿人類大腦工作的計(jì)算架構(gòu)。其中,神經(jīng)網(wǎng)絡(luò)的輸入和輸出都是數(shù)字。神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)像房?jī)r(jià)預(yù)測(cè)或識(shí)別腫瘤圖像等任務(wù)。
現(xiàn)在,我們繼續(xù)回到DQN這條主線...
那么什么是強(qiáng)化學(xué)習(xí)呢?
強(qiáng)化學(xué)習(xí)是一種機(jī)器學(xué)習(xí)技術(shù),它通過(guò)采取行動(dòng)來(lái)學(xué)習(xí)如何最大化獎(jiǎng)勵(lì)。
一條狗可能會(huì)嘗試學(xué)習(xí),如何最大限度地通過(guò)它的吠叫來(lái)誘導(dǎo)主人撫摸它的肚皮,或一只貓可能會(huì)嘗試學(xué)習(xí),如何最大限度地通過(guò)它的跳躍“作”得一手好死。這兩種動(dòng)物都是根據(jù)它們當(dāng)前的狀態(tài)采取行動(dòng)的智能體,試圖最大化某種獎(jiǎng)勵(lì)。
讓我們更深入地了解這些術(shù)語(yǔ)對(duì)于一個(gè)“吃豆人”游戲的含義。
PacMan(吃豆人)(黃色圓圈)是智能體,這是玩家在游戲中控制的。狀態(tài)一般指是游戲中的某個(gè)一個(gè)時(shí)刻,在這里狀態(tài)是游戲中的某一幀。智能體可以選擇進(jìn)入哪個(gè)方向(操作),并使用這些操作來(lái)避免死于鬼魂(負(fù)獎(jiǎng)勵(lì))和吃更多的點(diǎn)(正獎(jiǎng)勵(lì))。PacMan的目標(biāo)是最大化你的得分(獎(jiǎng)勵(lì))。
重要的強(qiáng)化學(xué)習(xí)術(shù)語(yǔ)
Agent 智能體:計(jì)算機(jī)控制的內(nèi)容(pac man)
State 狀態(tài):游戲中的當(dāng)前時(shí)刻(PacMan中的單幀圖像)
Action 行動(dòng):由代理人作出的決定(PAC人員向左或向右移動(dòng))
Reward 獎(jiǎng)勵(lì): 智能體試圖最大化的價(jià)值(在pac man中得分)
你還需要了解一件關(guān)于強(qiáng)化學(xué)習(xí)理解深層Q網(wǎng)絡(luò)的事情:Q值
Q值,即深度Q網(wǎng)絡(luò)中的Q值,是一個(gè)動(dòng)作在給定狀態(tài)下的“質(zhì)量”。如果一個(gè)行動(dòng)具有高的預(yù)期長(zhǎng)期價(jià)值,那么它就是高質(zhì)量的。
睡前給媽媽一個(gè)擁抱(動(dòng)作)可能不會(huì)馬上給我“獎(jiǎng)勵(lì)”,但從長(zhǎng)遠(yuǎn)來(lái)看,它會(huì)給我很多愛(ài)(獎(jiǎng)勵(lì)),所以這個(gè)狀態(tài)動(dòng)作對(duì)的Q值很高(我在心里計(jì)算每晚?yè)肀寢尩腝值)。
你需要知道這些強(qiáng)化學(xué)習(xí)的概念,并以此了解DQN!
那么,我是如何讓一臺(tái)電腦學(xué)習(xí)如何比別人更好地玩電子游戲的(并在乒乓球中擊敗我的妹妹)?
我使用DQN網(wǎng)絡(luò)!
DQNs使用Q-learning學(xué)習(xí)給定狀態(tài)下要采取的最佳行動(dòng)(q值),并使用卷積網(wǎng)絡(luò)作為Q-learning的近似值函數(shù)。
以下是要記住的關(guān)鍵點(diǎn):
深度學(xué)習(xí)+強(qiáng)化學(xué)習(xí)=深度Q網(wǎng)絡(luò)(DQN)
而不是為屏幕上的每個(gè)像素組合記憶不同的Q值(有十億!)我們使用卷積網(wǎng)絡(luò)在相似狀態(tài)下推理出類似的Q值。
卷積網(wǎng)絡(luò)可以告訴玩電子游戲的'Agent':“是的,這個(gè)位置基本上和另一個(gè)相同,向上移動(dòng)”。這使得'Agent'的工作變得容易多了。它不需要數(shù)十億個(gè)不同游戲狀態(tài)的Q值才能學(xué)會(huì),只需要幾百萬(wàn)個(gè)Q值來(lái)學(xué)習(xí)。
下面是我的DQN的卷積網(wǎng)絡(luò)在代碼中的樣子:
下面是此代碼塊的作用:
將當(dāng)前屏幕(狀態(tài))作為輸入
通過(guò)3個(gè)卷積層傳遞輸入(用于在圖像中查找位置圖案)
注意:不使用池化操作(空間位置在游戲中很重要,我們想知道球在哪里!)
卷積層的輸出被送入2個(gè)全連接層。
線性層的輸出則給出了DQN在當(dāng)前狀態(tài)下采取某種行動(dòng)的概率。
我也做了一些游戲圖像的預(yù)處理。Atari游戲通常是210x160像素大小,有128種不同的顏色。為了使我的DQN的工作更容易,我將圖像的采樣率降低到84x84,并使其灰度化。
預(yù)處理過(guò)圖像不再明亮和多彩,但更容易被我的DQN識(shí)別。
現(xiàn)在我們需要一些方法來(lái)評(píng)估DQN。情況如何?它在學(xué)習(xí)什么嗎?我們?nèi)绾握{(diào)整它使它更好,得到更高的分?jǐn)?shù)?
要知道所有這些,我們需要一個(gè)損失函數(shù)。
唯一的問(wèn)題是我們不知道最好的答案是什么,agent應(yīng)該做什么。DQN如何學(xué)習(xí)才能比人類玩的更好,因此即使我們想模型達(dá)到這樣,我們也無(wú)法制作出完美的標(biāo)記數(shù)據(jù)集。
相反,我們使用這個(gè)損失方程來(lái)評(píng)估DQN自身:
DQN的損失函數(shù)
這個(gè)Q網(wǎng)絡(luò)Q-Network是給出要采取什么行動(dòng)的網(wǎng)絡(luò)。目標(biāo)網(wǎng)絡(luò)Target Network是給出我們使用的“ground truth”的近似值。
如果Q-Network預(yù)測(cè)在某一狀態(tài)下的正確動(dòng)作是以60%的確定性(概率)向上移動(dòng),而目標(biāo)網(wǎng)絡(luò)告訴我們“你應(yīng)該向上移動(dòng)”,我們將使用反向傳播調(diào)整Q-Network的參數(shù),使其更可能預(yù)測(cè)在該狀態(tài)下的“向上移動(dòng)”。
我們通過(guò)DQN反向傳播這種損失,并稍微調(diào)整Q網(wǎng)絡(luò)的權(quán)重以減少損失。
該損失函數(shù)試圖使DQN輸出的移動(dòng)概率更接近于目標(biāo)網(wǎng)絡(luò)給出的“正確選擇”,即接近100%確定性。
現(xiàn)在DQNs好像就是Q學(xué)習(xí)和卷積網(wǎng)絡(luò)的結(jié)合,基本上可以這樣看。這個(gè)想法很簡(jiǎn)單,為什么它只在2015年被DeepMind研究人員引入?
神經(jīng)網(wǎng)絡(luò)不能很好地進(jìn)行強(qiáng)化學(xué)習(xí)。
為什么神經(jīng)網(wǎng)絡(luò)和強(qiáng)化學(xué)習(xí)不能融洽相處?
兩個(gè)原因
高度相關(guān)數(shù)據(jù)
非平穩(wěn)分布
在有監(jiān)督學(xué)習(xí)中,數(shù)據(jù)是不相關(guān)和固定的。當(dāng)圖像分類器正在學(xué)習(xí)什么使一只貓成為一只貓時(shí),顯示給它的每個(gè)圖像都將顯著不同,數(shù)據(jù)是不相關(guān)的。此外,網(wǎng)絡(luò)的預(yù)測(cè)(通常)不會(huì)影響下一步將看到的圖像,數(shù)據(jù)集是固定的,并且是從中隨機(jī)抽樣的。靜止的不相關(guān)數(shù)據(jù)與神經(jīng)網(wǎng)絡(luò)很好地配合。
在強(qiáng)化學(xué)習(xí)中,數(shù)據(jù)是高度相關(guān)和非平穩(wěn)的。當(dāng)pac man移到右邊時(shí),板看起來(lái)基本相同,數(shù)據(jù)高度相關(guān)。此外,網(wǎng)絡(luò)的決定影響下一個(gè)狀態(tài),這使得數(shù)據(jù)分布非平穩(wěn)。如果馬里奧右移,他會(huì)看到新的硬幣。這些硬幣會(huì)讓馬里奧認(rèn)為向右移動(dòng)總是個(gè)好主意,也許他永遠(yuǎn)不會(huì)發(fā)現(xiàn)他左邊的秘密通道。
經(jīng)驗(yàn)回放Experience Replay讓神經(jīng)網(wǎng)絡(luò)能很好地進(jìn)行強(qiáng)化學(xué)習(xí)。
‘Agent’獲得的每個(gè)經(jīng)驗(yàn)(包括當(dāng)前狀態(tài)、動(dòng)作、獎(jiǎng)勵(lì)和下一個(gè)狀態(tài))都存儲(chǔ)在所謂的經(jīng)驗(yàn)回放內(nèi)存中。
這種訓(xùn)練方式與DQN網(wǎng)絡(luò)在當(dāng)前學(xué)習(xí)中所獲得樣本來(lái)訓(xùn)練不同,是從重放存儲(chǔ)器中隨機(jī)抽取“回放”來(lái)訓(xùn)練網(wǎng)絡(luò)。
經(jīng)驗(yàn)回放讓深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)成為兄弟。
與標(biāo)準(zhǔn)Q學(xué)習(xí)相比,經(jīng)驗(yàn)回放有三個(gè)優(yōu)勢(shì):
更高數(shù)據(jù)利用
使數(shù)據(jù)不相關(guān)
平均數(shù)據(jù)分布
首先,每個(gè)經(jīng)驗(yàn)都可能被用于對(duì)DQN的神經(jīng)網(wǎng)絡(luò)進(jìn)行多次訓(xùn)練,從而提高數(shù)據(jù)效率。
第二,隨機(jī)抽取經(jīng)驗(yàn)樣本對(duì)DQN神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,打破了經(jīng)驗(yàn)之間的相關(guān)性,減少了訓(xùn)練更新時(shí)的方差。
第三,當(dāng)從經(jīng)驗(yàn)中學(xué)習(xí)時(shí),一旦獲得經(jīng)驗(yàn)(稱為策略學(xué)習(xí)),當(dāng)前參數(shù)就決定了參數(shù)所訓(xùn)練的下一個(gè)數(shù)據(jù)樣本。例如,如果最好的行動(dòng)是將Pac Man向左移動(dòng),那么訓(xùn)練樣本將由來(lái)自經(jīng)驗(yàn)池中向左運(yùn)動(dòng)相關(guān)樣本為主。
這種行為可能會(huì)導(dǎo)致DQN陷入糟糕的局部最小值,甚至使其發(fā)生災(zāi)難性的偏離(比我更糟糕)。
如果你不使用經(jīng)驗(yàn)回放,模型會(huì)經(jīng)常看到這個(gè)畫面。
通過(guò)使用經(jīng)驗(yàn)回放,用來(lái)訓(xùn)練DQN的經(jīng)驗(yàn)來(lái)自許多不同的時(shí)間點(diǎn)。這樣可以消除學(xué)習(xí)障礙,避免災(zāi)難性的失敗。
這種簡(jiǎn)單的經(jīng)驗(yàn)概念解決了神經(jīng)網(wǎng)絡(luò)在強(qiáng)化學(xué)習(xí)中的問(wèn)題。現(xiàn)在他們可以融洽相處地一起玩了!
我在pytorch創(chuàng)建了一個(gè)DQN,并訓(xùn)練它玩乒乓球。
起初,我的DQN只能隨意地玩乒乓球,但經(jīng)過(guò)3個(gè)小時(shí)的訓(xùn)練,它學(xué)會(huì)了如何比人類玩得更好!
綠色槳是由我的超級(jí)棒DQN控制的
最瘋狂的事情是我不需要更改一行代碼就可以訓(xùn)練DQN來(lái)玩另一個(gè)游戲,并且,就可以在該游戲中到達(dá)超過(guò)人類的游戲水平。
這意味著,同樣的算法,教計(jì)算機(jī)控制這個(gè)綠色的乒乓球拍,也可以教計(jì)算機(jī)如何在毀滅戰(zhàn)士中射擊惡魔。
DQN最酷的一點(diǎn)是他們可以學(xué)習(xí)我甚至不知道的游戲策略。在款游戲beakout中,DQN學(xué)會(huì)怎么樣繞過(guò)邊路快速到達(dá)頂部,并獲得大量的積分。
我創(chuàng)造了這個(gè)DQN,它學(xué)到了我甚至不知道的東西!
DQN可以發(fā)現(xiàn)其創(chuàng)建者從未知道的策略!
這意味著計(jì)算機(jī)現(xiàn)在可以幫助我們學(xué)習(xí)最喜愛(ài)的電子游戲的新策略。也許DQNS會(huì)想辦法在《超級(jí)馬里奧兄弟》中快速到達(dá)World 9關(guān)卡。
使用DQNs電腦可以學(xué)習(xí)如何比人類更好地玩電子游戲。
在DQNs中,經(jīng)驗(yàn)回放讓神經(jīng)網(wǎng)絡(luò)和強(qiáng)化學(xué)習(xí)協(xié)同工作。
DQN可以學(xué)習(xí)他們的創(chuàng)建者不知道的策略。
有了DQNs,我可以在和ai玩電子游戲時(shí)打敗我10歲的妹妹,那么下一步該怎么辦呢?
也許我會(huì)訓(xùn)練一個(gè)人工智能來(lái)說(shuō)服她把電視遙控器給我(這是一項(xiàng)更艱巨的任務(wù))。
在 Google Colab 查看我的DQN的所有代碼
訪問(wèn)我的個(gè)人網(wǎng)站
注冊(cè)我的每月通訊
感謝 Aadil A..
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
點(diǎn)擊【用深度Q網(wǎng)絡(luò)玩電子游戲】或長(zhǎng)按下方地址:
https://ai.yanxishe.com/page/TextTranslation/1512
AI研習(xí)社今日推薦:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
伯克利大學(xué) CS 294-112 《深度強(qiáng)化學(xué)習(xí)課程》為官方開源最新版本,由伯克利大學(xué)該門課程授課講師 Sergey Levine 授權(quán) AI 研習(xí)社翻譯。
加入小組免費(fèi)觀看視頻:https://ai.yanxishe.com/page/groupDetail/30
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。