← 返回 LeafLune
演算法

Q-Learning — 決策價值怎麼學起來的

從一張數字表開始,每次互動讓它更接近最佳策略

Q-Table 是什麼?

Q-Learning 的核心是一張叫做 Q-Table 的表格。 它的列是「狀態(State)」,行是「動作(Action)」, 每個格子裡存的數值叫做 Q 值(Q-value), 代表:「在這個狀態下,選這個動作,預期能獲得的未來總獎勵是多少?」

訓練一開始,所有 Q 值都是 0(一無所知)。 Agent 每與環境互動一步,就根據收到的 reward 更新對應格子的數值。 隨著訓練回合累積,表格逐漸反映出哪些(狀態, 動作)組合是好的、哪些是差的。

Q 值的直觀意義: Q(s, a) 越高,代表「在狀態 s 採取動作 a」長期來看越有利。 Agent 的目標就是讓每個狀態對應的最佳動作有最高的 Q 值。

直觀比喻:像一本「路線筆記」

想像你剛搬到一個陌生城市,要從家走到公司。 一開始你完全不知道哪條路快、哪條路塞車。 你只能試著走,每天記下「從這個路口往左轉,今天花了 20 分鐘,不錯」、 「從那個巷子直走,被堵了 40 分鐘,下次不走了」。

Q-Table 就是這本「路線筆記」。Agent 每走一步,就更新一格。 走了夠多回之後,哪條路最快,筆記裡就一目瞭然—— 那就是 Q-Learning 找到最佳策略的過程。

Bellman 更新公式

每次 Agent 從狀態 s 採取動作 a、抵達新狀態 s' 並收到 reward r 時,Q-Table 就依下列公式更新:

Q(s, a) 舊的估計值 + α 學習率 × 「新資訊 − 舊估計」 r 即時 reward + γ · max Q(s′,a′) 折扣後的未來最大預期值 Q(s, a) 舊的估計值(誤差修正)

用白話說:新 Q 值 = 舊 Q 值 + 學習率 × (新資訊 - 舊估計)。 括號裡的「新資訊」就是「這次實際拿到的 reward 加上打折後的未來最大值」, 用它和舊估計的差距,去修正 Q-Table 中對應格子的數值。

為什麼要減掉舊估計? 這是「TD 誤差(Temporal Difference Error)」的概念—— 我們只修正「預期錯了多少」,而不是直接把格子換成新數字。 這讓學習更平滑、更穩定。

三個關鍵參數

α
學習率(Learning Rate)
每次更新,要信多少新資訊?
  • α 高(如 0.9):學得快,但容易在剛找到的好策略上劇烈震盪,不穩定。
  • α 低(如 0.1):學得慢,但更新溫和、收斂更穩。
  • 一般從 0.1–0.5 開始調。
γ
折扣因子(Discount Factor)
Agent 多在乎未來的獎勵?
  • γ 高(如 0.99):重視長遠回報,適合需要多步規劃的任務(如 CartPole)。
  • γ 低(如 0.5):只看眼前,適合短回合或即時 reward 明確的任務(如 MAB)。
ψ
樂觀值(Psi)— RR 特有參數
控制 Q-Learning 的更新風格,範圍 -1 到 1:
  • ψ = 0:標準 Q-Learning,使用下一狀態的最大 Q 值(max Q(s′, a′))。
  • ψ > 0(樂觀):偏向 max,鼓勵探索未知潛力;訓練初期能加速找到好路徑。
  • ψ < 0(保守,SARSA 風格):偏向實際執行的動作之 Q 值,保守穩健,適合容易失敗的環境。
ψ 不是標準 Q-Learning 參數! 這是 RR 平台的擴充設計,讓你在純 Q-Learning 和 SARSA 風格之間滑動調整。 如果你只想跑標準 Q-Learning,把 ψ 設為 0 即可。

Q-Table 在 RR 的視覺化:熱力圖怎麼讀

RR 提供 Q-Table 熱力圖,讓你直接看到學習進度。 熱力圖的橫軸是動作(Action),縱軸是狀態(State), 每個格子的顏色深淺代表 Q 值高低:

Q-Table 熱力圖(收斂後)

收斂後的 Q-Table:終點右上角附近 Q 值最高(橘色區域),路徑上形成漸層

搭配「動作分布圖」可以看出在某個狀態下,Agent 選各動作的頻率; 搭配「動作熱圖」(地圖上的箭頭)可以看出每個位置的最佳策略方向。

Q-Learning 的限制:Q-Table 爆炸問題

Q-Table 的格子數 = 狀態數 × 動作數。 對於簡單遊戲(如 Maze1D,10 個狀態 × 2 個動作 = 20 格),完全沒問題。 但當狀態空間變複雜,格子數會爆炸性增長:

遊戲狀態維度Q-Table 格子數(估計)
MAB 1 維(哪台機器) 數十格
Maze2D 2 維(x, y 座標) 數百格
CartPole 4 維(位置、速度、角度、角速度) 數萬~數十萬格

CartPole 的 4 維連續狀態空間,即使經過離散化(每維切 10 格), 也有 10⁴ = 10,000 個狀態格。而且大多數格子很少被探索到,學習效率極差。

這就是為什麼需要 DQN: 用神經網路取代 Q-Table,把「狀態」直接輸入網路,輸出各動作的 Q 值—— 不再需要一格一格記,而是用函數逼近整個 Q 值分布。 RR 的 DQN 正是這樣運作的。
動手試試看: 開啟 Maze2D,訓練幾十回合後觀察熱力圖的變化。 試著調高或調低 α、γ,看收斂速度和穩定性的差異—— 這比看一百遍公式都有效。
← 上一篇:強化學習是什麼? 下一篇:探索 vs 利用 →