深度學習與強化學習的兩大聯姻:DQN與DDPG的對比分析


本文首發於:行者AI

Q學習(Q-Learning)算法是提出時間很早的一種異策略的時序差分學習方法;DQN 則是利用神經網絡對 Q-Learning 中的值函數進行近似,並針對實際問題作出改進的方法;而 DDPG 則可以視為 DQN 對連續型動作預測的一個擴展;本文將從定義對比分析 DQN 和 DDPG ,更好地理解二者的算法區別與聯系。

本文首先通過簡介 DQN 和 DDPG 涉及的常見概念,接着從 DQN 開始分析理解其算法流程,然后進一步地分析 DDPG ,最后總結二者的區別與聯系。本文主要分為以下三個部分:

(1)相關概念簡介

(2)DQN 的算法分析

(3)DDPG 的算法分析

1. 相關概念簡介

DQN 和 DDPG 處理的問題不同,DQN 用於處理離散動作問題,而 DDPG 則是在其基礎上擴展用於處理連續動作問題;所以首先我們需要明白連續型動作和離散型動作的區別,以及二者在工程上是如何實現的。

1.1 離散動作

簡單的理解,離散動作是可以被分類的動作,比如向上、向下、開火、停火等動作;在實際工程中,我們使用分類類型的激活函數去表示它們,比如 softmax :

如上圖所示,輸入 x 經過任意神經網絡后,最后一層網絡層使用 softmax 激活函數,將網絡輸出分為 n 個動作類;這樣就可以輸出離散的動作了。

1.2 連續動作

離散動作是可被分類的動作,那么連續動作就是一個連續的值,比如距離、角度、力度等表示確切的值。連續動作不可分類,因此在實際工程中,我們使用返回值類型的激活函數去表示它們,比如 tanh :

如上圖所示,輸入 x 經過任意神經網絡后,最后一層網絡層使用 tanh 激活函數,將網絡輸出為一個區間化的值 value ;這樣就可以輸出連續的動作了。

2. DQN

2.1 DQN面臨的問題

DQN 是利用神經網絡對 Q-Learning 中的值函數進行近似,並針對實際問題作出改進的方法。但是我們並不能進行簡單的替代,比如定義一個分類神經網絡:

然后在定義一個類似 Q-learning 的 loss 函數,比如:\(Q(s, a) \leftarrow Q(s, a)+\alpha\left(r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime}\right)-Q(s, a)\right)\),然后再直接進行優化。這樣的方式是行不通的

在實際的工程中,DQN 的實現會遇到許多困難,其中最顯著的就是:

(1)樣本利用率低

(2)訓練得到的 value 值不穩定

其中問題(1)是序列決策的通病,由於序列決策具有嚴密的上下文聯系,因此一段很長的樣本只能算一個樣本,從而導致了樣本利用率低。

問題(2)是由於網絡輸出的 Q 值會參與動作 action 的選擇,而選擇的動作與環境交互后產生新的狀態繼續送入 Q 網絡訓練;這造成了網絡參數的輸出目標會繼續參與網絡參數的訓練。這導致了 Q 網絡輸出不穩定。

2.2 解決方式

面對以上兩個問題,DQN 分別采用了以下兩種方式解決:

(1)經驗回放( Experience Replay ),即構建一個經驗池( Replay Buffer )來去除數據相關性;經驗池是由智能體最近的經歷組成的數據集。

(2)目標網絡凍結( Freezing Target Networks ),即在一個時間段內(或者說固定步數內)固定目標中的參數,來穩定學習目標。

整個 DQN 的功能結構可以用下圖表示:

首先向 Q 網絡中輸入由動作、狀態、獎勵和結束標志組成的數據,網絡輸出一個預測值 Q_predict ,接着根據該值選擇動作 action 傳入環境中進行交互,然后得到新的狀態值 s' ,繼續送入訓練。

同時,每次與環境交互的結果也會存入固定長度的經驗池中;每隔 C 步再從 Q 網絡復制一個結構和參數相同的 Target_Q 網絡,用來穩定輸出目標,Target_Q網絡從經驗池中采樣數據,輸出一個穩定的目標值 Q_target = \(r+\gamma Q_{target}\left(\boldsymbol{s}, \boldsymbol{s}^{\prime}, \boldsymbol{a}, \boldsymbol{r}\right)\),其中\(r\)為獎勵函數值,\(\gamma\)是獎勵的折扣率,\(Q_{target}\left(\boldsymbol{s}, \boldsymbol{s}^{\prime}, \boldsymbol{a}, \boldsymbol{r}\right)\)是 Target_Q 網絡的輸出值。

整個 DQN 的 loss 函數直接取兩個預測值 Q_predict 和 Q_target 的均方誤差。

詳細的算法流程如下:

3. DDPG

在已知了 DQN 算法的基礎上,再來看 DDPG 就很簡單了。本質上 DDPG 思路沒變,但是應用變化了;DDPG 相比於 DQN 主要是解決連續型動作的預測問題。通過上面的簡介,我們可以知道,動作是連續還是離散,在實現上的區別僅在於最后激活函數的選擇上。因此,DDPG 在繼承了 DQN 的算法上,作出了一些改進。

直接上算法結構:

對比 DQN 的算法結構圖,不難發現:DDPG 在 DQN 的基礎上增加了一個 Policy 網絡及其 Policy_target 網絡,用來輸出一個連續值;這個連續值其實就是連續動作 action 。剩下的思路和 DQN 幾乎一樣。

不同之處在於,最后的 loss 函數雖然仍是求兩個預測值 Q_predict 和 Q_target 的均方誤差,但是由於 Q_predict 和 Q_target 的值是需要 Policy 網絡及其 Policy_target 網絡的輸出分別求得的。所以需要在 Q_predict 和 Q_target 中內嵌入兩個策略網絡的 loss 函數,如上圖所示。

對比 DQN ,將其算法稍作更改就可以得到一個較為詳細的 DDPG 算法流程:

說完了 DDPG 相較於 DQN 的擴展,再說說繼承。顯然的,DDPG 繼承了經驗回放( Experience Replay )目標網絡凍結( Freezing Target Networks ) 兩種方式用來解決相同的問題。

4. 總結

本文以對比的視角分別分析了 DQN 和 DDPG 兩種算法,可以看出:

(1)二者都采用了經驗回放( Experience Replay ) 和 目標網絡凍結( Freezing Target Networks )兩種方式去解決樣本、目標值不穩定的問題。

(2)二者的算法結構十分相似,都是相同的流程,只是 DDPG 在 DQN 的基礎上多了一些 Policy 系列網絡的操作。

(3)二者的 loss 函數本質上是相同的,只是 DDPG 加入了 Policy 網絡用來輸出連續動作值,因此需要再向原 MSE 中嵌入 Policy 網絡的 loss 函數。

綜上,本文得出了 DDPG 實質上是 DQN 的一種在連續動作上的擴展算法這一結論。通過對比也可以看出,DDPG 與 DQN 有着極高的算法相似性,並不只如 DDPG 論文中所說的脫胎於 DPG 算法。

本文關於 DQN 和 DDPG 兩種算法的對比理解就到這里,下一篇中我們會從代碼入手,對着兩種算法進行實現,敬請期待!

5. 參考

[1] 邱錫鵬《NNDL》

[2] Continuous control with deep reinforcement learning

[3] Playing Atari with Deep Reinforcement Learning


PS:更多技術干貨,快關注【公眾號 | xingzhe_ai】,與行者一起討論吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM