0
原標題 | Deep Reinforcement Learning. Introduction. Deep Q Network (DQN) algorithm.
作者 | Markus Buchholz
譯者 | qianyuhappy、AI小山
由DeepDream生成的圖像
原始的深度強化學習是純強化學習,其典型問題為馬爾科夫決策過程(MDP)。馬爾科夫決策過程包含一組狀態(tài)S和動作A。狀態(tài)的轉換是通過概率P,獎勵R和一個折衷參數(shù)gamma決定的。概率轉換P反映了轉換和狀態(tài)轉變的獎勵之間的關系,狀態(tài)和獎勵僅依賴上一時間步的狀態(tài)和動作。
強化學習為Agent定義了環(huán)境,來實現(xiàn)某些動作以最大化獎勵(這些動作根據policy采取)。對Agent的優(yōu)化行為的基礎由Bellman方程定義,這是一種廣泛用于求解實際優(yōu)化問題的方法。為了解決Bellman優(yōu)化問題,我們使用了一種動態(tài)編程的方法。
當Agent存在于環(huán)境中并轉換到另一個狀態(tài)(位置)時,我們需要估計狀態(tài)V(s)(位置)-狀態(tài)值函數(shù)的值。一旦我們知道了每個狀態(tài)的值,我們就可以找出執(zhí)行Q(S, A)-動作值函數(shù)的最佳方法(只需遵循值最高的狀態(tài))。
這兩個映射或函數(shù)相關性很高,可以幫助我們找到問題的最佳策略。從狀態(tài)值函數(shù)我們可以看出遵循策略的Agent,處于的S狀態(tài)有多好。
符號解釋:
E[X]?—?隨機變量X的期望
?—?policy
Gt?—?t時刻的折現(xiàn)收益
γ?—?折現(xiàn)率
但是,動作值函數(shù)q(s,a)是從狀態(tài)S開始,采取動作A,并遵循策略π的折現(xiàn)收益,并告訴我們從特定狀態(tài)采取特定動作的效果。
很明顯,狀態(tài)值函數(shù)和Q函數(shù)之間的區(qū)別在于值函數(shù)體現(xiàn)狀態(tài)的良好性,而Q函數(shù)體現(xiàn)狀態(tài)中的動作的良好性。
MDP由Bellman方程求解,Bellman方程是以美國數(shù)學家Richard Bellman的名字命名的。該方程有助于尋找最優(yōu)的策略和價值函數(shù)。代理根據所施加的策略選擇操作(策略——正式地說,策略定義為每種可能狀態(tài)下操作的概率分布)。代理可以遵循的不同策略意味著狀態(tài)的不同值函數(shù)。然而,如果目標是使收集到的獎勵最大化,我們必須找到最好的可能的政策,稱為最優(yōu)政策。
另一方面,最佳狀態(tài)值函數(shù)的值,比所有其它值函數(shù)(最大返回值)都要大,因此,最佳值函數(shù)也以通過代入最大Q值來進行估算:
最后,值函數(shù)的貝爾曼等式(Bellman equation)可表示如下:
類似地,Q函數(shù)的貝爾曼等式可表示如下:
基于最佳狀態(tài)值函數(shù)以及上述的狀態(tài)值函數(shù)、動作值函數(shù)的等式,我們可以寫出最終的最佳值函數(shù)的等式,該等式稱作貝爾曼最佳等式:
通常,強化學習的問題通過Q學習算法來解決。這里,如上所言,智能體與環(huán)境交互并接收獎勵。目標是用足最佳策略(選擇動作的方法),以取得最大獎勵。在學習過程中,智能體更新Q(S,A)表(當回合結束時,任務完成,目標達到)。
Q學習算法通過以下步驟實現(xiàn):
1、用隨機數(shù)初始化Q(S,A)表。
2、用epsilon貪心策略選取一個行動,然后進入下一個狀態(tài)S’
3、根據更新等式來更新前一個狀態(tài)的Q值:
最好是從解決來自OpenAI gym的 Frozen Lake 開始。
在凍湖環(huán)境里(最好能熟悉OpenAI的描述),智能體可處理16種狀態(tài),執(zhí)行4個不同的動作(在一個狀態(tài)中)。在這種情況下,我們的A(S,A)表的大小是16x4。
Frozen Lake 代碼如下,你也可以點擊此處查看~
https://gist.github.com/markusbuchholz/af4e5b5891de6d3cf5528f83b6198311#file-qlearning_algorithm-py
請注意上面給出的Q算法屬于時序差分學習算法(Temporal Difference Learning algorithms)(由Richard S. Sutton于1988年提出)。Q算法是一種線下策略(off-policy)算法(這種算法具有從舊的歷史數(shù)據學習的能力)。Q學習算法的擴展是SARSA(在線策略(on-policy)算法)。唯一區(qū)別在于Q(S,A)表的更新:
當所有可到達的狀態(tài)處于可控(能夠迭代)并且能存儲在計算機RAM中時,強化學習對于環(huán)境來說是足夠好用的。然而,當環(huán)境中的狀態(tài)數(shù)超過現(xiàn)代計算機容量時(Atari游戲有12833600個狀態(tài)),標準的強化學習模式就不太有效了。而且,在真實環(huán)境中,智能體必須面對連續(xù)狀態(tài)(不離散),連續(xù)變量和連續(xù)控制(動作)的問題。
知道了智能體所處的環(huán)境的復雜性(狀態(tài)數(shù)量,連續(xù)控制),標準的、定義明確的強化學習Q表就得被深度神經網絡(Q網絡)取代了,后者可以把環(huán)境狀態(tài)映射為智能體動作(非線性逼近)。網絡架構,網絡超參數(shù)的選擇以及學習都在訓練階段(Q網絡權重的學習)中完成。DQN允許智能體探索非結構化的環(huán)境并獲取知識,經過時間積累,他們可以模仿人類的行為。
下圖(在訓練過程中)描述了DQN的核心概念,圖中,Q網絡做非線性逼近,把狀態(tài)映射為動作值。
在訓練過程中,智能體與環(huán)境交互,并接收數(shù)據,這些數(shù)據在Q網絡的學習過程中會用到。智能體探索環(huán)境,建立一個轉換和動作輸出的全圖。開始時,隨機進行動作,隨著時間推移,這樣做越來越沒效果。在探索環(huán)境時,智能體盡量查詢Q網絡(逼近)以決定如何行動。我們把這種方式(綜合了隨機行為和Q網絡查詢)稱為epsilon貪心方法(epsilon貪心動作選擇塊),也就是說利用概率超參數(shù)epsilon在隨機和Q策略間進行選擇。
我們所講的Q學習算法的核心來自于監(jiān)督學習。
如前所述,我們的目標是用深度神經逼近一個復雜的非線性函數(shù)Q(S,A)。
跟監(jiān)督學習一樣,在DQN中,我們定義損失函數(shù)為目標和預測值之間的方差,我們也更新權重盡量減少損失(假定智能體從一個狀態(tài)轉換到另一個狀態(tài),進行了某個動作a,獲取獎勵r)。
在學習過程中,我們使用兩個不相關的Q網絡(Q_network_local和Q_network_target)來計算預測值(權重θ)和目標值(權重θ’)。經過若干步驟后,目標網絡會被凍結,然后拷貝實際的Q網絡的權重到目標網絡權重。凍結目標Q網絡一段時間再用實際Q網絡的權重更新其權重,可以穩(wěn)定訓練過程。
圖1. DQN算法概念
為使訓練過程更穩(wěn)定(我們要避免用比較關聯(lián)的數(shù)據來訓練網絡,如果基于連續(xù)更新最后轉換來進行訓練的話, 這種情況就有可能發(fā)生),我們引入重播緩沖區(qū),它能記住智能體所經歷的行為。然后,用重播緩沖區(qū)里的隨機樣本來進行訓練(這可以減少智能體的經歷之間的關聯(lián)性,并有助于智能體從更廣泛的經歷中進行學習)。
DQN算法可描述如下:
1. 初始化重播緩沖區(qū)。
2. 預處理環(huán)境,并把狀態(tài)S輸入DQN, 后者會返回該狀態(tài)中所有可能的動作的Q值。
3. 用epsilon貪心策略選取一個動作:當有概率epsilon時,我們選擇隨機動作A,當有概率1-epsilon時,選取具有最高Q值的動作,例如A=argmax(Q(S, A, θ))。
4. 選擇了動作A后,智能體在狀態(tài)S中執(zhí)行所選的動作,并進行到新狀態(tài)S ,接收獎勵R。
5. 把轉換存儲在重播緩沖中,記作<S,A,R,S’>。
。
6. 下一步,從重播緩沖區(qū)中抽取隨機批次的轉換,并用以下公式計算損失:
7. 針對實際網絡參數(shù),執(zhí)行梯度下降,以使損失最小化。
8. 每隔k步之后,拷貝實際網絡權重到目標網絡權重中。
9. 重復這些步驟M回合。
在這一段中,我展示Udacity(深度強化學習)的工程代碼的結果。
a. 工程的目標
本工程的目標是訓練智能體如何在方塊環(huán)境中通過移動來采集黃色香蕉。工程要求在100個連續(xù)回合中獲取+13的平均分。
b. 在導航工程中,使用下列參數(shù)設置神經網絡架構和超參數(shù):
以下是每回合的獎勵圖,顯示出智能體在玩了2247回合后,能收到的平均獎勵(超過100回合)有至少+13。
Q網絡架構:
輸入層FC1:37節(jié)點輸入,64節(jié)點輸出
隱藏層FC2:64節(jié)點輸入,64節(jié)點輸出
隱藏層FC3:64節(jié)點輸入,64節(jié)點輸出
輸出層:64節(jié)點輸入,4節(jié)點輸出----動作的大小
使用的超參數(shù):
BUFFER_SIZE = int(1e5) # 重播緩沖區(qū)大小
BATCH_SIZE = 64 # 最小批量大小
GAMMA = 0.99 # 折扣率
TAU = 1e-3 # 用于目標參數(shù)的軟更新
LR = 5e-4 # 學習率
UPDATE_EVERY = 4 # 更快網絡的快慢
Epsilon start = 1.0
Epsilon start = 0.01
Epsilon decay = 0.999
圖2. 智能體學習的平均得分
如果有深度學習的相關經驗,那么未來工作將主要集中于圖像處理方面(從像素中學習)。下圖展示了DQN的架構,圖中,我們輸入游戲畫面,Q網絡逼近游戲狀態(tài)中所有動作的Q值。動作由我們討論過的DQN算法進行選擇。
圖3. 從像素學習的概念
其次,未來的工作將集中在生成一個決斗(Dueling)式DQN。在這個新的架構中,我們指定新的優(yōu)勢函數(shù),這個函數(shù)計算出智能體執(zhí)行的一個動作,比其它動作好了多少(優(yōu)勢可為正也可為負)。
Dueling DQN架構與上面講的DQN相同,只不過最后的全連接層分成兩股(見下圖所描述)。
若環(huán)境的一個狀態(tài)有確定數(shù)量的動作空間,絕大多數(shù)計算出來的動作對狀態(tài)沒有什么影響。此外,有些動作有冗余效應。在這種情況下,新的dueling DQN將會比DQN架構估算出來的Q值更精確。
其中一股計算值函數(shù),另一股計算優(yōu)勢函數(shù)(用于決定哪個動作更優(yōu))。
圖4. Dueling DQN架構
最后,我們考慮一下從人類的偏好中進行學習 (OpenAI和Deep Mind) 。這個新概念的核心思想是從人類的反饋中學習。接收人類反饋的智能體,將盡力進行人類期望的動作,并相應地設置獎勵。人類與智能體的直接交互 ,會有助于降低設計獎勵函數(shù)和復雜的目標函數(shù)的難度。
你可以通過我的Github找到本工程的全部源碼:
https://github.com/markusbuchholz/deep-reinforcement-learning/tree/master/p1_navigation
本文編輯:王立魚
英語原文:https://medium.com/@markus.x.buchholz/deep-reinforcement-learning-introduction-deep-q-network-dqn-algorithm-fb74bf4d68621
想要繼續(xù)查看該篇文章相關鏈接和參考文獻?
點擊【深度強化學習-深度Q網絡(DQN)介紹】即可訪問!
福利大放送——滿滿的干貨課程免費送!
「好玩的Python:從數(shù)據挖掘到深度學習」該課程涵蓋了從Python入門到CV、NLP實踐等內容,是非常不錯的深度學習入門課程,共計9節(jié)32課時,總長度約為13個小時。。
課程頁面:https://ai.yanxishe.com/page/domesticCourse/37
「計算機視覺基礎入門課程」本課程主要介紹深度學習在計算機視覺方向的算法與應用,涵蓋了計算機視覺的歷史與整個課程規(guī)劃、CNN的模型原理與訓練技巧、計算機視覺的應用案例等,適合對計算機視覺感興趣的新人。
課程頁面:https://ai.yanxishe.com/page/domesticCourse/46
現(xiàn)AI研習社將兩門課程免費開放給社區(qū)認證用戶,只要您在認證時在備注框里填寫「Python」,待認證通過后,即可獲得該課程全部解鎖權限。心動不如行動噢~
認證方式:https://ai.yanxishe.com/page/blogDetail/13999
雷鋒網雷鋒網雷鋒網
雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。