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得到幾乎一樣的反饋,那麼就無法單獨評判路徑上各個動作的好壞,也就是說如果整體路徑得到正向結果,路徑中有些不太好的動作也會被鼓勵了。
舉一簡單例子:對於一維的隨機遊動情形:狀態空間為,起始從0出發,每次動作為向左或向右(-1or+1),若最後達到n獎勵為1,達到-m獎勵為-1,並達到兩端後停止。
一次採樣產生的路徑如圖1所示,最後達到了n,因此路徑在最後才會有+1的獎勵(圖2)。為了解決獎勵延遲,想法是在每一步都告訴agency哪一個方向會更好。在上例中,可以把reward更改(reward reshaping)為,那麼向右走,更改後的reward是1,向左-1,更改後路徑的reward如圖3所示。每一個時刻動作的好壞一目了然,讓agency能更方便地學習。
實際上可以用任一函數進行reward reshaping:,而且能證明使用reshaping後的reward的最優策略和原來的reward的最優策略是一樣的。
如果在policy gradient時使用reward reshaping:
因此實際上就是policy gradient中的baseline,而且在第6節中已經說明了加入baseline後policy gradient是不改變的,只會改變方差。這裡不妨取,這樣的有意義且能減小方差。
現在假設採用reward reshaping(且)後令外部的,那麼就得到常用的一步估計的policy gradient:
多步估計的policy gradient,以及具體代碼見第6節筆記的A2C/A3C部分
更一般的可以用,作為外部的discount:(因為如果reward reshaping已經能根據V-值變化表示某一時刻的動作好壞,那麼之後累積reward對這一時刻的作用就沒那麼大了)
這個其實就是演算法了。(在早年的RL研究中就有提出)
嚴格來說這個只是 -return演算法,真正的 還需要利用eligibility traces,eligibility traces只是計算上的差別(將 -return演算法轉化為真正on-line的演算法),具體實現細節見Sutton書的12節eligibility traces。
其等價於generalized advantage estimation (GAE),是在15年paper 《High-dimensional continuous control using generalized advantage estimation》中被重新探究:
之前定義的k步advantage估計:
現在定義TD error:(就是這節中reward reshaping)
容易看出:
現在定義一般化的advantage估計,就是各步advantage的exponential平均:
實驗成果:
可以看出適當調節超參數和後結果有明顯提升。
作業:
homework4:https://github.com/futurebelongtoML/homework/tree/master/hw4
實驗:
除了作業本身,我也有比較過A3C和DQN的好壞:
futurebelongtoML/homework
運行run_dqn_atari.py得到DQN的結果,運行run_A3C.py得到A3C的結果(我參考了這篇blog https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-8-asynchronous-actor-critic-agents-a3c-c88f72a5e9f2)
在同一實驗環境中:gym的Atari Game的Pong遊戲
https://www.zhihu.com/video/894695655665197056A3C的學習曲線:
實驗配置:使用了GPU的四個線程,即有四個agency同時平行地與遊戲環境交互,收集到的數據都用來訓練一個global的網路,因此可以期望這個平行處理過程會比只用一個agency快4倍。使用了這節的GAE,其中 。
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 | 机器学习 |