機器學習:李宏毅深度強化學習筆記(二)Q-Learning

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):

  1. 基於蒙特卡洛的方法Monte-Carlo (MC)
    critic 觀察 π\piπ 進行遊戲的整個過程, 直到該遊戲回合結束再計算累積收益(通過比較期望收益和實際收益G,來訓練critic)
    Tip: 有時一個遊戲回合可能會很長,這個等到遊戲回合結束再計算收益的方法訓練起來會很慢,因此引入另外一種方法 Temporal-difference(TD)
  2. 時序分差方法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:

  1. 使用一個初始的actor π\piπ 與環境進行互動
  2. 學習該actor對應的 Q function
  3. 一定存在另外一個表現更好的actor π′\pi'π′ , 用這個更好的actor來替代原來的actor
  4. 重複上述步驟

更好的 π′\pi'π′ 的含義是,對於所有的狀態s,一定有 “採取π′\pi'π′獲得的狀態價值函數不小於π\piπ得到的狀態價值函數 ”,那麼π′\pi'π′就是由對Q求argmax返回的actor
在這裏插入圖片描述
Tips:

  1. π′\pi'π′ 不包含額外的參數,它只取決於Q
  2. 對於連續的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,對於收集數據而言是一個弊端,可以採用以下方法解決:

  1. Epsilon Greedy (在訓練的過程中 ϵ\epsilonϵ 的值會逐漸減小)
    下述公式的含義是,在採取action的時候,actor會有 1−ϵ1-\epsilon1−ϵ 的概率選擇使得Q值最大的a,隨着訓練時間變長,ϵ\epsilonϵ 的值逐漸減小,在後期actor選擇最大Q值對應的a纔會變大。
    在這裏插入圖片描述
  2. 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:

  1. 給定狀態state sts_tst​,基於使用epsilon greedy的Q採取行動action ata_tat​
  2. 得到對應的回報reward rtr_trt​ 以及新的狀態state st+1s_{t+1}st+1​
  3. 將收集到的{st,at,rt,st+1}\{s_t, a_t, r_t, s_{t+1}\}{st​,at​,rt​,st+1​}存入reply buffer
  4. 從reply buffer當中任意採樣得到{si,ai,ri,si+1}\{s_i, a_i, r_i, s_{i+1}\}{si​,ai​,ri​,si+1​}(通常是取一部分樣本)
  5. 目標值爲 y=ri+maxaQˆ(si+1,a)y = r_i + max_{a} \hat{Q}(s_{i+1},a)y=ri​+maxa​Q^​(si+1​,a)
  6. 根據目標值進行迴歸,不斷更新Q的參數,使得計算出來的 Q(si,ai)Q(s_i, a_i)Q(si​,ai​) 接近於真實值y
  7. 每C步更新一次 Qˆ=Q\hat{Q} = QQ^​=Q
    在這裏插入圖片描述

關於Q-Learning 的幾點建議

Double DQN
由於Q值總是基於使得Q最大的action得出的,因此會趨向於被高估,於是引入double DQN
double DQN的真實Q值往往比Q-learning高

  1. 爲什麼 Q 經常被高估
    因爲目標值 rt+maxQ(st+1,a)r_t+maxQ(s_{t+1}, a)rt​+maxQ(st+1​,a) 總是傾向於選擇被高估的行動action
  2. 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
具體細節將在下一個筆記中進行介紹
在這裏插入圖片描述

發佈了88 篇原創文章 · 獲贊 6 · 訪問量 8735
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章