RL——Policy Gradient类方法
Policy Gradient和Q-learning可以說(shuō)是model-free RL的兩大陣營(yíng)。前者是off-line, on-policy的方法,后者是on-line, off-policy的方法。前者是策略迭代,關(guān)心的是策略網(wǎng)絡(luò)的參數(shù);后者是值迭代,關(guān)心的是值網(wǎng)絡(luò)的輸出。隨著RL的不斷發(fā)展,這兩類(lèi)方法在不斷交錯(cuò)領(lǐng)跑的過(guò)程中交匯融合。
本文重點(diǎn)介紹Policy Gradient的方法,從其“初心”出發(fā),通過(guò)一步步推導(dǎo)來(lái)講述新的算法。
Policy Gradient
如果你已經(jīng)了解了DQN,也許會(huì)想到這樣一個(gè)問(wèn)題:為什么一定要用值函數(shù)來(lái)做決策(當(dāng)然這個(gè)想法也是很自然的),為什么不繞過(guò)值函數(shù)直接用神經(jīng)網(wǎng)絡(luò)來(lái)表示策略呢?
知乎上有關(guān)于這個(gè)問(wèn)題的討論。
讓我們?cè)偻艘徊?#xff0c;我們想要的東西到底是什么呢?其實(shí)就是讓我們采取策略的期望收益最大化:
θ?=argmaxθEτ~pθ(τ)r(τ)\theta^{*} = \underset{\theta}{argmax}E_{\tau \sim p_{\theta}(\tau)}r(\tau)θ?=θargmax?Eτ~pθ?(τ)?r(τ)
τ\tauτ表示一條當(dāng)前策略所影響的樣本軌跡,pθ(τ)p_{\theta}(\tau)pθ?(τ)是樣本軌跡τ\tauτ出現(xiàn)的概率。
來(lái)進(jìn)一步寫(xiě)一下r(τ)r(\tau)r(τ)和 pθ(τ)p_{\theta}(\tau)pθ?(τ)的展開(kāi)式。
r(τ)=∑tr(st,at)r(\tau) = \sum_{t}r(s_{t}, a_{t})r(τ)=t∑?r(st?,at?)
pθ(τ)=p(s1)∏tπθ(at∣st)p(st+1∣st,at)p_{\theta}(\tau) = p(s_{1}) \prod_{t}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t}, a_{t})pθ?(τ)=p(s1?)t∏?πθ?(at?∣st?)p(st+1?∣st?,at?)
注意,這里的τ\tauτ和ttt的含義不同,τ\tauτ是樣本軌跡,ttt是樣本軌跡上的時(shí)間。仔細(xì)看pθ(τ)p_{\theta}(\tau)pθ?(τ)我們就會(huì)發(fā)現(xiàn),將概率展開(kāi)以后實(shí)際上我們的策略可以影響的只有πθ(at∣st)\pi_{\theta}(a_{t}|s_{t})πθ?(at?∣st?),也就是在狀態(tài)sts_{t}st?下采取動(dòng)作ata_{t}at?的概率。這就是我們策略的數(shù)學(xué)表示。
REINFORCE
現(xiàn)在我們就可以再向前走一步,按照機(jī)器學(xué)習(xí)的一般思路,我已經(jīng)定義好了我的目標(biāo)函數(shù)J(θ)J(\theta)J(θ),如果可以求出它的梯度▽?duì)菾(θ)\triangledown_{\theta}J(\theta)▽θ?J(θ),我們就可以進(jìn)行梯度下降了。為了求梯度,我們將J(θ)J(\theta)J(θ)改寫(xiě)成積分的形式:
J(θ)=Eτ~pθ(τ)r(τ)=∫pθ(τ)r(τ)dτJ(\theta) = E_{\tau \sim p_{\theta}(\tau)}r(\tau) =\int p_{\theta}(\tau)r(\tau)d\tauJ(θ)=Eτ~pθ?(τ)?r(τ)=∫pθ?(τ)r(τ)dτ
▽?duì)菾(θ)=∫▽?duì)萷θ(τ)r(τ)dτ=∫pθ(τ)▽?duì)萳ogpθ(τ)r(τ)dτ=Eτ~pθ(τ)▽?duì)萳ogpθ(τ)r(τ)\triangledown_{\theta}J(\theta) = \int \triangledown_{\theta}p_{\theta}(\tau)r(\tau)d\tau = \int p_{\theta}(\tau) \triangledown_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau)d\tau = E_{\tau \sim p_{\theta}(\tau)}\triangledown_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau)▽θ?J(θ)=∫▽θ?pθ?(τ)r(τ)dτ=∫pθ?(τ)▽θ?logpθ?(τ)r(τ)dτ=Eτ~pθ?(τ)?▽θ?logpθ?(τ)r(τ)
這里用到一個(gè)小技巧,▽?duì)萷θ(τ)=pθ(τ)▽?duì)萷θ(τ)pθ(τ)=pθ(τ)▽?duì)萳ogpθ(τ)\triangledown_{\theta}p_{\theta}(\tau) = p_{\theta}(\tau) \frac{\triangledown_{\theta}p_{\theta}(\tau)}{p_{\theta}(\tau)} =p_{\theta}(\tau) \triangledown_{\theta} \mathrm{log}p_{\theta}(\tau)▽θ?pθ?(τ)=pθ?(τ)pθ?(τ)▽θ?pθ?(τ)?=pθ?(τ)▽θ?logpθ?(τ),這樣做的目的是把pθ(τ)p_{\theta}(\tau)pθ?(τ)重新拿到外邊來(lái),就可以再寫(xiě)成期望的形式了。
現(xiàn)在公式中的自變量仍然是τ\tauτ,實(shí)際應(yīng)用中我們不可能直接對(duì)τ\tauτ求導(dǎo),因此我們?cè)侔?span id="ze8trgl8bvbq" class="katex--inline">pθ(τ)p_{\theta}(\tau)pθ?(τ)帶進(jìn)來(lái)看看能不能把τ\tauτ替換為我們可以操作的st,ats_{t}, a_{t}st?,at?
▽?duì)萳ogpθ(τ)=▽?duì)萳ogp(s1)+∑t▽?duì)萳ogπθ(at∣st)+∑t▽?duì)萳ogp(st+1∣st,at)=∑t▽?duì)萳ogπθ(at∣st)\triangledown_{\theta} \mathrm{log}p_{\theta}(\tau) = \triangledown_{\theta} \mathrm{log}p(s_{1}) + \sum_{t} \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t}) + \sum_{t} \triangledown_{\theta} \mathrm{log}p(s_{t+1} | s_{t}, a_{t}) = \sum_{t}\triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t})▽θ?logpθ?(τ)=▽θ?logp(s1?)+t∑?▽θ?logπθ?(at?∣st?)+t∑?▽θ?logp(st+1?∣st?,at?)=t∑?▽θ?logπθ?(at?∣st?)
▽?duì)菾(θ)=Eτ~pθ(τ)[∑t▽?duì)萳ogπθ(at∣st)][∑tr(st,at)]\triangledown_{\theta}J(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t}\triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t})][\sum_{t}r(s_{t}, a_{t})]▽θ?J(θ)=Eτ~pθ?(τ)?[t∑?▽θ?logπθ?(at?∣st?)][t∑?r(st?,at?)]
于是,我們也就得到了我們的第一個(gè)算法REINFORCE:
▽?duì)菾(θ)=1N∑n=1N∑t=1T[▽?duì)萚logπθ(at,n∣st,n)r(τn)]]\triangledown_{\theta}J(\theta) = \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T} [\triangledown_{\theta} [\mathrm{log} \pi_{\theta}(a_{t,n} | s_{t,n})r(\tau_{n})]]▽θ?J(θ)=N1?∑n=1N?∑t=1T?[▽θ?[logπθ?(at,n?∣st,n?)r(τn?)]]
在這里我們還要使用一個(gè)重要的技巧:▽?duì)菾(θ)=1N∑i[∑t[▽?duì)萳ogπθ(at∣st)∑tr(st,at)]\triangledown_{\theta}J(\theta) = \frac{1}{N} \sum_{i} [\sum_{t} [ \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t}) \sum_{t}r(s_{t}, a_{t})]▽θ?J(θ)=N1?∑i?[∑t?[▽θ?logπθ?(at?∣st?)∑t?r(st?,at?)]——在下一部分有詳細(xì)推導(dǎo)。原理其實(shí)就是我們執(zhí)行[r(τn)+br(\tau_{n})+br(τn?)+b]來(lái)代替r(τn)r(\tau_{n})r(τn?)不會(huì)對(duì)▽?duì)菾(θ)\triangledown_{\theta}J(\theta)▽θ?J(θ)的結(jié)果產(chǎn)生影響,前提是b和πθ(at,st)\pi_{\theta}(a_{t}, s_{t})πθ?(at?,st?)沒(méi)有任何關(guān)系。
一個(gè)popular的選項(xiàng)對(duì)于πθ(a∣s)\pi_{\theta}(a | s)πθ?(a∣s)來(lái)說(shuō),是高斯策略模型,即策略參數(shù)π\(zhòng)piπ是由均值μ\muμ和方差σ2\sigma^{2}σ2構(gòu)成的。
πθ(a∣s)→π(a∣s,μ,σ)=1σ2πexp(?(a?μT?(s))22σ2)\pi_{\theta}(a | s) \rightarrow \pi(a | s, \mu, \sigma) = \frac{1}{\sigma \sqrt{2 \pi}} \mathrm{exp} (-\frac{(a-\mu^{T} \phi(s))^2}{2 \sigma^2})πθ?(a∣s)→π(a∣s,μ,σ)=σ2π?1?exp(?2σ2(a?μT?(s))2?)
此處,?(s)\phi (s)?(s)表示基函數(shù)(the basis function)
▽?duì)蘬ogπ(a∣s,μ,σ)=a?μT?(s)σ2?(s)\triangledown_{\mu} \mathrm{log} \pi (a | s, \mu, \sigma) = \frac{a - \mu^{T} \phi(s)}{\sigma^{2}} \phi(s)▽μ?logπ(a∣s,μ,σ)=σ2a?μT?(s)??(s)▽?duì)襩ogπ(a∣s,μ,σ)=(a?μT?(s))2?σ2σ3\triangledown_{\sigma} \mathrm{log} \pi (a | s, \mu, \sigma) = \frac{(a - \mu^{T} \phi(s))^2 - \sigma^2}{\sigma^{3}}▽σ?logπ(a∣s,μ,σ)=σ3(a?μT?(s))2?σ2?
REINFORCE Pytorch 代碼實(shí)現(xiàn)
Actor-Critic
REINFORCE方法有很多缺點(diǎn),首先它的效率非常低,一個(gè)重要原因是方差非常大。∑tr(st,at)\sum_{t}r(s_{t}, a_{t})∑t?r(st?,at?)是每一次仿真的結(jié)果,如果效果好了就會(huì)對(duì)這一次仿真的所有決策獎(jiǎng)勵(lì),效果不好了就會(huì)全部懲罰,這顯然是有問(wèn)題的。
讓我們?cè)賮?lái)好好看一下▽?duì)菾(θ)=Eτ~pθ(τ)[∑t▽?duì)萳ogπθ(at∣st)][∑tr(st,at)]\triangledown_{\theta} J (\theta) = E_{\tau \sim p_{\theta}(\tau)} [\sum_{t} \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t}|s_{t})][\sum_{t}r(s_{t}, a_{t})]▽θ?J(θ)=Eτ~pθ?(τ)?[∑t?▽θ?logπθ?(at?∣st?)][∑t?r(st?,at?)]
如果t2>t1t_{2} > t_{1}t2?>t1?,πθ(at2∣st2)\pi_{\theta}(a_{t_{2}}|s_{t_{2}})πθ?(at2??∣st2??)理論上是不會(huì)對(duì)∑t=0t1r(st,at)\sum_{t=0}^{t_{1}}r(s_{t}, a_{t})∑t=0t1??r(st?,at?)產(chǎn)生影響的,因此,上個(gè)式子可以改進(jìn)成為:
▽?duì)菾θ(θ)=Eτ~pθ(τ)[∑t▽?duì)萳ogπθ(at∣st)∑t′=tr(st′,at′)]=Eτ~pθ(τ)[∑t▽?duì)萳ogπθ(at∣st)Q(st,at)]\triangledown_{\theta}J_{\theta}(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta}\mathrm{log}\pi_{\theta}(a_{t}|s_{t})\sum_{t'=t}r(s_{t'},a_{t'})] = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta}\mathrm{log}\pi_{\theta}(a_{t}|s_{t})Q(s_{t}, a_{t})]▽θ?Jθ?(θ)=Eτ~pθ?(τ)?[t∑?▽θ?logπθ?(at?∣st?)t′=t∑?r(st′?,at′?)]=Eτ~pθ?(τ)?[t∑?▽θ?logπθ?(at?∣st?)Q(st?,at?)]
實(shí)際上,Qt=∑t′=tr(st′,at′)Q_{t} = \sum_{t'=t}r(s_{t'}, a_{t'})Qt?=∑t′=t?r(st′?,at′?)和我們對(duì)Q-value的定義非常接近了,都是從時(shí)刻ttt開(kāi)始到結(jié)束時(shí)的reward收益。
我們已經(jīng)減小一些方差了,能不能再減小嗎?對(duì)于隨機(jī)變量XXX,其方差DX=EX2?(EX)2DX = EX^{2} - (EX)^{2}DX=EX2?(EX)2,如果EX2EX^{2}EX2比較小的話(huà),那么方差就會(huì)小了。自然就想到給r(τ)r(\tau)r(τ)減去一個(gè)值,即r(τ)←r(τ)?br(\tau) \leftarrow r(\tau) - br(τ)←r(τ)?b,選擇合適的bbb(比如1N∑ir(τi)\frac{1}{N}\sum_{i}r(\tau_{i})N1?∑i?r(τi?)),那么方差就會(huì)變小了。方差小了,結(jié)果會(huì)不會(huì)變呢?
答案是不變的,我們來(lái)證明一下:
E[▽?duì)萳ogπθ(τ)b]=∫πθ(τ)▽?duì)萳ogπθ(τ)bdτ=∫▽?duì)圈笑?τ)bdτ=b∫▽?duì)圈笑?τ)dτ=b▽?duì)取姚笑?τ)dτ=b▽?duì)?=0E[\triangledown_{\theta} \mathrm{log} \pi_{\theta}(\tau)b] = \int \pi_{\theta}(\tau) \triangledown_{\theta} \mathrm{log} \pi_{\theta}(\tau) b d\tau = \int \triangledown_{\theta} \pi_{\theta}(\tau)bd\tau = b \int \triangledown_{\theta} \pi_{\theta}(\tau)d\tau = b \triangledown_{\theta} \int \pi_{\theta}(\tau)d\tau = b\triangledown_{\theta}1 = 0E[▽θ?logπθ?(τ)b]=∫πθ?(τ)▽θ?logπθ?(τ)bdτ=∫▽θ?πθ?(τ)bdτ=b∫▽θ?πθ?(τ)dτ=b▽θ?∫πθ?(τ)dτ=b▽θ?1=0
所以只要bbb本身是與τ\tauτ無(wú)關(guān)的,那么我們就可以這樣做!上面的證明是以τ\tauτ為自變量的,其實(shí)當(dāng)我們用QtQ_{t}Qt?時(shí)一樣可以推出這個(gè)結(jié)果。
bbb的選取就成為了新出現(xiàn)的問(wèn)題。理論上可以推出一個(gè)最優(yōu)的bbb,不過(guò)應(yīng)用中我們會(huì)用VtV_{t}Vt?估計(jì)bbb。也就是說(shuō)用另外的一個(gè)網(wǎng)絡(luò)來(lái)估計(jì)Q(st,at)Q(s_{t}, a_{t})Q(st?,at?),Vt=Eat~πθ(at∣st)Q(st,at)V_{t} = E_{a_{t} \sim \pi_{\theta}(a_{t} | s_{t})}Q(s_{t}, a_{t})Vt?=Eat?~πθ?(at?∣st?)?Q(st?,at?),這樣就有:
▽?duì)菾(θ)=Eτ~pθ(τ)[∑t▽?duì)萳ogπθ(at∣st)]\triangledown_{\theta}J(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta} \mathrm{log}\pi_{\theta}(a_{t} | s_{t})]▽θ?J(θ)=Eτ~pθ?(τ)?[t∑?▽θ?logπθ?(at?∣st?)]
Actor-Critic是一個(gè)算法框架,這里給出其中一種算法流程:
Reference:
https://blog.csdn.net/Pony017/article/details/81146374
https://www.cnblogs.com/wangxiaocvpr/p/6623078.html
總結(jié)
以上是生活随笔為你收集整理的RL——Policy Gradient类方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: betapubgmobile服务器维护,
- 下一篇: SPI总线的特点、工作方式及常见错误解答