【強化學習】DQN 算法改進


DQN 算法改進

(一)Dueling DQN

Dueling DQN 是一種基於 DQN 的改進算法。主要突破點:利用模型結構將值函數表示成更加細致的形式,這使得模型能夠擁有更好的表現。下面給出公式,並定義一個新的變量:

\[q(s_t, a_t)=v(s_t)+A(s_t, a_t) \]

也就是說,基於狀態和行動的值函數 \(q\) 可以分解成基於狀態的值函數 \(v\) 和優勢函數(Advantage Function)\(A\) 。由於存在:

\[E_{a_{t}}[q(s_t, a_t)] = v(s_t) \]

所以,如果所有狀態行動的值函數不相同,一些狀態行動的價值 \(q(s, a)\) 必然會高於狀態的價值 \(v(s)\),當然也會有一些低於價值。於是優勢函數可以表現出當前行動和平均表現之間的區別:如果優於平均表現,則優勢函數為正,反之為負。

以上是概念上的分解,以下是網絡結構上對應的改變:

再保持主體網絡不變的基礎上,將原本網絡中的單一輸出變為兩路輸出,一個輸出用於輸出 \(v\) ,它是一個一維的標量;另一個輸出用於輸出 \(A\),它的維度和行動數量相同。最后將兩部分加起來,就是原來的 \(q\) 值。

如果只進行以上單純地分解,會引出另外一個問題:當 \(q\) 值一定使,\(v\)\(A\) 有無窮多種可行組合,我們可以對 \(A\) 函數做限定。我們知道 \(A\) 函數地期望為 0:

\[E_a[A(s_t, a_t)] = E_{a}[q(s_t, a_t)-v(s_t)]=v(s_t)-v(s_t)=0 \]

\(A\) 值進行約束,將公式變為:

\[q(s_t, a_t) =v(s_t)+(A(s_t, a_t)- \frac{1}{|A|}\sum_{a'}A(s_t, a_t^{'})) \]

讓每一個 \(A\) 值減去當前狀態下所有 \(A\) 值得平均數,就可以保證前面提到的期望值為 0 的約束,從而增加了 \(v\)\(A\) 的輸出穩定性。

實際意義: 將值函數分解后,每一部分的結果都具有實際意義。通過反卷積操作得到兩個函數值對原始圖像輸入的梯度后,可以發現 \(v\) 函數對游戲中的所有關鍵信息都十分敏感,而 \(A\) 函數只對和行動相關的信息敏感。

(二)Priority Replay Buffer

Priority Replay Buffer 是一種針對 Replay Buffer 的改進結構。Replay Buffer 能夠提高樣本利用率的同時減少樣本的相關性。它存在一個問題:每個樣本都會以相同的頻率被學習。但實際上,每個樣本的難度是不同的,學習樣本所得的收獲也是不同的。為了使學習的潛力被充分挖掘出來,就有研究人員提出了 Priority Replay Buffer。它根據模型對當前樣本的表現情況,給樣本一定的權重,在采樣時被采樣的概率就和這個權重有關。交互時表現越差,對應權重越高,采樣的概率也就越高。反之,如果表現越好,則權重也就降低,被采樣的概率也就降低。這使得模型表現不好的樣本可以有更高的概率被重新學習,模型會把更多精力放在這些樣本上

從算法原理來看,Priority Replay Buffer 與以往的 Replay Buffer 有兩個差別:

(1)為每一個存入 Replay Buffer 的樣本設定一個權重;

(2)使用這個權重完成采樣過程:由於采樣的復雜度較高,我們可以采用線段樹數據結構來實現這個功能。


References

​ [1] 《強化學習精要——核心算法與 Tensorflow 實現》馮超


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM