【RL】Vanilla Policy Gradient(VPG)
policy gradient的基本思想,是把總的獎勵表示為策略的函式,然後對這個函式做優化。在這一章中,我們將詳細地講解這個函式具體的形式是怎麼樣的、如何求出策略梯度,理解policy gradient這個演算法的基本框架。
關於MDP中動作與狀態是否是連續變數,一共有四種不同的組合。其中,狀態是有限分類變數的情況是不適合採用神經網路的,所以在這裡不予討論。在本章中,主要要考慮的情況是狀態
s
s
s為連續高維變數、動作
a
a
a為分類變數(有限個)的MDP。並且,設環境
P
s
,
s
′
a
P_{s, s^{\prime}}^{a}
Ps,s′a與
r
5
a
r_{5}^{a}
一 策略網路的構造
在策略梯度法中,我們首先要隨機初始化一個策略,然後不斷地讓策略沿著策略梯度的方向梯度更新,得到更好的策略,直到策略收斂。在實際的演算法中,我們必須把這個策略具體是什麼給先定義出來,然後才能開始更新。
在隨機且時齊的MDP中,策略是狀態到動作的對映。由於
a
a
a是分類變數,所以我們沒有辦法直接輸出
a
a
a,只能輸出一個條件分佈
π
(
a
∣
s
)
\pi(a \mid s)
π(a∣s)。為了擬合這個策略,我們定義一個神經網路policy net。網路的輸入是
s
s
由於網路的輸入是高維向量,輸出是類別變數,我們可以將其與分類問題進行類比。在分類問題中,我們輸入一張高維、連續的圖片,輸出它屬於各個類別的概率;而在策略梯度中,我們輸入一個高維、連續的狀態,輸出最佳應對動作的概率。如下所示:
TODO
在分類問題中,我們可以定義loss為訓練集的label與輸出的predict向量的交叉熵。對於兩個離散概率分佈 p , q p,q p,q,其交叉熵的定義是 H ( p , q ) = − Σ i p ( i ) log q ( i ) H(p, q)=-\Sigma_{i} p(i) \log q(i) H(p,q)=−Σip(i)logq(i)。例如在上面的例子中,訓練集輸出的predict是(0.78,0.15,0.03,0.04),而訓練集的label是(1,0,0,0)。則label與predict之間的交叉熵為 − log ( 0.78 ) -\log (0.78) −log(0.78)。在訓練過程中,我們通過梯度法減少交叉熵,就意味著我們會讓第一維(“牛”對應的那個維度)的0.78變得更大,而讓後面三個維度(不是“牛”對應的維度)的0.15、0.03與0.04變得更小,這樣,我們輸出的predict向量就會更加接近label(1,0,0,0),這也意味著我們網路的準確性會更高。具體而言,我們也求出交叉熵關於網路引數 w w w的梯度,並讓 w w w沿著梯度方向下降。
分類問題是一個監督學習問題,所以訓練集中每一個輸入都有“標準答案”label供我們學習。但是現在我們討論的是強化學習,根本就沒有label,我們的目的也不是使得predict接近label,而是要使得策略能取得的期望獎勵最大。對於新的、複雜的問題,我們總是希望能夠將其化歸為我們熟悉的、簡單的問題。所以我們很自然就會想到,我們能否將強化學習問題也化歸為類似於監督學習問題的形式呢?
在這裡,我們不妨先假設我們的資料集具有 ( s , a , v ) (s, a, v) (s,a,v)形式。其中的 v v v代表在 s s s處採取動作 a a a得到的“後果”。這裡的 v v v可以近似理解為 A π ( s , a ) A_{\pi}(s, a) Aπ(s,a)或 V π ( s , a ) V_{\pi}(s, a) Vπ(s,a)(事實上還是有所不同,這一點在Actor-Critic的中會詳細介紹)。我們可以粗略地想象,當某 ( s , a , v ) (s, a, v) (s,a,v)中的 v v v比0大的時候,就說明 s s s處採取 a a a是好的,我們就應該增加 π ( a ∣ s ) \pi(a \mid s) π(a∣s);而當 v v v比0小的時候,說明在 s s s處採取 a a a是不好的,我們應該減少 π ( a ∣ s ) \pi(a \mid s) π(a∣s)。當 v v v很大的時候,則說明在 s s s處採取 a a a是特別好的,我們應該以比較大的力度去增加 π ( a ∣ s ) \pi(a \mid s) π(a∣s)。換句話說,設 a a a是一個n維的one-hot向量label,網路輸出是一個n維的向量predict,則我們應該根據 v v v是否大於0決定讓predict遠離還是接近label,而我們應該根據 v v v的絕對值大小決定這種遠離或者接近的“力度”,即優化時候的步長。這樣一來,我們就可以把強化學習問題化歸成和監督學習差不多的形式。
TODO
我們還可以進一步將二者做如下對比:分類問題中,我們所追求的是“真理”。不妨將輸入的影象記為s,將輸出的類別記為a。我們想象每一條訓練集 ( s , a ) (s, a) (s,a)都有一個“權重”,但這些“權重”都是正的並且取值統統取值為1。這是因為“真理”只有0和1的分別,沒有折中委婉之處。對於每一條資料集 ( s , a , 1 ) (s, a,1) (s,a,1),我們都要更新網路引數 w w w,使得其輸出的predict能夠更加接近label,並且這種修改的力度是完全一樣的。這是由於“真理”是非此即彼的、沒有折中的,並且它對於每一條訓練集都是平等的;而對於策略網路,我們追求的不是“正確”而是“利益”。這個“利益”就是由 v v v來衡量的。不同的 ( s , a ) (s, a) (s,a)所對應的“權重” v v v是不一樣的,有正的也有負的,有大的也有小的。對於每一條資料集 ( s , a , v ) (s, a,v) (s,a,v),我們要根據 v v v是正負性決定到底是讓predict(即預測各個動作為最佳動作的概率)去接近還是去遠離label(即這個 a a a對應的one-hot向量),因為追求“利益”其實意味著趨利避害;並且,我們會根據 v v v的大小去決定這種接近或遠離的“力度”,是應該邁著大步去靠近,還是踱著碎步輕輕地接近。這是因為“利益”大的時候,我們追求的動力就大,“利益”小的時候,我們追求的動力就小。
從這個角度而言,我們可以認為分類網路是在用“權重相同的訓練集”去訓練,而策略網路則是在用“帶有不同權重的訓練集”去訓練。只要我們能夠找出衡量 ( s , a ) (s, a) (s,a)好壞的標準 v v v,得到 ( s , a , v ) (s, a, v) (s,a,v)形式的資料,就可以把訓練策略網路的過程看成“帶權重的監督學習”。但是,我們如何找出這個 v v v呢?找出 v v v之後具體應該按照什麼公式訓練呢?下面,我們要詳細地根據定義推匯出policy gradient的表示式。
二 策略梯度的計算
本節將要推匯出策略梯度的公式,並且講述計算它的方法。假設策略網路的引數為 w w w,則可以將策略記為 π w \pi_w πw。
在這裡,我們首先引入“軌道”的概念:設Agent從初始狀態開始,不斷地採取動作,進入下一個狀態,又進一步採取動作,進入再下一個狀態……這個連續的過程可以被記為 ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , … , s n , a n , r n ) \left(s_{0}, a_{0}, r_{0}, s_{1}, a_{1}, r_{1}, s_{2}, a_{2}, r_{2}, \ldots, s_{n}, a_{n}, r_{n}\right) (s0,a0,r0,s1,a1,r1,s2,a2,r2,…,sn,an,rn)(此處的 s i , a i , r i {s}_{i}, {a}_{i}, {r}_{i} si,ai,ri分別表示在第 i i i個回合中的狀態、動作與獎勵),我們將其稱為“軌道”,記錄為 τ \tau τ。
我們可以想象,在不同的 w w w下,軌道 τ \tau τ有不同的分佈,即 P π w ( τ ) P_{\pi_{w}}(\tau) Pπw(τ)。由於神經網路結構確定後, π w \pi_w πw是由 w w w決定的,我們將其記為 P w ( τ ) P_{w}(\tau) Pw(τ),它代表在我們選擇策略 π w \pi_w πw時,某一個具體的軌道出現的概率。
舉個簡單的例子,如果一條
τ
\tau
τ是
(
s
0
,
a
0
,
r
0
,
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
)
\left(s_{0}, a_{0}, r_{0}, s_{1}, a_{1}, r_{1}, s_{2}, a_{2}, r_{2}\right)
(s0,a0,r0,s1,a1,r1,s2,a2,r2),則我們用策略
π
w
\pi_w
πw走出軌道
τ
\tau
τ的概率應該是每一步中
s
i
s_i
si作出
a
i
a_i
ai決策的條件概率、產生
r
i
r_i
ri的概率,以及進入下一個
s
i
+
1
s_{i+1}
si+1的概率的聯合乘積。即:
P
w
(
τ
)
=
P
(
s
0
)
π
w
(
a
0
∣
s
0
)
P
(
r
0
∣
s
0
,
a
0
)
P
s
0
,
s
1
a
0
π
w
(
a
1
∣
s
1
)
P
(
r
1
∣
s
1
,
a
1
)
P
s
1
,
s
2
a
1
π
w
(
a
2
∣
s
2
)
P
(
r
2
∣
s
2
,
a
2
)
P_{w}(\tau)=P\left(s_{0}\right) \pi_{w}\left(a_{0} \mid s_{0}\right) P\left(r_{0} \mid s_{0}, a_{0}\right) P_{s_{0}, s_{1}}^{a_{0}} \pi_{w}\left(a_{1} \mid s_{1}\right) P\left(r_{1} \mid s_{1}, a_{1}\right) P_{s_{1}, s_{2}}^{a_{1}} \pi_{w}\left(a_{2} \mid s_{2}\right) P\left(r_{2} \mid s_{2}, a_{2}\right)
Pw(τ)=P(s0)πw(a0∣s0)P(r0∣s0,a0)Ps0,s1a0πw(a1∣s1)P(r1∣s1,a1)Ps1,s2a1πw(a2∣s2)P(r2∣s2,a2)
這其中,
P
(
s
0
)
P\left(s_{0}\right)
P(s0)表示初始狀態的分佈,一般這是給定的。由於轉移概率
P
s
,
5
′
a
P_{s, 5^{\prime}}^{a}
Ps,5′a與獎勵的分佈
P
(
r
∣
s
,
a
)
P(r \mid s, a)
P(r∣s,a)都是給定的,所以,軌道的分散式
P
w
(
τ
)
P_{w}(\tau)
Pw(τ)中,只有
π
w
(
a
i
∣
s
i
)
\pi_{w}\left(a_{i} \mid s_{i}\right)
πw(ai∣si)的部分是會隨著引數
w
w
w的變化而變化的。
對於一般的
τ
\tau
τ,可以將其表示為環境概率與決策概率的連乘形式:
P
w
(
τ
)
=
Π
i
=
0
n
π
w
(
a
i
∣
s
i
)
Π
i
=
0
n
−
1
P
s
i
,
s
i
+
1
a
i
Π
i
=
0
n
P
(
r
i
∣
s
i
,
a
i
)
P_{w}(\tau)=\Pi_{i=0}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right) \Pi_{i=0}^{n-1} P_{s_{i}, s_{i+1}}^{a_{i}} \Pi_{i=0}^{n} P\left(r_{i} \mid s_{i}, a_{i}\right)
Pw(τ)=Πi=0nπw(ai∣si)Πi=0n−1Psi,si+1aiΠi=0nP(ri∣si,ai)
以上是一條很重要的公式,即“軌道
τ
\tau
τ關於
w
w
w分佈的公式”。我們可以看出,軌道分佈中受到
w
w
w影響的只有“主觀決策”對應的第一部分,即
Π
i
=
0
n
π
w
(
a
i
∣
s
i
)
\Pi_{i=0}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right)
Πi=0nπw(ai∣si),而其他兩部分都是由“客觀環境”所決定的。
我們這裡假設目標是極大化獎勵總和,即最大化的目標是 r ( τ ) = Σ t r t r(\tau)=\Sigma_{t} r_{t} r(τ)=Σtrt,而非隨著時間衰減的效用 Σ t γ t r t \Sigma_{t} \gamma^{t} r_{t} Σtγtrt(也可以理解為預設 γ = 1 \gamma=1 γ=1)。有人或許會認為,這種設定是不太合乎情理的,因為為了保證目標的期望有限,我們應該引入小於1的衰減因子 γ \gamma γ(如果設定時間上限,又會導致策略非時齊,也不太好)。在DQN中一直預設 γ < 1 \gamma < 1 γ<1。但是為什麼在policy gradient中,許多資料都預設 γ = 1 \gamma = 1 γ=1呢?原因如下:
我們說過,基於策略是一大類的強化學習的演算法,VPG只是其中最簡單的一種。在後面我們將會看到,如果設定 γ = 1 \gamma = 1 γ=1,這可以使得VPG與Actor-Critic演算法等價(這也意味著 ( s , a , v ) (s,a,v) (s,a,v)形式的資料集中,代表 ( s , a ) (s,a) (s,a)的“後果”的 v v v等於 Q π ( s , a ) Q_{\pi}(s, a) Qπ(s,a)或 A π ( s , a ) A_{\pi}(s, a) Aπ(s,a));如果設定 γ < 1 \gamma<1 γ<1,則會和Actor-Critic有所差別(這意味著 v v v會變成別的東西)。這一點在探究Actor-Critic演算法的時候,就可以從公式中看出其中的緣由。正是由於這個原因,所以絕大多數policy gradient的材料中會設定 γ < 1 \gamma<1 γ<1,使得我們對基於策略的方法能夠有一個比較一致的理解,並且也使得後面推導的公式會相對簡單。在這種設定下,我們要最大化的目標為 r ( τ ) r(\tau) r(τ),即 Σ t r t \Sigma_{t} r_{t} Σtrt。但事實上,即使設定 γ < 1 \gamma<1 γ<1,仍然可以按照下面的思路推匯出類似的公式。
在策略
π
w
\pi_w
πw下,設我們的期望效用為
J
J
J,則
J
J
J應該是一個關於無窮維策略
π
\pi
π的泛函
J
(
π
)
J(\pi)
J(π)。由於策略是神經網路,所以策略
π
w
\pi_w
πw事實上由神經網路的高維引數
w
w
w決定的,所以我們可以認為
j
j
j是關於
w
w
w的有限維函式
J
(
w
)
J(w)
J(w)。利用
r
(
τ
)
r(\tau)
r(τ)與
P
w
(
τ
)
P_w(\tau)
Pw(τ),我們可以將期望效用
J
J
J寫成如下的形式:
J
(
w
)
=
∫
τ
P
w
(
τ
)
r
(
τ
)
d
τ
J(w)=\int_{\tau} P_{w}(\tau) r(\tau) d \tau
J(w)=∫τPw(τ)r(τ)dτ
這個積分式的意思是,對於所有可能的軌道
τ
\tau
τ,將其發生的概率
P
w
(
τ
)
P_{w}(\tau)
Pw(τ)與其對應的獎勵
r
(
τ
)
r(\tau)
r(τ)相乘並求積分。顯然,這個積分式表示的意思是(在引數
w
w
w下)Agent獲得的獎勵總和的期望,即:
J
(
w
)
=
E
w
(
r
(
τ
)
)
J(w)=E_{w}(r(\tau))
J(w)=Ew(r(τ))
我們想求的“策略梯度”就是
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)。在這裡,積分與梯度符號顯然可以交換次序。並且,由於只有
P
w
(
τ
)
P_{w}(\tau)
Pw(τ)含有
w
w
w,而
r
(
τ
)
r(\tau)
r(τ)不含
w
w
w,所以:
∇
w
J
(
w
)
=
∫
τ
(
∇
w
P
w
(
τ
)
)
r
(
τ
)
d
τ
\nabla_{w} J(w)=\int_{\tau}\left(\nabla_{w} P_{w}(\tau)\right) r(\tau) d \tau
∇wJ(w)=∫τ(∇wPw(τ))r(τ)dτ
我們注意到,上式有一個
∇
w
P
w
(
τ
)
\nabla_{w} P_{w}(\tau)
∇wPw(τ)的部分。我們可以利用上面的第一個公式將
P
w
(
τ
)
P_{w}(\tau)
Pw(τ)展開,並且進一步化簡。但是,這樣化簡得到的表示式比較複雜,很難計算。我們應該尋找一種更加“聰明”的方法,使得我們能更加方便地計算
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)。
注意到,上面的
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)仍然是一個積分式,積分的下標是
τ
\tau
τ。所以我們很自然地希望將其表示為
∫
τ
P
w
(
τ
)
∇
w
f
(
τ
)
d
τ
\int_{\tau} P_{w}(\tau) \nabla_{w} f(\tau) d \tau
∫τPw(τ)∇wf(τ)dτ的形式,其中的
f
f
f是某個函式。根據期望的定義,這個積分的結果就是
E
w
[
∇
w
f
(
τ
)
]
E_{w}\left[\nabla_{w} f(\tau)\right]
Ew[∇wf(τ)]。這樣的形式更加簡便,並且也更容易計算——只要我們用當前的策略與環境互動取樣很多
τ
\tau
τ,並計算出梯度
∇
w
f
(
τ
)
\nabla_{w} f(\tau)
∇wf(τ)的均值,就能將其作為
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)的一個估計(因為在這種情況下,軌道
τ
\tau
τ是服從
P
w
(
τ
)
P_w(\tau)
Pw(τ)分佈的)。為此,我們利用如下的恆等式:
P
w
(
τ
)
∇
w
log
P
w
(
τ
)
=
P
w
(
τ
)
∇
w
P
w
(
τ
)
P
w
(
τ
)
=
∇
w
P
w
(
τ
)
P_{w}(\tau) \nabla_{w} \log P_{w}(\tau)=P_{w}(\tau) \frac{\nabla_{w} P_{w}(\tau)}{P_{w}(\tau)}=\nabla_{w} P_{w}(\tau)
Pw(τ)∇wlogPw(τ)=Pw(τ)Pw(τ)∇wPw(τ)=∇wPw(τ)
現在,將其代入之前我們關於
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)的式子中,可以得到:
∇
w
J
(
w
)
=
∫
γ
(
∇
w
P
w
(
τ
)
)
r
(
τ
)
d
τ
=
∫
γ
P
w
(
τ
)
∇
w
log
(
P
w
(
τ
)
)
r
(
τ
)
d
τ
=
E
w
[
∇
w
log
(
P
w
(
τ
)
)
r
(
τ
)
]
\nabla_{w} J(w)=\int_{\gamma}\left(\nabla_{w} P_{w}(\tau)\right) r(\tau) d \tau=\int_{\gamma} P_{w}(\tau) \nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau) d \tau=E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau)\right]
∇wJ(w)=∫γ(∇wPw(τ))r(τ)dτ=∫γPw(τ)∇wlog(Pw(τ))r(τ)dτ=Ew[∇wlog(Pw(τ))r(τ)]
上面的式子讓策略梯度化為了期望的形式,這已經足夠簡單。但是,這式子中
∇
w
log
(
P
w
(
τ
)
)
\nabla_{w} \log (P_{w}(\tau))
∇wlog(Pw(τ))這個部分還是讓我們難免有些“摸不著頭腦”。所以,我們要將上面第一條公式代入以展開
P
w
(
τ
)
P_w(\tau)
Pw(τ),化簡
∇
w
log
(
P
w
(
τ
)
)
\nabla_{w} \log (P_{w}(\tau))
∇wlog(Pw(τ))。
我們說過,
P
w
(
τ
)
P_w(\tau)
Pw(τ)可以展開成為一系列連乘的形式,其中與
w
w
w有關的部分只有
Π
i
=
1
n
π
w
(
a
i
∣
s
i
)
\Pi_{i=1}^{n} \pi_{w}\left(a_{i} \mid s_{i}\right)
Πi=1nπw(ai∣si)。取了
log
\log
log之後連乘變成求和的形式,即
log
(
P
w
(
τ
)
)
\log (P_{w}(\tau))
log(Pw(τ))中所有與
w
w
w有關的部分為
Σ
i
=
1
n
log
(
π
w
(
a
i
∣
s
i
)
)
\Sigma_{i=1}^{n} \log \left(\pi_{w}\left(a_{i} \mid s_{i}\right)\right)
Σi=1nlog(πw(ai∣si))。而由於我們要求的是
∇
w
log
(
P
w
(
τ
)
)
\nabla_{w} \log (P_{w}(\tau))
∇wlog(Pw(τ)),所以只用考慮與
w
w
w有關的部分。我們可以得到:
∇
w
log
(
P
w
(
τ
)
)
=
Σ
i
=
1
n
∇
w
log
π
w
(
a
i
∣
s
i
)
\nabla_{w} \log \left(P_{w}(\tau)\right)=\Sigma_{i=1}^{n} \nabla_{w} \log \pi_{w}(a_{i} \mid s_{i})
∇wlog(Pw(τ))=Σi=1n∇wlogπw(ai∣si)
將這個等式代入
∇
w
J
(
w
)
\nabla_{w} J(w)
∇wJ(w)中,我們終於可以得到我們想要的結果。以下便是我們經過漫長的推導之後得到的最終結果:
∇
w
J
(
w
)
=
E
w
[
(
Σ
i
=
1
n
∇
w
log
π
w
(
a
i
∣
s
i
)
)
r
(
τ
)
]
\nabla_{w} J(w)=E_{w}[(\Sigma_{i=1}^{n} \nabla_{w} \log \pi_{w}\left(a_{i} \mid s_{i}\right))r(\tau)]
∇wJ(w)=Ew[(Σi=1n∇wlogπw(ai∣si))r(τ)]
或簡記為:
∇
w
J
(
w
)
=
E
w
[
∇
w
log
(
P
w
(
τ
)
)
r
(
τ
)
]
\nabla_{w} J(w)=E_{w}\left[\nabla_{w} \log \left(P_{w}(\tau)\right) r(\tau)\right]
∇wJ(w)=Ew[∇wlog(Pw(τ))r(τ)]
這就是策略梯度的表示式。結合這個表示式,我們就可以得到策略梯度法的基本框架。下面,我們來詳細地講解一下整個演算法是如何進行的。
三 策略梯度演算法
首先,我們要定義一個策略網路,並隨機初始化網路引數。與其他的深度學習問題類似,我們要根據問題的複雜程度來設計網路的層數、每一層的神經元個數,以使得其能夠與問題複雜度相匹配的擬合能力。當然,這個過程可能需要多次除錯。然後,我們進行很多步如下的迭代,直到網路引數收斂。
TODO