DQN算法原理詳解


 

一、 概述

強化學習算法可以分為三大類:value based, policy based 和 actor critic。

常見的是以DQN為代表的value based算法,這種算法中只有一個值函數網絡,沒有policy網絡,以及以DDPG,TRPO為代表的actor-critic算法,這種算法中既有值函數網絡,又有policy網絡。

說到DQN中有值函數網絡,這里簡單介紹一下強化學習中的一個概念,叫值函數近似。一個state action pair (s,a)對應一個值函數Q(s,a)。理論上對於任意的(s,a)我們都可以由公式求出它的值函數,即用一個查詢表lookup table來表示值函數。但是當state或action的個數過多時,分別去求每一個值函數會很慢。因此我們用函數近似的方式去估計值函數:^Q(s,a,w)Qπ(s,a)

這樣,對於未出現的state action也可以估計值函數。
至於近似函數,DQN中用的是神經網絡,當然如果環境比較簡單的話用線性函數來近似也是可以的。

DQN算法原文鏈接: 2013版(arxiv) 2015版(nature)

二、算法原理

強化學習是一個反復迭代的過程,每一次迭代要解決兩個問題:給定一個策略求值函數,和根據值函數來更新策略。

DQN使用神經網絡來近似值函數,即神經網絡的輸入是state s,輸出是Q(s,a),aA (action space)。通過神經網絡計算出值函數后,DQN使用ϵgreedy策略來輸出action(第四部分中介紹)。值函數網絡與ϵgreedy策略之間的聯系是這樣的:首先環境會給出一個obs,智能體根據值函數網絡得到關於這個obs的所有Q(s,a),然后利用ϵgreedy選擇action並做出決策,環境接收到此action后會給出一個獎勵Rew及下一個obs。這是一個step。此時我們根據Rew去更新值函數網絡的參數。接着進入下一個step。如此循環下去,直到我們訓練出了一個好的值函數網絡。

DQN-network

那么每次迭代如何更新神經網絡的參數呢?

與機器學習類似,首先會定義一個loss function,然后使用梯度下降GD來更新參數。接下來首先介紹DQN的loss function,它與Q-Learning的非常類似,只是添加了一個target Q function。然后會介紹除此之外,DQN在Q-Learning上所做的改進。

1、Loss Function

L(ω)=E[(R+γmaxaQ(s,a;ω)Q(s,a;ω))2]這個公式表面上看起來很復雜,實際上很好理解,它就是一個殘差模型,和我們平常見的最小二乘法很類似,真實值與預測值之間的差的平方。預測值就是Q(s,a;ω),它是神經網絡的輸出。“真實值”略微有一點復雜。

想象一下假如我們想求出(s,a)的真實值函數Q(s,a)。它表示我從state s開始出發,並采取action a的話,我所能得到的整體收益的期望值。一種可能的情況是,我們知道環境的模型。這在強化學習中也叫Model Based RL。即我們知道狀態轉移概率矩陣:當處於(s,a)時,下一個到達的狀態可能是什么,並且到達每一個狀態的概率是什么;我們還知道獎勵函數:當處於(s,a)時,得到的立即回報的期望值是什么;另外還知道折扣因子。由此,我們便可以通過貝爾曼方程來求解值函數。這種情況下我們可能也並不需要神經網絡近似值函數之類的,直接由策略迭代或值迭代便可以求出最優策略。具體方法可以看一下MDP。

另一種情況就是Model Free RL:不管有沒有環境模型,反正我不用。那么在不知道環境模型的情況下如何求解值函數呢?答案就是采樣

 

強化學習中有多種采樣的方法:

(1) Monte Carlo

  • MC使用一個完整的episode去更新值函數,因此它需要從StSt到Terminal state的完整樣本。
  • 而且需要等到episode結束才能更新值函數。
  • 由於有一條完整的樣本,它可以計算出return,而值函數是return的期望,所以我們可以用return去更新值函數。

(2) Temporal Difference / SarSa

 

  • 與MC不一樣的是,TD不需要完整的樣本,它只依賴下一個step的值函數,即它用V(St+1) 去更新 V(St)V(St)(TD), 或用 Q(St+1,at+1) 去更新 Q(St,at) (SarSa)
  • 它不用等到episode結束,每走一步就可以更新值函數。
  • 它不是用的真實的return值來更新值函數,而是用的一個估計值去更新另一個估計值的思想。

另外還有TD(λ或 SarSa(λ))方法,DQN中不涉及。

 

DQN屬於Model Free的強化學習算法,它需要采樣。且同SarSa類似,只依賴下一個step的值函數。但它更新值函數的方式與SarSa又有所不同。下面介紹從SarSa到Q-Learning再到DQN的更新值函數的方式。

(1) SarSa

 

SarSa中更新值函數的公式為:Q(s,a)Q(s,a)+α[R+γQ(s,a)Q(s,a)]也稱它的target是 Rt+1+γQ(St+1,at+1)。理解這個target代表的意義:V(s)=E[Gt|St=s]=E[Rt+1+γGt+1|St=s]=E[Rt+1+γV(St+1)|St=s]將V換成Q的話我們可以看到,SarSa target :Rt+1+γQ(St+1,at+1) 是 Q(St,at)的估計值。

在值函數近似中,我們都是使用target來替代真實的值函數,即Loss中的真實值。

前面說過DQN是使用ϵgreedyϵ−greedy策略來輸出action,SarSa和Q-Learning也是。SarSa中使用ϵgreedyϵ−greedy策略生成action at+1at+1,隨即又用 at+1at+1處對應的值函數來計算target,更新上一步的值函數。這種學習方式又稱為On-policy

SarSa屬於On-policy Learning,而Q-Learning屬於Off-policy Learning。

(2) Q-Learning

 

Q-Learning的target是 Rt+1+γmaxa′Q(St+1,a′)。它使用 ϵgreedy策略來生成action at+1,但用來計算target的action卻不一定是at+1,而是使得Q(St+1,a)最大的action。這種產生行為的策略和進行評估的策略不一樣的方法稱為Off-policy方法。對於Q-Learning來說,產生行為的策略是ϵgreedy,而進行評估的策略是greedy。

(3) DQN

Off-policy是Q-Learning的特點,DQN中也延用了這一特點。而不同的是,Q-Learning中用來計算target和預測值的Q是同一個Q,也就是說使用了相同的神經網絡。這樣帶來的一個問題就是,每次更新神經網絡的時候,target也都會更新,這樣會容易導致參數不收斂。回憶在有監督學習中,標簽label都是固定的,不會隨着參數的更新而改變。

因此DQN在原來的Q網絡的基礎上又引入了一個target Q網絡,即用來計算target的網絡。它和Q網絡結構一樣,初始的權重也一樣,只是Q網絡每次迭代都會更新,而target Q網絡是每隔一段時間才會更新。DQN的target是 Rt+1+γmaxa′Q(St+1,a′;ω−)。用 ω−表示它比Q網絡的權重 ω更新得要慢一些。

理解了DQN的target之后也就可以理解DQN的Loss Function了。

2、DQN所做的改進

相比於Q-Learning,DQN做的改進:一個是使用了卷積神經網絡來逼近行為值函數,一個是使用了target Q network來更新target,還有一個是使用了經驗回放Experience replay。

由於在強化學習中,我們得到的觀測數據是有序的,step by step的,用這樣的數據去更新神經網絡的參數會有問題。回憶在有監督學習中,數據之間都是獨立的。因此DQN中使用經驗回放,即用一個Memory來存儲經歷過的數據,每次更新參數的時候從Memory中抽取一部分的數據來用於更新,以此來打破數據間的關聯。

三、算法整體流程

  • 首先初始化Memory D,它的容量為N;
  • 初始化Q網絡,隨機生成權重ω;
  • 初始化target Q網絡,權重為ω=ω;
  • 循環遍歷episode =1, 2, …, M:
  • 初始化initial state S1;
  • 循環遍歷step =1,2,…, T:
    • ϵgreedy策略生成action at:以ϵ概率選擇一個隨機的action,或選擇at=maxaQ(St,a;ω);
    • 執行action at,接收reward rt及新的state St+1;
    • 將transition樣本 (St,at,rt,St+1)存入D中
    • ---------------------------------------------------------------------------------(上下沒什么關聯,上述是在“樣本集”(Memory D)中生成一條新“樣本”,下述是在這個更新過的“樣本集”(D)中隨機選取一個“樣本”進行更新)
    • 從D中隨機抽取一個minibatch的transitions (Sj,aj,rj,Sj+1);
    • 如果 j+1步是terminal的話,yj=rj;否則,令 yj=rj+γmaxaQ(Sj+1,a;ω)
    • (yjQ(Sj,aj;ω))2關於ω使用梯度下降法進行更新;
    • 每隔C steps更新target Q網絡,ω=ω
  • End For;
  • End For.

附上原文的算法流程:

 

四、ϵgreedy策略

greedy策略,顧名思義,是一種貪婪策略。它每次都選擇使得值函數最大的action,即at=maxaQ(St,a;ω)。但是這種方式有問題,就是對於采樣中沒有出現過的(state, action) 對,由於沒有評估,沒有Q值,之后也不會再被采到。

其實這里涉及到了強化學習中一個非常重要的概念,叫Exploration & Exploitation,探索與利用。前者強調發掘環境中的更多信息,並不局限在已知的信息中;后者強調從已知的信息中最大化獎勵。而greedy策略只注重了后者,沒有涉及前者。所以它並不是一個好的策略。

而ϵ−greedy策略兼具了探索與利用,它以ϵ的概率從所有的action中隨機抽取一個,以1−ϵ的概率抽取a_t=maxa Q(St,a;ω)。

強化學習正是因為有了探索Exploration,才會常常有一些出人意表的現象,才會更加與其他機器學習不同。例如智能體在圍棋游戲中走出一些人類經驗之外的好棋局。

 

參考資料:

David Silver的課程:www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM