深度強化學習課程文件

深度Q學習演算法

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

深度Q學習演算法

我們瞭解到,深度Q學習透過使用深度神經網路來近似某個狀態下每個可能動作的Q值(值函式估計)。

不同之處在於,在訓練階段,我們不是像Q學習那樣直接更新狀態-動作對的Q值

Q Loss

在深度Q學習中,我們建立一個損失函式,該函式比較我們的Q值預測和Q目標,並使用梯度下降來更新深度Q網路的權重,以更好地近似我們的Q值

Q-target

深度Q學習訓練演算法有兩個階段

  • 取樣:我們執行動作並將觀察到的經驗元組儲存在重放記憶中
  • 訓練:隨機選擇一小批元組,並使用梯度下降更新步驟從該批次中學習
Sampling Training

這與Q學習不同。深度Q學習訓練可能會遇到不穩定性,這主要是由於結合了非線性Q值函式(神經網路)和自舉(當我們用現有估計而不是實際完整回報來更新目標時)。

為了幫助我們穩定訓練,我們實施了三種不同的解決方案

  1. 經驗回放 以便更有效地利用經驗
  2. 固定Q目標 以穩定訓練
  3. 雙深度Q學習,以處理Q值高估的問題

讓我們逐一瞭解它們!

經驗回放以更有效地利用經驗

我們為什麼要建立重放記憶?

深度Q學習中的經驗回放有兩個作用

  1. 更有效地利用訓練期間的經驗。通常,在線上強化學習中,智慧體與環境互動,獲取經驗(狀態、動作、獎勵和下一狀態),從中學習(更新神經網路),然後丟棄它們。這效率不高。

經驗回放透過更有效地利用訓練經驗來提供幫助。我們使用一個重放緩衝區來儲存經驗樣本,這些樣本可以在訓練期間重複使用。

Experience Replay

⇒ 這允許智慧體多次從相同的經驗中學習

  1. 避免忘記以前的經驗(也稱為災難性干擾或災難性遺忘)並減少經驗之間的相關性.
  • 災難性遺忘:如果我們給神經網路連續的經驗樣本,就會出現這個問題,它會傾向於隨著獲得新的經驗而忘記以前的經驗。例如,如果智慧體在第一級,然後在第二級,這與第一級不同,它可能會忘記如何在第一級行為和玩耍。

解決方案是建立一個重放緩衝區,在與環境互動時儲存經驗元組,然後取樣一小批元組。這可以防止網路只學習它之前立即做過的事情。

經驗回放還有其他好處。透過隨機取樣經驗,我們消除了觀測序列中的相關性,並避免了動作值發生劇烈波動或發散。

在深度Q學習虛擬碼中,我們初始化一個容量為N的重放記憶緩衝區D(N是您可以定義的超引數)。然後我們將經驗儲存在記憶體中,並採樣一批經驗在訓練階段饋送給深度Q網路。

Experience Replay Pseudocode

固定Q目標以穩定訓練

當我們想計算TD誤差(即損失)時,我們計算TD目標(Q目標)與當前Q值(Q的估計)之間的差值

但是我們不知道真正的TD目標。我們需要估計它。使用貝爾曼方程,我們看到TD目標只是在該狀態下采取該動作的獎勵加上下一狀態的折現最高Q值。

Q-target

然而,問題在於我們使用相同的引數(權重)來估計TD目標Q值。因此,TD目標與我們正在更改的引數之間存在顯著的相關性。

因此,在訓練的每一步,我們的Q值和目標值都會發生變化。我們正在接近我們的目標,但目標也在移動。這就像追逐一個移動的目標!這可能導致訓練中的劇烈振盪。

這就像你是一個牛仔(Q估計),你想抓一頭奶牛(Q目標)。你的目標是靠近(減少誤差)。

Q-target

在每個時間步,你都試圖接近奶牛,而奶牛在每個時間步也都在移動(因為你使用相同的引數)。

Q-target Q-target 這導致了一條奇怪的追逐路徑(訓練中出現劇烈振盪)。 Q-target

相反,我們在虛擬碼中看到的是,我們

  • 使用一個具有固定引數的獨立網路來估計TD目標
  • 每C步從我們的深度Q網路複製引數以更新目標網路。
Fixed Q-target Pseudocode

雙DQN

雙DQN,或雙深度Q學習神經網路,由Hado van Hasselt提出。該方法處理Q值高估的問題。

為了理解這個問題,請記住我們如何計算TD目標

TD target

我們在計算TD目標時面臨一個簡單的問題:我們如何確定下一狀態的最佳動作是具有最高Q值的動作?

我們知道Q值的準確性取決於我們嘗試的動作我們探索的相鄰狀態。

因此,在訓練開始時,我們沒有足夠的資訊來判斷要採取的最佳動作。因此,將最大Q值(有噪聲)作為要採取的最佳動作可能導致假陽性。如果非最優動作經常被賦予高於最優最佳動作的Q值,學習將變得複雜。

解決方案是:當我們計算Q目標時,我們使用兩個網路來解耦動作選擇和目標Q值生成。我們

  • 使用我們的DQN網路選擇下一狀態要採取的最佳動作(具有最高Q值的動作)。
  • 使用我們的目標網路計算在下一狀態採取該動作的目標Q值。

因此,雙DQN幫助我們減少Q值的高估,從而幫助我們更快、更穩定地訓練。

自從深度Q學習的這三項改進以來,又增加了許多其他改進,例如優先經驗回放和對偶深度Q學習。這些超出了本課程的範圍,但如果您感興趣,請檢視我們在閱讀列表中列出的連結。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.