【強化學習】重磅 | 詳解深度強化學習,搭建DQN詳細指南

2017 年 8 月 18 日 產業智能官 機器之心
【強化學習】重磅 | 詳解深度強化學習,搭建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’ 的 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

  2. 你能用 Simple-DQN 做什麼

  3. 比較 Simple-DQN 與其它算法

  4. 如何修改 Simple-DQN


1、如何安裝 Simple-DQN?


這裏沒什麼可說的,就按說明書 README 來吧。基本上你所需要的隻是 Neon、Arcade Learning Environment 和 simple_dqn。嚐試預訓練模型時你甚至不需要 GPU,因為它們也能在 CPU 上運行,雖然很慢。


2、你能用 Simple-DQN 做什麼?


運行一個預訓練模型:一旦你安裝完所有部分,首先要做的就是嚐試運行預訓練模型。例如運行一個《打磚塊》的預訓練模型,輸入:


./play.sh snapshots/breakout_77.pkl


或者如果你沒有可用的 (Maxwell) GPU,也可以換成 CPU:


./play.sh snapshots/breakout_77.pkl –backend cpu


你應當會看到這樣的畫麵,並可能伴隨一些惱人的聲音: )




你可以關掉人工智能並按[m]鍵來掌控遊戲——看看能堅持多久!再按[m]鍵即返回人工智能控製模式。


事實上通過重複按[a]鍵來降低遊戲速度很管用——你可以真正看到遊戲中在發生什麼。按[s]重新加速。


錄製視頻:同樣你可以錄製一個遊戲視頻(在《打磚塊》中錄製,直到失去 5 條命之後):


./record.sh snapshots/breakout_77.pkl


視頻將存儲為 videos/breakout_77.mov 而遊戲截屏存儲在 videos/breakout 中。這有一個視頻案例:



訓練一個新模型:要訓練新模型,首先需要一個遊戲的 Atari 2600 ROM 文件。然後將它保存在 roms 文件夾中並運行以下訓練代碼:


./train.sh roms/pong.rom


其結果就是創建了下列文件:


  • results/pong.csv,包括訓練過程的各個統計數據,

  • snapshots/pong_.pkl,每個時期的模型簡介


測試一個模型:訓練過程中在每個時期後有一個測試階段。如果你想稍後再重新測試預訓練模型,則可用以下測試腳本:


./test.sh snapshots/pong_141.pkl


它將測試結果打印到控製台。保存文件並添加–csv_file 參數。


繪製統計數據:練過程中及之後,你可能想要知道模型的效果。這裏有段簡單的從統計文件中製作圖像的繪製腳本。例如:


./plot.sh results/pong.csv


它創建了這個文件results/pong.png.




它會默認繪製 4 張圖:


  1. 平均得分,

  2. 玩過的遊戲數量,

  3. 驗證集合狀態的平均最大 Q值 ,

  4. 平均訓練損失。


對於所有的圖,你能看到隨機基線(那是它們有意義的位置)和訓練階段及測試階段的結果。實際上你可以通過列出 –fields參數中的字段名,從統計文件中繪製出任何字段。默認圖由 –fieldsaverage_reward,meanq,nr_games,meancost 實現。字段名可從 CSV 文件的第一行得出。


可視化濾波器:運用這個代碼可做的最令人興奮的事莫過於窺視人工智能的心靈。我們將用到導向型反向傳播(guided backpropagation),它帶有即開即用的 Neon 。簡單的說,對於每個卷積濾波器,它會從給定的數據集合中找到一副最能激活該濾波器的圖像。然後它執行關於輸入圖像的反向傳播,觀察圖像的哪一部分對濾波器的「活性(activeness)」影響最大。這可以被當做是一種形式的顯著性檢測(saliency detection)。


執行濾波器可視化運行以下代碼:


./nvis.sh snapshots/breakout_77.pkl


它以玩遊戲收集樣本數據開始,然後執行導向型反向傳播。結果可在 results/breakout.html 中找到,它們看起來像這樣:




有三個卷積層(記為 0000、0002 和 0004),這裏我隻從每個(Feature Map 0-1(特征映射 0-1))中對 2 個濾波器進行了可視化。還有有 16 個濾波器可視化的《打磚塊》的更細節的文件。每個濾波器選擇了最能激活它的圖像。右邊的圖像展現原始輸入,左邊圖像展示導向型反向傳播結果。你可以把每個過濾器看成一隻人工智能的「眼睛」。即左側圖展現了在右側圖像的條件下,這個特定的「眼睛」所導向的位置。


由於我們網絡的輸入是一係列 4 灰度級圖像,所以可視化過程並不清晰。我做了一個簡化:隻選用某種狀態的最後 3 張圖像並將它們放入不同 RGB 顏色信道中。因此 3 張圖像上的所有灰色部分都沒有改變;藍色是最近的變化,然後是綠色,然後又是紅色。放大觀察你便輕鬆可知——其軌道由紅-綠-藍所標記。這使得理解反向傳播結果的難度增加了,不過有時你可以猜測濾波器的軌道運動(tracks movement)——從一個角落到另一個角落,顏色從紅到綠到藍變化。


可視化濾波器是一款十分有用的工具,你能夠立刻得到一些有趣的觀察結果。


  • 第一層濾波器主要針對抽象模式,不能與任何特定對象建立可靠的關聯。它們通常最能激發比分和生命值,這可能由於其有著眾多邊角(供識別)。當然你也能偶爾在更高層發現一些關注比分和生命值的濾波器。

  • 正如預期的那樣,有些濾波器追蹤球和拍子。還有些濾波器在球將要撞上磚頭或牌子時激活最多。

  • 同樣如預期的是,更高層的濾波器有著更大感受域(receptive field)。這在《打磚塊》中還不明顯,但是在這個《乒乓球(Pong)》遊戲的文件中可以清楚地看到。有意思的是《打磚塊》中不同層的濾波器比《乒乓球》中的更相似。


模型上使用。這麼做的一個好處是它將導向型反向傳播及可視化整合進同一個步驟中並且無需臨時文件來編寫中間結果。不過那樣的話我需要對保存在 nvis 文件夾中的 Neon 代碼做一些修正。


3、比較 Simple-DQN 與其它算法


另外還有一些深度強化學習實現方式,將它們與在 Neon 中的實現方式進行比較會很有意思。其中最知名的是連同其《自然》雜誌文章一起發表的原始版 DeepMind 代碼。另一個維護版本是弗吉尼亞州詹姆斯·麥迪遜大學 Nathan Sprague 開發的 deep_q_rl。


深度強化學習中最普遍的度量標準是平均每局遊戲得分。為了計算它用於 simple_dqn,我使用了與那篇《自然》雜誌文章中提到的相同的評估程序——運用不同初始隨機條件和一個 ε=0.05 的 ε-貪心策略( ε-greedy policy)獲得的 30 場比賽的平均分數。我並沒有麻煩為每個遊戲執行 5 分鍾的限製,因為《打磚塊》和《乒乓球》中的遊戲不會持續那麼久。對於 DeepMind 我是用了自然雜誌那篇文章裏的數據。而對於 deep_q_rl,我讓 deep-q-learning 列表中的成員提供了數據。他們的分數采集沒有使用完全相同的協議(下麵的特殊數字是 11 場遊戲的平均成績),所以可能需要考慮一點言過其實。


另一個有趣的測試是每秒的訓練步數。DeepMind 和 simple_dqn 都報告了每個時期每秒的平均訓練步數(250000步)。deep_q_rl報告了動態的步速而我隻是粗略估計了下其平均步數: )。在所有案例中我都查看了第一個時期,其探測率接近 1,因此這個結果更多反映了訓練速度而非預測速度。所有測試均在英偉達 Geforce Titan X 上完成。




可以看到 simple_dqn 在速度方麵明顯優於其他算法。盡管學習結果還不能向 DeepMind 看齊,不過運行一些有趣的實驗已經足夠可行了。


4、如何修改Simple-DQN?


公布 simple_dqn 代碼的主要考量是展示實現過程實際上可以多麼簡單,每個人都能夠拓展它去做一些有趣的研究。


代碼中存在四個類: Environment、ReplayMemeory、DeepQNetwork 和 Agent。還有用於處理解析和實例化上述類的參數的 main.py,以及執行基本回調機製以保證統計數據收集與主循環分離的 Statistics 類。但是深度強化學習算法的主要部分會在上述四個類中執行。




Environment 類Environment 類隻是微軟 A.L.E Python API 外的輕巧包裝。除了 A.L.E 應該也可輕而易舉地添加其他環境。例如 Flappy Bird 和 Torcs——你隻需執行一個新的 Environment 類。試試看吧!


ReplayMemory 類回放記憶(replay memory)存儲狀態轉換或經驗。基本上它隻是屏幕、動作、獎勵和終端狀態指示器的四個大數組。


回放記憶作為一組屏幕序列存儲,而非由 4 個屏幕組成的狀態序列。這使得內存使用大大減少而性能方麵也無重大損失。運用 NumPy 數組切片將屏幕組裝進狀態會更快。


屏幕像素的數據類型是 uint8(8位無符號整型),這意味著1M 經驗需要 6.57GB ——隻需 8GB 內存來運行!而默認的 float32(32位浮點型)數據類型則 1M 需要大約 26GB。


如果你想實現優先經驗回放(prioritized experience replay),那麼這是你主要需要改變的類。


DeepQNetwork 類此類用於實現深度 Q 網絡。它其實也是唯一一個依賴 Neon 的類。


由於深度強化學習的迷你批處理(minibatching)方式各有不同,所以沒有理由運用 Neon 的 DataIterator 類。因此轉而使用更低級的 Model.fprop() 和 Model.bprop()。下麵是給想做同樣事情的人的建議:


  1. 你需要在構建模型後調用 Model.initialize()。它在 GPU 內存中為層的激活及權重分配張量。

  2. Neon 張量有幾個維度(信道、高度、寬度、批大小)。尤其批大小是最後一維。這種數據布局能實現最快卷積核。

  3. 置換一個 Numpy 數組的維度來匹配 Neon 張量需求時,一定要複製數組!否則實際的內存布局並不會改變且數組不能直接複製進 GPU 中。

  4. 除了使用有數組索引的單個張量元素(比如張量 [i,j]),試著運用 tensor.set() 和 tensor.get() 將張量作為一個整體複製到 Numpy 數組中。這能讓 CPU 和 GPU 間往返過程更少。

  5. 考慮到要在 GPU 中執行張量算法,Neon backend 提供了一個好方法。同時也要注意這些操作運算不會立即被評估,而是作為 OpTree 存儲起來。隻有在你使用張量或將其轉換到 CPU 裏時,張量才能真正得到評估。


如果想要實現雙 Q 學習(double Q-learning),則需要對此類進行修改。


Agent 類:Agent 類連接所有部件並執行主要的邏輯。


5、結論


正如我向你們展示的那樣,運用類似 Neon 的優良深度學習工具包實現 Atari 視頻遊戲的深度強化學習簡直宛若一道春風。Neon 中濾波器可視化功能提供了有關模型實際所學習內容的重要參考。


盡管這不是它本身的目標,但是計算機遊戲為試驗新的強化學習方法提供了卓越的沙盤。希望我的 simple_dqn 實現能夠成為大家進入深度強化學習研究這一迷人領域的墊腳石。

©本文由機器之心編譯,轉載請聯係本公眾號授權



新一代技術+商業操作係統:

AI-CPS OS

新一代技術+商業操作係統(AI-CPS OS:雲計算+大數據+物聯網+區塊鏈+人工智能分支用來的今天,企業領導者必須了解如何將“技術”全麵滲入整個公司、產品等“商業”場景中,利AI-CPS OS形成字化力量,實現行業的重新布局、企業的重新構建和自我的煥然新生,在行業、企業和自身三個層麵勇立鼇頭。


數字化力量與行業、企業及個人三個層麵的交叉,形成了領導力模式,使數字化融入到領導者所在企業與領導方式的核心位置。

  • 分辨率革命種力量能夠使人在更加真實、細致的層麵觀察與感知現實世界和數字化世界正在發生的一切,進而理解和更加精細地進行產品控製、事件控製和結果控製。

  • 複合不確定性:數字化變更顛覆和改變了領導者曾經仰仗的思維方式、結構和實踐經驗,其結果就是形成了複合不確定性這種顛覆性力量。主要的不確定性蘊含於三個領域:技術、文化、製度。

  • 邊界模糊化:數字世界與現實世界的不斷融合成CPS不僅讓人們所知行業的核心產品、經濟學定理和可能性都產生了變化,還模糊了不同行業間的界限。這種效應正在向生態係統、企業、客戶、產品快速蔓延。


領導者無法依靠某種單一戰略方法來應對多維度的數字化變革。隨著變革範圍不斷擴大,一切都幾乎變得不確定,即使是最精明的領導者也可能失去方向。麵對新一代技術+商業操作係統(AI-CPS OS:雲計算+大數據+物聯網+區塊鏈+人工智能顛覆性的數字化力量,領導者必須在行業、企業與個人這三個層麵都保持領先地位。


如果不能在上述三個層麵保持領先,領導力將會不斷弱化並難以維繼:

  • 重新進行行業布局:你的世界觀要怎樣改變才算足夠?你必須對行業典範進行怎樣的反思?

  • 重新構建你的企業:你的企業需要做出什麼樣的變化?你準備如何重新定義你的公司?

  • 重新打造新的自己:你需要成為怎樣的人?要重塑自己並在數字化時代保有領先地位,你必須如何去做?


子曰:“君子和而不同,小人同而不和。” 《論語·子路》

雲計算、大數據、物聯網、區塊鏈和 人工智能,像君子一般融合,一起體現科技就是生產力。


如果說上一次哥倫布地理大發現,拓展的是人類的物理空間。那麼這一次地理大發現,拓展的就是人們的數字空間。

在數學空間,建立新的商業文明,從而發現新的創富模式,為人類社會帶來新的財富空間。

雲計算,大數據、物聯網和區塊鏈,是進入這個數字空間的船,而人工智能就是那船上的帆,哥倫布之帆!


人工智能通過三個方式激發經濟增長:

  1. 創造虛擬勞動力,承擔需要適應性和敏捷性的複雜任務,即“智能自動化”,以區別於傳統的自動化解決方案;

  2. 對現有勞動力和實物資產進行有利的補充和提升,提高資本效率;

  3. 人工智能的普及,將推動多行業的相關創新,開辟嶄新的經濟增長空間。


新一代信息技術(雲計算、大數據、物聯網、區塊鏈和人工智能)的商業化落地進度遠不及技術其本身的革新來得迅猛,究其原因,技術供應商(乙方)不明確自己的技術可服務於誰,傳統企業機構(甲方)不懂如何有效利用新一代信息技術創新商業模式和提升效率。


“產業智能官”,通過甲、乙方價值巨大的雲計算、大數據、物聯網、區塊鏈和人工智能的論文、研究報告和商業合作項目,麵向企業CEO、CDO、CTO和CIO,服務新一代信息技術輸出者和新一代信息技術消費者。


助力新一代信息技術公司尋找最有價值的潛在傳統客戶與商業化落地路徑,幫助傳統企業選擇與開發適合自己的新一代信息技術產品和技術方案,消除新一代信息技術公司與傳統企業之間的信息不對稱,推動雲計算、大數據、物聯網、區塊鏈和人工智能的商業化浪潮。


給決策製定者和商業領袖的建議:


  1. 超越自動化,開啟新創新模式:利用具有自主學習和自我控製能力的動態機器智能,為企業創造新商機;

  2. 迎接新一代信息技術,迎接人工智能:無縫整合人類智慧與機器智能,重新

    評估未來的知識和技能類型;

  3. 製定道德規範:切實為人工智能生態係統製定道德準則,並在智能機器的開

    發過程中確定更加明晰的標準和最佳實踐;

  4. 重視再分配效應:對人工智能可能帶來的衝擊做好準備,製定戰略幫助麵臨

    較高失業風險的人群;

  5. 開發人工智能型企業所需新能力:員工團隊需要積極掌握判斷、溝通及想象力和創造力等人類所特有的重要能力。對於中國企業來說,創造兼具包容性和多樣性的文化也非常重要。


新一代技術+商業操作係統(AI-CPS OS:雲計算+大數據+物聯網+區塊鏈+人工智能作為新一輪產業變革的核心驅動力,將進一步釋放曆次科技革命和產業變革積蓄的巨大能量,並創造新的強大引擎。

重構生產、分配、交換、消費等經濟活動各環節,形成從宏觀到微觀各領域的智能化新需求,催生新技術、新產品、新產業、新業態、新模式。引發經濟結構重大變革,深刻改變人類生產生活方式和思維模式,實現社會生產力的整體躍升。

新一代技術+商業操作係統(AI-CPS OS:雲計算+大數據+物聯網+區塊鏈+人工智能正在經曆從“概念”到“落地”,最終實現“大範圍規模化應用,深刻改變人類生活”的過程。





產業智能官 AI-CPS



新一代技術+商業操作係統(AI-CPS OS:雲計算+大數據+物聯網+區塊鏈+人工智能),在場景中狀態感知-實時分析-自主決策-精準執行-學習提升認知計算機器智能實現產業轉型升級、DT驅動業務、價值創新創造的產業互聯生態鏈




長按上方二維碼關注微信公眾號:AI-CPS,更多信息回複:


新技術“雲計算”、“大數據”、“物聯網”、“區塊鏈”、“人工智能新產業:智能製造”、“智能駕駛”、“智能金融”、“智能城市”、“智能零售新模式:案例分析”、“研究報告”、“商業模式”、“供應鏈金融”、“財富空間”






本文係“產業智能官”(公眾號ID:AI-CPS)收集整理,轉載請注明出處!



版權聲明產業智能官(公眾號ID:AI-CPS推薦的文章,除非確實無法確認,我們都會注明作者和來源。部分文章推送時未能與原作者取得聯係。若涉及版權問題,煩請原作者聯係我們,與您共同協商解決。聯係、投稿郵箱:erp_vip@hotmail.com






登錄查看更多
14
0

相關內容

深度強化學習 (DRL) 是一種使用深度學習技術擴展傳統強化學習方法的一種機器學習方法。 傳統強化學習方法的主要任務是使得主體根據從環境中獲得的獎賞能夠學習到最大化獎賞的行為。然而,傳統無模型強化學習方法需要使用函數逼近技術使得主體能夠學習出值函數或者策略。在這種情況下,深度學習強大的函數逼近能力自然成為了替代人工指定特征的最好手段並為性能更好的端到端學習的實現提供了可能。

指南簡介

最近神經網絡在計算機視覺、機器翻譯和時間序列預測等問題上得到了重大突破,但它們也可以與強化學習算法相結合,創造出像AlphaGo這樣令人震驚的東西。強化學習指的是麵向目標的算法,它學習如何獲得複雜的目標(目標)或在許多步驟中沿著特定的維度最大化;例如,在許多動作中最大化在遊戲中贏得的分數。他們可以從一塊白板開始,在適當的條件下,他們可以達到超人的表現。就像一個被鞭打和糖果激勵的孩子,當他們做出錯誤的決定時,這些算法會受到懲罰,當他們做出正確的決定時,這些算法會得到獎勵——這就是強化。包含深度學習的強化算法可以在圍棋遊戲中擊敗世界冠軍,也可以在玩許多阿塔裏電子遊戲的人類專家。雖然這聽起來微不足道,但與他們之前的成就相比,這是一個巨大的進步,目前的技術正在迅速進步。強化學習解決了將即時行為與其產生的延遲回報關聯起來的難題。與人類一樣,強化學習算法有時需要等待一段時間才能看到決策的成果。它們在延遲返回的環境中運行,在這種環境中,很難理解在許多時間步驟中哪些操作會導致哪些結果。強化學習算法可以期望在更模糊、真實的環境中執行得越來越好,同時可以從任意數量的可能動作中進行選擇,而不是從視頻遊戲的有限選項中進行選擇。也就是說,隨著時間的推移,我們期望它們對實現現實世界中的目標是有價值的。Skymind將深度強化學習應用於真實世界用例的模擬,以幫助企業優化他們如何建立工廠、員工呼叫中心、建立倉庫和供應鏈以及管理流量。

內容目錄

  • 強化學習定義
  • 強化學習的領域選擇
  • 狀態-行為對&報酬的複概率分布
  • 機器學習與時間的關係
  • 神經網絡與深度強化學習
  • 模擬與深度強化學習
  • 腳注
成為VIP會員查看完整內容
A Beginner's Guide to Deep Reinforcement Learning _ Pathmind.pdf
0
55
4

報告主題:Reinforcement Learning

報告簡介:強化學習是智能體(Agent)以“試錯”的方式進行學習,通過與環境進行交互獲得的獎賞指導行為,目標是使智能體獲得最大的獎賞,強化學習不同於連接主義學習中的監督學習,主要表現在強化信號上,強化學習中由環境提供的強化信號是對產生動作的好壞作一種評價(通常為標量信號),而不是告訴強化學習係統RLS(reinforcement learning system)如何去產生正確的動作。由於外部環境提供的信息很少,RLS必須靠自身的經曆進行學習。通過這種方式,RLS在行動-評價的環境中獲得知識,改進行動方案以適應環境。其基本原理是:如果Agent的某個行為策略導致環境正的獎賞(強化信號),那麼Agent以後產生這個行為策略的趨勢便會加強。Agent的目標是在每個離散狀態發現最優策略以使期望的折扣獎賞和最大。Nando教授將從強化學習的基礎入手,並結合強化學習的應用展開介紹。

嘉賓介紹:Nando曾在加州大學伯克利分校(UC Berkeley)從事人工智能工作,並於2001年成為加拿大不列顛哥倫比亞大學的教授,隨後於2013年成為英國牛津大學的教授。2017年,他全職加入DeepMind,擔任首席科學家,以幫助他們解決智力問題,使子孫後代可以過上更好的生活。 Nando還是加拿大高級研究所的資深研究員,並曾獲得多個學術獎項。

成為VIP會員查看完整內容
Khipu 2019.pdf
0
35
4
小貼士
相關資訊
TensorFlow 2.0深度強化學習指南
雲棲社區
4+閱讀 · 2019年2月1日
強化學習精品書籍
平均機器
5+閱讀 · 2019年1月2日
【代碼集合】深度強化學習Pytorch實現集錦
機器學習算法與Python學習
7+閱讀 · 2018年10月23日
深度強化學習入門,這一篇就夠了!
機器學習算法與Python學習
9+閱讀 · 2018年8月17日
【幹貨】強化學習介紹
人工智能學家
6+閱讀 · 2018年6月24日
【強化學習】強化學習/增強學習/再勵學習介紹
產業智能官
7+閱讀 · 2018年2月23日
【深度強化學習】深度強化學習揭秘
產業智能官
13+閱讀 · 2017年11月13日
詳解TensorForce: 基於TensorFlow建立強化學習API
機械雞
4+閱讀 · 2017年7月22日
相關VIP內容
專知會員服務
75+閱讀 · 4月19日
專知會員服務
24+閱讀 · 2月1日
【強化學習】深度強化學習初學者指南
專知會員服務
55+閱讀 · 2019年12月14日
斯坦福&穀歌Jeff Dean最新Nature論文:醫療深度學習技術指南
專知會員服務
18+閱讀 · 2019年10月20日
專知會員服務
33+閱讀 · 2019年8月30日
相關論文
Meta-Learning with Implicit Gradients
Aravind Rajeswaran,Chelsea Finn,Sham Kakade,Sergey Levine
7+閱讀 · 2019年9月10日
Generalization and Regularization in DQN
Jesse Farebrother,Marlos C. Machado,Michael Bowling
4+閱讀 · 2019年1月30日
Ofir Press,Noah A. Smith
3+閱讀 · 2018年10月31日
Learn What Not to Learn: Action Elimination with Deep Reinforcement Learning
Tom Zahavy,Matan Haroush,Nadav Merlis,Daniel J. Mankowitz,Shie Mannor
4+閱讀 · 2018年9月6日
Deep Reinforcement Learning in Ice Hockey for Context-Aware Player Evaluation
Guiliang Liu,Oliver Schulte
4+閱讀 · 2018年7月11日
Ignasi Clavera,Anusha Nagabandi,Ronald S. Fearing,Pieter Abbeel,Sergey Levine,Chelsea Finn
6+閱讀 · 2018年3月30日
Lijun Li,Boqing Gong
5+閱讀 · 2018年3月21日
Hyrum S. Anderson,Anant Kharkar,Bobby Filar,David Evans,Phil Roth
3+閱讀 · 2018年1月30日
Xiangyu Zhao,Liang Zhang,Zhuoye Ding,Dawei Yin,Yihong Zhao,Jiliang Tang
12+閱讀 · 2018年1月5日
Lantao Yu,Weinan Zhang,Jun Wang,Yong Yu
5+閱讀 · 2017年8月25日
Top