DQN算法
教程鏈接
DataWhale強化學習課程JoyRL
https://johnjim0816.com/joyrl-book/#/ch7/main
DQN算法
DQN(Deep Q-Network) 主要創新點在于將Q-learning算法中的Q表記錄動作價值函數轉為引入深度神經網絡來近似動作價值函數 Q ( s , a ) Q(s,a) Q(s,a),從而能夠處理連續狀態情況,即較高維度的狀態空間。
因此,在Q表中我們描述狀態空間的時候一般用的是狀態個數,而在神經網絡中我們用的是狀態維度。
當然,神經網絡也存在缺點,即雖然它的輸入可以是連續的,但是輸出只能是離散的,即只能適用于離散的動作空間。如果要處理連續的動作空間,需要考慮策略梯度方法。
本質上來說強化學習和深度學習解決的問題是完全不同的,前者用于解決序列決策問題,后者用于解決靜態問題例如回歸、分類、識別等等。
- 經驗回放
狀態轉移元組 ( s t , a t , s t + 1 , r t + 1 ) (s_t, a_t, s_{t+1}, r_{t + 1}) (st?,at?,st+1?,rt+1?)強化學習是與環境實時交互得到樣本然后進行訓練的,這個樣本一般包括當前的狀態 s t s_t st?、當前動作 a t a_t at?、下一時刻的狀態 s t + 1 s_{t+1} st+1? 、獎勵 r t + 1 r_{t+1} rt+1? 以及終止狀態的標志 d o n e done done.
這樣做存在的問題?
- 在 Q-learning 算法中,每次交互得到一個樣本之后,就立馬拿去更新模型了。首先每次用單個樣本去迭代網絡參數很容易導致訓練的不穩定,從而影響模型的收斂。
- 每次迭代的樣本都是從環境中實時交互得到的,這樣的樣本是有關聯的,而梯度下降法是基于一個假設的,即訓練集中的樣本是獨立同分布的。
- 直接將 Q-learning 算法訓練的方式來更新 DQN 的模型相當于是最原始的梯度下降方式,距離目前最成熟的小批量梯度下降方式還有一定的差距。
因此DQN的訓練過程中,會把每次通過環境交互的樣本存儲在一個經驗回放中,然后每次從經驗吃中隨機抽取一批樣本來訓練網絡。
首先每次迭代的樣本都是從經驗池中隨機抽取的,因此每次迭代的樣本都是獨立同分布的,這樣就滿足了梯度下降法的假設。其次,經驗池中的樣本是從環境中實時交互得到的,因此每次迭代的樣本都是相互關聯的,這樣的方式相當于是把每次迭代的樣本都進行了一個打亂的操作,這樣也能夠有效地避免訓練的不穩定性。
- 目標網絡
其次為了保障訓練的穩定,避免Q值的估計發散。考慮使用一個每隔若干步才更新的目標網絡。目標網絡和當前網絡結構都是相同的,都用于近似 Q值,在實踐中每隔若干步才把每步更新的當前網絡參數復制給目標網絡。
練習題
- 相比于 Q ? l e a r n i n g Q-learning Q?learning算法, D Q N DQN DQN算法做了哪些改進?
DQN使用了深度神經網絡來近似動作價值函數,解決了Q-learning使用表格存儲Q值使得狀態空間過大或者狀態連續的問題。
- 為什么要在 D Q N DQN DQN算法中引入 ε ? greedy \varepsilon-\text{greedy} ε?greedy策略?
引入策略是為了平衡探索與利用的過程,如果智能體只進行利用,那么它可能會陷入局部最優,而忽略了更好的動作或狀態;如果智能體只進行探索,那么它可能會浪費時間和資源,而無法收斂到最優的策略。因此,智能體需要在探索和利用之間進行權衡,以達到最佳的學習效果。
- D Q N DQN DQN算法為什么要多加一個目標網絡?
目標網絡的引入是為了增加DQN算法的穩定性和收斂性。DQN算法的核心是用深度神經網絡來近似Q函數,即狀態-動作值函數。如果我們只用一個神經網絡來計算估計值和目標值,那么每次更新參數后,目標值也會隨之改變,這樣就會導致目標值不穩定,甚至發生震蕩,從而影響神經網絡的收斂。考慮使用一個每隔若干步才更新的目標網絡。目標網絡和當前網絡結構都是相同的,都用于近似 Q值。
- 經驗回放的作用?
深度神經網絡訓練要求數據符合獨立同分布,經驗回放的作用是消除智能體收集經驗時相鄰的兩個四元組之間的相關性,使得每次從數組里面隨機抽取的四元組都是獨立的,從而提高DQN的訓練效果。
DQN算法進階
介紹一些基于DQN算法的進階算法,例如 D o u b l e D Q N 、 D u e l i n g D Q N Double DQN、Dueling DQN DoubleDQN、DuelingDQN這些從網絡模型層面改進以及 P E R D Q N PER DQN PERDQN從經驗回放的角度改進。
- Double DQN算法。
主要貢獻在于通過引入兩個網絡用于解決Q值過估計問題.
KaTeX parse error: \tag works only in display equations
其中 y t = r t + γ max ? a Q θ ^ ( s t + 1 , a t + 1 ) y_t = r_t+\gamma\max _{a}Q_{\hat{\theta}}(s_{t+1},a_{t+1}) yt?=rt?+γamax?Qθ^?(st+1?,at+1?)是估計值,這個意思就是直接拿目標網絡中各個動作對應的最大的 Q值來當作估計值,這樣一來就會存在過估計的問題。
因此, D o u b l e D Q N Double DQN DoubleDQN的思路就是現在當前網絡中找出最大Q值對應的動作,然后再將這個動作代入到目標網絡中計算Q值。
KaTeX parse error: \tag works only in display equations
然后將這個找出來的動作代入到目標網絡里面去計算目標的 Q 值,進而計算估計值,
KaTeX parse error: \tag works only in display equations
這樣做相當于是把動作選擇和動作評估這兩個過程分離開來,從而減輕了過估計問題。即Double DQN 算法中大臣會根據自己的判斷將自己認為最優的情報匯報給皇帝,做到了情報的精簡與較高質量。
- Dueling DQN算法
Dueling DQN算法是通過優化神經網絡的結構來優化算法的。DQN算法使用的網絡架構是一個全連接網絡,包含一個輸入層、隱藏層以及輸出層。DuelingDQN則是在輸出層之前分流出價值層(估計每個狀態的價值)與優勢層(用于估計每個動作帶來的優勢)。
[外鏈圖片轉存中…(img-COZ6YXfc-1700835492466)]
去掉這里的價值層即優勢層就是普通的 Q 網絡了,另外會對優勢層做一個中心化處理,即減掉均值。
- PER DQN算法
PER DQN算法進一步優化經驗回放的設計從而提高模型的收斂能力與魯棒性。會在采樣過程中賦予經驗回放中樣本的優先級。優先級的依據來自于TD誤差。廣義的定義是值函數(包括狀態價值函數和動作價值函數)的估計值與實際值之差,在 DQN 算法中就是目標網絡計算的 Q值和策略網絡(當前網絡)計算的 Q值之差,也就是 DQN 網絡中損失函數的主要構成部分。
TD誤差越大,損失函數的值也越大,對于反向傳播的作用也就越大。 這樣一來如果 TD 誤差較大的樣本更容易被采到的話,那么算法也會更加容易收斂。
練習題
- DQN算法為什么會產生Q值的過估計問題?
DQN是直接拿目標網絡中各個動作對應的最大的 Q值來當作估計值。但目標值仍然依賴于神經網絡的輸出,而神經網絡的輸出可能存在偏差和誤差。特別是,當我們用**maxa′Q(s′,a′)**來選擇下一個狀態的最優動作時,我們可能會選擇一個Q值被高估的動作,而不是真正的最優動作。這樣,我們就會用一個高估的Q值來更新當前狀態的Q值,從而導致Q值的過估計
- 同樣是提高探索,Noisy DQN與 ε ? greedy \varepsilon-\text{greedy} ε?greedy策略有什么區別
Noisy DQN是在神經網絡的權重上添加參數化的噪音,從而使Q函數的輸出具有隨機性,而ε-greedy策略是在選擇動作時以一定的概率隨機選擇一個動作,而不是最優的動作。同時Noisy DQN的探索是基于權重的,可以影響所有的動作的選擇,而ε-greedy策略的探索是基于動作的,只影響單個的動作的選擇。因此,Noisy DQN的探索更具有全局性和多樣性,而ε-greedy策略的探索更具有局部性和隨機性。
sy DQN的探索是基于權重的,可以影響所有的動作的選擇,而ε-greedy策略的探索是基于動作的,只影響單個的動作的選擇。因此,Noisy DQN的探索更具有全局性和多樣性,而ε-greedy策略的探索更具有局部性和隨機性。