
1 前言
在之前的深度增強(qiáng)學(xué)習(xí)系列文章中,我們已經(jīng)詳細(xì)分析了DQN算法,一種基于價值Value的算法,那么在今天,我們和大家一起分析深度增強(qiáng)學(xué)習(xí)中的另一種算法,也就是基于策略梯度Policy Gradient的算法。這種算法和基于價值Value的算法結(jié)合而成的Actor-Critic算法是目前效果最好的深度增強(qiáng)學(xué)習(xí)算法。
那么關(guān)于Policy Gradient方法的學(xué)習(xí),有以下一些網(wǎng)上的資源值得看:
Andrej Karpathy blog: Deep Reinforcement Learning: Pong from Pixels
David Silver ICML 2016:深度增強(qiáng)學(xué)習(xí)Tutorial
John Schulman: Machine Learning Summer School
David Silver的增強(qiáng)學(xué)習(xí)課程(有視頻和ppt): http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html
那么實際上Andrej Karpathy的blog已經(jīng)很詳細(xì)的分析了Policy Gradient的方法,這里我將綜合以上的內(nèi)容根據(jù)我自己的理解來說以下Policy Gradient。
2 Why Policy Network?
我們已經(jīng)知道DQN是一個基于價值value的方法。換句話說就是通過計算每一個狀態(tài)動作的價值,然后選擇價值最大的動作執(zhí)行。這是一種間接的做法。那么,更直接的做法是什么?
能不能直接更新策略網(wǎng)絡(luò)Policy Network呢?
什么是策略網(wǎng)絡(luò)Policy Network?就是一個神經(jīng)網(wǎng)絡(luò),輸入是狀態(tài),輸出直接就是動作(不是Q值)。


或者輸出概率:

這里要提一下概率輸出的問題。對于DQN來說,本質(zhì)上是一個接近于確定性輸出的算法。至多就是采用

進(jìn)行探索。但是有很多時候,在某一個特定狀態(tài)下,很多動作的選擇可能都是可以的。比如說我有20塊錢去買飯。那么不管我買的是蛋炒飯還是土豆肉片蓋碼飯,結(jié)果都是一樣的填飽肚子。因此,采用輸出概率會更通用一些。而DQN并不能輸出動作的概率,所以采用Policy Network是一個更好的辦法。
3 Policy Gradient
要更新策略網(wǎng)絡(luò),或者說要使用梯度下降的方法來更新網(wǎng)絡(luò),我們需要有一個目標(biāo)函數(shù)。對于策略網(wǎng)絡(luò),目標(biāo)函數(shù)其實是比較容易給定的,就是很直接的,最后的結(jié)果!也就是

所有帶衰減reward的累加期望
那么問題就在于如何利用這個目標(biāo)來更新參數(shù) 呢?咋一看這個損失函數(shù)和策略網(wǎng)絡(luò)簡直沒有什么直接聯(lián)系,reward是環(huán)境給出的,如何才能更新參數(shù)?換個說法就是如何能夠計算出損失函數(shù)關(guān)于參數(shù)的梯度(也就是策略梯度):

咋一看根本就沒有什么思路是不是,所以先換一個思路來考慮問題。
4 就給我一個Policy Network,也沒有l(wèi)oss,怎么更新?
改變動作的出現(xiàn)概率!
現(xiàn)在我們不考慮別的,就僅僅從概率的角度來思考問題。我們有一個策略網(wǎng)絡(luò),輸入狀態(tài),輸出動作的概率。然后執(zhí)行完動作之后,我們可以得到reward,或者result。那么這個時候,我們有個非常簡單的想法:
如果某一個動作得到reward多,那么我們就使其出現(xiàn)的概率增大,如果某一個動作得到的reward少,那么我們就使其出現(xiàn)的概率減小。
當(dāng)然,也顯然的,用reward來評判動作的好壞是不準(zhǔn)確的,甚至用result來評判也是不準(zhǔn)確的。畢竟任何一個reward,result都依賴于大量的動作才導(dǎo)致的。但是這并不妨礙我們做這樣的思考:
如果能夠構(gòu)造一個好的動作評判指標(biāo),來判斷一個動作的好與壞,那么我們就可以通過改變動作的出現(xiàn)概率來優(yōu)化策略!