← 返回 LeafLune
進階演算法
DQN 是什麼?
從 Q-Table 到神經網路的橋樑——以及 RR 特有的蒸餾式設計
Q-Table 的天花板:狀態空間爆炸
Q-Table 的核心假設是:每一個狀態都有一個對應的「格子」,我們把每個動作的 Q 值存在裡面。這個想法在狀態空間小的時候非常有效——Maze1D 只有幾十個格子,幾十回合就能學完。
但一旦狀態空間變大,Q-Table 就遇到了根本性的困難。以 CartPole 為例:狀態是 4 個連續數值,如果每個維度離散化成 6 格,總格子數是 6 × 6 × 6 × 6 = 1296 格。聽起來還好,但連續值其實是無限細的——你離散化得越粗,精度越差;離散化得越細,格子數爆炸,Agent 根本沒辦法在有限回合內把每個格子都造訪到。
這就是「維度詛咒」:狀態維度每增加一個,狀態空間的大小就指數級膨脹。Q-Table 對高維連續狀態力不從心。
DQN 的核心思路:用神經網路近似 Q 函數
Deep Q-Network(DQN)的核心想法是:不存表,改用函數來估算。把 Q 函數看成一個「輸入 state,輸出每個 action 的 Q 值」的函數,用神經網路來近似這個函數。
神經網路的優勢在於泛化能力。就算某個狀態在訓練時從來沒見過,神經網路也能根據相近的狀態做出估算。這讓它可以處理連續狀態空間,而不需要把每個狀態都顯式地造訪一遍。
Q-Table
- 把每個狀態的 Q 值存在格子裡
- 需要造訪所有格子才能學完
- 狀態空間小時速度快、可解釋
- 高維連續狀態時格子數爆炸
DQN(神經網路)
- 用函數近似 Q 值,不存格子
- 沒見過的狀態也能泛化估算
- 高維連續狀態也能處理
- 訓練較複雜,可解釋性較低
傳統 DQN 的複雜性
標準的 DQN 實作需要幾個額外的機制來讓訓練穩定:
- Replay Buffer(經驗回放):把過去的 (state, action, reward, next_state) 存起來,訓練時隨機抽取,打破樣本之間的時序相關性。
- Target Network(目標網路):用一個延遲更新的網路來計算 Bellman 目標,避免訓練目標一直在動導致不穩定。
- Batch Training:每次從 buffer 取一批樣本做梯度下降,而不是每一步都更新。
這些機制讓傳統 DQN 的實作複雜度大幅提升。對教學場景來說,這種複雜性會掩蓋掉 RL 的核心概念。
RR 的 Q-Table 蒸餾式 DQN
RR 平台採用了一種不同的設計:不讓神經網路直接從環境的 reward 訊號學習,而是讓 Q-Table 和神經網路互相合作。
Q-Table 是老師
Q-Table 用 Bellman 方程式更新,這是有嚴謹數學理論保證的方法。它的更新是精確的:每一個(狀態, 動作)格子都存著一個可信的 Q 值估算。但它只能更新「曾經造訪過的格子」。
神經網路是學生
神經網路的任務是「擬合 Q-Table 的輸出」——也就是學習 Q-Table 已知的 Q 值。這個過程就像知識蒸餾:老師(Q-Table)把它學到的知識傳遞給學生(NN)。神經網路從中學到 Q 函數的形狀,可以對任意連續狀態做出 Q 值估算。
雙向互學:NN 反饋給 Q-Table
這是 RR 設計最獨特的地方。當 Q-Table 遇到一個它從來沒見過的狀態(unseen state)時,無法用 Bellman 方程式更新——因為沒有 Q 值可以參考。這時候,訓練好的神經網路可以估算這個 unseen state 的 Q 值,把估算值回饋給 Q-Table 做 Bellman 更新。
老師和學生互相幫助:Q-Table 教 NN 學精確的 Q 值,NN 幫 Q-Table 填補沒造訪過的格子。
蒸餾式 DQN 的優勢:
不需要 Replay Buffer(不用存一大堆歷史資料)、不需要 Target Network(訓練架構簡單)、Q-Table 保留完整(隨時可解釋),以及 R² 量化兩者的同步程度。
R² 同步率的意義
RR 平台會即時顯示一個叫做 R² 的指標。它衡量的是「神經網路輸出的 Q 值」和「Q-Table 儲存的 Q 值」之間的相關程度。
- R² = 1:完全同步。NN 對每一個狀態的估算,和 Q-Table 完全一致。
- R² = 0:毫無關聯。NN 還沒學到 Q-Table 的知識。
- R² 接近 1 但還沒到:NN 在泛化,對 Q-Table 沒見過的狀態也有估算,但和 Q-Table 的已知格子仍然對齊。
R² 讓「知識轉移」這件原本抽象的事情變得可量化,是蒸餾式設計特有的可觀測指標。
什麼時候應該切換到 DQN?
狀態空間大、格子數多
Q-Table 需要太多回合才能覆蓋所有格子,神經網路可以泛化填補空白。
連續狀態值
離散化的精度有上限,神經網路直接處理連續值不需要離散化。
Q-Table 收斂速度慢,但有上升趨勢
Q-Table 已建立了基礎知識,這時候切換 DQN,讓 NN 在 Q-Table 的基礎上加速泛化。
不建議一開始就直接用 DQN,而跳過 Q-Table 階段。Q-Table 的學習過程對於理解 RL 原理非常重要;DQN 的效果也建立在 Q-Table 已經累積了一定知識的前提上。
實驗建議:CartPole 對比實驗
1
選擇 CartPole 環境,使用純 Q-Table 模式,跑 500 回合。記錄最終的平均 Reward 與收斂狀態。
2
不清空 Q-Table,切換到 DQN 模式,繼續跑 500 回合。讓 NN 在 Q-Table 的基礎上開始學習。
3
對比前 500 回合(純 Q-Table)和後 500 回合(DQN)的 Reward 曲線。你應該能看到切換 DQN 之後收斂明顯加速。
4
觀察 R² 同步率的變化。R² 從低到高的過程,對應的是神經網路「學習 Q-Table 知識」的過程。