【李宏毅深度強化學習筆記】1、策略梯度方法(Policy Gradient)
【李宏毅深度強化學習筆記】2、Proximal Policy Optimization (PPO) 算法
【李宏毅深度強化學習筆記】3、Q-learning(Basic Idea)
【李宏毅深度強化學習筆記】4、Q-learning更高階的算法(本文)
【李宏毅深度強化學習筆記】5、Q-learning用於連續動作 (NAF算法)
【李宏毅深度強化學習筆記】6、Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient
【李宏毅深度強化學習筆記】8、Imitation Learning
-------------------------------------------------------------------------------------------------------
【李宏毅深度強化學習】視頻地址:https://www.bilibili.com/video/av63546968?p=4
課件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html
-------------------------------------------------------------------------------------------------------
Double DQN(DDQN)
DQN的Q-value往往是被高估的,如下圖
上圖爲四個遊戲的訓練結果的對比。
橙色的曲線代表DQN估測的Q-value,橙色的直線代表DQN訓練出來的policy實際中獲得的Q-value
藍色的曲線代表Double DQN估測的Q-value,藍色的直線代表Double DQN訓練出來的policy實際中獲得的Q-value
由圖可以看出兩點:
- 從橙色的曲線和橙色的直線可以看出,DQN估測出來的Q-value,往往會高於實際中的Q-value
- 從橙色的直線和藍色的直線可以看出,Double DQN訓練出來的policy,一般會好過DQN訓練出來的policy
從第三篇筆記(https://blog.csdn.net/ACL_lihan/article/details/104041905)中Q-function的概念可以得出,的結果會接近於。但是往往容易會得到高估的結果,以下圖爲例子:
4個柱子代表4個action得到的Q-value,實際上都是相同的;右圖綠色的部分表示高估的部分。
因爲Q-function本身就是一個network,估測出來的值本身是有誤差的,所以原本4個action都相等的Q-value就變成右圖的樣子。而因爲,所以又往往會選擇Q-value最大的那個結果。所以就會導致的結果總是偏大。
在Double DQN的右邊中,決定採取Q-value最大的action,然後由算出Q-value。
好處:
- 即便Q過估計了某個值,只要沒有高估,最後的結果還是正常的
- 即便過估計了某個值,只要Q沒有選到那個action,最後的結果還是正常的
可以採用Target network去算Q-value,這樣就不用訓練額外的network。
Dueling DQN
Dueling DQN做得唯一一件事就是改network的架構 。如下圖,上半部分爲DQN,下半部分爲Dueling DQN。
Dueling DQN中,輸出結果變成,因爲有時候在某種state,無論做什麼動作,對下一個state都沒有多大的影響,所以將Q-function分解爲兩部分。比如,在一個好的state,無論做什麼action,都能得到很高的value;在一個很差的state,無論做什麼action,都只會得到一個很低的value。
舉個例子:
上表中,
初始狀態爲左圖所示。假設現在我們sample到新的Q-value ,如中間圖所示。這時network可以選擇不更新和,而去更新,如中間圖所示。
更新完後,可以看到也跟着被更新了。這樣的好處是,原本只sample到 ,的更新,但是由於被更新,就使得也同樣被更新,即便沒有在實際中被sample到。這樣實現比較有效率地使用數據,加速訓練。
(那沒有被sample到,然後也跟着更新會不會造成錯誤的結果呢?答案是不會,因爲根據sample到的data,在無論採取或都會使得,進一步上升,所以可以把看成是一個好的state,無論採取什麼action,都會得到好的結果)
爲了防止network把直接調成0,然後導致,這樣Dueling DQN和普通的DQN就沒區別了,所以需要對做一下限制。這樣對進行參數更新比較麻煩,network就會傾向於對進行參數更新。
具體來說,所加的限制可以是:強制的每一列的和都爲0,如上圖所示。
加上這個限制後,按照剛纔的例子,如果這一列都加1,network如果不去調而去調的值都加1,就會導致最終這一列的和不爲0,沒辦法符合上述的限制。所以加上這個限制後就防止network只調而不去調。
這時可以看成每一列的平均值,推導如下:
下圖展示了實際過程中,如何使的每一列的和都爲0:
上圖的輸出值爲1,的輸出值爲{7,3,2}
爲了使的每一列的和都爲0,可以使的每個數減去對應所在列的平均數,即{7,3,2}變成{3,-1,-2},此爲Normalization的過程。
優先回放(Prioritized Experience Replay)
之前在buffer中sample數據去訓練network的時候,是無差別地sample每一筆數據,就是說沒有偏向於sample哪些數據。
這樣做的不足是有些:有時候因爲sample到的某一筆訓練數據質量不好,造成估測的值和的差距比較大(即TD error)。如果接下去還是無差別地sample每一筆數據,就會導致這些TD error比較大的情況沒有得到更多更好的訓練,就會導致Q network 在有些情況估值不準確。
所以使用Prioritized Reply後,對於那些會造成TD error的情況,就會傾向於sample更多相關的數據來訓練network,使得network克服這個TD error。(舉個例子:A同學數學考99分,英語考30分,那他就應該買多點英語資料來學習,而不是數學英語仍然花同樣的力氣去學。)
N step bootstraping
MC是計算的在之後直到episode結束的所有reward,TD是計算到的reward。
Multi-step這個方法結合了MC和TD各自的特點,將TD改爲計算到,即由原來跳到下一個狀態,改爲跳到之後n個狀態。特殊的,直接跳到episode結束則變爲MC方法。
在之前的Q-function的訓練中,從buffer中sample出,左邊Q network的輸入爲 ,,輸出結果,右邊target network的輸入爲 ,,輸出結果再加上,最終訓練結果應該使這兩個結果儘可能接近。
而使用Multi-step後,假設爲N step,則應從buffer中sample出。左邊左邊Q network的輸入爲 ,,輸出結果,右邊target network的輸入爲 ,,輸出結果再加上從t到t+N的所有reward的總和。
Noisy Net
這個技術是爲了改進exploration的。之前的exploration(epsilon greedy)是在action上做noise。而Noisy Net是在Q-function的參數上做noise。
注意:在每一個episode開始前,對Q-function的參數添加noise,用這個添加了noise的network去玩遊戲,直到episode結束,纔可以重新添加新的noise。
在action上加noise,即epsilon-greedy,就算給出同一個state s,也會做出不同的action,可能是按照Q-function的結果,也可能是以random得到的結果。這不符合實際的情況,因爲實際上我們希望給出同一個state,都會做出同樣的action。
而在Q-function的參數上加noise,因爲在這個方法規定了只在一個episode開始前添加noise,不會在episode中途再增加noise,所以在episode中遇到同一個state都會做出同樣的action。所以它是比較有系統地進行exploration。比如在一個episode中,遇到狀態都採取“向右”的action,在另一個episode遇到狀態都採取“向左”的action。
Distributional Q-function
使用同一policy的actor在同一個state採取同一個action,得到的cumulated reward是不同的,因爲後續state是具有隨機性的。如果對它進行統計,會發現它是會呈現一個分佈(distribution)。而Q-value就是這些分佈取mean的結果。
這樣做有一個不足就是:即便mean相同,但是可能實際的分佈是完全不同的。然而因爲Q-function只輸出Q-value(即分佈的mean),所以我們看不到實際的分佈。
所以Distributional Q-function就是爲了能夠實現從輸出Q-value變成輸出Q-function的分佈。
左邊爲Q-function,右邊爲Distributional Q-function。
三種顏色代表三種action
同一顏色不同柱子代表在同一state下采取同一action產生的reward落在分佈裏的機率,具體來說,在綠色柱子裏,5個柱子的X軸代表5種不同reward,Y軸代表在某一state採取某一action得到的reward落在此處的機率。
Distributional Q-function的好處:有了具體的分佈,我們不僅可以從中挑選一個mean最大的動作之後(其實這一步不用Distributional Q-function也能做),還能進一步考慮哪個分佈的方差最小,進一步降低不穩定的可能性。
Rainbow
這種就是把前面所有的方法全部運用在一起,可以看到最終效果還是很不錯的。
其中,文章前面講到的Multi-step可以看A3C當做參考,因爲A3C中就有運用到 Multi-step 的技術。
這張圖講的是,在上面的Rainbow拿掉某一種技術後導致分數降低多少(比如綠色的線就是拿掉Dueling DQN技術)。
其中拿掉Double DQN後沒有產生影響,是因爲有使用Distribution Q-function的時候,一般就克服了DQN過估計(over estimate)reward的問題(而這正是Double DQN想解決的問題),甚至會出現略微低估(under estimate)reward的情況,所以使用Double DQN的效果就沒有那麼大。Distribution Q-function之所以能解決過估計,是因爲Distribution Q-function的輸出是一個分佈,而這個分佈的X軸(即reward大小)是有一個區間的,假設這個區間是[-10,10],而這時過估計的reward爲100,超出這個區間,就沒有被記錄到,所以就不會有過估計(over estimate)的情況發生。