DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

更多精彩內容請關注AI科技大本營(微信號:rgznai100)

一篇頂十篇!想入門強化學習,專心研讀這篇對DeepMind經典論文的解析就夠了

作者 | Aman Agarwal

編譯 | Shawn

編輯 | 鴿子、焦燕

DeepMind到底是如何教AI玩遊戲的?這篇在Medium上獲得1700個讚的文章,把裡面的原理講清楚了。

谷歌的DeepMind是世界一流的AI研究團隊,其研發的AlphaGo在2016年備受矚目的人機大戰中擊敗了韓國圍棋冠軍李世石(Lee Sedol),一戰成名。AlphaGo背後的關鍵技術就是深度強化學習(Deep Reinforcement Learning)。

這篇論文講了些什麼?

這得從4年前說起。

彼時,DeepMind開發了一個AI程序,它能玩Atari公司70年代推出的一系列遊戲,如Breakout(打磚塊)、彈球遊戲《Pong》和《太空入侵者》(Space Invaders)。正是由於這項研究,谷歌收購了DeepMind,同時它也奠定了AlphaGo的基礎。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

《太空入侵者》

今天我們將逐段解析原研究論文《Playing Atari with Deep Reinforcement Learning》,便於剛開始接觸強化學習的讀者理解。

本文作者是誰?

本文作者有兩個人:我(自動駕駛汽車工程師),Qiang Lu(丹佛大學博士生兼研究員)

如果您計劃自學,我們希望我們的文章能幫您節省很多時間和精力。同時我們希望您:可以評論本文中的任何語句,指出錯誤,歡迎賜教!

我還要感謝Tambet,他在Intel Nervana上發表了一篇文章(https://www.intelnervana.com/demystifying-deep-reinforcement-learning/),其中涉及到了我們這篇文章中的多個強化學習理論。搭配本文學習,效果更佳!(抱歉,我在本文中頻繁換用“你”、“我”和“他們”,這是我的行文習慣)

文章格式:先給出原論文某一段的快照,然後翻譯這段論文,此後在下面對這段論文做出詳細解釋。注意:論文編譯為棕色字體,解析為黑色字體。

好了,開始吧。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

摘要

我們提出了首個可以成功利用強化學習直接從高維感官輸入中學習控制策略的深度學習模型。該模型是一種用 Q-learning的變體算法訓練的卷積神經網絡,其輸入是原始像素,輸出是預估未來獎勵(rewards)的價值函數。我們將該方法應用到Arcade模擬器中的7款Atari(雅達利)2600遊戲上,沒有對架構或算法做任何調整。最終,在6款遊戲中,我們的方法完勝之前的所有方法,並且在其中3款遊戲中戰勝了一名人類遊戲專家。

我們的目的是利用深度學習讓機器人學習如何玩Atari遊戲。

這裡所說的機器人實際上指的是卷積神經網絡。它和真正的端對端深度學習差不多,因為卷積網絡獲取輸入的方式和人類遊戲玩家相同——直接觀察屏幕上的圖像,每移動一下就會獎勵或改變分數。而網絡作出決策時需要的就是這些信息。

那捲積神經網絡輸出的是什麼?

理論上,我們想讓網絡選擇其認為之後能得到最多獎勵的動作。但是我們並沒有這樣做,而是讓它給18個可能的遊戲手柄動作分配“分值”。簡單來說,就是“分值V對應動作A”,即神經網絡預估如果執行動作A,未來就會得到分值V。因此這個神經網絡本質上是一個價值函數,它將屏幕狀態和獎勵變化作為輸入,輸出每種可能動作所對應的分值。這樣,你就可以選擇分值最高的動作,或者根據編程全面玩家(overall player)的方式選擇任何動作。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

1 引言

從視覺和語音這樣的高維感官輸入中直接學習如何控制代理(操作的對象,agent)是強化學習(RL)的一項長期挑戰。在相關領域中,大多數成功的RL應用都依賴於人工生成特徵以及線性價值函數或策略表示(policy representations)的。顯然,此類系統的性能很大程度上依賴於特徵表示的質量。

如何讓神經網絡理解屏幕上游戲中的圖像?一種方法是直接將圖像輸入到神經網絡中,不對其作任何處理;另一種方法是,將屏幕上的圖像總結為數字形式的信息,輸入到神經網絡。本論文將第一種方法稱為“高維感官輸入”,將第二種方法稱為“人工生成的特徵表示”。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

深度學習的最新進展使得從原始感官數據中提取高級特徵成為可能,得益於此,計算機視覺[11,22,22]和語音識別[6,7]研究也實現了很多突破。這些研究使用了卷積網絡、多層感知器(multilayer perceptrons)、受限玻爾茲曼機(RBM,restricted Boltzmann machines)和循環神經網絡等一系列神經網絡架構,而且監督學習和無監督學習都有用到。說到這,我們就自然而然想到了這樣一個問題:類似的技術能否用來解決強化學習中的感官數據問題?

閱讀摘要後,就可以輕鬆理解本段。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

然而,從深度學習的角度來看,強化學習會遇到以下幾個挑戰:

  • 首先,目前大多數成功的深度學習應用都要求具備大量的手動標註的訓練數據;而且,強化學習算法還必須能成功學習大量稀疏、嘈雜且延遲的標量獎勵信號(scalar reward signal)。動作和對應的獎勵之間的延遲可達數千個時間步長。與監督學習中輸入與結果之間的直接關聯(direct association)相比,這樣的延遲尤顯嚴重。

  • 另一個問題是,大部分深度學習算法都假定數據樣本是獨立的,而強化學習中通常都是關聯度很高的序列樣本。

  • 此外在RL中,隨著算法學習新行為,數據分佈會發生改變;而深度學習則假設潛在分佈是固定的。

在強化學習中,深度學習(DL)方法不像在監督/無監督學習中那麼好用。大多數DL應用要求有大量的帶有準確樣本和標籤的訓練數據集。在無監督學習中,目標成本函數仍然很好用。

但是在RL中,你會遇到這樣的問題:

  • 獎勵可能會延遲很多時間步長(例如在國際象棋中,要走很多步才能吃掉對方的皇后,其他每一步都不能像最後一步那樣即時得到反饋獎勵,而有些步數可能比最後一步還要重要)。

  • 獎勵機制可能很混雜——例如,某一動作對應的分數有時是隨機分配的,預測起來很難!

  • 在DL中,我們常常假設輸入樣本之間沒有關聯性。例如,在圖像識別網絡中,訓練數據往往包含大量的隨機組織的無關聯圖像。但是在學習如何玩遊戲時,動作策略的制定不僅取決於畫面的當前狀態,而且還要考慮先前的狀態和動作。所以,我們不能輕易地假設樣本之間互不關聯。

為什麼訓練數據樣本要互不關聯呢?假設你有5個動物圖像樣本,你想讓網絡學習將它們歸為“貓”和“不是貓”這兩個類別。如果其中一張圖像中有貓,這會影響另一張圖像歸為“貓”類別的概率嗎?並不會。但是在視頻遊戲中,上一幀畫面必然與下一幀相關。如果激光束摧毀飛船需要10幀畫面,我敢肯定你從第9幀就可以預測到第10幀的結果。在進行學習時,你不應將間隔只有幾毫秒的兩幀看作為互不相關,因為這兩幀明顯都攜帶與對方相關的重要信息。它們都是相同“事實”(激光束射擊你的飛船)的組成部分。

而且訓練數據本身會隨著神經網絡學習新策略而發生變化,這就使得網絡更難用訓練。

什麼意思呢?比如,你是一個國際象棋新手。你第一次玩國際象棋時使用的是一些初級的策略,比如向前移動棋子,一逮住機會就吃掉對方的兵。當你繼續學習這些行為併為吃掉對方的兵感到高興時,這些走法就相當於你當前的訓練集。但是,當有一天你嘗試使用一種不同的策略(比如犧牲一個象來救自己的皇后,並吃掉對方的車)時,你會突然發現這個新策略太了不起了,於是便將這個新策略添加到你的訓練集中。如果你只是一直練習使用剛開始學習時的初級策略,那麼你就永遠學不到這個新策略。

不穩定數據分佈就是這樣形成的,而這種變化通常不會發生在監督/無監督學習中。

面對這些挑戰,如何訓練神經網絡?

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

這篇論文論證了卷積神經網絡可以克服這些挑戰,在複雜的RL環境中從原始視頻數據學習成功的控制策略。我們用Q-learning 的變種算法訓練神經網絡,並利用隨機梯度下降法更新權重。為了緩解關聯數據與不穩定分佈帶來的問題,我們使用了一種經驗回放機制(experience replay mechanism),這個機制可以隨機採樣之前的轉換,因此可以通過大量的歷史行為平緩訓練數據分佈。

在本文中,我們闡述瞭如何解決上述問題,直接使用原始視頻/圖像數據。

這裡需要說明一個機制——“經驗回放機制”,它可以解決“數據關聯”以及“不穩定數據分配”(具體解釋請參看前文)的問題。

我們記錄了所有經驗——好比在圍棋中,每個經驗就像是[當前棋位,移動棋子,獲得獎勵,新的棋位] ,這些都儲存在記憶中。訓練時,我們選取隨機分佈且互不關聯的經驗集。在每個經驗集(batch)中,不同的經驗也可能與不同的策略相關聯,因為先前所有的經驗和策略現在都混為了一體!這不僅會使訓練數據樣本變得更加隨機和關聯性更弱,還會使神經網絡的訓練數據分佈更加穩定,因為每個新的經驗集已經包含了大量的隨機策略經驗。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

我們將此方法應用到通過ALE(街機遊戲模擬器,Arcade Learning Envi-ronment)實現的一系列Atari 2600遊戲中。Atari 2600是一個極富挑戰的RL測試平臺,擁有高分辨率(210×160 RGB,60Hz)視頻輸入的代理(agent),以及各種有趣的遊戲任務,專為人類玩家設計,具有較高的難度。我們的目標是在不提供任何遊戲信息、人工設計的視覺特徵,以及關於模擬器內部狀態的信息的情況下,創建一個神經網絡代理,使其能學習玩儘可能多的遊戲;它只能學習視頻輸入、遊戲獎勵和終端信號,並像人類玩家一樣學習一系列可能的動作。此外,該神經網絡的架構和用於訓練的所有超參數在所有遊戲中都保持不變。

截至目前(2013年),這個神經網絡已經在7款遊戲中的6款上完勝此前所有的RL算法,並且在3款遊戲中超越了人類遊戲專家的水平。圖1展示了用於訓練的5款遊戲的截屏。

本段大部分內容很容易理解,重點是所有遊戲中的神經網絡架構和超參數(學習率等)完全相同。我們並沒有在《太空入侵者》中使用較大的神經網絡,在《乒乓球遊戲》(ping-pong)中則使用較小的網絡。在每個新遊戲中,我們都從零開始訓練神經網絡,而且神經網絡的架構都是相同的。這很了不起,不是嗎?

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

2 背景

在我們選取的任務中,代理通過一系列的動作、觀察和獎勵與環境(在本研究中為Atari模擬器)進行交互。在每一個時間步長中,代理從一組合理的遊戲動作中選一個動作A = {1, ... , K},再將這個動作傳到模擬器,改變模擬器內部狀態和遊戲得分。通常情況下,ε是隨機的。代理無法觀察到模擬器的內部狀態,但它可以從模擬器中觀察到

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

表示當前畫面的原始像素的一個向量。另外,代理還會收到表示遊戲得分變化的獎勵。

注意,通常遊戲得分可能取決於先前一系列的動作和觀察; 某一動作的反饋可能經過數千個時間步長才能收到。

前幾句很容易理解。“ε是隨機的”的意思是說環境不一定都是可以預測的(遊戲中哪有不變的真理?什麼事都有可能隨時發生)。

這裡重複強調了神經網絡不會獲得任何關於遊戲內部狀態的信息。比如,我們不會讓神經網絡學習“這個位置會有一個怪獸朝你射擊並向某一方向移動,你的飛船會在這裡出現並移動到那裡”等,我們只是輸入圖像,讓卷積神經網絡自己確定怪獸在哪兒,玩家在哪兒,誰在朝哪兒射擊等等。這就是所謂的像訓練人類一樣訓練神經網絡。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

由於代理僅觀察當前畫面中的圖像,所有無法全面觀察到任務。而且,在感知上,許多仿真器狀態在感官上都是混疊的,也就是說,不可能僅根據當前畫面就完全瞭解當前的情況。 因此,我們還要考慮動作、觀察序列

並學習基於這些序列的遊戲策略。假設模擬器中的所有序列都在有限的時間步長上終止。 這種形式化表達會生成一個龐大卻有限的馬爾可夫決策過程(Markov Decision Process,MDP),其中每個序列都是一個不同的狀態。因此,我們可以將完整的序列

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

作為t時刻的狀態表示,在馬爾科夫決策過程中使用標準的強化學習方法。

感知混疊:指的是兩種不同的狀態或位置在感知上被視為相同。比如,在一棟建築中,如果只借助視覺信息,幾乎不可能確定某一位置,因為所有走廊可能看起來都相同。感知混疊就是這樣一個問題。

在Atari遊戲中,每毫秒的遊戲狀態不會發生多大變化,人類也無法在毫秒內做出決策。因此當輸入每秒60幀的視頻時,我們將每幀看作一個單獨的狀態,訓練數據中的大部分狀態看起來幾乎都一樣!因此,我們選擇隔幾幀(比如至少4到5幀)觀察一下“狀態”。我們將之稱為連續幀序列,並將一個序列作為一個狀態。此外,當人類玩家移動遊戲手柄時,數毫秒內遊戲手柄通常都保持不動,這會包含到狀態中。

每一幀都會持續執行相同的動作。每個序列(包括數幀和各幀之間相同的動作)都是一個單獨的狀態,而且這個狀態仍然適用於馬爾可夫決策過程(MDP)。

如果你研究過RL,你就會知道MDP是什麼以及它們的作用有哪些!MDP是RL中的核心假設。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

代理的目標是通過以最大化未來獎勵的方式選擇動作,與模擬器進行交互。我們做出標準假設:懲罰(懲罰因子γ)每個時間步長的未來獎勵,並將時間t的懲罰後的未來獎勵定義為

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

其中T是遊戲終止的時間步長。我們將最優動作值函數

定義為通過遵循任何策略可實現的最大預期獎勵,在觀察到某序列s後採取某種行動a後,

其中π是將序列映射到動作(或動作分佈)上的策略。

要想理解這部分內容,你首先要有一些強化學習和Q-Learning算法的背景知識。你應該理解貝爾曼方程(Bellman equation)的作用、什麼是懲罰後的未來獎勵等。我在這裡會給出一個非常簡單的Q-Learning算法說明。

上文中我們提到了“價值函數”,不記得的話再重新閱讀一下摘要。

現在假設你有一個這樣的表格,表格的行代表所有可能的遊戲狀態,列代表所有可能的遊戲手柄動作。每個單元格代表如果你執行某一動作而且在之後的遊戲中發揮了最佳水平的話所能獲得的最大未來總獎勵。這意味著你現在有一張“作弊紙條”,它會告訴你在任何狀態中執行某一動作會產生什麼結果!這些單元的分值被稱為Q-star值(Q*(s,a)):對於狀態s,如果執行動作a,表格就會給出最大未來分值Q*(s,a)。

在最後一行中,π代表“策略”。策略是指在某一狀態中選擇執行哪種動作的決策方法。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

最優動作值函數遵循一個名為貝爾曼方程的重要函數。 這是基於以下直覺:如果下一個時間步長的序列

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

的最優值

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

對所有可能的動作

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

都是已知的,則最優策略是選擇最大化

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

預期值的動作

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

(1)

假設你處在狀態S1,你從表格(第3段有解釋)中獲知了所有可能動作的Q*值,然後選擇了A1,因為A1的Q*值最高。你得到一個獎勵R1,遊戲進入到另一個不同的狀態S2。在S2中,(例如)選擇表中的A2,就會獲得最大未來獎勵。

現在,初始Q*值——Q*(S1,A1)就是你從此狀態起發揮最佳遊戲水平所能得到的最大分值,這意味著Q*(S1, A1)應該等於獎勵R1與下一狀態的最大未來獎勵Q*(S2,A2)之和!我們的目的是減小下一狀態的影響,因此我們將Q*(S2,A2)乘以γ(0到1之間),這就是所謂的懲罰(discount)Q*(S2,A2)。

因此 Q*(S1,A1) = R1 + [γx Q*(S2,A2)]

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

許多強化學習算法背後的基本思想都是通過將貝爾曼方程作為迭代更新來估計動作值函數的

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

這種價值迭代算法可以收斂為最優動作值函數,即

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

。實際上,這種方法是完全不切實際的,因為每個序列的動作值函數都是分別估計的,沒有任何通用性。相反,我們常使用函數逼近器來估計動作值函數

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

強化學習中經常使用的都是線性函數近似器,但是有時也會使用非線性函數近似器,如神經網絡。我們將權重為θ的神經網絡函數近似器稱為Q網絡。我們可以通過最小化在每次迭代i改變的一系列損失函數

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

來訓練Q網絡,

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

(2)

其中

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

是迭代i的目標,

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

是序列s和動作a的概率分佈,我們將之稱為行為分佈。當優化損失函數

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

時,前一迭代

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

的參數保持不變。

注意,目標取決於網絡權重; 這與用於監督學習的目標形成對比,這些目標在學習開始之前就保持不變。

對關於權重的損失函數進行差分,我們可以得到以下梯度

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

(3)

我承認讀了我的解釋後你也許仍會發現這部分很難理解。在這裡多花些時間。

再捋一遍之前的方程。

我們假設“已知”任何狀態以及任何未來動作的價值函數,並能藉助函數選出當前狀態的最優動作(通過對所有可能的Q值進行迭代,我們可以真正地預測未來)。但實際上,這樣的Q函數根本不存在!我們能做的最多是使用另一函數來“近似”Q函數,並通過重複測試該近似函數來一點一點對它進行更新。這個近似函數可以是簡單的線性多項式,也可以是非線性函數。因此我們選擇一個神經網絡作為我們的“近似Q函數”。現在你應該明白我們為什麼要研讀這篇論文了吧。DeepMind先使用神經網絡近似Q函數,然後再借助該網絡預測最優動作,從而讓計算機學習玩ATARI遊戲。學習一定時間後,計算機會更好地理解獎勵的運作機制,而且還會自行調整神經網絡(通過調整權重),這樣網絡就會越來越遠接近“真實的”Q函數!當達到足夠好的近似程度時,我們發現該網絡的預測能力竟然能超越人類。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

通常我們選擇通過隨機梯度下降法來優化損失函數(這樣計算起來更快捷),而不是計算上述梯度的完整期望值。如果在每個時間步長後更新權重,分別用行為分佈ρ和模擬器 ε 中 的單個樣本替換期望,我們就會得到熟悉的Q-Learning算法[26]。

注意,該算法是無模型的:它直接使用來自仿真器 ε 的樣本來解決強化學習任務,並未特別構建 ε 的模型。該算法也是離策略性的:它學習極大值策略

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

,同時遵循能夠確保充分探索狀態空間的行為分佈。在實踐中,行為分佈通常是通過 ε 極大值(ε-greedy)策略來選擇的,該策略遵循以概率為 1- ε 的極值策略,並選擇概率為 ε 的隨機動作。

現在先不管上面的一團數學推導(對我來說也很難!)。已知Q-learning算法是一種“無模型 ”算法。“無模型”的強化學習指的是代理不需要特別學習遊戲的規則或物理學。在基於模型的強化學習中,常常需要根據用來計算下一狀態的“轉換矩陣”(給定某一當前狀態和動作)以及用於計算獎勵的“獎勵函數”(給定某一當前狀態和動作),來定義這些規則和物理學(physics)。

在本研究中,這兩個元素因太過複雜而難以計算。仔細想想,我們並不需要它們!在這個“無模型”的方法中,我們只需要通過測試和試驗來學習Q值函數,因為我們假設優秀的Q值函數本來就會遵循遊戲的規則和物理學。

我們所用的方法是混合的。這樣方法的差異頗為微妙,因為既有策略性的也有離策略性的。

假設處於狀態s,需要從幾個動作中選擇一個動作。我們已知一個Q值函數的近似函數,我們計算了其中每個動作的近似Q值。當選擇動作時,我們有兩種選擇方法。其中的“greedy”方法是選擇Q值最大的動作,這是一種“極大值”策略,始終根據對遊戲的現有理解來選擇當前最有利的動作。但是開始時你並不知道Q值函數的近似函數,即使有一個好的策略,你仍然會想讓AI檢查其他可能的策略並預測各策略的結果。

這就是為什麼“極大值”策略並不一定有效的原因。當進行學習時,你不會只想一直嘗試你認為會有效的方法,你還會想嘗試其他可能有效的方法,而且這樣做還可以獲得經驗。

這就是策略性(極大值)和離策略性(非極大值)之間的差異。

為什麼說我們使用的方法是混合的呢?因為我們會根據網絡學到了多少,來換著使用方法。我們依據代理會選擇哪個最優動作來改變概率。

這是怎麼做到的?我們將概率設為(1-e)來選擇最優動作,其中e為代表選擇隨機性的變量。因此,e=1代表選擇是完全隨機的,而e=0則表示始終選擇最優動作。

首先,當網絡剛開始學習時,我們將e值設定為非常接近1 ,因為我們想讓AI系統探索儘可能多的策略。隨著時間的推移,AI系統學會越來越多的策略,我們再將e值縮小到趨近於0,這樣該AI系統就會停留在某一策略上。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

3.相關工作

最著名的增強學習案例也許就是TD-gammon,這是一個完全通過強化學習和自我遊戲學習的西洋雙陸棋遊戲程序,它的遊戲水平超越了人類[24]。TD-gammon使用的是一種類似於Q-learning的無模型強化學習算法,它用帶有一個隱藏層的多層感知器來近似價值函數。

Qiang:西洋雙陸棋遊戲是最受科學家喜愛的遊戲,他們常常用這個遊戲來測試他們的人工智能系統和機器學習算法。參考[24]使用的是一種無模型算法,這種算法的遊戲水平超越了人類。無模型意味著算法的輸入(屏幕上的圖像)和輸出(發現的最佳遊戲策略)之間沒有明顯的等式關係。

Q-learning中的“Q”代表“質量(quality)”。當我們在某一狀態中執行某一動作時,我們會使用Q函數來表示懲罰後的最大未來獎勵。從這個狀態起,之後的狀態都始終執行最優策略(遊戲策略)。

參考[24]中的方法的不同之處在於:他們用多層感知器(multi-layer perceptron ,MLP)來近似Q值函數。在他們用的MLP中,輸入層和輸出層之間包含有一個隱含層。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

早期研究人員在TD-gammon的基礎上進行了很多研究,包括將相同的方法應用於國際象棋、圍棋和跳棋,但是都沒有取得多大的成果。這使得人們廣泛認為TD-gammon方法只在西洋雙陸棋上有效;也許是因為骰子投擲的隨機性有助於神經網絡探索狀態空間,而且還能使價值功能特別平滑[19]。

Qiang:類似的方法無法成功地應用於其他遊戲,這使得人們不信任TD-gammon方法,他們將該方法在西洋雙陸棋上的成功歸因於骰子投擲隨機性。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

此外,試驗結果表明,無模型強化學習算法(如Q-learning算法)與非線性函數的近似函數[25],或者與離策略學習[1]結合可能會導致Q神經網絡出現發散。因此,強化學習的大多數研究都集中在收斂性更好的線性函數近似函數上 [25]。

回顧前面幾段,我們可以看出哪種函數可以用來近似理論上完美的Q值函數。顯然,線性函數比非線性函數適合。

拿神經網絡來說,線性函數可以使神經網絡更易於收斂(可以神經網絡調整權重的方式更加準確,而不是變得更加隨機)。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

最近,人們開始重新將目光投向深度學習與強化學習的結合上。他們利用深層神經網絡估計環境 ε,用受限玻爾茲曼機器估計價值函數[21]或策略[9]。此外,Q-learning算法的發散問題也已經藉助梯度時序差分學習法(gradient temporal-difference methods)得到部分解決。當使用非線性函數的近似函數來評價固定策略時;或者藉助Q-learning算法的受限變體來通過線性函數近似函數學習控制策略時[15],試驗證明這些方法都是收斂的[14]。但是,這些方法還未擴展到非線性控制函數。

Qiang:最近,研究人員又開始研究深度學習和強化學習的結合。他們使用深度學習算法估計環境、價值函數和策略。同時,又用梯度時序差分學習法部分解決了發散問題。但是正如論文所述,這些方法只能適用於非線性函數的近似函數,不能直接應用於非線性函數。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

先前研究中與我們的方法最相似的是神經擬合Q學習(NFQ)[20]。NFQ使用RPROP算法來更新Q網絡中的參數,優化等式2——

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

中的損失函數序列。

但是,它使用的是批量更新,每次迭代的計算成本與數據集的大小成比例;而我們使用的是隨機梯度更新,每次迭代的固定成本較低,並且更新可擴展到大數據集中。NFQ也已成功應用於使用純視覺輸入的簡單控制任務中[12]。在此類任務中,首先使用深度自編碼器學習任務的低維表示,然後將NFQ應用於該表示[12]。而我們的方法是,從視覺輸入端開始直接以端到端方式應用強化學習。因此,它可以學習到與辨別動作值直接相關的特徵。研究人員之前曾將 Q-learning算法與經驗回放和簡單的神經網絡相結合[13],但是網絡先學習的是低維狀態,而不是原始的視覺輸入。

Qiang:NFQ與本論文中的方法最為類似。NFQ的主要原理是使用RPROP(彈性反向傳播算法)更新Q網絡的參數,優化等式2中的損失函數序列。而它的弊端則在於:由於NFQ使用的是批量更新,所以其計算成本與數據集大小成比例。本論文使用的是隨機梯度更新法,這種方法在計算上更加高效。NFQ只能應用於簡單的任務,不能應用於視覺輸入,而本論文的算法可以進行端對端的學習。另一篇關於Q-learning算法的論文也使用的是低維狀態,而不是原始的視覺輸入;本論文克服了這個缺點。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

[3]提出將Atari 2600模擬器作為強化學習平臺,論文作者通過線性函數的近似函數以及通用視覺特徵應用了標準強化學習算法。然後,使用更多的特徵來改進結果,並用tug-of-war 散列法(hashing)來將特徵隨機映射到低維空間中[2]。 HyperNEAT進化架構[8]也被應用於Atari平臺,用來(分別針對每款不同的遊戲)形成一個表示遊戲策略的神經網絡。 當用模擬器的重置機制來與確定性序列做反覆對抗訓練時,我們發現這些策略可以利用幾款Atari遊戲中的設計缺陷。

Qiang:本段提出了Atari 2600模擬器的幾種應用。在第一篇論文中,Atari 2600模擬器作為強化學習平臺,作者藉助線性函數的近似函數以及通用視覺特徵應用了標準強化學習算法;使用更多特徵並將特徵映射到低維空間中,以改進結果;然後再利用HyperNEAT進化架構分別為每款遊戲形成一個神經網絡。這個神經網絡可表示遊戲策略,並且經過訓練後還可以利用某些遊戲中的某些設計缺陷。但是如該論文所述,此算法無需調整網絡架構,就可以學習7款Atari 2600遊戲的策略。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

4 深度強化學習

計算機視覺和語音識別領域最近取得的一些突破,靠的就是可以在大型訓練集上高效地訓練深度神經網絡。 其中最成功的方法是通過使用基於隨機梯度下降的輕量級更新,直接用原始輸入進行訓練。向深度神經網絡輸入足夠多的數據,這樣常常可以學習到比人工生成的特徵更好的表徵[11]。

這些成功案例為我們的強化學習方法提供了啟發。我們的目標是將強化學習算法與深度神經網絡對接起來,這裡所說的神經網絡可以直接學習RGB圖像,並通過使用隨機梯度更新來有效地處理訓練數據。

很容易理解吧?

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

Tesauro的TD-Gammon架構為這種方法提供了一個起點。該架構利用算法與環境的直接交互(或通過自玩,西洋雙陸棋)產生的策略性經驗樣本

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

,對價值函數估計網絡的參數進行更新。由於該算法在20年前能超越了水平最高的人類西洋雙陸棋玩家,所以我們想知道,二十年的硬件改進以及現代深度神經網絡架構和可擴展RL算法是否能讓強化學習實現重大進展。

TD Gammon是一種策略性方法,它直接使用經驗(s1, a1, r1, s2)訓練網絡(無經驗回放機制等)。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

不同於TD-Gammon和類似的在線方法,我們使用了一種叫做“經驗回放”的方法[13]:將代理在每個時間步長

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

上的經驗儲存在數據集

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

中,將許多episode彙集成回放記憶。在算法進行內部循環時,我們將Q-learning算法更新或小批量更新應用於經驗樣本e〜D,這些樣本是從存儲樣本池中隨機抽取的。 執行經驗回放後,代理根據 ε 在完成經驗回放後,代理會根據最大值策略選擇並執行某一項動作。 由於用任意長度的歷史表徵作為神經網絡的輸入較難實現,所以我們的Q函數使用的是函數φ生成的固定長度的歷史表徵。 算法1給出了完整的算法,我們將之稱為深度Q-learning算法。

本段闡述的是對TD Gammon作出的某些改進。第一個改進是經驗回放,上文有說明。函數φ的作用是預處理圖像等,因此我們將遊戲的狀態儲存為最終預處理後的形式(下一部分會作進一步解釋)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

相比標準的在線Q-learning算法,這種方法具有以下幾個優點[23]。

首先,每一時間步長上的經驗都可用於多個權重更新,這樣可以提高數據效率。

其次,由於樣本之間存在很強的相關性,直接學習連續樣本效率很低;隨機化樣本會破壞這些相關性,減少更新的方差。

第三,當學習策略時,當前的參數確定用於訓練參數的下一數據樣本。例如,如果最大化動作是向左移動,訓練樣本將由左側的樣本主導;如果最大化動作切換到右邊,訓練數據分佈也會切換到右邊。很容易看出,這樣可能會產生不必要的反饋循環,並且參數也可能會被困在局部最小值,甚至發生嚴重的發散[25]。通過使用經驗回放,在先前狀態下的行為分佈就會得到變得均勻,這樣學習過程就會變得平緩化,並參數也不會出現振盪或發散。

請注意,當藉助經驗回放機制學習時,一定要學習離策略算法(因為我們當前的參數與用於生成樣本的參數不同),這啟發了我們選擇Q-learning算法。

使用經驗回放法有幾個實際的優勢(本段在下一頁繼續)。

第一,和常規的深度學習一樣,每個數據樣本都可重新使用多次,用以更新權重。在進行訓練時,同一經驗我們也可以使用多次,這是對數據的高效利用。

第二個和第三個優勢非常相關。因為每個狀態都與其之後的下一狀態密切相關(玩視頻遊戲時也是一樣),用連續狀態訓練權重會導致程序只遵循一種遊戲玩法。根據Q函數預測一個動作,執行這個動作,然後更新權重,這樣下次你就很可能會向左移動。如果打破這個模式,從先前的經驗中隨機抽取樣本,就可以避免這些不必要的反饋循環。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

在實際當中,我們的算法僅在回放記憶(replay memory)中存儲最後N個經驗元組(tuples),並且在執行更新時均勻地從D中隨機採樣。 這種方法在某些方面有一定侷限,因為存儲緩衝器(memory buffer)並不區分重要的轉移(transitions);而且由於存儲容量N有限,存儲緩衝器總是用最新的轉移重寫記憶。同樣,均勻採樣使得回放記憶中的所有轉移具有相等的重要性。 更復雜的抽樣策略可能會強調可以提供最多信息的轉換,類似於優先掃除(Prioritized Sweeping) [17]。

從經驗回放中收取簡單樣本固然是種好方法,但是有時你會想讓代理學習遊戲中的某一重要的轉換。這就是該論文當前方法的一個侷限。相關建議是:在使用經驗回放時,選擇概率更大的重要轉移,或者採取其他類似操作。

(下文的所有內容都是基於前文中闡述的理論,很大一部分內容都是技術細節)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

4.1預處理和模型體系結構

直接使用原始的Atari框架(128色調色板的210×160像素圖像)可能在計算上要求很高,所以我們應用了一個基本的預處理步驟來減少輸入維數。進行預處理時,首先將原始幀的RGB表示轉換成灰度(gray-scale),並將其下采樣(down-sampling)成110×84圖像。通過從圖像上裁剪一個可以大致捕獲到遊戲區域的的84×84畫面,獲得最終的輸入表徵。 然後進行最後的裁剪,因為我們使用的是[11]的2D卷積GPU實現,需要方形的輸入圖像。在該論文的實驗中,算法1的函數φ將該預處理過程應用於歷史記憶的最後4幀,並將它們疊加(stack)以生成Q函數的輸入。

本段大部分內容很容易理解。狀態S經過預處理後包含4個不同的幀,然後通過預處理將它們轉換為灰度,調整尺寸並裁剪為84x84的方形圖像。我的觀點是,由於遊戲每秒運行24多幀,人類的反應速度根本無法保證能在每一幀中都執行一個動作,因此合理的方法是在相同的狀態中一次考慮4個連續的幀。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

用神經網絡參數化Q函數的方法有好幾種。 由於Q函數可以將歷史動作對映射到其Q值的標量估計上,所以先前的一些的方法將歷史和動作作為神經網絡的輸入[20,12]。 這類架構的主要缺點是需要單獨進行一次前向傳遞(forward pass)來計算每個動作的Q值,這樣會導致成本與動作數呈正比。 在我們使用的架構中,其中每個可能的動作都對應一個單獨的輸出單元,神經網絡的輸入只有狀態表徵。 輸出則對應於輸入狀態的單個動作的預測Q值。 這類架構的主要優點是隻進行一遍前進傳遞,就可以計算某一給定狀態下所有可能動作的Q值。

在構建網絡架構時,你可以將S1和A1作為Q函數的輸入,分別輸出它們的Q值。但是這意味著在每一步中,該網絡都必須全部運行一遍18種可能的遊戲手柄操作,並比較這18種操作對應的輸出。但是,我們可以只將S1作為輸入,並使每個輸出對應於某一給定遊戲手柄操縱的Q值。用這種方法比較Q值要方便多!

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

下文描述七個Atari遊戲所使用的架構。 神經網絡的輸入是由φ產生的84×84×4圖像。 第一個隱層用16個步長(stride)為4的8×8過濾器與輸入圖像進行卷積, Rectifier激活函數的非線性為[10,18]。 第二個隱層用32個步長為2的4×4濾波器進行卷積,應用同樣的Rectifier激活函數非線性。最後一個隱層為完全連接層,由256個Rectifier激活函數單元組成。輸出層是一個線性的完全連接層,每個有效的動作對應一個輸出。在我們研究的遊戲中,有效動作的數量在4到18之間變化。我們把用該方法訓練的卷積網絡稱為深度Q網絡(DQN)。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

5 試驗

截至目前,我們用7款流行的ATARI遊戲進行了試驗——Beam Rider、Breakout、Enduro、Pong、Q*bert、Seaquest和Space Invader。在這7款遊戲中,我們使用相同的網絡架構、學習算法和超參數設置,以證明我們的方法能夠在不獲取特定遊戲信息的條件下成功應用於多種遊戲中。當在真實且未改動的遊戲中對代理進行評估時,我們在訓練期間只對遊戲的獎勵機制作出了一個改變。由於各遊戲的得分範圍大不相同,我們將所有正獎勵都設定為1,將所有負獎勵設定為-1,無變化情況設為0獎勵。這樣的獎勵設置可以限制誤差範圍,便於在多種遊戲中使用同一學習率。同時,該獎勵機制還會影響代理的表現,因為它無法區分不同大小的獎勵。

前一半內容很容易理解。後一半講的是該試驗的要點:獎勵作為代理的輸入,而本試驗改變了獎勵的性質。因此,只要是正獎勵就輸入+1,負獎勵則輸入-1,無變化則輸入0。這當然與真實有效的工作原理不同——獎勵始終在變化,完成某些些任務獲得的獎勵要比完成其他任務獲得的獎勵高。儘管如此,在某些遊戲中代理的表現還是超越了人類玩家!

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

在這些試驗中,我們使用的是minibatch size = 32的RMSProp算法。訓練中的行為策略為:ϵ-greedy的ϵ在前100萬幀從1 線性下降到0.1,然後保持在0.1不變。我們共訓練了100萬幀,並使用了最近100萬幀的回放記憶。

我們在第2部分中解釋了e-greedy以及經驗回放。本段講的是它們的實現細節。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

在按照前文中的方法玩Atari遊戲時,我們還使用了一種簡單的跳幀(frame-skipping)方法[3]。更確切地說,代理在每kth幀而不是在每一幀觀察並選擇動作,在跳過的幀中則重複它的最後一個動作。由於模擬器向前運行一步需要的計算量少於代理選擇一個動作的計算量,這種方法可以使代理在不大幅增加運行時間的情況下將遊戲次數增加約k倍。除了《太空入侵者》(Space Invader),我們在其他遊戲中都將k設為4,如果在這款遊戲中將k設為4,就會看不見激光,因為跳過的幀與激光閃爍的時長相重疊。將k設定為3就可以看到激光,k值的改變就是不同遊戲間的唯一超參數差異。

本段講的是作者每個狀態使用4幀而不使用1幀的原因。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

5.1 訓練和穩定性

在監督學習中,通過使用訓練集和驗證集評估模型,我們可以輕易地追蹤模型在訓練期間的性能。但是在強化學習中,在訓練期間準確評估代理的性能可能會十分困難。如[3]s所述,我們的評估指標是在若干遊戲中代理在某一episode或遊戲中得到的總獎勵的平均值。而且我們在訓練中週期性地計算該指標。總獎勵均值指標(average total reward metric)往往很嘈雜(noisy),因為權重的小小改變可能會導致策略訪問的狀態的分佈發生很大的變化。圖2中最左側的兩個線圖顯示了總獎勵均值在遊戲Seapuest和Breakout的訓練期間是如何變化的。這兩個總獎勵均值線圖確實很嘈雜,給人的印象是學習算法的運行不穩定。右側的兩個線圖則較為穩定,指標是指策略的預估動作分值函數Q,該函數的作用是預測在任何給定狀態下代理遵循其策略所能獲得的懲罰後的獎勵。我們在訓練開始前運行某一隨機策略,收集固定數量的狀態,並追蹤這些狀態的最大預測Q值的均值。從圖2最右側的兩個線圖可以看出,預測平均Q值的增加趨勢要比代理獲得的總獎勵的均值平緩得多,其餘5個遊戲的平均Q值的增長曲線也很平緩。除了預測Q值在訓練期間有較為平緩的增長,我們在試驗中未發現任何發散問題。這表明,除了缺乏理論上的收斂保證,我們的方法能夠使用強化學習信合和隨機梯度下滑以穩定的方式訓練大型神經網絡。

本段講的是在訓練期間使用的評估指標。在監督學習中,我們可以通過驗證準確性(validation accuracy)來評估模型性能,但是在強化學習中並沒有可用來作比較的驗證集。那麼有什麼其他方法可用於檢查模型是否在朝著某一目標訓練或者權重是否只是在亂變化?本論文的目標是構建一個能在遊戲中獲得高分的AI代理,何不使用總得分作為我們的評估指標呢?我們可以讓模型玩多款遊戲,收集平均總得分。

但是在實際中,這種指標的評估效果並不好,因為它會十分嘈雜。還有什麼其他指標呢?我們在本實驗中的另一目標是找出一種可以確保獲得最高得分的“策略”(如前文所述,這是一種離策略學習)。任何特定時刻的Q值代表AI代理預期的未來總獎勵。如果AI代理找到了一種好策略,那麼該策略的Q值就更高,對嗎?現在讓我們研究一下Q值本身是否能作為評估指標。實驗結果表明,Q值似乎比平均總獎勵更為穩定。但是這種方法並沒有合理的理論解釋,它只是碰巧可行而已。(實際上深度學習中這種情況很常見。某些方法就是可行,而其他某些方法雖然理論上可行但實際不可行。例如Dropout,這種方法雖然看起來天馬行空但是卻十分有效)

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

5.2 可視化價值函數

圖3給出了遊戲Seaquest中學到的價值函數的可視化形式。從圖中可以看出,當屏幕左側出現敵人後預測值出現跳躍(點A)。然後代理想敵人發射魚雷,當魚雷快要集中敵人時預測值達到最高點(點B)。最後當敵人小時後預測值差不多恢復到原始值(點C)。圖3表明我們的方法能夠在較為複雜一系列的事件中學習價值函數的變化方式。

本段很簡單,描述了價值函數在遊戲中不同動作中的變化方式。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

5.3 主要評估

我們將我們的結果與強化學習文獻[3,4]中提出的方法(該方法效果最好)進行了比較。該方法被稱為“Sarsa”,Sarsa算法藉助為Atari任務人工設計的多個特徵集來學習線性策略,我們在[3]中給出了表現最佳的特徵集的得分。Contingency法的基本思路和Sarsa法相同,但是該方法可以通過學習代理控制範圍內的屏幕區域的表徵,來增強特徵集[4]。

注意,這兩種方法都通過背景差分法(background subtraction)吸納了大量關於計算機視覺問題的知識,並將128種顏色中的每種顏色都作為一個單獨的通道。由於許多Atari遊戲中每種類型的目標所用的顏色通常都各不相同,將每種顏色作為一個單獨的通道,這種做法類似於生成一個單獨的二元映射(binary map),對每種目標類型進行編碼。相比之下,我們的代理只接收原始RGB屏幕截圖輸入,並且必須學習自行檢測目標。

本段將本論文的結果與本領域先前研究的結果進行了對比。“Sarsa”指的是[s1,a1,r,s2,a2],這是一種策略學習算法(與我們的離策略學習形成對比)。這兩種方法間的差異不是很容易理解,可以參考以下資料:

https://studywolf.wordpress.com/2013/07/01/reinforcement-learning-sarsa-vs-q-learning/

https://stackoverflow.com/a/41420616

本段的其他部分很容易理解。

DeepMind到底是如何教AI玩遊戲的?(Medium上1700個讚的文章)

除了給出學習代理(learned agents)的得分,我們還給出了人類專業遊戲玩家的得分,以及一種均勻地隨機選擇動作的策略。人類玩家的表現表示為玩了兩小時遊戲後得到的獎勵中值。

注意,我們給出的人類玩家的得分要比Bellemare等人論文[3]中給出的得分高得多。至於學習方法,我們遵循的是Bellemare等人的論文[3,5]中使用的評估策略,並且我們還通過將 ε 設定為0.05運行 ε 極大值( ε -greedy)策略來獲得固定步數的平均得分。表1的前5行給出了所有遊戲的各遊戲平均得分。在這7款遊戲中,我們的方法(DQN法)雖然沒有吸納任何關於輸入的先驗知識,結果還是大幅超越了其他學習方法.

看看他們的方法到底有多好!

原文鏈接:

https://medium.com/@mngrwl/explained-simply-how-deepmind-taught-ai-to-play-video-games-9eb5f38c89ee

相關推薦

推薦中...