深度強化學習系列(13): 策略梯度(Policy Gradient)

對於DQN來說使用一個網絡直接逼近了值函數,最後取得了非常不錯的效果, 但是對於一些連續性控制或者動作空間特別大的環境來說,很難全部計算所有的值函數來得到最好的策略,那麼直接計算策略的方法就別提出來了。

回顧一下前面幾篇,所謂的策略,其實就是狀態到動作的映射數學表達爲 πsa\pi : s \to a
我們用τ\tau 表示狀態s到最後一個狀態的一個序列,表示爲:
τst,st+1....sT \tau : s_{t},s_{t+1}....s_{T}
那麼獎勵R(τ)R(\tau) 是一個隨機變量,沒法直接作爲目標函數被優化,因此採用了隨機變量的期望作爲目標函數:
J=r(τ)Pπ(τ)dτ(1) J= \int r(\tau)P_{\pi}(\tau)d\tau \tag{1}
因此強化學習的目標是找到最好的 maxπR(τ)Pπ(τ)dτ\max\limits_{\pi} \int R(\tau)P_{\pi}(\tau)d\tau,從最優策略的角度來說,對於序列$ s_{t},s_{t+1}…s_{T},, 最優的策略序列爲:u_{0}^{} \to u_{1}^{} \to u_{2}^{} \to…u_{T}^{}$,總結爲:找到最優策略: π:su\pi^{*}:s \to u^{*}

繼續從目標函數說起, 由於要用神經網絡來計算策略梯度,需要用一個網絡結構去逼近策略,在此處我們假設神經網絡的結構參數爲θ\theta,將目標函數由公式-1變爲:
J(θ)=Eτπθ(τ)[r(τ)]=τπθ(τ)πθ(τ)r(τ)dτ(2) J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[r(\tau)] = \int _{\tau \sim \pi_{\theta}(\tau)}\pi_{\theta}(\tau)r(\tau)d\tau \tag{2}
推導原因:f(x)f(x) 關於某分佈P(x)P(x)的期望,對於連續性變量,期望通過積分求得:
ExP[f(x)]=p(x)f(x)dx(3) E_{x \sim P}[f(x)]= \int p(x)f(x)dx \tag{3}

在數學中梯度的含義就是對函數求取導數,在監督學習中,我們求取損失函數的時候經常求取目標函數的梯度。同理,對於策略的目標函數,我們同樣對目標函數J()J(\cdot)公式(2)求取梯度:
θJ(θ)=τπθ(τ)θπθ(τ)r(τ)dτ(4) \nabla_{\theta}J(\theta) = \int _{\tau \sim \pi_{\theta}(\tau)}\nabla_{\theta}\pi_{\theta}(\tau)r(\tau)d\tau \tag{4}
到這裏,我們發現並沒有方法直接計算,通過導數求導變換得到:
θπθ(τ)=πθ(τ)θlogπθ(τ)(5) \nabla_{\theta}\pi_{\theta}(\tau) = \pi_{\theta}(\tau)\nabla_{\theta}\log\pi_{\theta}(\tau) \tag{5}
將公式(5)代入(4)得到策略梯度:

θJ(θ)=Eτπθ(τ)[θlogπθ(τ)rτ]=τπθ(τ)πθ(τ)θlogπθ(τ)r(τ)dτ(6) \nabla_{\theta}J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[\nabla_{\theta}\log\pi_{\theta}(\tau)r{\tau}] \\ = \int _{\tau \sim \pi_{\theta}(\tau)}\pi_{\theta} (\tau)\nabla_{\theta}\log \pi_{\theta}(\tau)r(\tau)d\tau \tag{6}
終於通過變化計算得到了策略梯度的計算方法,但是發現θlogπθ(τ)\nabla_{\theta}\log \pi_{\theta}(\tau) 並沒法直接求取。那麼該怎樣計算呢?
通過前面我們知道對於序列 τ\tau,策略π(τ)=π(s0,a0,s1,a1,...,sT,aT)\pi(\tau) = \pi(s_{0},a_{0},s_{1},a_{1},...,s_{T},a_{T}),我們將π(τ)\pi(\tau)通過最原始的方法展開得到

π(τ)=p(s0)t=0Tπθ(atst)p(st+1st,at)(7) \pi(\tau) = p(s_{0}) \prod_{t=0}^{T}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t},a_{t}) \tag{7}
於是將公式(7)代入公式(6)得到

θlogπθ(τ)=θlog(p(s0)t=0Tπθ(atst)p(st+1st,at))=θ(logp(s0)+t=0Tlogπθ(atst)+t=0Tlogp(st+1st,at))=t=0Tθlogπθ(atst)(8) \nabla_{\theta}\log \pi_{\theta}(\tau)= \nabla_{\theta}\log(p(s_{0}) \prod_{t=0}^{T}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t},a_{t})) \\ = \nabla_{\theta}(\log p(s_{0})+\sum_{t=0}^{T}\log\pi_{\theta}(a_{t}|s_{t})+\sum_{t=0}^{T}\log p(s_{t+1}|s_{t},a_{t})) \\ = \sum_{t=0}^{T} \nabla_{\theta} \log\pi_{\theta}(a_{t}|s_{t}) \tag{8}

這樣公式已經和監督學習中的最大似然有相同點了,因此我們對其進行蒙特卡洛處理,最終將公式(6)(7)(8)組合,並對公式(6)中的期望用蒙特卡洛進行替換,得到最終策略梯度:
θJ(θ)=Eτπθ(τ)[t=0Tθlogπθ(atst)(tTr(st,at))]=1Nt=0N[t=0Tθlogπθ(atst)(t=0Tr(stat))] \nabla_{\theta}J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[ \sum_{t=0}^{T} \nabla_{\theta} \log\pi_{\theta}(a_{t}|s_{t})(\sum_{t}^{T}r(s_{t},a_{t}))] \\ = \frac{1}{N}\sum_{t=0}^{N}[\sum_{t=0}^{T}\nabla_{\theta}\log\pi_{\theta}(a_{t}|s_{t})(\sum_{t=0}^{T}r(s_{t}|a_{t}))]
終於我們得到了策略梯度的計算公式,接下來就是更新了梯度,和監督學習是一個方式
θ^=θ+αθJ(θ) \hat \theta = \theta+\alpha \nabla_{\theta}J(\theta)
到這裏,策略梯度的理論和公式部分計算講完了,
其實說了這麼多,最終只是服務於策略網絡的逼近和參數更新,在後面的博客(DDPG等算法的的使用中都會用到)

參考文獻:
1.強化學習原理及入門
2.強化學習核心算法講解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章