\Happy Vibe Coding/
概念
- 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 代理,包括選擇動作、學習和更新網絡的方法。
圖表
- 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,表示智能體在訓練後期還有學習和改進的潛力
煉丹( 調參)
- 學習率 (Learning Rate, α): 控制每次更新模型權重的幅度,太高訓練不穩( 學習成效不佳),太低學習太慢。
- 探索率 (Epsilon, ε) 的衰減策略 (Epsilon Decay): 控制 AI 有多少機率會「隨機探索」而不是「選擇已知最好的動作」。
- 折扣因子 (Discount Factor, γ): 決定 AI 多看重「未來」的獎勵。接近 1 表示更看重長遠利益,接近 0 表示只看眼前,需要長期規劃才能成功的任務(例如活得更久),通常需要較高的 γ。
- 經驗回放緩衝區大小 (Replay Capacity): 儲存過去經驗供 AI 學習,太小導致學到的經驗不夠多樣化,太大可能學到太舊、不相關的經驗。
- 批次大小 (Batch Size): 每次從緩衝區取多少經驗來學習,加大後一次學得更多。
- 知識更新速度(Knowledge Update Period, τ):學習新知識的速度有多快。
舉個栗子🌰:訓練一隻狗
- Learning Rate: 教小狗撿球時,告訴它做對了要給多少獎勵
- 注意:學習率太高,就像你一下子給小狗太多指令,它可能會搞不清楚,反而學不好。所以也要慢慢調整。
- Epsilon: 讓小狗早點開始練習「正式撿球」
- 注意:太早結束探索,小狗可能會錯過一些更好的撿球方法。
- Discount Factor: 每次小狗成功撿到球,都會給牠小餅乾獎勵,「折扣因子」就像是小狗的「耐心程度」。
- 注意:折扣因子太低不考慮未來,越接近1越重視長遠獎勵,學得也較好
- Replay Buffer Size: 小狗的記憶力
- 注意:太小小狗可能學不到什麼東西,很快就會忘記之前學到的。
- Batch Size: 讓小狗一次撿多一點球
- 注意: 一次撿太多球小狗可能會累壞 (電腦記憶體可能會不夠用),所以要慢慢嘗試,不要一次調太高
- 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 持續時間。
延伸
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)