本文依據 CS234 Winter 2026 投影片與作業;錄影是 Spring 2024 公開版。 這是 Stanford CS234 導讀系列第 6 篇,接續沒模型時怎麼控制:ε-greedy、GLIE、SARSA/Q-learning、函數近似。
用到的官方材料:第 5 講投影片(post 版)第 5–21 頁,A2 題目第 1 題(8 分書面題),以及 2024 公開播放清單的影片 04〈Q learning and Function Approximation〉。依 YouTube 章節,2024 版的 DQN 在這支的最後 20 分鐘:58:04「Instabilities and DQN」與 1:05:39「DQN implementation」;影片 05〈Policy Search 1〉整支講策略搜尋,沒有 DQN。
存取等級是 A3(足以自學):投影片與 A2 題目都公開。缺口是 2026 錄影只在 Canvas、Gradescope autograder 不公開,所以 A2 Q1 你只能自己對照講義檢查答案。
第 5 講的檔名是〈Policy Gradient I〉,但前 21 頁其實在收尾上一講的函數近似,講 DQN。本系列依主題切篇,所以這篇只講前半,後半的策略梯度留給下一篇。
先回到上一篇的最後一個式子
上一篇的結尾,表格裝不下了,我們用參數 $w$ 的函數 $\hat{Q}(s, a; w)$ 來近似 Q。第 5 頁把三種做法並排,差別只在「拿什麼當真正 Q 的替代目標」:
- Monte Carlo:用實際回報 $G_t$ 當目標。
- SARSA:用 $r + \gamma \hat{Q}(s', a'; w)$ 當目標,$a'$ 是實際採取的下一個動作。
- Q-learning:用 $r + \gamma \max_{a'} \hat{Q}(s', a'; w)$ 當目標。
更新式都長這樣:
$$\Delta w = \alpha \big(\text{target} - \hat{Q}(s, a; w)\big) \nabla_w \hat{Q}(s, a; w)$$
如果你對「對參數做梯度下降」還不熟,先讀 CS229 導讀的深度學習章。這篇會把 $\hat{Q}$ 換成一個卷積網路,但更新式本身不變。
問題:表格會收斂,函數近似可能發散
第 9 頁先講結論:Q-learning 用表格表示時會收斂到最佳的 $Q^*$,但接上函數近似就可能發散。
第 6 頁給的解釋分兩層。Bellman operator 本身是 contraction(order 2 證過),每做一次 backup,誤差都會縮小。但每次 backup 之後,我們還要把結果「擬合」回某個特徵表示,而這個擬合步驟可能是 expansion。一縮一放,就不保證收斂了。
投影片把會出事的組合叫做 deadly triad,三個元素同時出現時可能造成震盪或不收斂:
- Bootstrapping:用下一個狀態的「估計值」代替真正的值。第 3 頁的小測就在確認這個定義。
- Function approximation:用參數化的函數,而不是表格。
- Off-policy learning:例如 Q-learning,更新用的 $\max$ 跟實際採取動作的策略不同。
第 6 頁推薦去看 Sutton & Barto 裡的 Baird 反例,那是這個現象的經典構造。
具體到 DQN 的兩個症狀
第 9 頁把「Q-learning 接神經網路」的麻煩收斂成兩個具體問題:
- 樣本之間有相關性:連續的轉移來自同一條軌跡,彼此高度相關,違反 SGD 對獨立樣本的期待。
- 目標值不固定:目標 $r + \gamma \max_{a'} \hat{Q}(s', a'; w)$ 用的也是 $w$,你一更新 $w$,目標就跟著動。
DQN 的兩招各自對應一個症狀。
第一招:experience replay
第 10 頁的做法:把過去的經驗存成資料集 $D$,叫做 replay buffer。每次更新時:
- 從 $D$ 隨機抽一筆 $(s, a, r, s')$。
- 算目標 $r + \gamma \max_{a'} \hat{Q}(s', a'; w)$。
- 用 SGD 更新 $w$。
隨機抽樣打斷了時間上的相關性。第 11 頁接著指出剩下的問題:目標在這一步被當成純量,可是下一輪 $w$ 更新後,同一筆資料的目標值就變了。這就引出第二招。
第二招:fixed Q-targets
第 12 頁:計算目標時改用另一組權重 $w^-$,更新的仍是 $w$。
$$y = r + \gamma \max_{a'} \hat{Q}(s', a'; w^-)$$
$w^-$ 在多次更新之間保持固定,目標就暫時不會跟著跑。第 14–15 頁的小測問:多一組權重會讓計算時間加倍,還是讓記憶體加倍?投影片的答案是記憶體加倍。
完整的 DQN pseudocode
第 13 頁的版本,逐行翻成中文:
- 輸入 $C$、$\alpha$,$D = {}$,初始化 $w$,令 $w^- = w$,$t = 0$
- 取得初始狀態 $s_0$
- 迴圈:
- 依目前 $\hat{Q}(s_t, a; w)$ 的 ε-greedy 策略選動作 $a_t$
- 觀察獎勵 $r_t$ 與下一個狀態 $s_{t+1}$
- 把 $(s_t, a_t, r_t, s_{t+1})$ 存進 $D$
- 從 $D$ 隨機抽一個 minibatch
- 對 minibatch 裡每筆:如果 episode 在下一步結束,$y_i = r_i$;否則 $y_i = r_i + \gamma \max_{a'} \hat{Q}(s_{i+1}, a'; w^-)$。然後對 $(y_i - \hat{Q}(s_i, a_i; w))^2$ 做一步梯度下降
- $t = t + 1$;每 $C$ 步令 $w^- \leftarrow w$
投影片底下的註記提醒:這裡有很多超參數與設計選擇要定,包括網路架構、學習率、目標網路多久更新一次。replay buffer 通常是固定大小,所以還要決定它多大、怎麼填。
在 Atari 上的設定與結果
第 17 頁描述 DQN 在 Atari 的設定,出處是 Mnih et al. 2015〈Human-level control through deep reinforcement learning〉:
- 從像素端到端學 $Q(s, a)$
- 輸入狀態是最近 4 幀的原始像素堆疊
- 輸出是 18 個搖桿/按鈕位置各自的 $Q(s, a)$
- 獎勵是該步的分數變化
- 用 CNN,所有遊戲共用同一套架構與超參數
第 18–19 頁是論文的架構圖與各遊戲結果圖,文字版投影片抽不出數字,這裡不轉述。
消融:哪一招比較重要
第 20 頁有一張表,比較五種設定在五款遊戲上的分數:
| 遊戲 | 線性 | 深度網路 | DQN+fixed Q | DQN+replay | DQN+replay+fixed Q |
|---|---|---|---|---|---|
| Breakout | 3 | 3 | 10 | 241 | 317 |
| Enduro | 62 | 29 | 141 | 831 | 1006 |
| River Raid | 2345 | 1453 | 2868 | 4102 | 7447 |
| Seaquest | 656 | 275 | 1003 | 823 | 2894 |
| Space Invaders | 301 | 302 | 373 | 826 | 1089 |
投影片的結論是 replay 非常重要。讀表時可以注意兩件事:
- 只換成深度網路、不加任何一招,分數沒有比線性模型好,有些還更差(Enduro 62 → 29、Seaquest 656 → 275)。
- 單加 fixed Q 的提升不大,單加 replay 的提升大很多,兩招一起最好。Seaquest 是例外:單加 replay(823)比單加 fixed Q(1003)還低,但兩招合用跳到 2894。
第 20 頁最後留了一個問題:除了打散相關性,replay 還做了什麼?投影片沒有直接給答案。一個可以自己想的方向是:同一筆轉移會被抽中很多次,也就是同樣的資料被重複用來更新。這跟下兩篇PPO 想「在同一批資料上多走幾步」的動機是同一件事。
第 21 頁:model-free 單元的驗收清單
第 21 頁列出上完 model-free 幾講後應該做得到的事:
- 能實作 TD(0) 與 MC 的 on-policy 評估
- 能實作 Q-learning 與 MC control
- 能列出造成不穩定的三個因素(function approximation、bootstrapping、off-policy learning),並定性描述問題
- 知道 DQN 裡關鍵的設計(experience replay、fixed targets)
今晚可以做的事:拿這張清單逐條自問。第三條答不出來,就回頭讀本篇的 deadly triad 一節;前兩條答不出來,回 order 4 與 order 5。
A2 Q1:三道 DQN 書面題在練什麼
A2 的第一題是 8 分的書面題,題目附了一份跟投影片寫法略有不同的 DQN pseudocode(以 episode 為外層迴圈、用 $\theta$ 與 $\theta^-$ 表示兩組權重、第 20 行每 $C$ 步令 $\theta^- = \theta$)。三小題是:
| 小題 | 分數 | 在問什麼 | 對應本篇 |
|---|---|---|---|
| (a) | 3 | 要改 pseudocode 的哪幾行,才能退回表格版 Q-learning?改成什麼? | 回想表格 Q-learning 沒有 buffer、沒有目標網路、直接更新單一格 |
| (b) | 2 | 第 2 講的 Mars Rover 例子要怎麼改,才會讓表格 Q-learning 表現極差(因此需要 DQN 之類的方法)? | 想想表格表示在什麼條件下裝不下或學不動 |
| (c) | 3 | 解釋 replay buffer 為什麼有幫助 | 本篇「第一招」與消融表 |
本系列不給解答。作業的其他三題(策略梯度實作、策略誘導的分布、倫理題)等讀完下一篇與 order 8,在 A2 作業篇一起看。注意 A2 的程式部分沒有 DQN:起始碼裡的檔案是 policy_gradient.py、ppo.py、baseline_network.py 等,DQN 在這份作業只出現在書面題。
延伸閱讀
- CS224R 導讀:Q-learning:另一門 Stanford RL 課對 Q-learning 與 replay 的講法
- Berkeley CS285:policy 與 value 方法:同一段內容在 Berkeley 的版本
- CS229 筆記第 19 章:強化學習:先修課對 MDP 與 value iteration 的整理
系列導覽:上一篇 order 5:沒模型時怎麼控制|下一篇 order 7:策略梯度——REINFORCE、baseline、actor-critic|系列總覽
參考資料
- CS234: Reinforcement Learning(Winter 2026 課程首頁)
- CS234 講義頁(modules)
- Lecture 5: Policy Gradient I 投影片(Winter 2026,post 版)
- CS234 作業頁
- Assignment 2 題目 PDF(Winter 2026)
- Assignment 2 起始碼
- Stanford CS234 Spring 2024 YouTube 播放清單
- Lecture 4: Q learning and Function Approximation(Spring 2024,YouTube) — DQN 從 58:04 起
- Mnih et al. 2015:Human-level control through deep reinforcement learning(Nature)
- Sutton & Barto:Reinforcement Learning: An Introduction, 2nd ed.
Loading...