DQN 算法改進
(一)Dueling DQN
Dueling DQN 是一種基於 DQN 的改進算法。主要突破點:利用模型結構將值函數表示成更加細緻的形式,這使得模型能夠擁有更好的表現。下面給出公式,並定義一個新的變量:
q(st,at)=v(st)+A(st,at)q(st,at)=v(st)+A(st,at)
也就是說,基於狀態和行動的值函數 qq 可以分解成基於狀態的值函數 vv 和優勢函數(Advantage Function) AA 。由於存在:
Eat[q(st,at)]=v(st)Eat[q(st,at)]=v(st)
所以,如果所有狀態行動的值函數不相同,一些狀態行動的價值 q(s,a)q(s,a) 必然會高於狀態的價值 v(s)v(s) ,當然也會有一些低於價值。於是優勢函數可以表現出 當前行動和平均表現之間的區別 :如果優於平均表現,則優勢函數為正,反之為負。
以上是概念上的分解,以下是網絡結構上對應的改變:
再保持主體網絡不變的基礎上,將原本網絡中的單一輸出變為兩路輸出,一個輸出用於輸出 vv ,它是一個一維的標量;另一個輸出用於輸出 AA ,它的維度和行動數量相同。最後將兩部分加起來,就是原來的 qq 值。
如果只進行以上單純地分解,會引出另外一個問題:當 qq 值一定使, vv 和 AA 有無窮多種可行組合,我們可以對 AA 函數做限定。我們知道 AA 函數地期望為 0:
Ea[A(st,at)]=Ea[q(st,at)−v(st)]=v(st)−v(st)=0Ea[A(st,at)]=Ea[q(st,at)−v(st)]=v(st)−v(st)=0
對 AA 值進行約束,將公式變為:
q(st,at)=v(st)+(A(st,at)−1|A|∑a′A(st,a′t))q(st,at)=v(st)+(A(st,at)−1|A|∑a′A(st,at′))
讓每一個 AA 值減去當前狀態下所有 AA 值得平均數,就可以保證前面提到的期望值為 0 的約束,從而增加了 vv
和
AA
的輸出穩定性。
實際意義:將值函數分解後,每一部分的結果都具有實際意義。通過反卷積操作得到兩個函數值對原始圖像輸入的梯度後,可以發現 vv 函數對遊戲中的所有關鍵信息都十分敏感,而 AA 函數隻對和行動相關的信息敏感。
(二)Priority Replay Buffer
Priority Replay Buffer 是一種針對 Replay Buffer 的改進結構。Replay Buffer 能夠 提高樣本利用率 的同時 減少樣本的相關性 。它存在一個問題:每個樣本都會以相同的頻率被學習。但實際上,每個樣本的難度是不同的,學習樣本所得的收穫也是不同的。為了使學習的潛力被充分挖掘出來,就有研究人員提出了 Priority Replay Buffer。它 根據模型對當前樣本的表現情況,給樣本一定的權重,在採樣時被採樣的機率就和這個權重有關 。交互時表現越差,對應權重越高,採樣的機率也就越高。反之,如果表現越好,則權重也就降低,被採樣的機率也就降低。 這使得模型表現不好的樣本可以有更高的機率被重新學習,模型會把更多精力放在這些樣本上 。
從算法原理來看,Priority Replay Buffer 與以往的 Replay Buffer 有兩個差別:
(1)為每一個存入 Replay Buffer 的樣本設定一個權重;
(2)使用這個權重完成採樣過程:由於採樣的複雜度較高,我們可以採用線段樹數據結構來實現這個功能。