https://blog.csdn.net/cindy_1102/article/details/87907470
Q-Learning介紹
基本思想
Q-learning – value-base
什麼是Critic:
critic並不直接決定採取什麼行動,但是會用來衡量一個actor的好壞
critic的輸出值取決於被評估的actor
狀態價值函數 Vπ(s)V^\pi(s)Vπ(s):
對於actor π\piπ, 給定狀態s,期望得到的累積收益,該值取決於狀態s和actor π\piπ
如何估計狀態價值函數 Vπ(s)V^\pi(s)Vπ(s):
- 基於蒙特卡洛的方法Monte-Carlo (MC)
critic 觀察 π\piπ 進行遊戲的整個過程, 直到該遊戲回合結束再計算累積收益(通過比較期望收益和實際收益G,來訓練critic)
Tip: 有時一個遊戲回合可能會很長,這個等到遊戲回合結束再計算收益的方法訓練起來會很慢,因此引入另外一種方法 Temporal-difference(TD) - 時序分差方法Temporal-difference (TD)
時序分差算法計算的是兩個狀態之間的收益差. (通過比較期望差異與實際差異r之間的差別來訓練critic)
MC vs. TD
由於從遊戲中獲取的收益是一個隨機變量,而MC方法是各狀態下收益的加總,相對而言,MC方法得到的實際累積收益G的方差會很大.
相比較而言,TD只考慮狀態之間的收益差,因此方差較小,但是由於沒有從整體收益進行考慮,因此該方法的準確性不能得到保證
狀態-行動價值方程 (another critic) Qπ(s,a)Q^\pi(s, a)Qπ(s,a):
對於給定的actor π\piπ, 在狀態s採取行動a預計能夠得到的累計收益
Q-Learning:
- 使用一個初始的actor π\piπ 與環境進行互動
- 學習該actor對應的 Q function
- 一定存在另外一個表現更好的actor π′\pi'π′ , 用這個更好的actor來替代原來的actor
- 重複上述步驟
更好的 π′\pi'π′ 的含義是,對於所有的狀態s,一定有 “採取π′\pi'π′獲得的狀態價值函數不小於π\piπ得到的狀態價值函數 ”,那麼π′\pi'π′就是由對Q求argmax返回的actor
Tips:
- π′\pi'π′ 不包含額外的參數,它只取決於Q
- 對於連續的action不適用
證明 (π′\pi'π′的存在性):
Tip1: Target network
計算Q的方式與TD類似,但是,在訓練的過程中,由 sts_tst 和 st+1s_{t+1}st+1 生成的值是不固定的,在這種情況下訓練會比較困難。
因此,在訓練的時候,用來計算 的網絡會被固定 st+1s_{t+1}st+1,稱爲固定網絡,於是,目標問題就變成了一個迴歸問題。
如下圖,當前時間t網絡生成的Q值與下一個時間網絡生成的Q值(固定)之間應該只相差rtr_trt,因此需要用真實的 rtr_trt 與模型計算出來的 rtr_trt 進行迴歸逼近。
Tip2: Exploration
對於Q方程,它是policy的基礎,這會導致actor每次都會選擇具有更大Q值的行動action,對於收集數據而言是一個弊端,可以採用以下方法解決:
- Epsilon Greedy (在訓練的過程中 ϵ\epsilonϵ 的值會逐漸減小)
下述公式的含義是,在採取action的時候,actor會有 1−ϵ1-\epsilon1−ϵ 的概率選擇使得Q值最大的a,隨着訓練時間變長,ϵ\epsilonϵ 的值逐漸減小,在後期actor選擇最大Q值對應的a纔會變大。 - Boltzmann Exploration (和 policy gradient 類似, 根據一個概率分佈來進行採樣)
Tip3: Replay Buffer
step1: 用 π\piπ 和環境互動
step2: 將步驟1中互動得到的經驗放入一個 buffer (放在buffer裏面的經驗來自不同的policy,當buffer滿了的時候,移除舊的經驗)
(這裏所說的經驗是指集合 st,at,rt,st+1{s_t, a_t, r_t, s_{t+1}}st,at,rt,st+1)
step3: 在每一次迭代中,學習 Qπ(s,a)Q^\pi (s,a)Qπ(s,a): 1. 部分採樣 2. 更新 Q-function
step4: 找到一個比 π\piπ 更好的 π′\pi'π′
step5: 重複上述步驟
典型的 Q-Learning 算法
先對Q function進行初始化,並令目標Q function和初始Q function相等。
在每個episode中,對於每個時間t:
- 給定狀態state sts_tst,基於使用epsilon greedy的Q採取行動action ata_tat
- 得到對應的回報reward rtr_trt 以及新的狀態state st+1s_{t+1}st+1
- 將收集到的{st,at,rt,st+1}\{s_t, a_t, r_t, s_{t+1}\}{st,at,rt,st+1}存入reply buffer
- 從reply buffer當中任意採樣得到{si,ai,ri,si+1}\{s_i, a_i, r_i, s_{i+1}\}{si,ai,ri,si+1}(通常是取一部分樣本)
- 目標值爲 y=ri+maxaQˆ(si+1,a)y = r_i + max_{a} \hat{Q}(s_{i+1},a)y=ri+maxaQ^(si+1,a)
- 根據目標值進行迴歸,不斷更新Q的參數,使得計算出來的 Q(si,ai)Q(s_i, a_i)Q(si,ai) 接近於真實值y
- 每C步更新一次 Qˆ=Q\hat{Q} = QQ^=Q
關於Q-Learning 的幾點建議
Double DQN
由於Q值總是基於使得Q最大的action得出的,因此會趨向於被高估,於是引入double DQN
double DQN的真實Q值往往比Q-learning高
- 爲什麼 Q 經常被高估
因爲目標值 rt+maxQ(st+1,a)r_t+maxQ(s_{t+1}, a)rt+maxQ(st+1,a) 總是傾向於選擇被高估的行動action - double DQN 是如何工作的?
使用兩個Q function(因此稱爲double), 一個用來選擇行動action,另外一個用來計算Q值,通常會選擇target network來作爲另外一個用於計算Q值的Q‘ function.
如果Q高估了 a 從而被選擇, Q’ 會給這個被選擇的a一個合適的Q值
入股Q’會高估某個action a,這個action並不會被Q選擇到
Dueling DQN
只對網絡結構進行改變!
這裏計算出來的值有兩個:
V(s): 表示靜態環境,狀態s所具有的價值.
A(s,a): 表示在狀態s下採取行動a時的 advantage function
這種類型的網絡結構可以用來學習不被行動action影響下的state的價值
通常,在計算 A(s,a) 時,使用單個行動對應的 advantage function 的值減去在該狀態下采取所有行動所獲得的 advantage function 的值的平均值,因此,對於一個狀態下的所有action,具有零和特徵。(normalise 在和 V(s)V(s)V(s)相加之間進行)
此外,如果只需要通過改變V(s)的值就能改變某個狀態下所有的Q的話,會比較方便
Prioritized Experience Replay
簡單地說,在訓練的過程中,對於在經驗buffer裏面的樣本,那些具有更好的TD 誤差的樣本會有更高的概率被採樣,這樣可以加快訓練速度。
在這個過程中,參數更新的過程也會有相應的更改。
Multi-step: Combination of MC and TD
此處,模型需要學習多步累積起來的回報reward,也就是說將MC和TD進行了折中,同時引入了一個超參數,即累積reward的步長N
Noisy Net:
Epsilon Greedy vs. Noisy Net
Epsilon Greedy: 在行動上加噪聲
即便給定相同的狀態state,agent也有可能採取不同的行動,因此,實際上這裏並沒有真正意義上的policy
Noisy Net: 在參數上加噪聲
在每個episode開始時,在Q function的參數上引入噪聲,但在每一個episode內,參數不會發生改變。給定同樣的state,agent會採取同一個action
Distributional Q-function
狀態-行動價值函數 Qπ(s,a)Q^\pi(s,a)Qπ(s,a) 是累積收益的期望值,也就是說是價值分佈的均值。然而,有的時候不同的分佈得到的均值可能一樣,但我們並不知道實際的分佈是什麼。
Distributional Q-function 認爲可以輸出Q值的分佈,當具有相同的均值時,選擇具有較小方差(風險)的那一個
但實際上,這個方法很難付諸實踐。
Rainbow:
上述圖像表明 DDQN 對於rainbow來說用處不大,這是因爲DDQN是用來解決高估問題的,而這個問題在 distributional Q function 中已經得到了解決
連續行動下的 Q-Learning
連續行動:
在某些情況下,action是一個連續向量(比如駕駛類遊戲,需要決定一個連續的角度)
在這種情況下,Q learning 並不是一個用來尋找最佳action的好方法
解決方式一:
採樣一系列行動,看哪個行動會返回最大的Q值
解決方式二:
使用梯度上升來解決這個優化問題(具有較高的計算成本)
解決方式三:
設計一個網絡來使得這個優化過程更簡單
這裏 ∑\sum∑ 和 μ\muμ 是高斯分佈的方差和均值,因此,該矩陣 ∑\sum∑ 一定是正定的。
要讓Q值較高,意味着要使得 (a−μ)2(a-\mu)^2(a−μ)2 的值更小,也就是說 a=μ\muμ.
解決方式四:
不使用 Q-learning
具體細節將在下一個筆記中進行介紹