發(fā)個庫存,嘻嘻,這篇主要講AC類算法
演員-評論家算法(Actor-Critic)
上文公式中我們采用的累計回報和(),雖然它是期望收益的無偏估計,但由于只使用了一個樣本,存在方差非常大的問題,在這里我們用
代替原來公式中的累計回報:
若同時加入值函數(shù)作為baseline:
此時,梯度函數(shù)可以轉(zhuǎn)為:
為優(yōu)勢函數(shù),表明了在
下,采取某個
能比該策略下的平均期望收益優(yōu)劣多少,這就是A2C 和A3C的靈魂公式了。
如果用采樣代替期望,那么Q,A都可以被近似為和V相關(guān)的函數(shù):
我們可以使用蒙特卡洛、TD等方法通過神經(jīng)網(wǎng)絡(luò)擬合V。這種方法被稱為表演家-評論家算法,很直白的解釋就是,表演家()做出動作,而評論家(
)對動作進(jìn)行打分,表演家根據(jù)分?jǐn)?shù)進(jìn)行提升。
下面給出一種在線AC算法過程:
?1.隨機(jī)化策略函數(shù)和價值函數(shù)的參數(shù)
?2.循環(huán):
??a.使用當(dāng)前策略產(chǎn)生一條完整的跡:
??b.對于每個時間步驟t=T,......2,1: # 從后往前計算的效率更高
???i.評論家網(wǎng)絡(luò)根據(jù)根據(jù)和輸出
???ii.計算TD誤差:
???iii.使用mse作為損失函數(shù)更新批評家網(wǎng)絡(luò)參數(shù):
???iv.評估優(yōu)勢函數(shù):
???v.更新表演家網(wǎng)絡(luò)參數(shù):
值得一提的是,AC算法中的critic并非只有上文優(yōu)勢函數(shù)一種,還可以是:
基于狀態(tài)函數(shù)
更新參數(shù)的:
基于狀態(tài)-動作函數(shù)更新參數(shù)的:
基于TD error更新參數(shù)的:
表演家和評論家的兩個網(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更好。
下面給出A3C的算法過程