強化學習——策略梯度與Actor-Critic演算法

1 學習目標

(1) 理解基於值函數的方法(Value-Based method)和基於策略的方法(Policy-Based method)的不同;

(2) 理解策略梯度法(Policy Gradient)的目標函數和優化思路;

(3) 理解蒙特卡洛策略梯度和Actor-Critic方法;

2 基於策略的方法

前面學習的一些強化學習演算法比如Q-Learning,SARSA,DQN都是基於價值的演算法,即得到Q表或者近似一個價值函數,然後根據這個學到的Q表或者Q函數來制定策略。而本文要介紹的演算法就是另一個思路了,直接學習策略函數

基於價值的方法比如DQN,輸入的是狀態,輸出的是Q值,有了狀態-動作對到Q值的映射,在某個狀態下做決策的時候就選擇Q值最大的動作即可,這就是DQN的策略。但是有這樣幾個問題:

① 在估計值函數的時候一個任意小的變化可能導致對應動作被選擇或者不被選擇,這種不連續的變化是致使基於值函數的方法無法得到收斂保證的重要因素。

② 選擇最大的Q值這樣一個搜索過程在高緯度或者連續空間是非常困難的;

③ 無法學習到隨機策略,有些情況下隨機策略往往是最優策略。以David Silver課件中的一個例子說明:

agent在迷宮中移動尋找寶藏,由於迷宮的對稱結構,當agent處在灰色格子上時是無法分辨自己處於哪個灰色格子上的,所以最後學習到的策略可能是這樣:

當初始位置在第一個白格子上,就會陷入死循環,但是隨機策略就會好一些:

因為學出來的策略不是確定性輸出一個動作,而是動作的概率。

針對以上問題,有人就提出了基於策略的方法,即輸入狀態,直接學習策略。那我們下面就來揭開策略梯度的面紗。

3 策略梯度

思路很直接,我們的最終目標是使回報最大,於是就沖著這個目標制定目標函數  Jleft( 	heta 
ight) 通過訓練,得到一個參數化的策略函數  pi _{	heta}left( s,a 
ight) =mathbb{P}left[ a|s,	heta 
ight] 。對於不同的問題類型,有不同的目標函數可以選擇:

① 在能夠產生完整Episode的環境下,可以使用start value

\ J_1left( 	heta 
ight) =V^{pi _{	heta}}left( s_1 
ight) =mathbb{E}_{pi _{	heta}}left[ v_1 
ight]

② 在連續的環境下,可以使用average value

 \J_{avV}left( 	heta 
ight) =sum_s{d^{pi _{	heta}}left( s 
ight) V^{pi _{	heta}}left( s 
ight)}

③ 或者使用Average reward per time-step

\ J_{avR}left( 	heta 
ight) =sum_s{d^{pi _{	heta}}left( s 
ight)}sum_a{pi _{	heta}left( s,a 
ight) mathcal{R}_{s}^{a}}

有了目標函數,我們當前的任務就是使目標函數最大化,也就是尋得一組參數向量  	heta ,使得目標函數最大。這實際上做的是改變策略概率而非改變行動軌跡。很自然的,下一步就是使用梯度下降(上升)法來完成這個工作,問題就轉向  
abla _{	heta}Jleft( 	heta 
ight) 的求解。

我就不廢話了,直接給出策略梯度定理

對於任何可微的策略 pi _{	heta}left( s,a 
ight) ,對於任何策略的目標函數 J_1,J_{avR} 或者 J_{avV}/left( 1-gamma 
ight) ,其梯度都如下式所示,轉換成了策略梯度

\
abla _{	heta}Jleft( 	heta 
ight) =mathbb{E}_{pi _{	heta}}left[ 
abla _{	heta}log pi _{	heta}left( s,a 
ight) Q^{pi _{	heta}left( 	heta 
ight)}left( s,a 
ight) 
ight]

回想一下監督學習演算法,我們有大量的樣本數據,並且數據都有標籤,於是在訓練的時候知道當前參數下得到的結果是好是壞(能與監督信息對比),然後可以根據對比結果調整參數優化的方向(梯度)。而強化學習里沒有一個監督信息告訴我們當前的策略是好是壞,我們得去計算價值函數來起到標籤的作用

一般地,針對離散行為常用softmax策略,即最後得到的 pi _{	heta}left( s,a 
ight) 是每一個離散行為應該以怎樣的概率來執行。而對於連續問題,則使用高斯策略,因為行為對應於某一個數值,所以學習到的策略是一個高斯分布,通常是對該分布的均值進行參數化表示。

4 蒙特卡洛策略梯度(REINFORCE)

演算法描述如下:

首先隨機初始化參數 	heta ,對每個episode,計算其t=1到t=T-1的return  v_t ,然後使用隨機梯度上升法更新參數。對於策略梯度定理公式里的期望,我們通過採樣的形式來替代,即使用t時刻的return作為當前策略下動作價值函數的無偏估計

但是,REINFORCE存在如下三個問題:

① 由於agent在一個episode中會採取很多動作,我們很難說哪個動作對最後結果是有用的,換句話說,這種演算法存在高方差(variance);

② 收斂速度慢;

③ 只在這種episodic環境下能用。

為了解決上述問題,於是提出了Actor-Critic演算法。

5 Actor-Critic演算法

Actor是演員的意思,Critic是評論家的意思,顧名思義,這種演算法就是通過引入一種評價機制來解決高方差的問題。具體來說,Critic就類似於策略評估,去估計動作值函數:

 \Q_wleft( s,a 
ight) approx Q^{pi _{	heta}}left( s,a 
ight)

於是,Actor-Critic演算法中就有兩組參數:

Critic:更新動作值函數參數 w

Actor:以Critic所指導的方向更新策略參數  	heta

所以說,Actor-Critic演算法是一種近似的策略梯度

\
abla _{	heta}Jleft( 	heta 
ight) approx mathbb{E}_{pi _{	heta}}left[ 
abla _{	heta}log pi _{	heta}left( s,a 
ight) Q_wleft( s,a 
ight) 
ight]

策略評估在前幾講都有提到,也就是衡量一個策略好壞的過程,可以是MC策略評估,TD或者TD(  lambda )。舉個例子,假設用一個線性函數來近似動作值函數  Q_wleft( s,a 
ight) =phi left( s,a 
ight) ^Tw ,那麼Critic過程就是用線性TD(0)來更新  w ,Actor過程就是用策略梯度來更新

 	heta ,具體偽代碼如下:

前面提到了,這種演算法實際上用了一個近似的策略梯度,這樣會引入偏差(bias),導致最後無法收斂到一個合適的策略,一個解決方法就是設計 Q_wleft( s,a 
ight) 時滿足下面兩個條件(Compatible Function Approximation Theorem):

① 近似價值函數的梯度完全等同於策略函數對數的梯度

\
abla _wQ_wleft( s,a 
ight) =
abla _{	heta}log pi _{	heta}left( s,a 
ight)

② 值函數參數 w 使得均方差最小

 \varepsilon =mathbb{E}_{pi _{	heta}}left[ left( Q^{pi _{	heta}}left( s,a 
ight) -Q_wleft( s,a 
ight) 
ight) ^2 
ight]

滿足以上兩個條件,那麼  
abla _{	heta}Jleft( 	heta 
ight) =mathbb{E}_{pi _{	heta}}left[ 
abla _{	heta}log pi _{	heta}left( s,a 
ight) Q_wleft( s,a 
ight) 
ight] 。簡單的證明如下:

6 Actor-Critic with Baseline

除了引入Critic過程來減小方差,同時也可以採用一種從  Q^{pi _{	heta}}left( s,a 
ight) 減去Baseline的方法來減小方差。具體地,就是從策略梯度中減去baseline函數  Bleft( s 
ight) ,要求這一函數僅與狀態有關,與行為無關,因而這樣就不會改變梯度本身。

 Bleft( s 
ight) 一個比較好的選擇是狀態值函數  V^{pi _{	heta}}left( s 
ight) ,基於以上討論,我們引入一個advantage function函數  A^{pi _{	heta}}left( s,a 
ight) ,定義

\A^{pi _{	heta}}left( s,a 
ight) =Q^{pi _{	heta}}left( s,a 
ight) -V^{pi _{	heta}}left( s 
ight)

 \
abla _{	heta}Jleft( 	heta 
ight) =mathbb{E}_{pi _{	heta}}left[ 
abla _{	heta}log pi _{	heta}left( s,a 
ight) A^{pi _{	heta}}left( s,a 
ight) 
ight]

好了,接下來的問題就是 A^{pi _{	heta}}left( s,a 
ight) 怎麼去近似了,因為它既有動作值函數,又有狀態值函數,是不是就需要兩組參數來分別近似這兩個函數呢?可以這樣做,但一般我們用TD error來近似 A^{pi _{	heta}}left( s,a 
ight) ,因為它是  A^{pi _{	heta}}left( s,a 
ight) 的無偏估計。

\ delta ^{pi _{	heta}}=r+gamma V^{pi _{	heta}}left( s 
ight) -V^{pi _{	heta}}left( s 
ight)

 mathbb{E}_{pi _{	heta}}left[ delta ^{pi _{	heta}}|s,a 
ight] =mathbb{E}_{pi _{	heta}}left[ r+gamma V^{pi _{	heta}}left( s 
ight) |s,a 
ight] -V^{pi _{	heta}}left( s 
ight) \ =Q^{pi _{	heta}}left( s,a 
ight) -V^{pi _{	heta}}left( s 
ight) \ =A^{pi _{	heta}}left( s,a 
ight)

因此有 
abla _{	heta}Jleft( 	heta 
ight) =mathbb{E}_{pi _{	heta}}left[ 
abla _{	heta}log pi _{	heta}left( s,a 
ight) delta ^{pi _{	heta}} 
ight] ,在實際應用中,可以採用近似的TD error,即 delta ^{pi _{	heta}}=r+gamma Vleft( s 
ight) -Vleft( s 
ight)

不論是Actor還是Critic,我們都可以在不同時間尺度(time-scales)上近似策略梯度或是值函數。直接引用David課程的幾頁PPT:

最後課程還提了一下Natural Actor Critic演算法,這裡就不展開說了。

7 總結

這一節應該是目前最難理解的一個小節了,需要重點掌握的是Actor-Critic演算法,其核心是策略梯度定理。簡單的說,以前基於值函數近似的演算法是先近似出一個Q函數,然後用  varepsilon -greedy 策略去選擇要執行的動作,由於種種不足,現在我們直接近似出一個策略函數,蒙特卡洛策略梯度演算法雖然計算的策略梯度是無偏的,但是方差大,速度慢,因此我們通過減去Baseline來減小方差,並且引入Critic過程進一步優化,形成了Actor-Critic演算法,其中也包括了策略梯度的近似,這樣我們就可以利用其能夠Bootstrapping的性質加快演算法速度,並能夠在non-episodic環境下得以使用。策略梯度定理幫助我們把Q函數和策略梯度聯繫了起來,但是我們並不知道真實的Q函數,所以還得去近似估計,想要得到一個無偏的估計,就得滿足Compatible Function Approximation Theorem。

Critic實際上就是策略評估,它引導Actor參數梯度方向走向更好。最後引用David的一頁PPT作為結束吧。

參考:

[1] Reinforcement Learning: An Introduction - Chapter 13: Policy Gradient Method

[2] David Silvers RL Course Lecture 7 - Policy Gradient

[3] 《強化學習》第七講 策略梯度

[4] 深度增強學習之Policy Gradient方法1

[5] Sutton R S. Policy Gradient Methods for Reinforcement Learning with Function Approximation[J]. Submitted to Advances in Neural Information Processing Systems, 1999, 12:1057-1063.

[6] Peters J, Schaal S. Reinforcement learning of motor skills with policy gradients[J]. Neural Netw, 2008, 21(4):682-697.

[7] Siyi LI的回答

[8] Whats the difference between Reinforce and Actor-Critic?

推薦閱讀:

pytorch中如何處理RNN輸入變長序列padding
損失函數——Hinge
Training/Validation/Test Dataset
如何測量這個世界的混亂-1-定義混亂
機器學習基石筆記14:正則化(Regularization)

TAG:機器學習 | 強化學習ReinforcementLearning | 深度學習DeepLearning |