[2]shura_R:【強化學習】Actor-Critic算法詳解
[3]Quantum cheese:深度強化學習 -- Actor-Critic 類算法(基礎篇)
[5]劉建平:強化學習(十六) 深度確定性策略梯度(DDPG)
該算法使用擬合策略函數的神經網絡作為 Actor,使用擬合狀態值函數的神經網絡作為 Critic。因此,Actor 是 Policy Based 算法,可以輕松地在連續動作空間內選擇合適的動作;Critic 是 Value Based 算法,可以實現單步或多步更新,不需要經歷完整的回合才更新。
Critic通過Q網絡來計算狀態的最優價值(評估點不一定要,也可以是狀態價值、動作價值、TD誤差等);Actor利用迭代更新策略函數的參數,然后選擇動作;執行動作進入下一個狀態,并得到reward;Critic利用reward和新狀態更新Q網絡參數,更新后再計算最優價值。
簡單來說,就是Actor 基于概率選動作,Critic 基于 Actor 的動作評判動作的得分,Actor 根據 Critic 的評分修改選動作的概率。
在Actor中,策略函數的近似如下:
在Critic中,價值函數的近似如下:
但基礎版的Actor-Critic算法由于使用兩個神經網絡,都需要梯度更新且相互依賴,因此難以收斂。
在此基礎上,DDPG算法和A3C算法都進行了改進。
DDPG算法,使用了雙Actor神經網絡和雙Critic神經網絡的方法來改善收斂性。這個方法在從DQN到Nature DQN的過程中已經用過。
A3C算法,使用了多線程的方式,一個主線程負責更新Actor和Critic的參數,多個輔線程負責分別和環境交互,得到梯度更新值,匯總更新主線程的參數。而所有的輔線程會定期從主線程更新網絡參數。這些輔線程起到了類似DQN中經驗回放的作用,但是效果更好。
在上面,我們提到了Critic評估點的選擇。在上一篇筆記中,蒙特卡洛策略梯度使用價值函數來近似代替策略梯度公式里面的,參與對策略函數參數的更新。在AC算法中,也可以用價值函數作為Critic評估點,來判斷Actor執行動作的得分。
除此之外,目前可以使用的Critic評估點主要有:(截自[4])
中文翻譯DDPG是深度確定性策略梯度。
策略梯度是Policy Based的經典算法,但被我略過了。
有確定性策略,就有隨機策略。
隨機策略在同一的策略、同一狀態,采用的動作是基于一個概率分布的,是不確定的。而確定性策略在同一狀態采用的動作是唯一確定的。
基于Q值的隨機性策略梯度的梯度計算公式:
上式中,是狀態的采樣空間,是Score function,可見隨機性策略梯度需要在整個動作的空間進行采樣。
而DPG基于Q值的確定性策略梯度的梯度計算公式:
跟隨機策略梯度的式子相比,少了對動作的積分,多了回報Q函數對動作的導數。
DDPG有4個網絡:Actor當前網絡,Actor目標網絡,Critic當前網絡,Critic目標網絡。2個Actor網絡的結構相同,2個Critic網絡的結構相同。
DDQN的當前Q網絡負責對當前狀態使用??貪婪法選擇動作,執行動作,獲得新狀態和獎勵,將樣本放入經驗回放池,對經驗回放池中采樣的下一狀態使用貪婪法選擇動作,供目標Q網絡計算目標Q值,當目標Q網絡計算出目標Q值后,當前Q網絡會進行網絡參數的更新,并定期把最新網絡參數復制到目標Q網絡。
類比DDQN,DDPG中的Critic當前網絡,Critic目標網絡和DDQN的當前Q網絡,目標Q網絡的功能定位基本類似。但在選擇動作時無需貪婪策略,而用Actor當前網絡完成。對經驗回放池中采樣的下一狀態使用貪婪法選擇動作,這部分工作由于用來估計目標Q值,因此可以放到Actor目標網絡完成。
此外,DDPG將當前網絡參數復制到目標網絡的方式改變了。
在DQN中,我們是直接把將當前Q網絡的參數復制到目標Q網絡。
但DDPG參數每次只更新一點點:
同時,為了學習過程可以增加一些隨機性,增加學習的覆蓋,DDPG對選擇出來的動作會增加一定的噪聲,即最終和環境交互的動作的表達式是:
對于Critic當前網絡,其損失函數和DQN是類似的,都是均方誤差,即:
而對于Actor當前網絡,由于是確定性策略,和PG不同,定義的損失梯度是:
算法流程,截自5:
相比Actor-Critic,A3C的優化主要有3點,分別是Critic評估點的優化、異步訓練框架、網絡結構優化。其中異步訓練框架是最大的優化。
除了A3C算法,在前面還有個A2C算法,顧名思義是用優化函數來作為Critic評估點。
Actor網絡的更新:
但是在實際操作中,一般用TD誤差代替優勢函數進行計算,因為TD誤差是優勢函數的無偏估計。
TD error: 。
其中 需要通過Critic網絡來學習得到。
因此Actor網絡的更新公式為:
Critic網絡一般使用MSE(均方誤差)損失函數來做迭代更新,均方誤差損失函數: =
上面是A2C,在A3C中采樣不是單步,而是N步。因此A3C中的優勢函數表達為:
Actor網絡更新變成了(加入了策略 的熵項,系數為 ):
A3C算法在Actor Critic算法的基礎上增加了經驗回放技術,但是是改進版的。
由于回放池數據相關性太強,A3C利用多線程的方法,同時在多個線程里分別和環境進行交互學習,每個線程都把學習的成果匯總起來保存在一個公共的神經網絡,并且定期從公共的神經網絡拿出成果指導后面的學習交互,做到了異步并發的學習模型。
這個公共的神經網絡包括Actor網絡和Critic網絡兩部分的功能。下面有n個worker線程,每個線程里有和公共的神經網絡一樣的網絡結構,每個線程會獨立的和環境進行交互得到經驗數據,這些線程之間互不干擾,獨立運行。
每個線程和環境交互到一定量的數據后,就計算在自己線程里的神經網絡損失函數的梯度,但是這些梯度并不更新自己線程里的神經網絡,而是去更新公共的神經網絡。也就是n個線程會獨立的使用累積的梯度分別更新公共部分的神經網絡模型參數。每隔一段時間,線程會將自己的神經網絡的參數更新為公共神經網絡的參數,進而指導后面的環境交互。
可見,公共部分的網絡模型就是我們要學習的模型,而線程里的網絡模型主要是用于和環境交互使用的,這些線程里的模型可以幫助線程更好的和環境交互,拿到高質量的數據幫助模型更快收斂。
在Actor Critic算法中,我們用了Actor和Critic兩個不同的網絡。在A3C中,我們把兩個網絡(類似兩個子網絡)放在一起,輸入狀態后可以同時輸出狀態價值和策略。
A3C算法流程,截自6: