CS 294: Deep Reinforcement Learning(10)

Berkeley深度強化學習的中文筆記(10):Advanced Policy Gradient - pathwise derivative

這節接著第6節(策略梯度)的方向,探討另一種策略梯度的方法(PD),以及提出、總結一些先進的策略梯度有關的思想,提出SVG和DDPG演算法,應用到連續控制的環境中,得到了很好的表現,最後總結了policy gradient與Q-learning的優劣。

兩種策略梯度的方法:得分函數(score function)和路徑導數(pathwise derivative)

首先來回顧一下之前講的策略梯度方法:考慮期望函數:E_{xsim p(x|theta)}(f(x)),想要計算theta的梯度:

經過第6節的推導可知:nabla_{theta}E_{x}[f(x)]=E_x[f(x)nabla_{theta}log p(x|theta)],在實際應用時,可以對x採樣:x_isim p(x|theta),來得到該期望梯度的無偏估計。現在把這種計算梯度的方法稱為score function(SF)方法。這種方法的好處是無論f(x)是否連續,其導數是否可求,都能計算梯度。

pathwise derivative(PD):

另一方面(採用Reparameterized技巧),可以假定我們有一個隨機變數z服從某一固定分布,xz的確定性(deterministic)函數,即x=x(theta,z)theta為確定性的參數,那麼對x的採樣就是,先對z的採樣,再轉換為x(實際上計算機中常用這種方法配合cdf來採樣複雜分布)

因為對x的採樣就是對z的採樣,所以nabla_{theta}E_{x}[f(x)]等價於nabla_{theta}E_{z}[f(x(theta,z))]=E_{z}[nabla_{theta}f(x(theta,z))]approx frac{1}{M}sum_{i=1}^M ffrac{partial x}{partial theta}|_{z=z_i}

然而求這個梯度的梯度就需要f是連續的,而且導數是已知的。我們稱這種方法為pathwise derivative(PD)(稱pathwise是因為當隨機量z固定時,改變theta就是在改變整條路徑x,然後根據路徑的局部變動導致的獎勵變動,來確定路徑的改進方向。而SF則是固定了採樣路徑x,變動概率)

(如果記性好的話,會發現在第3節中「基於模型的強化學習的版本2.0「其實就是PD的思想,而當時是對於確定性策略而言的)

這樣同樣的期望梯度nabla_{theta}E_{x}[f(x)]有兩種求解方法,對於連續已知的模型可用pathwise derivative,而對於不連續或未知的模型只能用score function。實際上,雖然兩者都是對同一期望的估計,但PD的採樣方差會比SF的方差小。

第三種:數值導數PD:

很自然的想法,我們可以對PD中的f導數用數值導數來代替:(為方便起見,假設是一維情形)

qquadnabla_{theta}f(x(theta,z)) approx frac{f(x(theta+sigma,z))-f(x(theta-sigma,z))}{2sigma}

實際上,這種方法和score function(SF)方法在有些情況下有相近的地方。

特別地當我們取z sim N(0,1), x=theta+sigma z時,通過簡單的計算可以證明f(x)nabla_{theta}log p(x|theta)=frac{f(theta+sigma z))}{sigma}z,因此在這種情況下SF做的是隨機取動作空間中的一個方向z,考察這一方向的獎勵大小。

SVG:將pathwise derivative(PD)應用到MDP中(需要連續情形)

對於RL中的常見MDP情形:

所有動作服從帶theta參數的策略分布,想要求nabla_{theta}E_{tau}[R(tau)],可以用之前的SF:E_tau[R(tau)nabla_{theta}log p(tau|theta)]

另一方面我們也可以用Reparameterized技巧:假設a_t=pi(s_t,z_t;theta)z_t服從某一固定分布,那麼MDP就變為了:

利用PD:nabla_{theta}E_{z}[R_T(a(s_t,z_t;theta))]=E_{z}[nabla_{theta}R_T(a(s_t,z_t;theta))],然而需要知道狀態轉移概率P(s_2|s_1,a_1)。而有模型的RL就是解決這個問題的,但是我們可以利用Q-function來代替解決:(假定都是連續的

將外界的獎勵用Q-function來代替,而Q-function可以用模型(nn)來近似。

這就是SVG(0)演算法的思想,在15年paper《Learning Continuous Control Policies by Stochastic Value Gradients》中被提出。

SVG(0)演算法:利用Q_{phi}來近似Q^{pi,gamma},並以此進行策略梯度:

其中TD(lambda)之後會說,可以認為是泛化的Advantage Estimation。可以說SVG演算法和DQN有很大相似之處,都是根據當前Q-值來選擇或優化策略,然後從採樣路徑中得到Bellman Backup或類似的target來更新Q。

這篇paper在這個思想上還做了很多變種演算法:

SVG(1)演算法:可以學習V-function:V_{phi}=V^{pi,gamma}和動態模型f:s_{t+1}=f(s_t,a_t)+zeta_t,然後根據這兩者來定義Q-function。這裡有個小trick,因為直接用近似的動態模型f,與真實情形會有很大的偏差不利於正確地確定Q。為此假設近似模型f與真實模型之前的差異是由較大的雜訊zeta_t引起的,給定採樣路徑(s_t,a_t,s_{t+1})雜訊可以用zeta_t= s_{t+1}-f(s_t,a_t)來求出。那麼在計算Q值時:Q(s_t,a_t)=E(r_t+gamma V(s_{t+1}))=E(r_t+gamma V(f(s_t,a_t)+zeta_t)),a_t=pi(s_t,z_t),在對其求導時,根據採樣路徑來固定所有的隨機變數/雜訊zeta_t,z_t,使用這個trick後,V的值就不會受動態模型f的較大偏差影響。

SVG( infty )演算法:SVG(1)是向後走了一步來確定Q-值,進一步,可以向後走無窮步來確定Q-值,那麼只需要學習動態模型f:s_{t+1}=f(s_t,a_t)+zeta_t。那麼給定一條路徑,需要確定路徑上所有的雜訊,然後沿著路徑反向傳播梯度。在原paper中,採用了另一種推導方法,採用V-function的Bellman equation來推導V的梯度,根據導數公式來反向傳播:(和基於模型的RL的梯度直接傳入策略十分相似)

model-free的SVG(0)演算法和model-based的SVG(1)、SVG(infty)演算法的優劣取決於外界的環境模型十分容易學到,而且與目標緊密相關。一般來說,對於固定的環境模型,而reward函數改變(如2D的連續控制任務),model-based的演算法更好一些。在實驗中,對於一些2D的連續控制任務,SVG(1)、SVG(infty)能勝過A3C演算法。而且加入Experience Replay之後,成果有顯著提升。

SVG演算法與基於模型的RL的梯度直接傳入策略思想相似且直接,區別是:梯度直接傳入策略的return是有限T步return,只需要學習actor網路,而SVG是無限有折扣return,用值函數來代替無限return,因此除了要學習actor,還要學習更新critic網路。

確定性策略梯度Deterministic Policy Gradient(DPG)

能觀察到一下事實:對於服從Gauss分布的動作,採用score function策略梯度來估計,那麼當Gauss分布的方差趨於0(確定性動作)時,SF估計的方差會趨於infty。這是因為在之前有證明,z sim N(0,1), x=theta+sigma z時,f(x)nabla_{theta}log p(x|theta)=frac{f(theta+sigma z))}{sigma}z,當sigmato0,策略梯度的方差approxfrac{1}{sigma^2}toinfty,因此SF方法對於確定性動作會有很大方差。

但對於SVG(0)梯度方差則是不會有很大影響:nabla_{theta}sum_tQ(s_t,pi(s_t,theta,z_t))

但確定性的問題是探索會不夠,那探索時可以加點雜訊(如 Ornstein-Uhlenbeck process作為雜訊),然後用TD(0)來作為目標Q。只是這樣的策略梯度有一些偏差,由於state的分布是由有雜訊的策略產生的(當然如果Q和pi有無限的表示能力,每個狀態獨立學習,那麼就沒有偏差了)。

在對Q網路更新時,值得注意的是TD(0): Q_{theta}=delta,delta=r+gamma Q-Q 為TD-error來作為Q的loss function時,這樣的Q Bellman backups是off-policy的,與探索策略無關。這是因為目標Q= r+Q(s,pi(s))=r+E_{a}(Q(s,pi(a|s)) ,後一個等式是由於 pi 是確定性策略,而最右邊的式子就是expected Sarsa的目標Q,而expected Sarsa是off-policy,所以DPG也是off-policy的。

至於expected Sarsa是off-policy的,可以看看Sutton書的第六節。

DDPG(Deep Deterministic Policy Gradient):

在15年paper《Continuous control with deep reinforcement learning》中就將DPG與DQN結合起來,使用了DQN中的replay buffer和target network來增加穩定性。

因為之前講了DPG是off-policy的,因此可以用replay memory來加快學習速度。

而DDPG中採用的target network與DQN的有所不同:DQN中的target network是1000個回合後才更新一次,而DDPG的target network每步都更新,但都只更新一部分:(1-TAU)*target+TAU*origin ,TAU是個很小的數。

DDPG演算法:

其中目標Q用TD(0):hat Q_t = r_t + gamma Q_{phi}(s_{t+1},pi(s_{t+1},theta)),其中 phi,theta 代表了使用target net來計算目標Q。

原論文中詳細的演算法,所有細節一覽無餘:其中在更新actor網路,計算 frac{d}{da}Q(s,a) 時,採用了鏈式法則。

SVG演算法是DPG演算法的隨機版本,在實驗中,對於簡單2D連續控制任務,SVG的效果比DPG好一些。

Policy Gradient Methods vs Q-Function Regression Methods

  • Q-值迭代類型的演算法更加sample-efficient,但是泛化性能較弱。(在實驗中(如Atari),Q-learning能做好的,Policy Gradient也能做好)
  • Policy Gradient容易Debug和理解(在hw4中可以看到):不存在真空期,訓練時學習曲線一般單調上升,可以用KL,entropy來對比新舊策略
  • Q-值迭代能與探索策略很好的相容,因為它是off-policy的,replay memory能大大加快速度。
  • Policy Gradient能與循環策略(使用RNN)很好相容
  • Q-learning雖然可以用在連續動作中,但效果會很差。
  • Policy Gradient能產生隨機性的動作,並自動調節各個動作的概率。而Q-learning只能產生最greedy的動作。因此在狀態空間有遮蔽的環境中有隨機性的Policy Gradient會更好。

總結:

這節主要總結了兩種策略梯度的方法:

  • REINFORCE / score function estimator:nabla_{theta}pi(s_t,theta)hat A_t

其中hat A_t為優勢估計,用來減小方差,可以通過學習Q或V得到

  • Pathwise derivative estimators:E_{z}[nabla_{theta}R(a(s,z;theta))]
  • SVG(0)/DPG:frac{d}{da}Q(s,a)(學習Q, model-free, off-policy)
  • SVG(1):frac{d}{da}(r+V(f(s,a)))(學習V和f, model-based, off-policy)
  • SVG(infty):frac{d}{da_t}(r_t+gamma r_{t+1}+gamma^2r_{t+2}+…), where quad r_{t}=r(s_t,a_t)(學習f, model-based, on-policy)

總的來說,PD方法比SF更加sample-efficient和低方差,但是有很大bias,因此在很多情形下效果不太好。

DDPG實驗:

根據DDPG論文的演算法以及其附錄中的網路配置。應用於gym中的"MountainCarContinuous-v0"環境。

網路配置(論文):

實驗代碼:github.com/futurebelong

關於代碼部分,要感謝 @tx fan 提供的源碼,我對他的源碼進行一點改進,為了更好的實驗效果。

實驗結果:

可見在10個episode後,agency以及基本掌握了如何爬坡

100個episode時的結果:

https://www.zhihu.com/video/897926069003362304

可以看出DDPG演算法在適當調節參數後,在連續運動空間的環境中有十分出色的表現。


推薦閱讀:

請問如何理解遷移學習中的負遷移,有哪些資料闡述了這一問題?
論文篇:Latent Dirichlet Allocation(LDA)(二)
自然語言處理工程師需要掌握機器學習到什麼程度?
【博客存檔】Machine Learing With Spark Note 4: 構建回歸模型

TAG:强化学习ReinforcementLearning | 深度学习DeepLearning | 机器学习 |