強化學(xué)習(xí)4-PPO算法

策略梯度算法

假設(shè)一條馬爾科夫軌跡為 \tau,那么該軌跡發(fā)生的概率為:p_\theta (\tau)=p(s_1)\prod_{t=1}^{T}p(a_t|s_t;\theta )p(s_{t+1}|s_t,a_t)

不考慮折扣衰減,該軌跡獲得的收益為累計回報:R(\tau )=\sum_{t=0}^{T}r_t

由于馬爾科夫鏈?zhǔn)遣蓸拥玫降?,因此?dāng)前策略可獲得的期望獎勵為:
\overline{R_\theta } =\sum_{\tau}^{} p_\theta (\tau )R(\tau ) = \mathbb{E}_{\tau \sim p_\theta (\tau )} [R(\tau ) ]

策略梯度定義:
\nabla_{\theta} J(\theta)=\nabla_{\theta} \mathbb{E}[R(\tau)]=\nabla_{\theta} \sum_{\tau} p_{\theta}(\tau) R(\tau)=\sum_{\tau} \nabla_{\theta} p_{\theta}(\tau) R(\tau)

根據(jù)公式:\nabla \log{f(x)}=\frac{1}{f(x)}\nabla {f(x)},我們的目標(biāo)是最大化期望值,故我們對目標(biāo)函數(shù)進(jìn)行求導(dǎo):
\begin{aligned} \nabla \overline{R}_{\theta} & =\sum_{\tau} R(\tau) \nabla p_{\theta}(\tau) \\ & =\sum_{\tau} R(\tau) p_{\theta}(\tau) \frac{\nabla p_{\theta}(\tau)}{p_{\theta}(\tau)} \\ & =\sum_{\tau} R(\tau) p_{\theta}(\tau) \nabla \log p_{\theta}(\tau) \\ & =\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \end{aligned}

最終策略梯度變成了求R(\tau) \nabla \log p_{\theta}(\tau)的期望,我們可以可以通過經(jīng)驗平均進(jìn)行估計。我們可以使用當(dāng)前策略\pi_\theta采樣N條軌跡\tau后,利用N軌跡的經(jīng)驗平均逼近策略梯度(具體公式推導(dǎo)可查看上篇文檔):
\begin{aligned} \nabla \overline{R}_{\theta} & =\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] \approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ & =\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \end{aligned}

一個PG方法的完整流程如下:


首先采集數(shù)據(jù),然后基于前面得到的梯度提升的式子更新參數(shù),隨后再根據(jù)更新后的策略再采集數(shù)據(jù),再更新參數(shù),如此循環(huán)進(jìn)行。
注意到圖中的大紅字only used once,因為在更新參數(shù)后,策略已經(jīng)變了,而先前的數(shù)據(jù)是基于更新參數(shù)前的策略得到的。

A2C方法

從上面可知:PG方法在更新策略時,基本思想就是增加reward大的動作出現(xiàn)的概率,減小reward小的策略出現(xiàn)的概率。

增加基線

假設(shè)現(xiàn)在有一種情況,我們的reward在無論何時都是正的,對于沒有采樣到的動作,它的reward是0。因此,如果一個比較好的動作沒有被采樣到,而采樣到的不好的動作得到了一個比較小的正reward,那么沒有被采樣到的好動作的出現(xiàn)概率會越來越小,這顯然是不合適的,因此我們需要增加一個獎勵的基線,讓reward有正有負(fù)。

\nabla \overline{R}_{\theta} =\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(R(\tau^{n}) - b) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n}),b \approx E [R(\tau )]

增加折扣因子

該軌跡獲得的收益為累計回報:R(\tau )=\sum_{t=0}^{T}r_t,它是有問題的,當(dāng)前動作與過去時刻的回報可能并沒有多大的聯(lián)系,故我們可以把每個動作的reward期望值修改為,該動作之后接收到的reward值,并且按照累積折算進(jìn)行計算,因為某個動作在時間間隔上產(chǎn)生的影響,應(yīng)該是越接近,影響越大。即R(\tau )=\sum_{{t}'=t}^{T_n} \gamma^{{t}' - t} r_{{t}'}^n。因此梯度表示為:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(\sum_{{t}'=t}^{T_n} \gamma^{{t}' - t} r_{{t}'}^n - b) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

優(yōu)勢函數(shù)

在AC方法中,使用Q^{\pi \theta}(s_{t}^{n}, a_{t}^{n})來替代R(\tau^{n}),同時使用一個獨立的Critic網(wǎng)絡(luò)來計算該Q函數(shù)值?,F(xiàn)在,我們假設(shè)基準(zhǔn)偏置b表示為狀態(tài)的價值函數(shù)V^{\pi \theta}(s_{t}^{n}),因此梯度可以表示為:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(Q^{\pi \theta}(s_{t}^{n}, a_{t}^{n}) - V^{\pi \theta}(s_{t}^{n})) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

這時需要分別計算兩個網(wǎng)絡(luò):狀態(tài)-動作價值函數(shù)Q和狀態(tài)函數(shù)V,再根據(jù)貝爾曼方程,上式表示為:
\nabla \overline{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}(r_t^n + V^{\pi}(s_{t+1}^n) - V^{\pi}(s_{t}^{n})) \nabla \log p_{\theta}(a_{t}^{n} \mid s_{t}^{n})

以上就是優(yōu)勢函數(shù)的概念:在狀態(tài)s_t下,選擇動作a_t比其他動作的優(yōu)勢有多少,即A(s, a)=Q(s, a) - V(s)。

重要性采樣

在第一節(jié)的PG算法中有個問題,PG方法一個很大的缺點就是參數(shù)更新慢,因為我們每更新一次參數(shù)都需要進(jìn)行重新的采樣,這其實是中on-policy的策略,即我們想要訓(xùn)練的agent和與環(huán)境進(jìn)行交互的agent是同一個agent;與之對應(yīng)的就是off-policy的策略,即想要訓(xùn)練的agent和與環(huán)境進(jìn)行交互的agent不是同一個agent,簡單來說,就是拿別人的經(jīng)驗來訓(xùn)練自己。
舉個下棋的例子,如果你是通過自己下棋來不斷提升自己的棋藝,那么就是on-policy的,如果是通過看別人下棋來提升自己,那么就是off-policy的。

那么為了提升我們的訓(xùn)練速度,讓采樣到的數(shù)據(jù)可以重復(fù)使用,我們可以將on-policy的方式轉(zhuǎn)換為off-policy的方式。即我們的訓(xùn)練數(shù)據(jù)通過另一個Actor(對應(yīng)的網(wǎng)絡(luò)參數(shù)為θ'得到)。這要怎么做呢?通過下面的思路:

基于重要性采樣的原則,我們可以用另外一個策略\pi_{\theta}',與環(huán)境互動采樣數(shù)據(jù)來訓(xùn)練\theta,從而間接計算R(\tau) \nabla \log p_{\theta}((\tau)。

重要性采樣原理如下:
\begin{aligned} \mathbb{E}_{x \sim p}[f(x)] & =\int f(x) p(x) dx \\ & =\int f(x) \frac{p(x)}{q(x)} q(x) d x \\ & =\mathbb{E}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] \end{aligned}

w(x)=\frac{p(x)}{q(x)}即重要性權(quán)重(importance weight)。通過這個恒等式,我們可以將求\mathbb{E}_{x \sim p}[f(x)]期望的問題轉(zhuǎn)到另一個分布q(x)下面!即當(dāng)我們當(dāng)前的目標(biāo)分布不太方便得到的時候,我們可以通過另外一個較容易得到的分布,來求得當(dāng)前的目標(biāo)分布。

因此,我們可以將梯度表示為:
\begin{aligned} \nabla R_{\theta} & =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right)\right] \\ & =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(s_{t}, a_{t}\right)}{p_{\theta^{\prime}}\left(s_{t}, a_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right)\right] \\ & =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} \mid s_{t}\right) p_{\theta}\left(s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} \mid s_{t}\right) p_{\theta^{\prime}}\left(s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right)\right] \\ & =E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t} \mid s_{t}\right)\right] \end{aligned}

基于重要性采樣的原則,由于A^{\theta}(s_{t}, a_{t})是Actor與環(huán)境交互的時候計算出來的,所以當(dāng)從\theta換到\theta^{\prime}時候,就需要變換成A^{\theta^{\prime}}\left(s_{t}, a_{t}\right)。并且最后一項假設(shè)兩個分布不能差太遠(yuǎn),所以認(rèn)為他們是相等的,為了求解方便,我們直接劃掉。

但是,基于重要性采樣有個缺點,就是p(x)q(x)的分布不能差別太大(這點可根據(jù)兩個分布期望和方差的差異得出)。當(dāng)兩個分布差距比較大的時候,通過重要性采樣得到的樣本數(shù)據(jù)可能就不對了,如下所示:

如圖所示,p(x),q(x) 兩個分布差距較大,當(dāng)使用 p(x) 采樣少量的樣本的時候,f(x) 停留在左邊,這時f(x) 的期望是負(fù)的;如果我們使用q(x)分布進(jìn)行一些重要性采樣,得到的樣本期望可能是正的。這與f(x)在左邊得到的期望值就不相符合了。當(dāng)然如果q(x)采樣足夠多的話,還是有希望采樣到左邊的數(shù)據(jù),進(jìn)而得到負(fù)的期望值。 那么,如果可以保證p(x)和q(x)這兩個分布是在某個程度內(nèi)相似的,是不是就可以解決這個問題了呢?

PPO

對上面的梯度公式,根據(jù)\nabla f(x)=f(x)\nabla logf(x),反過來用,可以得到PPO的目標(biāo)函數(shù)為:
J^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})]

信任區(qū)域策略優(yōu)化(TRPO)

我們不希望\theta\theta^{\prime}兩者分布的差距不能過大,所以需要進(jìn)行約束。引入KL散度來做限制。KL散度也叫相對熵,可以用來衡量兩個分布之間的差異性。所以最直接的辦法,就是對目標(biāo)函數(shù)增加一個約束條件讓他的KL散度小于\delta。目標(biāo)函數(shù)如下:
\underset{\theta }{max} J_{TRPO}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})] \\ subject to KL(\theta, \theta^{\prime})<\delta

TRPO 與 PPO 不一樣的地方是約束項的位置不一樣,PPO 是直接把約束放到要優(yōu)化的式子里,可以直接用梯度上升的方法最大化這個式子。但TRPO是把 KL 散度當(dāng)作約束,它希望\theta\theta^{\prime}的 KL 散度小于一個\delta。如果我們使用的是基于梯度的優(yōu)化時,有約束是很難處理的,因為它把 KL 散度約束當(dāng)做一個額外的約束,沒有放目標(biāo)里面。PPO 跟 TRPO 的性能差不多,但 PPO 在實現(xiàn)上比 TRPO 容易的多,所以我們一般就用 PPO,而不用TRPO

PPO1:近端策略優(yōu)化懲罰(PPO-penalty)

實際上,直接求解TRPO這種帶約束的問題是十分復(fù)雜的,需要計算二階梯度。所以PPO-penalty直接將KL散度作為一個懲罰項放在目標(biāo)函數(shù)中,如下所示:
\underset{\theta }{max} J_{PPO1}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})} A^{\theta^{\prime}}(s_{t}, a_{t})] - \beta KL(\theta , \theta^{\prime})

為了更進(jìn)一步提高懲罰項的作用,論文加入自適應(yīng)的思想,當(dāng)兩者分布KL散度較大的時候,增大懲罰,使策略更新更加謹(jǐn)慎;當(dāng)兩個分布較相似的時候,減少懲罰,使之學(xué)得更快。即
\begin{cases} & \text{ if } KL(\theta , \theta^{\prime}) > KL_{max}, increase \beta \\ & \text{ if } KL(\theta , \theta^{\prime}) < KL_{min}, decrease \beta \end{cases}

PPO2:近端策略優(yōu)化裁剪(PPO-clip)

PPO2再次提出更簡潔的改進(jìn)方法來限制\theta^{\prime}兩個分布的距離。直接引入一個小的修剪量\epsilon。使這兩個分布的比值約束在[1-\epsilon, 1+\epsilon]之間。PPO-clip的目標(biāo)函數(shù)如下:
\underset{\theta }{max} J_{PPO2}^{\theta^{\prime}}(\theta )=E_{(s_{t}, a_{t}) \sim \pi_{\theta^{\prime}}}[min(r_t(\theta), clip(r_t(\theta), 1-\epsilon , 1+\epsilon)) A^{\theta^{\prime}}(s_{t}, a_{t})]

其中,r_t(\theta)=\frac{p_{\theta}(a_{t} \mid s_{t})}{p_{\theta^{\prime}}(a_{t} \mid s_{t})}表示重要性采樣比率;A^{\theta^{\prime}}(s_{t}, a_{t})表示當(dāng)前策略下的優(yōu)勢函數(shù),當(dāng)A>0時,希望增加該p_{\theta}的概率;但是不能過大,過大會使與p_\theta^{\prime}差距大,導(dǎo)致效果不好。反之亦然。

如上圖所示,圖示中的x軸是r_t(\theta,y軸表示clip(r_t(\theta), 1-\epsilon , 1+\epsilon),綠色的點表示r_t(\theta)的值,藍(lán)色表示的是clip(r_t(\theta), 1-\epsilon , 1+\epsilon)的值,紅色則表示PPO2的取值。

參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容