日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RL——Policy Gradient类方法

發布時間:2023/12/8 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:

  • 用參數為θ\thetaθ的策略πθ(a∣s)\pi_{\theta}(a|s)πθ?(as)采樣N條樣本軌跡τi\tau_{i}τi?,每條軌跡都是獨立的樣本
  • 估計梯度
    ▽θ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?)沒有任何關系。
  • 更新參數θ←θ+α▽θJ(θ)\theta \leftarrow \theta + \alpha \triangledown_{\theta} J(\theta)θθ+αθ?J(θ)
  • 重復上述步驟
  • 一個popular的選項對于πθ(a∣s)\pi_{\theta}(a | s)πθ?(as)來說,是高斯策略模型,即策略參數π\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})πθ?(as)π(as,μ,σ)=σ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π(as,μ,σ)=σ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π(as,μ,σ)=σ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是一個算法框架,這里給出其中一種算法流程:

  • 用參數為θ\thetaθ的策略πθ(a∣s)\pi_{\theta}(a | s)πθ?(as)采樣N個狀態轉移
  • Reference:
    https://blog.csdn.net/Pony017/article/details/81146374
    https://www.cnblogs.com/wangxiaocvpr/p/6623078.html

    總結

    以上是生活随笔為你收集整理的RL——Policy Gradient类方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。