對於DQN來說使用一個網絡直接逼近了值函數,最後取得了非常不錯的效果, 但是對於一些連續性控制或者動作空間特別大的環境來說,很難全部計算所有的值函數來得到最好的策略,那麼直接計算策略的方法就別提出來了。
回顧一下前面幾篇,所謂的策略,其實就是狀態到動作的映射數學表達爲 π:s→a,
我們用τ 表示狀態s到最後一個狀態的一個序列,表示爲:
τ:st,st+1....sT
那麼獎勵R(τ) 是一個隨機變量,沒法直接作爲目標函數被優化,因此採用了隨機變量的期望作爲目標函數:
J=∫r(τ)Pπ(τ)dτ(1)
因此強化學習的目標是找到最好的 πmax∫R(τ)Pπ(τ)dτ,從最優策略的角度來說,對於序列$ s_{t},s_{t+1}…s_{T},最優的策略序列爲:u_{0}^{} \to u_{1}^{} \to u_{2}^{} \to…u_{T}^{}$,總結爲:找到最優策略: π∗:s→u∗。
繼續從目標函數說起, 由於要用神經網絡來計算策略梯度,需要用一個網絡結構去逼近策略,在此處我們假設神經網絡的結構參數爲θ,將目標函數由公式-1變爲:
J(θ)=Eτ∼πθ(τ)[r(τ)]=∫τ∼πθ(τ)πθ(τ)r(τ)dτ(2)
推導原因:f(x) 關於某分佈P(x)的期望,對於連續性變量,期望通過積分求得:
Ex∼P[f(x)]=∫p(x)f(x)dx(3)
在數學中梯度的含義就是對函數求取導數,在監督學習中,我們求取損失函數的時候經常求取目標函數的梯度。同理,對於策略的目標函數,我們同樣對目標函數J(⋅)公式(2)求取梯度:
∇θJ(θ)=∫τ∼πθ(τ)∇θπθ(τ)r(τ)dτ(4)
到這裏,我們發現並沒有方法直接計算,通過導數求導變換得到:
∇θπθ(τ)=πθ(τ)∇θlogπθ(τ)(5)
將公式(5)代入(4)得到策略梯度:
∇θJ(θ)=Eτ∼πθ(τ)[∇θlogπθ(τ)rτ]=∫τ∼πθ(τ)πθ(τ)∇θlogπθ(τ)r(τ)dτ(6)
終於通過變化計算得到了策略梯度的計算方法,但是發現∇θlogπθ(τ) 並沒法直接求取。那麼該怎樣計算呢?
通過前面我們知道對於序列 τ,策略π(τ)=π(s0,a0,s1,a1,...,sT,aT),我們將π(τ)通過最原始的方法展開得到
π(τ)=p(s0)t=0∏Tπθ(at∣st)p(st+1∣st,at)(7)
於是將公式(7)代入公式(6)得到
∇θlogπθ(τ)=∇θlog(p(s0)t=0∏Tπθ(at∣st)p(st+1∣st,at))=∇θ(logp(s0)+t=0∑Tlogπθ(at∣st)+t=0∑Tlogp(st+1∣st,at))=t=0∑T∇θlogπθ(at∣st)(8)
這樣公式已經和監督學習中的最大似然有相同點了,因此我們對其進行蒙特卡洛處理,最終將公式(6)(7)(8)組合,並對公式(6)中的期望用蒙特卡洛進行替換,得到最終策略梯度:
∇θJ(θ)=Eτ∼πθ(τ)[t=0∑T∇θlogπθ(at∣st)(t∑Tr(st,at))]=N1t=0∑N[t=0∑T∇θlogπθ(at∣st)(t=0∑Tr(st∣at))]
終於我們得到了策略梯度的計算公式,接下來就是更新了梯度,和監督學習是一個方式
θ^=θ+α∇θJ(θ)
到這裏,策略梯度的理論和公式部分計算講完了,
其實說了這麼多,最終只是服務於策略網絡的逼近和參數更新,在後面的博客(DDPG等算法的的使用中都會用到)
參考文獻:
1.強化學習原理及入門
2.強化學習核心算法講解