Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

DQN (深度Q網絡 / Deep Q-Network)

\Happy Vibe Coding/

概念

img

  • DQN是一種強化學習 (Reinforcement Learning, RL) 的演算法。
  • 教導一個智能體(Agent)如何在某個環境中採取行動,獲得最大累積獎勵。
  • 用一個神經網絡估計在某狀態 (State)下,採取某行動 (Action)能得到的未來總獎勵期望值Q值 (Q-value)。
  • 然後智能體就傾向於選擇那個 Q 值最高的行動。

程式碼

企鵝大神說過Talk is cheap. Show me the code. - Linus Torvalds,但DQN程式又臭又長,我們就直接上Colab,模組化切割征服吧~

重要模組

  • ReplayMemory: 實現一個經驗回放緩衝區,用於儲存和取樣轉換,以訓練 DQN 代理
  • DQN: 定義深度 Q 網絡模型
  • DQNAgent: 實現 DQN 代理,包括選擇動作、學習和更新網絡的方法。

圖表

img

  • X軸 - Episode: 代表訓練回合數( agent 練習了多少次),從第 0 次練習到大約第 600 次練習。
  • Y軸 - Duration: 代表在每一個回合中,智能體持續了多久才結束。數值越高表現越好。

在很多像「平衡桿」(CartPole) 這類的強化學習任務中,「持續時間」通常指智能體成功維持了多少個時間步(或者說撐了多久)才失敗(例如桿子倒了)或達到目標。

解析

  • 最高表現 (Peak Performance):
    有多次達到接近 200 的高峰 (大約在 250 和 350 回合附近)。

  • 學習速度與穩定性

    • 初期學習: 在 150-200 回合左右開始顯著進步。
    • 高峰維持: 在 200 到 380 回合之間,維持較高表現 (例如持續時間 > 100) 。
    • 避免了大崩盤: 下滑比較和緩,穩定在 50-75 左右一段時間。可能表示學習過程更穩健,或者參數調整得更好,避免了「災難性遺忘」之類的問題。
  • 後期表現 (Late Stage Performance)
    在訓練的尾聲 (大約 550 回合之後)出現了一波明顯的回升,再次突破 100,表示智能體在訓練後期還有學習和改進的潛力

煉丹( 調參)

  1. 學習率 (Learning Rate, α): 控制每次更新模型權重的幅度,太高訓練不穩( 學習成效不佳),太低學習太慢。
  2. 探索率 (Epsilon, ε) 的衰減策略 (Epsilon Decay): 控制 AI 有多少機率會「隨機探索」而不是「選擇已知最好的動作」。
  3. 折扣因子 (Discount Factor, γ): 決定 AI 多看重「未來」的獎勵。接近 1 表示更看重長遠利益,接近 0 表示只看眼前,需要長期規劃才能成功的任務(例如活得更久),通常需要較高的 γ。
  4. 經驗回放緩衝區大小 (Replay Capacity): 儲存過去經驗供 AI 學習,太小導致學到的經驗不夠多樣化,太大可能學到太舊、不相關的經驗。
  5. 批次大小 (Batch Size): 每次從緩衝區取多少經驗來學習,加大後一次學得更多。
  6. 知識更新速度(Knowledge Update Period, τ):學習新知識的速度有多快。

舉個栗子🌰:訓練一隻狗

  1. Learning Rate: 教小狗撿球時,告訴它做對了要給多少獎勵
    • 注意:學習率太高,就像你一下子給小狗太多指令,它可能會搞不清楚,反而學不好。所以也要慢慢調整。
  2. Epsilon: 讓小狗早點開始練習「正式撿球」
    • 注意:太早結束探索,小狗可能會錯過一些更好的撿球方法。
  3. Discount Factor: 每次小狗成功撿到球,都會給牠小餅乾獎勵,「折扣因子」就像是小狗的「耐心程度」。
    • 注意:折扣因子太低不考慮未來,越接近1越重視長遠獎勵,學得也較好
  4. Replay Buffer Size: 小狗的記憶力
    • 注意:太小小狗可能學不到什麼東西,很快就會忘記之前學到的。
  5. Batch Size: 讓小狗一次撿多一點球
    • 注意: 一次撿太多球小狗可能會累壞 (電腦記憶體可能會不夠用),所以要慢慢嘗試,不要一次調太高
  6. Knowledge Update Period: 小狗消化新知速度

DQN 變種 (Advanced DQN Variants)

  • Double DQN (DDQN): 常用且有效的改進,可以緩解 DQN 容易過度高估 Q 值的問題,讓學習更穩定。
  • Dueling DQN: 將 Q 值拆成「狀態價值 (Value)」和「動作優勢 (Advantage)」,在某些情況下能學得更好。
  • Prioritized Experience Replay (PER): 不再隨機抽樣經驗,而是優先學習那些讓 AI「感到意外」(TD-error 較大)的經驗,提升學習效率。
  • Rainbow DQN: 把上面好幾種改進(還有其他如 Noisy Nets, Distributional RL)結合在一起的「大禮包」,通常效果拔群,但實現也更複雜。

就跟<<動手學深度學習>>一書期望的,希望能讓大家在執行時更深入感受到這個程式。

其他

epsilon-greedy 策略

  • 探索: 讓代理人可以發現新的、可能更好的行為。
  • 利用: 讓代理人可以利用它已經學到的知識,選擇那些已知會帶來好結果的行為。

隨著時間的推移,代理人會越來越了解環境,它可能會逐漸降低 epsilon 的值,變得更傾向於利用已知的最佳策略。

DQNAgent中select_action:使用 epsilon-greedy 策略選擇一個動作。
learn:從經驗回放緩衝區中取樣一批轉換,計算損失,並更新策略網絡。

gymnasium 庫

提供了一系列標準化的「環境 (environment)」,可以用於開發和測試強化學習演算法,使用 gymnasium 庫與 CartPole 環境互動。

  • 初始化環境和代理。
  • 執行指定數量的 episode。
  • 在每個 episode 中,代理選擇一個動作,執行它,接收獎勵,並將轉換儲存在經驗回放緩衝區中。
  • 代理定期學習和更新其網絡。
  • 訓練完成後,它會繪製 episode 持續時間。

延伸

ref1, ref2, ref3, ref4


如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels