日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【强化学习】DQN及其延伸算法

發布時間:2025/4/5 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【强化学习】DQN及其延伸算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • DQN算法
        • 價值函數的近似表示
          • 提出背景:
          • 近似表示:
            • 狀態價值函數
            • 動作價值函數
        • 概述
            • 經驗回放(experience replay)
        • 算法流程
        • 小結
    • Nature DQN算法
        • 概述
            • Nature DQN的優化點:
            • Nature DQN 建模——雙網絡結構:
        • 算法流程
        • 小結
    • Double DQN算法
        • 概述
            • DDQN的優化點:
            • DDQN建模——Q值與動作解耦:
        • 算法流程
    • Prioritized Replay DQN算法
        • 概述
            • Prioritized Replay DQN的優化點:
            • Prioritized Replay DQN建模:
        • 算法流程(集成了DDQN)
    • Dueling DQN算法
        • 概述
            • Dueling DQN的優化點:
            • Dueling DQN網絡結構:
    • 總結

強化學習筆記,內容來自 劉建平老師的博客

DQN算法

價值函數的近似表示

提出背景:

? 動態規劃DP、蒙特卡羅MC、時序差分TD這些求解MDP問題的算法,使用的狀態都是有限個離散狀態,問題規模小時易求解。而 當問題規模龐大,或者狀態是連續的且離散化后依然規模龐大時,無法將Q表存在有限的內存中。因此用價值函數的近似表示來修改模 型。

?

近似表示:
狀態價值函數

? ,其中w是參數

動作價值函數

? ,其中w是參數
? 具體的近似有很多,比如:線性表示法、決策樹、最近鄰、傅里葉變換等,但是最常用的是神經網絡(DNN、CNN、RNN)。

? 對于狀態價值函數,神經網絡的輸入是狀態s的特征向量,輸出是狀態價值v(s,w)。

? 對于動作價值函數,有兩種方法,一種是輸入狀態s的特征向量和動作a,輸出對應的動作價值q(s,a,w),另一種是只輸入狀態s的特征 向量,動作集合有多少個動作就有多少個輸出q(s,ai,w)。這里隱示了動作是有限個的離散動作。

?

概述

? 基本思路來源于Q-Learning,但是和Q-Learning不同的地方在于,它的Q值的計算不是直接通過狀態值S 和動作A 來計算,而是通過上面講到的Q網絡來計算的,這個Q網絡是一個神經網絡。

經驗回放(experience replay)

? 將每次和環境交互得到的獎勵與狀態更新情況都保存起來,用于后面目標Q值的更新。Q-Learning是有一張Q表來保存所有的Q 值的當前結果的,而DQN在做動作價值函數更新時靠的就是經驗回放。從經驗池查詢得到的S、A用神經網絡結合公式計算得到的目 標Q值和直接通過Q網絡直接計算得到的Q估計值肯定是不等的(經驗池里的是之前神經網絡算出來的,其網絡參數與當前網絡的不 同,這個差值作為神經網絡的損失函數Loss Function,那么可以通過梯度的反向傳播來更新神經網絡的參數w,當w收斂后就得到的 近似的Q值計算方法,進而貪婪策略也就求出來了。

?

算法流程

輸入:迭代輪數T、狀態特征維度n、動作集A、步長α、衰減因子γ、探索率?、Q網絡結構、批量梯度下降的樣本數m

輸出:Q網絡參數w

? 1. 隨機初始化Q網絡的所有參數w,基于w初始化所有的狀態和動作對應的價值Q,清空經驗池D

? 2. for i in [ 1, T ]:

? a)初始化S為當前狀態序列的第一個狀態,拿到其特征向量?(S)

? b)把?(S)輸入Q網絡,得到所有動作對應的Q值輸出,用ε-greedy策略從中選擇出動作A

? c)執行動作A,由環境得到新狀態S‘ 對應的特征向量?(S‘)、獎勵R’、終止標志is_end

? d)將 { ?(S),A,R,?(S‘),is_end } 這個五元組存入經驗池D

? e)前進一步:S = S’

? f)從經驗池中采集m個樣本 { ?(Sj),Aj,Rj,?(Sj‘),is_endj },j = 1,2,3…,把S‘ 和A’ 輸入神經網絡結合貪婪策略計算當前目標Q 值 yj:
?
? g)把S‘ 和A’ 輸入Q網絡直接求Q估計值,由目標Q值和Q估計值求損失函數Loss Function,然后梯度反向傳播更新Q網絡參數w

? h)if S’是終止狀態,break;else 跳回步驟b

? (注意,f步和g步的Q值計算都需要用到Q網絡。另外,實際應用中為了算法較好的收斂,探索率?需要隨著迭代的進行而變小 )

?

小結

? DQN由于對價值函數做了近似表示,因此有了解決大規模強化學習問題的能力。但是DQN有個問題,就是它并不一定能保證Q網絡的收斂,也就是說不一定可以得到收斂后的Q網絡參數。這會導致訓練出的模型效果很差。針對這個問題衍生出了DQN的很多變種,比如Nature DQN(NIPS 2015)、Double DQN、Dueling DQN等。

?
?
?
?

Nature DQN算法

概述

Nature DQN的優化點:

? 目標Q值的計算用到了當前要訓練的網絡參數w:
?
? 用來計算損失函數的目標Q值和Q估計值,二者相關性太強,不利于算法收斂。因此提出Nature DQN使用兩個Q網絡來分別計 算目標Q值和Q估計值,從而減少二者間的依賴關系。

Nature DQN 建模——雙網絡結構:

? 相較于普通DQN,Nature DQN使用了兩個Q網絡,當前Q網絡用來選擇動作,更新模型參數,目標Q網絡用于計算目標Q值。 目標Q網絡的網絡參數不需要迭代更新,而是每隔一段時間從當前Q網絡復制過來,即延時更新,這樣可以減少目標Q值和當前 Q值的相關性。二者其余部分基本是完全相同的。(要注意的是,兩個Q網絡的結構是一模一樣的。這樣才可以復制網絡參數 )

?

算法流程

輸入:迭代輪數T、狀態特征維度n、動作集A、步長α、衰減因子γ、探索率?、當前Q網絡Q、目標Q網絡Q′、批量梯度下降的樣本數m、 目標Q網絡參數更新頻率C

輸出:當前Q網絡參數(目標Q網絡只是輔助工具)

? 1. 隨機初始化所有狀態和動作對應的價值Q,隨機初始化當前Q網絡的所有參數w,初始化目標Q網絡Q′的參數w′=w,清空經驗池D

? 2. for i in [ 1, T ]:

? a)初始化S為當前序列的第一個狀態,求其特征向量 ?(S)

? b)把 ?(S) 輸入當前Q網絡,得到所有動作對應的Q值輸出,用 ε-greedy 策略從中選擇出動作 A

? c)執行動作 A,由環境得到新狀態 S‘ 對應的特征向量 ?(S’)、獎勵 R、終止標志 is_end

? d)將 { ?(S),A,R,?(S‘),is_end } 這個五元組存入經驗池 D

? e)前進一步:S = S’

? f)從經驗池中采集m個樣本 { ?(Sj),Aj,Rj,?(Sj‘),is_endj },j = 1,2,3…,把S‘ 和A’ 輸入目標Q網絡結合貪婪策略計算當前目 標Q值 yj:
? (注意:公式里的是Q’ 不是Q )
? g)把S‘ 和A’ 輸入當前Q網絡求Q估計值,由目標Q值和Q估計值求損失函數Loss Function,然后梯度反向傳播更新當前Q 網絡參數w

? h)if i%C == 0:更新目標Q網絡參數w’ = w

? i)if S’是終止狀態,break;else 跳回步驟b

? (注意,f步用的是目標Q網絡、g步用的是當前Q網絡。另外,實際應用中為了算法較好的收斂,探索率?需要隨著迭代變小 )
?

小結

? Nature DQN 對 普通DQN 做了相關性方面的改進,這個改進雖然不錯,但是仍然沒有解決DQN的 很多問題,比如:

1) 目標Q值的計算是否準確?全部通過max Q來計算有沒有問題?

2) 從經驗池隨機采樣的方法好嗎?按道理不同樣本的重要性是不一樣的。

3) Q值代表狀態動作的價值,那么單獨動作價值的評估會不會更準確?

第一個問題對應的改進是Double DQN, 第二個問題的改進是Prioritised Replay DQN,第三個問題的改進是Dueling DQN。

?
?
?
?

Double DQN算法

概述

DDQN的優化點:

? 在DDQN之前,基本上所有的目標Q值都是通過貪婪法直接得到的,無論是Q-Learning、普通DQN 還是 Nature DQN。比如對 于Nature DQN,雖然用了兩個Q網絡并使用目標Q網絡計算目標Q值,其第 j 個樣本的目標Q值的計算還是貪婪法得到的:
?
? 使用max雖然可以快速讓Q值向可能的優化目標靠攏,但是很容易過猶不及,導致過度估計(Over Estimation)。所謂過度估計就 是最終得到的算法模型有很大的偏差(bias)。而DDQN通過解耦目標Q值動作的選擇和目標Q值的計算這兩步,來達到消除過度估計的 問題。

DDQN建模——Q值與動作解耦:

? DDQN 和 Nature DQN一樣,也有一樣的兩個Q網絡結構。在 Nature DQN 的基礎上,通過解耦目標Q值動作的選擇和目標Q值的計算這兩步,來消除過度估計的問題。

? Nature DQN對于非終止狀態,其目標Q值的計算式子是:
?
? 在DDQN這里,不再是直接在目標Q網絡里面找各個動作中最大Q值,而是先把S‘ 輸入當前Q網絡中找出最大Q值對應的動作amax(S′j,w),即:
?
? 然后利用這個選擇出來的動作amax(S′j,w)在目標網絡里面去計算目標Q值。即:
?
? 綜合起來寫就是:
?
? 動作A’ 是在當前Q網絡對經驗池樣本S‘ 的輸出中選擇,然后用目標Q網絡對A‘ 和S’ 算目標Q值。

?

算法流程

輸入:迭代輪數T、狀態特征維度n、動作集A、步長α、衰減因子γ、探索率?、當前Q網絡、目標Q網絡、批量梯度下降的樣本數m、目標Q網絡參數更新頻率C

輸出:當前Q網絡參數

? 1. 隨機初始化所有狀態和動作對應的價值Q,隨機初始化當前Q網絡的所有參數w,初始化目標Q網絡Q′的參數w′=w,清空經驗池D

? 2. for i in [ 1, T ]:

? a)初始化S為當前狀態序列的第一個狀態, 拿到其特征向量 ?(S)

? b)把?(S)輸入當前Q網絡,得到所有動作對應的Q值輸出,用ε-greedy策略從中選擇出動作 A

? c)執行動作 A,由環境得到新狀態 S‘ 對應的特征向量 ?(S’)、獎勵 R、終止標志 is_end

? d)將 { ?(S),A,R,?(S‘),is_end } 這個五元組存入經驗池 D

? e)前進一步:S = S’

? f)從經驗池中采集m個樣本 { ?(Sj),Aj,Rj,?(Sj‘),is_endj },j = 1,2,3…,用Q值與動作解耦的思想計算目標Q值:
?
? g)用當前Q網絡求Q估計值,由目標Q值和Q估計值求損失函數 Loss Function,然后梯度反向傳播更新當前Q網絡參數 w

? h)if i%C == 0:更新目標Q網絡參數w’ = w

? i)if S’是終止狀態,break;else 跳回步驟b

? (注意,f步兩個網絡都用了、g步只用到了當前Q網絡。另外,實際應用中為了算法較好的收斂,探索率?需要隨著迭代變小 )

?
?
?
?

Prioritized Replay DQN算法

概述

Prioritized Replay DQN的優化點:

? 普通DQN、Nature DQN、DDQN等都是通過經驗回放來采樣,進而做目標Q值的計算的。在采樣時經驗池里的所有樣本都有相 同的被采樣概率。但是注意到在經驗池里面的不同的樣本由于TD誤差的不同,對反向傳播的作用是不一樣的。TD誤差越大,對反向 傳播的作用越大。而TD誤差小的樣本對反向梯度的計算影響不大。在Q網絡中,TD誤差就是目標Q網絡計算的目標Q值和當前Q網絡 計算的Q值之間的差距。這樣如果TD誤差的絕對值|δ(t)|較大的樣本更容易被采樣,則算法會比較容易收斂。

Prioritized Replay DQN建模:

? 1. 經驗池優化:

? Prioritized Replay DQN的經驗池中每個樣本的優先級正比于TD誤差絕對值|δ(t)|。由于引入了經驗回放的優先級,Prioritized Replay DQN的經驗池和之前的其他DQN算法的經驗池不一樣,因為這個優先級大小會影響它被采樣的概率。在實際使用中,通常使 用SumTree這樣的二叉樹結構來做帶優先級的經驗回放池樣本的存儲:
?
? 所有的經驗回放樣本只保存在最下面的葉子節點上面,一個節點一個樣本,內部節點不保存樣本數據。葉子節點除了保存數據 以外,還要保存該樣本的優先級數值(TD誤差)。對于內部節點每個節點只保存自己的兒子節點的優先級值之和。以上面的樹結構 為例,根節點是42,如果要采樣一個樣本,可以在[0,42]之間做均勻采樣,采樣到哪個區間,就是哪個樣本。

? (注意:當Q網絡參數進行了梯度更新后,需要重新計算TD誤差,并將TD誤差更新到SunTree上面 )

? 2. Loss Function優化:

? 通常使用的損失函數:
?
? 考慮了樣本優先級的損失函數要加上優先權重因子:
?
? 其中wj是第j個樣本的優先級權重,由TD誤差|δ(t)|歸一化得到
?

算法流程(集成了DDQN)

輸入:迭代輪數T、狀態特征維度n、動作集A、步長α、采樣權重系數β、衰減因子γ、探索率?、當前Q網絡、目標Q網絡、批量梯度下降的樣本數m、目標Q網絡參數更新頻率C、SumTree的葉子節點數S

輸出:當前Q網絡參數

? 1. 隨機初始化所有狀態和動作對應的價值Q,隨機初始化當前Q網絡的所有參數w,初始化目標Q網絡Q′的參數w′=w

? 2. 初始化經驗池SumTree的默認數據結構,SumTree的S個葉子節點的優先級pj都初始化為1

? 3. for i in [ 1, T ]:

? a)初始化S為當前狀態序列的第一個狀態, 拿到其特征向量 ?(S)

? b)把?(S)輸入當前Q網絡,得到所有動作對應的Q值輸出,用ε-greedy策略從中選擇出動作 A

? c)執行動作 A,由環境得到新狀態 S‘ 對應的特征向量 ?(S’)、獎勵 R、終止標志 is_end

? d)將 { ?(S),A,R,?(S‘),is_end } 這個五元組存入SumTree

? e)前進一步:S = S’

? f)從SumTree中依概率 P(j) = pj / ∑(pi) 采集m個樣本 { ?(Sj),Aj,Rj,?(Sj‘),is_endj },j = 1,2,3…,用Q值與動作解耦的 思想計算目標Q值:
?
? g)用當前Q網絡求Q估計值,由目標Q值和Q估計值求帶優先權重因子wj的損失函數 Loss Function,然后梯度反向傳播更新當 前Q網絡參數 w,其中優先權重因子的公式為:
?
? h)用更新參數后的當前Q網絡重新計算經驗池中每個樣本的Q估計值,然后用目標Q值和新的Q估計值算出新的TD誤差作為優先 級更新SumTree

? i)if i%C == 0:更新目標Q網絡參數w’ = w

? j)if S’是終止狀態,break;else 跳回步驟b

? (注意,f步兩個網絡都用了、g步只用到了當前Q網絡。另外,實際應用中為了算法較好的收斂,探索率?需要隨著迭代變小 )

?
?
?
?

Dueling DQN算法

概述

Dueling DQN的優化點:

? DDQN中通過優化目標Q值的計算來優化算法,Prioritized Replay DQN中通過優化經驗回放池按權重采樣來優化算法,而在 Dueling DQN中通過優化神經網絡的結構來優化算法。

Dueling DQN網絡結構:

? Dueling DQN將Q網絡分成兩部分。第一部分僅與狀態S有關,與具體要采用的動作A無關,叫做價值函數部分,記做V(S,w,α)。 第二部分同時與狀態狀態S和動作A有關,這部分叫做**優勢函數(Advantage Function)**部分,記為A(S,A,w,β)。
?
? 最終價值函數可以重新 表示為:
?
? (其中,w是公共部分的網絡參數,而α是價值函數部分獨有的網絡參數,β是優勢函數部分獨有的網絡參數 )

? 考慮到這個式子無法辨識最終輸出里面V(S,w,α)和A(S,A,w,β)各自的作用,為了可以體現這種可辨識性(identifiability),實際使用的 組合公式如下:
?
? (其實就是對優勢函數部分做了中心化的處理 )

?
?
?
?

總結

? 這里一共總結了5種DQN算法:普通DQn、Nature DQN、DDQN、Prioritized Replay DQN、Dueling DQN,目前使用的比較主流的是后面三種算法思路,這三種算法思路也是可以混著一起使用的,相互并不排斥。

? 當然DQN家族的算法遠遠不止這些,還有一些其他的DQN算法沒有總結,比如使用一些較復雜的CNN和RNN網絡來提高DQN的表達能力,又比如改進探索狀態空間的方法等,主要是在DQN的基礎上持續優化。

? DQN算是深度強化學習的中的主流流派,代表了Value-Based這一大類深度強化學習算法。但是它也有自己的一些問題,就是絕大多數DQN只能處理離散的動作集合,不能處理連續的動作集合。雖然NAF DQN可以解決這個問題,但是方法過于復雜了。而深度強化學習的另一個主流流派Policy-Based而可以較好的解決這個問題。

總結

以上是生活随笔為你收集整理的【强化学习】DQN及其延伸算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。