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