系列論文閱讀——Policy Gradient Algorithms and so on(2)

發(fā)個庫存,嘻嘻,這篇主要講AC類算法

演員-評論家算法(Actor-Critic)

上文公式中我們采用的累計回報和(G_t=\sum^{T-t}_{k=0}R_{t+k+1}),雖然它是期望收益的無偏估計,但由于只使用了一個樣本,存在方差非常大的問題,在這里我們用Q^\pi(s,a)代替原來公式中的累計回報:
Qπ(s,a)=E_{\pi_\theta}[\sum_{t=0}^{T}r_t| s_0=s,a_0=a]\\ \begin{aligned} \nabla_\theta J(\theta) &=E_{s\sim \rho_\pi,a \sim \pi_\theta}\left[\sum^T_{t=0}\nabla_{\theta} log \ \pi_{\theta}(a_{t}|s_{t})Q_\pi(s_{t},a_{t})\right] \\ &\approx \frac{1}{N}\sum_{n=0}^N\left[\sum^T_{t=0}\nabla_{\theta} log \ \pi_{\theta}(a_{i,t}|s_{i,t})Q_\pi(s_{i,t},a_{i,t})\right]\\ \end{aligned}
若同時加入值函數(shù)作為baseline:
V_\pi(s)=E_{\pi_\theta}\left[\sum_{t=0}^Tr_t|s_0=s\right]
此時,梯度函數(shù)可以轉(zhuǎn)為:
\begin{aligned} \nabla_\theta J(\theta) &\approx \frac{1}{N}\sum^N_{i=0}\sum^T_{t=1}\bigtriangledown_\theta\log\pi_\theta(a_{i,t}|s_{i,t})\left[Q(s_{i,t},a_{i,t})-V(s_i)\right] \\ &= \frac{1}{N}\sum^N_{i=0}\sum^T_{t=1}\bigtriangledown_\theta\log\pi_\theta(a_{i,t}|s_{i,t})A(s_{i,t},a_{i,t}) \end{aligned}

A (s_t,a_t)為優(yōu)勢函數(shù),表明了在s_t下,采取某個a_t能比該策略下的平均期望收益優(yōu)劣多少,這就是A2C 和A3C的靈魂公式了。

如果用采樣代替期望,那么Q,A都可以被近似為和V相關(guān)的函數(shù):
\begin{aligned} Q_\pi(s_t,a_t) &= r(s_t,a_t) + E_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}\left[V_\pi(S_{t+1})\right] \\ &\approx r(s_t,a_t) + V_\pi(S_{t+1}) \end{aligned}

A_\pi(s_t,a_t) \approx r(s_t,a_t) + \gamma V_\pi(s_{t+1}) - V_\pi(S_t)

我們可以使用蒙特卡洛、TD等方法通過神經(jīng)網(wǎng)絡(luò)擬合V。這種方法被稱為表演家-評論家算法,很直白的解釋就是,表演家(\pi_\theta)做出動作,而評論家(V_w)對動作進(jìn)行打分,表演家根據(jù)分?jǐn)?shù)進(jìn)行提升。

下面給出一種在線AC算法過程:
?1.隨機(jī)化策略函數(shù)和價值函數(shù)的參數(shù)\theta,w
?2.循環(huán):
??a.使用當(dāng)前策略\pi_\theta產(chǎn)生一條完整的跡:\tau=(s_0,a_0,s_1,a_1,s_2,a_2,s_3......s_T)
??b.對于每個時間步驟t=T,......2,1: # 從后往前計算G_t的效率更高
???i.評論家網(wǎng)絡(luò)根據(jù)根據(jù)s_t和輸出V(s_t),V(s_{t+1})
???ii.計算TD誤差:\delta=G_t-V(s_t)
???iii.使用mse作為損失函數(shù)更新批評家網(wǎng)絡(luò)參數(shù):w←w+α_wδt?_wV_w(s)
???iv.評估優(yōu)勢函數(shù):A_w(s_t,a_t)=r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t)
???v.更新表演家網(wǎng)絡(luò)參數(shù):\theta \leftarrow \theta + \alpha_\theta ?_\theta \log \pi(s_t,a_t)A_w(s_t,a_t)

值得一提的是,AC算法中的critic并非只有上文優(yōu)勢函數(shù)一種,還可以是:

基于狀態(tài)函數(shù)V_w(a,s)更新參數(shù)的:
\theta \leftarrow \theta + \alpha_\theta ?_\theta \log \pi(s_t,a_t)V_w(s_t)
基于狀態(tài)-動作函數(shù)Q_w(a,s)更新參數(shù)的:
\theta \leftarrow \theta + \alpha_\theta ?_\theta \log \pi(s_t,a_t)Q_w(s_t,a_t)
基于TD error\delta更新參數(shù)的:
\delta(t) = r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t) \\ or \\ \delta(t) = r_{t+1} + \gamma Q_w(s_{t+1},a_{t+1}) - Q_w(s_t,a_t)

\theta \leftarrow \theta + \alpha_\theta ?_\theta \log \pi(s_t,a_t)\delta(t)

表演家和評論家的兩個網(wǎng)絡(luò)可以共享參數(shù)也可以不共享,不共享的好處是相對簡單穩(wěn)定,缺點(diǎn)是表演家和評論家沒有建立起共享的特征,參數(shù)量和計算量也巨大,但如果使用同一個網(wǎng)絡(luò),兩個輸出,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=V%2C%5Cpi" alt="V,\pi" mathimg="1">會往不同方向推動共享參數(shù),所以會帶來網(wǎng)絡(luò)不穩(wěn)定的問題。

A3C 和 A2C

如上文單純的只用一個樣本去估計梯度更新值函數(shù),存在方差大的問題,也導(dǎo)致了訓(xùn)練難以收斂。想要擴(kuò)大batch size,除了多采樣幾次,降低更新策略頻率,一個更有效的方法就是并行——開多個線程一起去和環(huán)境交互獲取樣本。

A3C算法就是異步優(yōu)勢演員-評論家方法的縮寫,它的三個關(guān)鍵思想是:(1)交互得到固定長度的一段經(jīng)驗(yàn),并用它去估計累計回報和優(yōu)勢函數(shù)(2)策略函數(shù)和價值函數(shù)共享網(wǎng)絡(luò)結(jié)構(gòu)(3)異步更新。

而A2C去掉了異步(更新)。兩個算法都使用多個agent同時與多個環(huán)境交互產(chǎn)生批量樣本用來更新參數(shù)。不同的地方在于A2C有一個同步點(diǎn)(如下圖左),多個agent與環(huán)境交互得到的樣本,并用樣本數(shù)據(jù)計算梯度,等到同步的時間點(diǎn),多個智能體的梯度累加起來一起更新參數(shù),因此,不同的agent上的參數(shù)始終是一致的,且batch size = agent數(shù)量 * 每個agent采的batch size;而A3C去掉了同步的點(diǎn),每個agnet獨(dú)立的與環(huán)境交互一定的時間步驟,并得到累計梯度,異步的push和pull master(保存了全局參數(shù))的參數(shù),因此同一時刻,不同的agent可能使用不同版本的參數(shù)。它的batch size就是每個agent的batch size。

openai提到(OpenAI Baselines: ACKTR & A2C),一方面尚未看到任何證據(jù)證明異步更新引入的噪聲能夠提供任何性能收益,另一方面,A2C 相對于A3C的優(yōu)勢在于它能夠更有效的利用GPU,能夠適應(yīng)更大的批量大小,且在效果上,A2C也比A3C更好。

A2C 和A3C對比

下面給出A3C的算法過程
A3C.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。