CS 294: Deep Reinforcement Learning(9)

Berkeley深度強化學習的中文筆記(9):Advanced Policy Gradient - Variance Reduction

降低策略梯度的方差

這節主要對第六節的Policy Gradient進行深入展開講了用reward reshaping來降低策略梯度的方差,以及更一般的GAE演算法。由於Variance Reduction for Policy Gradient這節比較短,所以會附加講一下實驗效果。

reward reshaping:

在很多情形下,環境的reward可能要很多步才會有改變,那麼某一時間執行的動作需要很多步之後才會得到反饋,而且對於零散的獎勵,從動作發生(t=0)到得到反饋(t=T)這一段時間中,路徑中的動作幾乎都是等價的,因為它們都共同在t=T得到幾乎一樣的反饋,那麼就無法單獨評判路徑上各個動作的好壞,也就是說如果整體路徑得到正向結果,路徑中有些不太好的動作也會被鼓勵了。

舉一簡單例子:對於一維的隨機遊動情形:狀態空間為S={-m,-m+1,…,n-1,n},起始從0出發,每次動作為向左或向右(-1or+1),若最後達到n獎勵為1,達到-m獎勵為-1,並達到兩端後停止。

一次採樣產生的路徑如圖1所示,最後達到了n,因此路徑在最後才會有+1的獎勵(圖2)。為了解決獎勵延遲,想法是在每一步都告訴agency哪一個方向會更好。在上例中,可以把reward更改(reward reshaping)為tilde r=r+s-s,那麼向右走,更改後的reward是1,向左-1,更改後路徑的reward如圖3所示。每一個時刻動作的好壞一目了然,讓agency能更方便地學習。

實際上可以用任一函數phi進行reward reshapingtilde r(s,a,s)=r(s,a,s)+phi(s)-phi(s),而且能證明使用reshaping後的reward的最優策略和原來的reward的最優策略是一樣的。

如果在policy gradient時使用reward reshaping:

large E[nabla_{theta}log pi_{theta}(a_0|s_0)(tilde r_0+gammatilde r_1+…+gamma^Ttilde r_T)]=  large E[nabla_{theta}log pi_{theta}(a_0|s_0)( r_0+gamma r_1+…+gamma^Tr_T+gamma^{T+1}phi(s_T)-phi(s_0))]

因此phi實際上就是policy gradient中的baseline,而且在第6節中已經說明了加入baseline後policy gradient是不改變的,只會改變方差。這裡不妨取phi=V,這樣的phi有意義且能減小方差。

現在假設採用reward reshaping(且phi=V)後令外部的gamma=0,那麼就得到常用的一步估計的policy gradient

多步估計的policy gradient,以及具體代碼見第6節筆記的A2C/A3C部分

更一般的可以用gamma lambda(lambdain(0,1))作為外部的discount:(因為如果reward reshaping已經能根據V-值變化表示某一時刻的動作好壞,那麼之後累積reward對這一時刻的作用就沒那麼大了)

這個其實就是TD(lambda)演算法了。(在早年的RL研究中就有提出)

嚴格來說這個只是 lambda -return演算法,真正的 TD(lambda) 還需要利用eligibility traces,eligibility traces只是計算上的差別(將 lambda -return演算法轉化為真正on-line的演算法),具體實現細節見Sutton書的12節eligibility traces。

其等價於generalized advantage estimation (GAE),是在15年paper 《High-dimensional continuous control using generalized advantage estimation》中被重新探究

之前定義的k步advantage估計:hat A_t^{(k)}=r_t+gamma r_{t+1}+…+gamma^{k-1} r_{t+k-1}+gamma^k V(s_{t+k})-V(s_t)

現在定義TD error:delta_t=r_t+gamma V(s_{t+1})-V(s_t)(就是這節中reward reshaping)

容易看出:hat A_t^{(k)}= delta_t+gamma delta_{t+1}+…+gamma^{k-1} delta_{t+k-1}

現在定義一般化的advantage估計,就是各步advantage的exponential平均:

qquadhat A_t^{lambda}=hat A_t^{1}+lambdahat A_t^{2}+lambda^2hat A_t^{3}...

qquadhat A_t^{lambda}=delta_t+gamma lambdadelta_{t+1}+(gamma lambda)^2delta_{t+2}+...

實驗成果:

可以看出適當調節超參數gammalambda後結果有明顯提升。

作業:

homework4:github.com/futurebelong

實驗

除了作業本身,我也有比較過A3C和DQN的好壞:

futurebelongtoML/homework

運行run_dqn_atari.py得到DQN的結果,運行run_A3C.py得到A3C的結果(我參考了這篇blog medium.com/emergent-fut

在同一實驗環境中:gym的Atari Game的Pong遊戲

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

A3C的學習曲線

實驗配置:使用了GPU的四個線程,即有四個agency同時平行地與遊戲環境交互,收集到的數據都用來訓練一個global的網路,因此可以期望這個平行處理過程會比只用一個agency快4倍。使用了這節的GAE,其中 gamma=0.99,lambda=0.97

A3C的網路採用A3C論文《Asynchronous Methods for Deep Reinforcement Learning》的網路,即卷積網路+LSTM結構,而LSTM的輸出,經過一個全連接層得到各個動作的偏好值(經過Softmax得到各個動作的概率),經過另一個全連接層得到當前狀態的V-值。

實驗結果:圖中橫軸是與遊戲環境交互的總次數(即訓練數據),縱軸是最近5個episode的平均episode獎勵,可以看到大約在5e6次時,A3C的表現到達最好(episode獎勵大於20),這也是Pong遊戲能達到的最高分。所用時間只有不到3個小時。

DQN:

實驗配置:GPU上使用一個agency,按照DQN的論文《Playing Atari with Deep Reinforcement Learning》,採用了replay memory和target net,使用僅卷積網路+全連接層,輸出各動作Q-值。

實驗結果:可以看出DQN也是大約在5e6次時,才能穩定在最優結果上,和A3C使用的總步數差不多,雖然DQN在開始提升地更快,在2e6次就到達了不錯的水平。因此從與遊戲環境交互的總次數來看,DQN效果更好,但是DQN運行5e6次的時間大約需要8個小時,而A3C只需要3個小時(充分利用4個Agency的平行處理),因此A3C總體優於DQN。


推薦閱讀:

wide&deep模型中為什麼要將連續特徵離散化?
Attention學習筆記
線性回歸演算法——matlab以及c/c++程序實現
Python · 數據工具包

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