掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
強化學(xué)習在與之相關(guān)的研究者中變得越來越流行,尤其是在 DeepMind 被 Google 收購以及 DeepMind 團隊在之后的 AlphaGo 上大獲成功之后。在本文中,我要回顧一下 David Silver 的演講。

David Silver 的演講視頻可在這里查看:
http://techtalks.tv/talks/deep-reinforcement-learning/62360/
在這個演講視頻中,David 做了對深度學(xué)習(DL)和強化學(xué)習(RL)的基本介紹,并討論了如何將這兩種學(xué)習方法結(jié)合成一種方法。有三種不同的可以結(jié)合深度學(xué)習和強化學(xué)習的方法:基于價值(value-based)、基于策略(policy-based)以及基于模型(model-based)的方法。在這個演講中,David 提供了許多他們自己的實驗的實例,最后以對 AlphaGo 的簡單討論結(jié)束了演講。
一、概覽
演講分為五個部分:
然而,當我看完講座、理解了各個主題之后,便決定在上述的演講結(jié)構(gòu)中引入一個新的部分——做一個深度強化學(xué)習(Deep RL)的概述。這篇文章將會按照如下組織:
希望上述的文章結(jié)構(gòu)能夠幫助大家更好地理解整個主題。我會重點關(guān)注演講視頻中的重點,并盡可能去解釋一些問題的復(fù)雜概念。我也會給出我自己的觀點、建議以及一些可以幫助到大家的參考資料。
在深入研究更加復(fù)雜的強化學(xué)習(RL)主題之前,我會盡可能提供一些關(guān)于深度學(xué)習和強化學(xué)習的基本知識,因為對不了解這兩個主題的基本知識的人而言,這個演講是有一定難度的。希望這些基本知識可以幫助大家。如果你對自己的知識非常有信心,那么,你可以跳過文章的前兩部分。
二、深度學(xué)習介紹
什么是深度學(xué)習?
深度學(xué)習是表征學(xué)習的通用框架,它有以下特點:
深度學(xué)習(deep learning)的意思就是深度表征(deep representation)。
如圖所示,一個深度表征由很多函數(shù)組成,它的梯度可以通過鏈式法則來反向傳播。
「深(deep)」的程度可以由函數(shù)或者參數(shù)的數(shù)量來推斷。計算機硬件以及算法的發(fā)展使得計算機能夠在合適的時間范圍內(nèi)完成上圖所述的函數(shù)的計算,這是深度學(xué)習異軍突起背后的原因。
反向傳播(backpropagation)算法在解決深度問題中起著至關(guān)重要的作用。對任何一個想學(xué)習深度學(xué)習的人而言,理解反向傳播是很重要的。
請不要混淆深度神經(jīng)網(wǎng)絡(luò)與深度學(xué)習。深度學(xué)習是一項實現(xiàn)機器學(xué)習的技術(shù) [3]。它僅僅是一種機器學(xué)習的方法。而深度神經(jīng)網(wǎng)絡(luò)通常被人們用來理解深度表征。
深度神經(jīng)網(wǎng)絡(luò)通常包括以下內(nèi)容:
線性變換、非線性激活函數(shù)、以及關(guān)于輸出的損失函數(shù),例如均方差和對數(shù)似然值。
我們用隨機梯度下降的方法來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
如上圖所示,按照能夠使得損失函數(shù) L(W) 減小的方向去調(diào)整參數(shù) W.
實踐中一個常用的有效方法就是權(quán)值共享(Weight Sharing),它是減少參數(shù)數(shù)量的關(guān)鍵。有兩種神經(jīng)網(wǎng)絡(luò)能夠?qū)崿F(xiàn)權(quán)值共享,即循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeural Network)。
如上圖所示,循環(huán)神經(jīng)網(wǎng)絡(luò)在時間步長之間共享權(quán)值,卷積神經(jīng)網(wǎng)絡(luò)在空間區(qū)域共享權(quán)值。
三、強化學(xué)習簡介
什么是強化學(xué)習?
在這個講座中,David給出了一張圖表明強化學(xué)習在不同領(lǐng)域中的復(fù)雜地位,如下圖所示:
盡管我們在機器學(xué)習社區(qū)中廣泛使用強化學(xué)習,但強化學(xué)習不僅僅是一個人工智能術(shù)語。它是許多領(lǐng)域中的一個中心思想,因此圖片的標題是「強化學(xué)習的多個方面(Many Face of Reinforcement Learning)」。事實上,許多這些領(lǐng)域面臨著與機器學(xué)習相同的問題:如何優(yōu)化決策以實現(xiàn)最佳結(jié)果。
這就是決策科學(xué)(scienceof decision-making)。在神經(jīng)科學(xué)中,人類研究人腦并發(fā)現(xiàn)了一種遵循著名的強化算法的獎勵系統(tǒng)。在心理學(xué)中,人們研究的經(jīng)典條件反射和操作性條件反射,也可以被認為是一個強化問題。類似的,在經(jīng)濟學(xué)中我們研究理性博弈論;在數(shù)學(xué)中我們研究運籌學(xué);在工程學(xué)中我們研究優(yōu)化控制。所有的這些問題都可以被認為一種強化學(xué)習問題—它們研究同一個主題,即為了實現(xiàn)最佳結(jié)果而優(yōu)化決策。
強化學(xué)習是一個由行為心理學(xué)啟發(fā)的機器學(xué)習領(lǐng)域 [4]。舉個例子,一個學(xué)生名叫 Mike,如果他今天閱讀了一篇與強化學(xué)習相關(guān)的論文,他將會在昨天的分數(shù)的基礎(chǔ)上獲得 1 分的獎勵(稱作正反饋)。如果他打了一整天的籃球,他的分數(shù)將會被扣掉 1 分(稱為負反饋)。因而,如果 Mike 想每天都想獲得更多的獎勵(正反饋),他會每天都去學(xué)習。
「本質(zhì)上,這些都是閉環(huán)系統(tǒng),因為學(xué)習系統(tǒng)的行為會影響它之后的輸入。此外,(1) 學(xué)習系統(tǒng)沒有像很多其它形式的機器學(xué)習方法一樣被告知應(yīng)該做出什么行為;(2) 相反,必須在嘗試了之后才能發(fā)現(xiàn)哪些行為會導(dǎo)致獎勵的最大化;(3) 在大多數(shù)有趣并且有挑戰(zhàn)性的例子中,當前的行為可能不僅僅會影響即時獎勵,還會影響下一步的獎勵以及后續(xù)的所有獎勵。這三個特征是強化學(xué)習中最重要的三個區(qū)分特征,作為閉環(huán)系統(tǒng)的本質(zhì)、沒有關(guān)于該采取什么行動和后續(xù)的包括獎勵信號和完成學(xué)習的時間的直接指示。」
強化學(xué)習和標準監(jiān)督學(xué)習的區(qū)別就在于從來不呈現(xiàn)正確的輸入/輸出對,也不存在次優(yōu)化的行為被顯式地修正。此外,還關(guān)注在線性能。在線性能涉及在對未知領(lǐng)域的探索和當前領(lǐng)域知識的利用之間尋求一個平衡。
前面說了一下什么是強化學(xué)習的問題,那么,我們?yōu)槭裁匆P(guān)注強化學(xué)習呢? 簡而言之,強化學(xué)習是一個通用的決策框架。實際上我們關(guān)心的是開發(fā)一個能夠在現(xiàn)實世界中做出決策的代理(agent)。我們不僅想給它算法并讓它采取行動。我們還想讓代理做決策。而強化學(xué)習可以讓代理學(xué)會做決策。
在每一個時刻 t,代理會執(zhí)行一個動作 at, 收到一個觀測信號 Ot, 收到一個標量獎勵 rt。外界環(huán)境會收到一個動作 at, 發(fā)出一個觀測信號 Ot+1,發(fā)出一個獎勵信號 rt+1。
由于每個問題都有其各自不同的特點,所以,為了實現(xiàn)「通用」的目標,我們需要找到它們的共同點和一些規(guī)律性的東西。希望大家可以在沒有解釋的情況下理解上圖的內(nèi)容。圖中的大腦是我們所說的代理,圖中的地球是代理所處的環(huán)境。任何時刻,當代理執(zhí)行一個動作 at 之后,它將會收到對環(huán)境的觀測量 Ot 以及來自環(huán)境的獎勵 rt,同時,收到動作 at 之后,環(huán)境會發(fā)出下一個觀測量 Ot+1,以及獎勵 rt+1。這就引入了一個新的概念:狀態(tài)。
如上圖所示,狀態(tài)是所有經(jīng)歷(experience)的總和,經(jīng)歷就是上圖中的第一個序列函數(shù)。某時刻 t 的狀態(tài) st 是該時刻以及之前所有時刻的所有觀測量、獎勵以及動作序列的函數(shù)。但是,當代理所處的環(huán)境具有一種我們所說的完全可觀測性之后,就有了上圖中的第二個狀態(tài)函數(shù)——某時刻的狀態(tài)僅僅是該時刻的觀測值 Ot 的函數(shù),這樣一來,整個經(jīng)歷似乎具備了某種類似于馬爾可夫性的性質(zhì)。
然后,就有了三個新的想法:策略(policy)、價值函數(shù)(value function)和模型(model)。
一個強化學(xué)習系統(tǒng)的主要組成
一個強化學(xué)習的代理可能包含一個或多個下述的組成:
策略指的是代理的行為,它是從狀態(tài)到行為的映射。包括確定策略和隨機策略。
1. 價值函數(shù)
價值函數(shù)是對未來獎勵的預(yù)測,表示在狀態(tài) s 下,執(zhí)行動作 a 會得到多少獎勵?
Q 價值函數(shù)表示獎勵總值的期望。表示在給定一個策略π,貼現(xiàn)因子γ,和狀態(tài) s 下,執(zhí)行動作 a,獲得獎勵的綜合的期望是多少?
Q 價值函數(shù)還能夠分解為上圖描述的貝爾曼方程。
貝爾曼方程,以其提出者 Richard Bellman 命名,也被稱作動態(tài)規(guī)劃方程。它是與動態(tài)規(guī)劃有關(guān)的數(shù)學(xué)優(yōu)化相關(guān)的優(yōu)化問題的必要條件。
優(yōu)化價值函數(shù)就是使得價值函數(shù)達到可實現(xiàn)的最大值。以此為條件就會得到整個問題的最優(yōu)解,以及相應(yīng)的最優(yōu)策略π*。
2. 模型:
整個模型就是從經(jīng)歷中學(xué)習的過程。
由于我們已經(jīng)定義了強化學(xué)習代理的三個組成部分,所以不難理解,優(yōu)化其中的任何一個都會得到一個較好的結(jié)果。
有三種實現(xiàn)強化學(xué)習的途徑,分別基于不同的原則。即:基于價值的強化學(xué)習,基于策略的強化學(xué)習,以及基于模型的強化學(xué)習。
四、深度強化學(xué)習(DeepReinforcement Learning)
什么是深度強化學(xué)習?簡言之,就是強化學(xué)習+深度學(xué)習。
將強化學(xué)習和深度學(xué)習結(jié)合在一起,我們尋求一個能夠解決任何人類級別任務(wù)的代理。強化學(xué)習定義了優(yōu)化的目標,深度學(xué)習給出了運行機制——表征問題的方式以及解決問題的方式。強化學(xué)習+深度學(xué)習就得到了能夠解決很多復(fù)雜問題的一種能力——通用智能。
DeepMind 中深度強化學(xué)習的例子有:
那么,我們?nèi)绾谓Y(jié)合強化學(xué)習和深度學(xué)習呢?
(1)用深度神經(jīng)網(wǎng)絡(luò)來代表價值函數(shù)
(2)用隨機梯度下降來優(yōu)化損失函數(shù)
下面的三部分,我們分別討論三種結(jié)合強化學(xué)習和深度學(xué)習的方法。
五、基于價值的深度強化學(xué)習
基于價值的深度強化學(xué)習的基本思想就是建立一個價值函數(shù)的表示,我們稱之為 Q 函數(shù)。
其中:
正如我們在上邊圖片中看到的一樣,基本上就是一個黑盒子,將狀態(tài)和動作作為輸入,并輸出 Q 和一些權(quán)值參數(shù)。
我們會用到基于 Q學(xué)習的基本方法。這種方法會想出我們需要的損失函數(shù),而且是以貝爾曼方程作為開始的。
如上圖所示,我們等號右邊作為優(yōu)化的目標?,F(xiàn)在逐步解釋這個算法:將左側(cè)的內(nèi)容移到等號右邊。
隨后我們用隨機梯度下降的方法去最小化最小均方差 (MSE),一般這個方法在優(yōu)化的過程中都會奏效的。如果每一個狀態(tài)和動作都有一個單獨的值,那么在這個方法下,價值函數(shù)會收斂到一個最優(yōu)值。不幸的是,由于我們使用的是神經(jīng)網(wǎng)絡(luò),會有兩個問題出現(xiàn):
如果我們繼續(xù)使用神經(jīng)網(wǎng)絡(luò),上述兩個問題是不會被解決的。
為了實現(xiàn)穩(wěn)定的深度強化學(xué)習,我們引入的第一個方法是被稱為 DQN 的深度強化網(wǎng)絡(luò)。如下面的 PPT 所描述的,這在 Q 學(xué)習的基礎(chǔ)上引入了根本的提升。其中的思想非常簡單:通過讓代理從自己的經(jīng)歷中構(gòu)建數(shù)據(jù)集,消除非平穩(wěn)動態(tài)中的所有相關(guān)性。然后從數(shù)據(jù)集中抽取一些經(jīng)歷并進行更新。
在解釋完前面的東西之后,David Silver 給大家舉了一個他們 DeepMind 團隊的一個例子:Atari 游戲。他們訓(xùn)練出了一個能夠?qū)?Atari 游戲玩的很好的系統(tǒng)。相信下面的插圖能夠有助于讀者理解代理和環(huán)境(包括狀態(tài)、動作以及獎勵)之間的關(guān)系
Atari 中的 DQN
這是一個卷積神經(jīng)網(wǎng)絡(luò) (CNN)
網(wǎng)絡(luò)結(jié)構(gòu)和超參數(shù)在所有的游戲中都是固定不變的。
1. 采用深度 Q 網(wǎng)絡(luò)的 Atari 的 Demo:
繼 Nature 上發(fā)表深度 Q 網(wǎng)絡(luò)之后,有好多關(guān)于 DQN 的改進。但 David 主要關(guān)注以下三點:
2. 雙深度 Q 網(wǎng)絡(luò)(Double DQN):
要理解第一個改進,我們首先必須明白 Q 學(xué)習中存在的一個問題。問題就踹 MAX 算子上。事實上那樣得到的近似值不足以做出決定,并且這個偏差可能在實際應(yīng)用中導(dǎo)致一系列問題。因此,為了解決這個問題,我們用了兩個深度 Q 網(wǎng)絡(luò)把評價動作的方式分解為兩個路徑。一個深度 Q 網(wǎng)絡(luò)用來選擇動作,另一個用來評價動作,這在實踐中確實很有幫助。
確定優(yōu)先級的經(jīng)歷回放:
第二個改進就是我們做經(jīng)歷回放的方式。舊方法做經(jīng)歷回放的時候會給所有的經(jīng)歷附一個相同的權(quán)重。然而相等的權(quán)重并不是一個好的思想,如果給所有的經(jīng)歷給一個優(yōu)先級,你可能做得更好一些。我們僅僅采用了以此誤差的絕對值,它表示在一個時刻的某一個特定狀態(tài)有多么好或者多么差。那些你并沒有很好的理解的經(jīng)歷才是所有的經(jīng)歷中你最想回放的。因為需要更多的更新來矯正你的鍵值。
3. 決斗網(wǎng)絡(luò)(DuelingNetwork)
第三個改進就是把Q 網(wǎng)絡(luò)分成兩個信道。一部分用來計算當你忽略了一些動作的時候你會得到多少獎勵(幻燈片中的action-independent),另一部分用來計算實際中當你采取了某一個特定的動作之后你會做得多么好。然后將兩個網(wǎng)絡(luò)的計算結(jié)果求和。然后取兩者的總和。正如前面視頻中演示的,如果你把這個結(jié)果正則化,結(jié)果會發(fā)現(xiàn)這兩個通道會閃爍,因為它們有不同的擴展(scaling)屬性。將兩個網(wǎng)絡(luò)分開,去幫助神經(jīng)網(wǎng)絡(luò)學(xué)習更多的東西,這實際上是很有幫助的。
它們通過在Google 利用下面的結(jié)構(gòu)(Gorila)來讓系統(tǒng)加速,這很適合海量數(shù)據(jù)。
Gorila 結(jié)構(gòu)運行在很多不同的機器上,這讓它們可以共同運行深度 Q 網(wǎng)絡(luò)。我們有許多個代理并行運行的實例,有我們環(huán)境的許多不同的實例,這些環(huán)境都是基于許多不同的機器,這樣便能讓我們在力所能及的情況下生成盡可能多的經(jīng)歷。
這些經(jīng)歷被存放在一個分布式的經(jīng)歷回放記憶(experience replay memory)中。本質(zhì)上就是將所有并行的代理的經(jīng)歷收集起來并且以分布式的方式存儲。我們由很多學(xué)習器能夠在這些經(jīng)歷中并行采樣。一旦你有了這個經(jīng)歷回放的緩存,我們可以從中讀取很多不同的東西并且將其應(yīng)用于系統(tǒng)的更新上。然后,從那些學(xué)習器返回的參數(shù)更新將被共享到我們存儲的分布式神經(jīng)網(wǎng)絡(luò)中,然后在實際上運行在這些機器上的每個代理共享。
那么,在沒有Google 的資源的情況下,我們?nèi)绾巫霾拍芗铀購娀瘜W(xué)習呢?可以使用異步強化學(xué)習:
六、基于策略的深度強化學(xué)習
深度策略網(wǎng)絡(luò)
策略梯度
Actor-Critic算法
異步優(yōu)勢Actor Critic 算法(A3C)
Labyrinth中的異步優(yōu)勢Actor Critic 算法(A3C)
從輸入的像素中進行 softmax 策略 π(a|st) 的端到端學(xué)習。對環(huán)境的觀測量 ot 是當前幀的原始像素。狀態(tài) st= f(o1, …, ot) 是一個循環(huán)神經(jīng)網(wǎng)絡(luò)(LSTM)。網(wǎng)絡(luò)在策略π(a|s) 下同時輸出價值 V(s) 和激活函數(shù) softmax 的結(jié)果值。任務(wù)是收集蘋果(+1 分獎勵)和逃跑(+10 分獎勵)。
1. 我們?nèi)绾翁幚砀呔S連續(xù)動作空間?
與深度 Q 網(wǎng)絡(luò)類似,我們在這里有 DPG 算法。希望你現(xiàn)在對深度 Q 網(wǎng)絡(luò)有了較好的理解,這將有助于你理解下一部分內(nèi)容。
2. 確定策略梯度(DPG/DeterministicPolicy Gradient)算法
下面是 DavidSilver 關(guān)于 DPG 的論文的鏈接:
http://www.jmlr.org/proceedings/papers/v32/silver14.pdf_
深度確定策略梯度
模擬物理中的確定策略梯度算法:
在 MuJoCo 上模擬物理域
圖為兩個分離的卷積神經(jīng)網(wǎng)絡(luò),分別對應(yīng) Q 價值函 Q(s,a)和策略π(s)。
然后我們來看一看其他的經(jīng)典游戲,例如撲克。我們能夠使用深度強化學(xué)習的方法在多代理的游戲中找到納什均衡嗎?納什均衡就像多代理決策問題中的解決方案。在這個均衡下,每個代理都滿足它們的策略,沒人愿意偏離當前的策略。
因此,如果我們找到了納什均衡,我們就解決了這個小問題。很多研究都在關(guān)注如何在更加龐大、有趣的博弈游戲中實現(xiàn)這種均衡。
這里的思想是,我們首先學(xué)習一個價值 Q 網(wǎng)絡(luò),然后學(xué)習一個策略網(wǎng)絡(luò),然后挑選一些最佳相應(yīng)和平均最佳相應(yīng)之間的動作。
代理在游戲中進行虛擬自我對抗 (FSP)。
下面的幻燈片闡述了在德州撲克進行 FSP 的結(jié)果:隨著迭代次數(shù)的增加,不同的算法都收斂了。
3. 基于模型的深度強化學(xué)習
學(xué)習環(huán)境的模型
學(xué)習一個模型,即如何用深度學(xué)習完成基于模型的強化學(xué)習,并不是這個問題的難點。我們知道了如何規(guī)定學(xué)習模型的問題。事實上這不過是一個監(jiān)督學(xué)習的問題罷了「如果你想預(yù)測:假設(shè)我采取了這個動作之后,環(huán)境會變成什么樣子」。在這次講座中,他沒有太多地談?wù)撨@個問題,他只是展示了一個來自密歇根大學(xué)的視頻,演示你如何能夠建立一個模型,以及建立這個模型有多困難。這是該視頻的屏幕截圖:左側(cè)是預(yù)測,右側(cè)是真實情況。但是,這是很難實現(xiàn)的。
然而,如果我們有一個完美的模型呢?也就是說,游戲規(guī)則是已知的。是的,我們知道,AlphaGo 就是這樣的。
Nature 上關(guān)于 AlphaGo 的論文:
http://www.nature.com/articles/nature16961
AlphaGo 相關(guān)的資源: deepmind.com/research/alphago/
為什么下圍棋對于計算機而言是很困難的?
暴力搜索是很難處理的。
過去很多人都認為找到一個解決這個問題的好方法是不可能的。
DeepMind 建立了一個卷積神經(jīng)網(wǎng)絡(luò)(CNN),這個網(wǎng)絡(luò)將每一個狀態(tài)(只要由棋子落下)看作一幅圖像。然后用卷積神經(jīng)網(wǎng)絡(luò)去構(gòu)造兩個不同的神經(jīng)網(wǎng)絡(luò)。
一個代表價值網(wǎng)絡(luò)
另一個代表策略網(wǎng)絡(luò):
為了訓(xùn)練它,我們結(jié)合了監(jiān)督學(xué)習和強化學(xué)習,共有三個步驟,如下所示:
經(jīng)過每一步之后的表現(xiàn):
價值網(wǎng)絡(luò)和策略網(wǎng)絡(luò)的效果:
七、總結(jié)
強化學(xué)習是一個受行為心理學(xué)啟發(fā)的機器學(xué)習領(lǐng)域。它正在變得越來越流行。在需要構(gòu)建一個可以像人類一樣甚至超越人類能力去做一些事的人工智能時,它是非常有用的,比如 AlphaGo。然而,在我看來,在開始學(xué)習強化學(xué)習之前,我們首先應(yīng)該理解一些基本的機器學(xué)習相關(guān)的知識。良好的數(shù)學(xué)背景將會非常有助于你的學(xué)習,并且,這至關(guān)重要!
David Silver 目前任職于 Google DeepMind 團隊。他的演講可以幫助我們獲得對強化學(xué)習(RL)和深度強化學(xué)習(Deep RL)的基本理解,這不是一件特別難的事。
【本文是專欄機構(gòu)機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流