1. 程式人生 > >重磅 | 詳解深度強化學習,搭建DQN詳細指南(附論文)

重磅 | 詳解深度強化學習,搭建DQN詳細指南(附論文)

選自 Nervana

作者:Tambet Matiisen

機器之心編譯

參與:Rick、李亞洲、吳攀

本文為作者 Tambet Matiisen 在 Nervana 上發表的有關深度強化學習的系列博文,分為兩部分:第一部分作者對 DeepMind 提出的深度強化學習進行了詳細的講解;第二部分作者使用案例講解如何在 Neon 上建立深度強化學習模型。

一、詳解深度強化學習

兩年前,一家位於倫敦的小公司 DeepMind 在 arXiv 上上傳了他們開創性的論文《Playing Atari with Deep Reinforcement Learning》。在這篇論文中,他們證明了計算機可以如何通過僅僅觀察螢幕畫素以及遊戲分數上升的獎勵學會玩雅達利 2600 型電子遊戲。結果是驚人的,因為遊戲和每個遊戲中的目標都非常不同,而且是專為人類設計的挑戰。相同模式的架構在沒有任何變化的情況下,可以用來學習七種不同的遊戲,並且在其中三個裡,演算法甚至比人類玩得更好!

它被喻為是邁向通用人工智慧的第一步——不會被侷限在某一個領域,例如圍棋,而在任何環境下都能生存的人工智慧。無怪乎 DeepMind 迅速就被谷歌所收購,並從此成為了深度學習研究的前線。2015年的二月,他們的論文《Human-level control through deep reinforcement learning》登上了最富盛名的科學期刊《Nature》的封面。 在這篇論文中,他們在 49 種不同的遊戲裡應用了相同的模型,並在其中的一半里有著超乎人類的表現。

但是,儘管監督與無監督學習的深度模型已經在這一領域內得到了廣泛的應用,但深度強化學習還籠罩著神祕的面紗。在這篇文章中,我會試著揭開這項技術的神祕面紗,並理解它背面的基本原理。這篇文章的目標讀者應該有機器學習以及最好神經網路的相關背景,但是還沒有時間深入瞭解過強化學習。

下面將是此篇文章的重點所在:

  • 增強學習的主要挑戰是什麼?我們會在這裡談及信用分配問題(credit assignment problem )與探索-開發困境(exploration-exploitation dilemma)。

  • 如何用數學術語公式化強化學習?我們將會定義馬爾可夫決策過程(Markov Decision Process)並利用它來推導強化學習。

  • 我們如何生成長期策略?我們會定義「折扣未來獎勵(discounted future reward)」,其奠定了下一章節的演算法的基礎。

  • 我們怎樣能夠估測未來獎勵? 簡單的基於表格的 Q 學習(Q-learning)演算法在這裡會得到定義與解釋。

  • 如果我們的狀態空間( state space)過大該怎麼辦?在這裡我們會看到 Q 表格(Q-table)可以如何被(深度)神經網路所取代。

  • 讓它真正地運轉起來還需要些什麼?我們將討論經驗重放技術(Experience replay technique ),它可以穩定化神經網路的學習。

  • 到這裡就結束了嗎?在最後,我們會考慮一些探索-開發的簡單解決方案。

  • 如何用數學術語公式化強化學習?我們將會定義馬爾可夫決策過程(Markov Decision Process)並利用它來推導強化學習。

1、強化學習

在《打磚塊(Breakout)》 這個遊戲中,玩家需要控制螢幕底下的短板讓球反彈,去清除螢幕上方所有的磚塊。 每一次你擊碎了一個磚塊,它就會消失,然後獲取分數——你就有了獎勵(reward)。


圖1:雅達利《打磚塊》遊戲.圖源:DeepMind

假設你希望教一個神經網路去玩這個遊戲。那麼神經網路的輸入應該是螢幕的圖片,輸出則應該是分為三個動作:向左、向右或者發射。這可以被看為是一種分類問題——你需要對每一個遊戲畫面做出決定,是該往左移,還是往右或者選擇發射。聽起來是不是很簡潔?當然,但是你還需要訓練樣本,很多的樣本。當然了,你也可以直接錄下專業玩家的遊戲視訊,但是這並不是我們學習的方式。我們不需要其他人無數次地告訴我們該在每個畫面上選擇怎樣的動作。我們只需要做出對的決策後的幾次反饋,然後就可以自己解決了。

這是一個強化學習嘗試解決的任務。強化學習位於監督與無監督式之間的某個位置。而監督式學習每一個訓練樣本都有著目標標籤,在無監督學習中則沒有,強化學習則有著稀疏(sparse)和延時(_time-delayed)_的標籤——獎勵(reward)。僅僅基於這些獎勵,人工智慧代理必須學會在這個環境中的行為方式。

儘管這個想法十分的直觀,但是在實際中仍然有不少挑戰。例如,當你在《打磚塊》遊戲裡擊碎了一個磚塊並拿到分數時,這與你在剛剛拿到分數之前的動作(拍子移動)並沒有關係。在你正確地放好拍子並反彈球的時候,所有的活都已經做好了。這也叫作信用分配問題(credit assignment problem )——例如,到底之前的哪個動作才導致了分數的獲得,以及何種程度。

一旦你找到了能夠獲得一定分數的獎勵的策略,那麼你會堅持它,還是去用可能帶來更大的獎勵的動作來實驗呢?在上述《打磚塊》遊戲中,最簡單的策略就是讓拍子待在左邊並等待。當球被髮射後,它傾向於更向左邊飛而不是右邊,你會在遊戲結束前輕易地獲得 10 分。你是想就此為止還是更進一步?這叫做探索-開發困境問題——你想要用現有的策略,還是其他可能更棒的策略呢?

強化學習是一個關於我們(以及所有廣義上的動物)如何學習的重要模型。我們的父母的誇獎、學校獲得的分數、工作薪水——這些都是獎勵的形式。信用分配問題與探索-開發困境每天都會在生意與人際關係中出現。這正是研究這個問題,以及組成有意思的沙箱的遊戲對於找出新的方法為何是非常重要的原因。

2、馬爾可夫決策過程

現在的問題是,你如何公式化一個強化學習問題,然後進行推導呢?最常見的方法是通過馬爾可夫決策過程。

假設你是一個代理,身處某個環境中(例如《打磚塊》遊戲)。這個環境處於某個特定的狀態(例如,牌子的位置、球的位置與方向,每個磚塊存在與否)。人工智慧可以可以在這個環境中做出某些特定的動作(例如,向左或向右移動拍子)。

這些行為有時候會帶來獎勵(分數的上升)。行為改變環境,並帶來新的狀態,代理可以再執行另一個動作。你選擇這些動作的規則叫做策略。通常來說,環境是隨機的,這意味著下一狀態也或多或少是隨機的(例如,當你漏掉了球,發射一個新的時候,它會去往隨機的方向)。


圖2:左:強化學習問題.右:馬爾可夫決策過程

狀態與動作的集合,加上改變狀態的規則,組成了一個馬爾可夫決策過程。這個過程(例如一個遊戲)中的一個情節(episode)形成了狀態、動作與獎勵的有限序列。


其中 si 表示狀態,ai 表示動作,ri+1 代表了執行這個動作後獲得的獎勵。情節以最終的狀態 sn 結束(例如,「Game Over」畫面)。一個馬爾可夫決策過程基於馬爾可夫假設(Markov assumption),即下一狀態 si+1 的概率取決於現在的狀態 si 和動作 ai,而不是之前的狀態與動作。

3、折扣未來獎勵(Discounted Future Reward)

為了長期表現良好,我們不僅需要考慮即時獎勵,還有我們將得到的未來獎勵。我們該如何做呢?

對於給定的馬爾可夫決策過程的一次執行,我們可以容易地計算一個情節的總獎勵:


鑑於此,時間點 t 的總未來回報可以表達為:


但是由於我們的環境是隨機的,我們永遠無法確定如果我們在下一個相同的動作之後能否得到一樣的獎勵。時間愈往前,分歧也愈多。因此,這時候就要利用折扣未來獎勵來代替:


在這裡 γ 是數值在0與1之間的貼現因子——獎勵在距離我們越遠的未來,我們便考慮的越少。我們很容易看到,折扣未來獎勵在時間步驟 t 的數值可以根據在時間步驟 t+1 的相同方式表示:


如果我們將貼現因子定義為  γ=0,那麼我們的策略將會過於短淺,即完全基於即時獎勵。如果我們希望平衡即時與未來獎勵,那麼貼現因子應該近似於  γ=0.9。如果我們的環境是確定的,相同的動作總是導致相同的獎勵,那麼我們可以將貼現因子定義為  γ=1。

一個代理做出的好的策略應該是去選擇一個能夠最大化(折扣後)未來獎勵的動作。

4、Q- 學習(Q-learning)

在 Q-學習中,我們定義了一個函式 Q(s,a) 表示當我們在狀態(state)s 中執行動作(action)a 時所獲得的最大折扣未來獎勵(maximum discounted future reward),並從該點進行繼續優化。


可以將 Q(s,a) 看作是「在狀態 s 中執行完動作 a 後,遊戲結束時最好的得分」。它被稱為 Q-函式(Q-function),因為其代表了給定狀態中特定動作的「質量」。

這個定義聽起來可能有些費解。如果我們只知道當前狀態和動作,而不知道後續的動作和獎勵,那我們該怎麼估計遊戲最後的得分呢?我們實際上不能。但作為一種理論構想,我們可以假設確實存在這樣一個函式。只要閉上你的眼睛重複五次:「Q(s,a) 存在、Q(s,a) 存在……」懂了嗎?

如果你仍沒被說服,那就考慮一下存在這樣一個函式會有怎樣的影響。假設你在一個狀態中,並在琢磨應該採取動作 a 還是 b. 你想選擇在遊戲最後能得到最高得分的動作。一旦你有了神奇的 Q-函式,答案就變得非常簡單了——採取 Q 值最高的動作!


其中 π 表示策略,即我們在每一個狀態中選擇動作時所遵循的規則。

好了,那麼我們如何得到 Q 函式呢?讓我們只關注一個轉換(transition)<s, a, r, s’>。 和上一節中提到折扣未來獎勵一樣,我們可以根據下一個狀態 s’ 的 Q 值得到狀態 s 和動作 a 的 Q 值。


這被稱為貝爾曼方程(Bellman equation)。你想想看,這是很合乎邏輯的——該狀態和動作的最大未來獎勵等於立即得到的獎勵加上下一狀態的最大未來獎勵。

Q 學習的主要思想是我們可以使用貝爾曼方程不斷迭代近似 Q-函式。在最簡單的例子中,Q -函式可通過一個表格的形式實現,其中狀態作為行,動作作為列。Q-學習演算法的要點可簡單歸結如下:


演算法中的 α 是指學習率,其控制前一個 Q 值和新提出的 Q 值之間被考慮到的差異程度。尤其是,當 α=1 時,兩個 Q[s,a] 互相抵消,結果剛好和貝爾曼方程一樣。

我們用來更新 Q[s,a] 的只是一個近似,而且在早期階段的學習中它完全可能是錯誤的。但是隨著每一次迭代,該近似會越來越準確;而且我們還發現如果我們執行這種更新足夠長時間,那麼 Q 函式就將收斂並能代表真實的 Q 值。

5、深度 Q 網路(Deep Q Network)

《打磚塊(Breakout)》 遊戲環境的狀態可由拍子的位置、球的位置和方向以及每個磚塊的存在與否來定義。但這種直觀的表徵是這個遊戲獨有的。我們能想出適合所有遊戲的表徵嗎?螢幕畫素是一個明顯的選擇,它們毫無疑問包含了遊戲狀況中除了球的速度和方向以外的所有相關資訊。兩個連續的螢幕就能覆蓋這些例外。

像 DeepMind 的論文描述的那樣,如果我們在遊戲螢幕上應用相同的預處理——以最近四張螢幕照片為例,將它們的尺寸調整到 84×84 並將它們灰度調整為 256 階灰度——我們會得到 256^84x84x4≈10^67970 種可能的遊戲狀態。這意味著我們想象的 Q 函式表有 10^67970 行——超過已知宇宙中原子的總數!有人可能會說很多畫素組合(即狀態)根本不可能出現——我們也許可以用一個只包含可訪問狀態的稀疏的表格來表示它。即便如此,其中大部分狀態都是極少能出現的,要讓 Q-函式表收斂,那得需要整個宇宙壽命那麼長的時間。理想情況下,我們也喜歡對我們從未遇見過的狀態所對應的 Q 值做出很好的猜測。

這就到了深度學習的用武之地。神經網路在高度結構化資料的特徵提取方面表現格外優異。我們可以使用神經網路表示我們的 Q 函式,並將狀態(四個遊戲螢幕)和動作作為輸入,將對應的 Q 值作為輸出。或者我們也可使用唯一的遊戲螢幕作為輸入,併為每一個可能的動作輸出 Q 值。這種方法有自己的優勢:如果我們想執行 Q 值更新或選取對應最高 Q 值的動作,我們只需對網路進行一次徹底的前向通過,就能立即獲得所有可能的動作的 Q 值。


圖3:左圖:深度 Q 網路基本形式;右圖:優化過的深度 Q 網路架構,在 DeepMind 論文中使用過

DeepMind 使用的網路架構如下:


這是一個經典的帶有三個卷積層的卷積神經網路,後面跟隨著兩個全連線層。熟悉物件識別網路的人可能注意到這裡並不沒有池化層(pooling layer)。但如果真正仔細想想,池化層讓你獲得了平移不變性(translation invariance)——網路變得對影象中的物體的位置不敏感。這對於 ImageNet 這樣的分類任務是有意義的,但遊戲中球的位置對確定潛在的獎勵是至關重要的,而且我們並不希望丟棄這個資訊!

這個網路的輸入是 4 個 84×84 的灰度遊戲螢幕。這個網路的輸出是是每一個可能動作的 Q 值(Atari 中有 18 個動作)。Q 值可以是任何真實值,這使其成為了一個迴歸( regression )任務,可以使用簡單的平方誤差損失進行優化。


對於給定變換< s, a, r, s’ >,前一演算法中的 Q 表格更新規則必須被以下規則取代:

  1. 為當前狀態 s 進行一次前向通過,獲得所有動作的預測的 Q 值.

  2. 為下一個狀態 s’ 進行一次前向通過,計算整體網路輸出的最大值

  3. 為動作設定 Q 值目標(使用第 2 步中計算出的最大值).對於所有其它動作,設定 Q 值目標為第 1 步中原本返回的值,使這些輸出的誤差為 0。

  4. 使用反向傳播更新權重

6、經驗回放(experience replay)

現在,我們有一個使用 Q 學習估計每個狀態的未來獎勵和使用一個卷積神經網路逼近 Q 函式的想法了。但事實證明,使用非線性函式的 Q 值逼近不是很穩定。事實上你不得不使用很多技巧才能使其收斂。而且也需要很長的處理時間——在單個 GPU 上需要幾乎一週的時間。

最重要的技巧是經驗回放。在遊戲過程中,所有經驗 < s, a, r, s’ > 都被儲存在回放儲存器中。當訓練網路時,使用的是來自回放儲存器的隨機微批資料(minibatches),而不是使用最近的變換。這打破了後續訓練樣本的相似性,否則其就可能使網路發展為區域性最小。經驗回放也會使訓練任務更近似於通常的監督式學習,從而簡化了演算法的調式和測試。我們實際上可以從人類玩的遊戲中學習到所有這些經驗,然後在這些經驗之上訓練網路。

7、探索-開發(Exploration-Exploitation)

Q-學習試圖解決信用分配問題(Credit Assignment Problem)——它能在時間中反向傳播獎勵,直到其到達導致了實際所獲獎勵的關鍵決策點。但我們還沒觸及到探索-開發困境呢……

首先觀察,當 Q 函式表或 Q 網路隨機初始化時,那麼其預測一開始也是隨機的。如果我們選擇一個有最高 Q 值的動作,那麼該動作就將是隨機的且該代理會執行粗糙的「探索(exploration)」。當 Q 函式收斂時,它返回更穩定的 Q 值,探索的量也會減少。所以我們可以說,Q 學習將探索整合為了演算法的一部分。但這種探索是「貪心的(greedy)」,它會中止於其所找到的第一個有效的策略。

針對上述問題的一個簡單而有效的解決方法是 ε-貪心探索(ε-greedy exploration)——其概率 ε 選擇了一個隨機動作,否則就將使用帶有最高 Q 值的「貪心的」動作。在 DeepMind 的系統中,他們實際上隨時間將 ε 從 1 降至了 0.1——一開始系統採取完全隨機的行動以最大化地探索狀態空間,然後再穩定在一個固定的探索率上。

8、深度 Q 學習演算法

這帶給了我們使用經驗回放的最後的深度 Q 學習演算法:


DeepMind 還使用了更多技巧使其真正能夠工作——如目標網路、錯誤剪裁(error clipping)、獎勵剪裁(reward clipping),但這些超出了本文的介紹範圍。

這個演算法最精彩的一面在於其能學習任何事物。試想一下,因為我們的 Q 函式是隨機初始化的,它的初始輸出完全是垃圾。而我們使用這個垃圾(下一狀態的最大 Q 值)作為網路的目標,只有偶爾處在一個很小的獎勵範圍內。這聽起來很瘋狂,它到底怎麼能學習任何有意義的事物呢?但事實是它確實可以。

9、最後說明

自問世以來,Q 學習已經取得了很多改進——比如:雙 Q 學習(Double Q-learning)、優先經驗回放(Prioritized Experience Replay)、競爭網路架構(Dueling Network Architecture)和連續動作空間的擴充套件。NIPS 2015 深度強化學習研討會和 ICLR 2016 上可以看到一些最新的進展。但要清楚,深度 Q 學習已被谷歌申請了專利。

人們常常說,人工智慧是一種我們仍未清楚明白的東西。一旦我們理解了它們的工作方式,它就看起來不再智慧了。但深度 Q 網路仍然讓我驚歎。看著它們弄懂一個新遊戲就像是在觀察野生動物——這本身就是一個有益的體驗。

二、使用 Neon 的深度強化學習

這是探討深度強化學習系列博文的第二部分。

當我們研究組第一次讀到 DeepMind 的論文「Playing Atari with Deep Reinforcement Learning」時,便當即想要複製這一驚人結果。那是在 2014 年初, 當時 cuda-convnet2 是效能最強的卷積網路實現方式,而 RMSProp 還只是 Hinton 在Coursera課上的一張幻燈片。我們不斷除錯,學習,但是當DeepMind與他們的《自然》論文「Human-level control through deep reinforcement learning」同時公佈了程式碼時,我們便開始在他們的程式碼上做研究。

從那時起深度學習系統已經演進了很多。據說 2015 年時每 22 天就會出現一個新的深度學習工具包。其中著名的有像 Theano、Torch7 和 Caffe 這些老前輩們,也有 Neon、Keras 和 TensorFlow 這些新生代。新的演算法一經公佈就會被實現。

在某種程度上我意識到一年前困擾我們的所有困難部分,如今都在大多深度學習工具包中都能被輕而易舉地實現。當 Arcade Learning Environment 這一模擬 Atari 2600 遊戲的系統釋出一款本地 Python API 後,它可剛好用以執行新的深度強化學習。編寫主程式碼只需花費一週左右,然後是數週的除錯。

我選擇在 Neon 上編寫,因為它有:

  • 最快的卷積核(convolutional kernel);

  • 實現所需的所有演算法(如 RMSProp);

  • 一個合理的 Python API;

我試著保持我的程式碼的簡介性和易擴充套件性,同時兼顧效能。目前 Neon 最知名的限制是它僅能在最新的英偉達 Maxwell GPU 上執行,不過也就快改變了。

下面我將介紹:

  1. 如何安裝 Simple-DQN