當前位置:
首頁 > 新聞 > 用深度Q網路玩電子遊戲

用深度Q網路玩電子遊戲

本文為 AI 研習社編譯的技術博客,原標題 :

Beating Video Games with Deep-Q-Networks

作者 | Liam Hinzman

翻譯 | ceroo

校對 | 斯蒂芬?二狗子 審核 | 醬番梨 整理 | 立魚王

原文鏈接:

https://towardsdatascience.com/beating-video-games-with-deep-q-networks-7f73320b9592

我愛死玩電子遊戲了。

我每天都玩,然而,乒乓球我連10歲妹妹都打不贏。

蠻挫敗的,所以我決定建立一個深度Q網路,用這個網路學習如何在任一電子遊戲中打敗我的妹妹。

經過幾天的不間斷編程(夜不能寐),這就是我用Deep-Q-Networks所能達成的實踐:

用深度Q網路玩電子遊戲

打開今日頭條,查看更多圖片

偷偷看下我的DQN模型的結果(綠色球拍)

綠色球拍由DQN模型控制,完全靠它自我對弈 ,以此學習如何玩乒乓球。

隨後,我會詳細說說我的結果,但首先...

什麼是DQN(Deep-Q-Networks),它是如何工作的?

簡單說:DQN結合了深度學習和強化學習來學習如何玩電子遊戲,並超過人類水平。

用深度Q網路玩電子遊戲

DQNs結合強化學習和深度學習來玩視頻遊戲

你所需要知道的是,深度學習(理解DQN)是一種使用神經網路來模仿人類大腦工作的計算架構。其中,神經網路的輸入和輸出都是數字。神經網路可以學習像房價預測或識別腫瘤圖像等任務。

現在,我們繼續回到DQN這條主線...

快速學會強化學習

那麼什麼是強化學習呢?

強化學習是一種機器學習技術,它通過採取行動來學習如何最大化獎勵。

一條狗可能會嘗試學習,如何最大限度地通過它的吠叫來誘導主人撫摸它的肚皮,或一隻貓可能會嘗試學習,如何最大限度地通過它的跳躍「作」得一手好死。這兩種動物都是根據它們當前的狀態採取行動的智能體,試圖最大化某種獎勵。

讓我們更深入地了解這些術語對於一個「吃豆人」遊戲的含義。

用深度Q網路玩電子遊戲

PacMan(吃豆人)(黃色圓圈)是智能體,這是玩家在遊戲中控制的。狀態一般指是遊戲中的某個一個時刻,在這裡狀態是遊戲中的某一幀。智能體可以選擇進入哪個方向(操作),並使用這些操作來避免死於鬼魂(負獎勵)和吃更多的點(正獎勵)。PacMan的目標是最大化你的得分(獎勵)。

重要的強化學習術語

  • Agent 智能體:計算機控制的內容(pac man)

  • State 狀態:遊戲中的當前時刻(PacMan中的單幀圖像)

  • Action 行動:由代理人作出的決定(PAC人員向左或向右移動)

  • Reward 獎勵: 智能體試圖最大化的價值(在pac man中得分)

你還需要了解一件關於強化學習理解深層Q網路的事情:Q值

Q值,即深度Q網路中的Q值,是一個動作在給定狀態下的「質量」。如果一個行動具有高的預期長期價值,那麼它就是高質量的。

睡前給媽媽一個擁抱(動作)可能不會馬上給我「獎勵」,但從長遠來看,它會給我很多愛(獎勵),所以這個狀態動作對的Q值很高(我在心裡計算每晚擁抱媽媽的Q值)。

你需要知道這些強化學習的概念,並以此了解DQN!

深入深度Q網路

那麼,我是如何讓一台電腦學習如何比別人更好地玩電子遊戲的(並在乒乓球中擊敗我的妹妹)?

我使用DQN網路!

DQNs使用Q-learning學習給定狀態下要採取的最佳行動(q值),並使用卷積網路作為Q-learning的近似值函數。

以下是要記住的關鍵點:

深度學習+強化學習=深度Q網路(DQN)

而不是為屏幕上的每個像素組合記憶不同的Q值(有十億!)我們使用卷積網路在相似狀態下推理出類似的Q值。

卷積網路可以告訴玩電子遊戲的"Agent":「是的,這個位置基本上和另一個相同,向上移動」。這使得"Agent"的工作變得容易多了。它不需要數十億個不同遊戲狀態的Q值才能學會,只需要幾百萬個Q值來學習。

下面是我的DQN的卷積網路在代碼中的樣子:

用深度Q網路玩電子遊戲

下面是此代碼塊的作用:

  • 將當前屏幕(狀態)作為輸入

  • 通過3個卷積層傳遞輸入(用於在圖像中查找位置圖案)

  • 注意:不使用池化操作(空間位置在遊戲中很重要,我們想知道球在哪裡!)

  • 卷積層的輸出被送入2個全連接層。

  • 線性層的輸出則給出了DQN在當前狀態下採取某種行動的概率。

預處理

我也做了一些遊戲圖像的預處理。Atari遊戲通常是210x160像素大小,有128種不同的顏色。為了使我的DQN的工作更容易,我將圖像的採樣率降低到84x84,並使其灰度化。

用深度Q網路玩電子遊戲

預處理過圖像不再明亮和多彩,但更容易被我的DQN識別。

損失函數

現在我們需要一些方法來評估DQN。情況如何?它在學習什麼嗎?我們如何調整它使它更好,得到更高的分數?

要知道所有這些,我們需要一個損失函數。

唯一的問題是我們不知道最好的答案是什麼,agent應該做什麼。DQN如何學習才能比人類玩的更好,因此即使我們想模型達到這樣,我們也無法製作出完美的標記數據集。

相反,我們使用這個損失方程來評估DQN自身:

用深度Q網路玩電子遊戲

DQN的損失函數

這個Q網路Q-Network是給出要採取什麼行動的網路。目標網路Target Network是給出我們使用的「ground truth」的近似值。

如果Q-Network預測在某一狀態下的正確動作是以60%的確定性(概率)向上移動,而目標網路告訴我們「你應該向上移動」,我們將使用反向傳播調整Q-Network的參數,使其更可能預測在該狀態下的「向上移動」。

我們通過DQN反向傳播這種損失,並稍微調整Q網路的權重以減少損失。

該損失函數試圖使DQN輸出的移動概率更接近於目標網路給出的「正確選擇」,即接近100%確定性。

經驗回放

現在DQNs好像就是Q學習和卷積網路的結合,基本上可以這樣看。這個想法很簡單,為什麼它只在2015年被DeepMind研究人員引入?

神經網路不能很好地進行強化學習。

為什麼神經網路和強化學習不能融洽相處?

兩個原因

  • 高度相關數據

  • 非平穩分布

在有監督學習中,數據是不相關和固定的。當圖像分類器正在學習什麼使一隻貓成為一隻貓時,顯示給它的每個圖像都將顯著不同,數據是不相關的。此外,網路的預測(通常)不會影響下一步將看到的圖像,數據集是固定的,並且是從中隨機抽樣的。靜止的不相關數據與神經網路很好地配合。

在強化學習中,數據是高度相關和非平穩的。當pac man移到右邊時,板看起來基本相同,數據高度相關。此外,網路的決定影響下一個狀態,這使得數據分布非平穩。如果馬里奧右移,他會看到新的硬幣。這些硬幣會讓馬里奧認為向右移動總是個好主意,也許他永遠不會發現他左邊的秘密通道。

經驗回放Experience Replay讓神經網路能很好地進行強化學習。

『Agent』獲得的每個經驗(包括當前狀態、動作、獎勵和下一個狀態)都存儲在所謂的經驗回放內存中。

這種訓練方式與DQN網路在當前學習中所獲得樣本來訓練不同,是從重放存儲器中隨機抽取「回放」來訓練網路。

用深度Q網路玩電子遊戲

經驗回放讓深度學習和強化學習成為兄弟。

與標準Q學習相比,經驗回放有三個優勢:

  • 更高數據利用

  • 使數據不相關

  • 平均數據分布

首先,每個經驗都可能被用於對DQN的神經網路進行多次訓練,從而提高數據效率。

第二,隨機抽取經驗樣本對DQN神經網路進行訓練,打破了經驗之間的相關性,減少了訓練更新時的方差。

第三,當從經驗中學習時,一旦獲得經驗(稱為策略學習),當前參數就決定了參數所訓練的下一個數據樣本。例如,如果最好的行動是將Pac Man向左移動,那麼訓練樣本將由來自經驗池中向左運動相關樣本為主。

這種行為可能會導致DQN陷入糟糕的局部最小值,甚至使其發生災難性的偏離(比我更糟糕)。

用深度Q網路玩電子遊戲

如果你不使用經驗回放,模型會經常看到這個畫面。

通過使用經驗回放,用來訓練DQN的經驗來自許多不同的時間點。這樣可以消除學習障礙,避免災難性的失敗。

這種簡單的經驗概念解決了神經網路在強化學習中的問題。現在他們可以融洽相處地一起玩了!

擊敗電子遊戲

我在pytorch創建了一個DQN,並訓練它玩乒乓球。

起初,我的DQN只能隨意地玩乒乓球,但經過3個小時的訓練,它學會了如何比人類玩得更好!

綠色槳是由我的超級棒DQN控制的

最瘋狂的事情是我不需要更改一行代碼就可以訓練DQN來玩另一個遊戲,並且,就可以在該遊戲中到達超過人類的遊戲水平。

這意味著,同樣的演算法,教計算機控制這個綠色的乒乓球拍,也可以教計算機如何在毀滅戰士中射擊惡魔。

用深度Q網路玩電子遊戲

DQN最酷的一點是他們可以學習我甚至不知道的遊戲策略。在款遊戲beakout中,DQN學會怎麼樣繞過邊路快速到達頂部,並獲得大量的積分。

我創造了這個DQN,它學到了我甚至不知道的東西!

用深度Q網路玩電子遊戲

DQN可以發現其創建者從未知道的策略!

這意味著計算機現在可以幫助我們學習最喜愛的電子遊戲的新策略。也許DQNS會想辦法在《超級馬里奧兄弟》中快速到達World 9關卡。

關鍵的收穫
  • 使用DQNs電腦可以學習如何比人類更好地玩電子遊戲。

  • 在DQNs中,經驗回放讓神經網路和強化學習協同工作。

  • DQN可以學習他們的創建者不知道的策略。

有了DQNs,我可以在和ai玩電子遊戲時打敗我10歲的妹妹,那麼下一步該怎麼辦呢?

也許我會訓練一個人工智慧來說服她把電視遙控器給我(這是一項更艱巨的任務)。

最後
  • 在 Google Colab查看我的DQN的所有代碼

  • 訪問我的個人網站

  • 註冊我的每月通訊

感謝 Aadil A..

想要繼續查看該篇文章相關鏈接和參考文獻?

點擊【用深度Q網路玩電子遊戲】或長按下方地址:

https://ai.yanxishe.com/page/TextTranslation/1512

AI研習社今日推薦:雷鋒網雷鋒網雷鋒網

伯克利大學 CS 294-112 《深度強化學習課程》為官方開源最新版本,由伯克利大學該門課程授課講師 Sergey Levine 授權 AI 研習社翻譯。

加入小組免費觀看視頻:https://ai.yanxishe.com/page/groupDetail/30

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Guided Anchoring: 物體檢測器也能自己學 Anchor
拿下寶馬中國量產訂單的四維圖新,如何在自動駕駛地圖領域內外兼修?

TAG:雷鋒網 |