一、 概述
強化學習算法可以分為三大類: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),∀a∈A (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+γ⋅maxa′Q(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代表的意義: