【李宏毅深度強化學習筆記】4、Q-learning更高階的算法

【李宏毅深度強化學習筆記】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

【李宏毅深度強化學習筆記】7、Sparse Reward

【李宏毅深度強化學習筆記】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

由圖可以看出兩點:

  1. 從橙色的曲線和橙色的直線可以看出,DQN估測出來的Q-value,往往會高於實際中的Q-value 
  2. 從橙色的直線和藍色的直線可以看出,Double DQN訓練出來的policy,一般會好過DQN訓練出來的policy

 

從第三篇筆記(https://blog.csdn.net/ACL_lihan/article/details/104041905)中Q-function的概念可以得出,Q(s_t,a_t)的結果會接近於。但是maxQ(s_{t+1},a)往往容易會得到高估的結果,以下圖爲例子:

 4個柱子代表4個action得到的Q-value,實際上都是相同的;右圖綠色的部分表示高估的部分。

因爲Q-function本身就是一個network,估測出來的值本身是有誤差的,所以原本4個action都相等的Q-value就變成右圖的樣子。而因爲maxQ(s_{t+1},a),所以又往往會選擇Q-value最大的那個結果。所以就會導致Q(s_{t+1},a_t) = r_t + maxQ(s_{t+1},a)的結果總是偏大。

 

 在Double DQN的右邊中,決定採取Q-value最大的action,然後由算出Q-value。

好處:

  1. 即便Q過估計了某個值,只要Q^'沒有高估,最後的結果還是正常的
  2. 即便Q^'過估計了某個值,只要Q沒有選到那個action,最後的結果還是正常的

 Q^'可以採用Target network去算Q-value,這樣就不用訓練額外的network。

Dueling DQN

Dueling DQN做得唯一一件事就是改network的架構 。如下圖,上半部分爲DQN,下半部分爲Dueling DQN。

 Dueling DQN中,輸出結果變成Q(s,a) = A(s,a) + V(s),因爲有時候在某種state,無論做什麼動作,對下一個state都沒有多大的影響,所以將Q-function分解爲兩部分。比如,在一個好的state,無論做什麼action,都能得到很高的value;在一個很差的state,無論做什麼action,都只會得到一個很低的value。

舉個例子:

 上表中,Q(s,a) = A(s,a) + V(s)

初始狀態爲左圖所示。假設現在我們sample到新的Q-value Q(s_2,a_1)Q(s_2,a_2)如中間圖所示。這時network可以選擇不更新A(s_2,a_1)A(s_2,a_2),而去更新V(s_2),如中間圖所示。

更新完V(s_2)後,可以看到Q(s_2,a_3)也跟着被更新了。這樣的好處是,原本只sample到 Q(s_2,a_1)Q(s_2,a_2)的更新,但是由於V(s_2)被更新,就使得Q(s_2,a_3)也同樣被更新,即便Q(s_2,a_3)沒有在實際中被sample到。這樣實現比較有效率地使用數據,加速訓練。

Q(s_2,a_3)沒有被sample到,然後也跟着更新會不會造成錯誤的結果呢?答案是不會,因爲根據sample到的data,在s2無論採取a_1a_2都會使得Q(s_2,a_1)Q(s_2,a_2)進一步上升,所以可以把s2看成是一個好的state,無論採取什麼action,都會得到好的結果)

爲了防止network把V(s)直接調成0,然後導致Q(s,a) = A(s,a),這樣Dueling DQN和普通的DQN就沒區別了,所以需要對A(s,a)做一下限制。這樣對A(s,a)進行參數更新比較麻煩,network就會傾向於對V(s)進行參數更新。

具體來說,所加的限制可以是:強制A(s,a)的每一列的和都爲0,如上圖所示。

加上這個限制後,按照剛纔的例子,如果Q(s_2,a)這一列都加1,network如果不去調V(s_2)而去調A(s_2,a)的值都加1,就會導致最終A(s_2,a)這一列的和不爲0,沒辦法符合上述的限制。所以加上這個限制後就防止network只調A(s,a)而不去調V(s)

這時V(s)可以看成Q(s,a)每一列的平均值,推導如下:

Q(s_1,a_1) + Q(s_1,a_2) + Q(s_1,a_3) =V(s_1)+A(s_1,a_1) + V(s_1)+A(s_1,a_2) + V(s_1)+A(s_1,a_3) =V(s_1) +V(s_1)+ V(s_1) + 0

下圖展示了實際過程中,如何使A(s,a)的每一列的和都爲0:

上圖V(s)的輸出值爲1,A(s,a)的輸出值爲{7,3,2}

爲了使A(s,a)的每一列的和都爲0,可以使A(s,a)的每個數減去對應所在列的平均數,即{7,3,2}變成{3,-1,-2},此爲Normalization的過程。

優先回放(Prioritized Experience Replay)

之前在buffer中sample數據去訓練network的時候,是無差別地sample每一筆數據,就是說沒有偏向於sample哪些數據。

這樣做的不足是有些:有時候因爲sample到的某一筆訓練數據質量不好,造成Q(s_t,a_t)估測的值和r_t + Q(s_{t+1},a_{t+1})的差距比較大(即TD error)。如果接下去還是無差別地sample每一筆數據,就會導致這些TD error比較大的情況沒有得到更多更好的訓練,就會導致Q network 在有些情況估值不準確

 所以使用Prioritized Reply後,對於那些會造成TD error的情況,就會傾向於sample更多相關的數據來訓練network,使得network克服這個TD error。(舉個例子:A同學數學考99分,英語考30分,那他就應該買多點英語資料來學習,而不是數學英語仍然花同樣的力氣去學。)

N step bootstraping

MC是計算的在s_t之後直到episode結束的所有reward,TD是計算s_ts_{t+1}的reward。

Multi-step這個方法結合了MC和TD各自的特點,將TD改爲計算s_ts_{t+n},即由原來跳到下一個狀態,改爲跳到之後n個狀態。特殊的,直接跳到episode結束則變爲MC方法。

在之前的Q-function的訓練中,從buffer中sample出(s_t,a_t,r_t,s_{t+1}),左邊Q network的輸入爲 s_ta_t,輸出結果Q(s_t,a_t),右邊target network的輸入爲 s_{t+1}a_{t+1},輸出結果Q(s_{t+1},a_{t+1})再加上r_t,最終訓練結果應該使這兩個結果儘可能接近。

而使用Multi-step後,假設爲N step,則應從buffer中sample出。左邊左邊Q network的輸入爲 s_ta_t,輸出結果Q(s_t,a_t),右邊target network的輸入爲 s_{t+N+1}a_{t+N+1},輸出結果Q(s_{t+N+1},a_{t+N+1})再加上從t到t+N的所有reward的總和\sum _{t^{'}=t} ^{t+N} r_{t^'}

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中,遇到狀態s_t採取“向右”的action,在另一個episode遇到狀態s_t採取“向左”的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)的情況發生。

發佈了25 篇原創文章 · 獲贊 38 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章