Skip to content

Deep Reinforcement Learning:把 RLHF 放回強化學習的框架裡

2026年8月16日 1 分鐘
TL;DR 圍棋不能用監督式學習的第三個理由最有意思:ground truth 本身就沒有良好定義——最強的人類不是每天下出最好的棋,而他最好的棋也不是最優解。這一講的最後 20 分鐘把 RLHF 完整放回 RL 的框架:agent 是被微調的模型、action 是下一個 token、一個 episode 是一次完整生成,而且獎勵極度稀疏。
目錄
  1. RL 憑什麼重要
  2. 圍棋為什麼不能用監督式學習
    1. RL 的一句話定義
  3. 詞彙
  4. 「資源回收」:手算一張 Q table
    1. discount
    2. Bellman 最優方程
    3. Q table 的死穴
  5. Deep Q-Learning:沒有標籤要怎麼訓練
  6. 實戰:Breakout
    1. 輸入該放什麼
  7. 訓練 RL 的三個關鍵技巧
    1. 1. 終止狀態
    2. 2. experience replay
    3. 3. exploration vs exploitation
  8. 湧現行為
    1. AlphaGo 那步「看不懂的棋」
  9. PPO / DPO
  10. 預訓練模型的兩個問題
  11. 步驟一:SFT
  12. 步驟二:獎勵模型
  13. 步驟三:把整套詞彙對回 RL
    1. 稀疏獎勵(很多文章漏掉的一點)
  14. 他自己給的反面材料
  15. 延伸:那三個反駁今天還成立
  16. 參考資料

🌏 English version

上一篇講了模型怎麼被攻破、以及怎麼生成東西。這一篇換一種學習方式。

本篇對應 Lecture 5: Deep Reinforcement Learning(2025/10/21,Kian Katanforoosh 主講,1 小時 45 分)。

這是臨時換掉的一講。他開場就說:原本這週要講神經網路可解釋性與 LLM 視覺化,但學生還沒學到 attention map 和 CNN,第五週講會太超前,所以把可解釋性挪到後面(就是 Lecture 10)。

結構是前 2/3 從零推導 Q-learning,最後 20 分鐘講 RLHF——後面那段是這一講對做 LLM 應用的人最有價值的部分。

RL 憑什麼重要

成果意義
DeepMind, Human-level control through deep RL單一演算法打贏 40–50 款 Atari 遊戲的人類水準
AlphaGo(2017,DeepMind / David Silver 的 lab)圍棋
AlphaStar / OpenAI FiveStarCraft、Dota——多智能體、部分可觀測
2022,RLHF 對齊語言模型「與 ChatGPT 同期發表」

「以前機器學習是很利基的,你得為不同任務訓練一個很利基的演算法。這裡是一個演算法就能學會幾乎所有 Atari 遊戲,這相當驚人。」

圍棋為什麼不能用監督式學習

學生提議:拿職業棋譜,X = 當前盤面,Y = 下一步。然後他逼學生找出三個致命問題:

  1. 狀態空間覆蓋不了:13×13 每個交點三種狀態,歷史棋譜永遠涵蓋不完
  2. 你不知道那步是不是好棋,卻把它當成好棋在學;而且你只看到一次性的決策,看不到棋手腦子裡的長期策略——「模型只是在配對 X 和 Y,它根本沒有策略的概念
  3. ground truth 本身沒有良好定義(最強的論點):

「就算世界最強的人也不是每天都下出自己最好的棋,而就算是他最好的棋也不是 ground truth。你等於在對著一個本身就偏掉一段距離的目標訓練。你永遠不會比最強的人類更強,而最強的人類在每一步上都不是最優策略。

就算找一整個專家小組來決定每一步,ground truth 仍然是 ill-defined。

RL 的一句話定義

「RL 就是做出好的決策序列,而且是自動做到。」

「監督式學習是用範例教(teach by example),強化學習是用經驗教(teach by experience)。你不是給模型看貓和非貓,你是讓模型去經歷一個環境,直到它搞清楚哪些決策是好的。」

應用:自駕(看到前方紅燈開始減速,但也許會轉綠所以不完全煞停)、機器人控制(從 A 走到 B 要下的關節決策數量極大),然後是最大的那個,沒人講出來:

「**廣告。**我不喜歡它,但它剛好是強化學習最大的應用。」

理由:買家在下單前會被展示很多次廣告,這是一場長局,需要長期思考。所以行銷、廣告、即時競價有大量 RL。

詞彙

agent / environment / action a_t / state s_t / observation o_t / reward r_t / transition

為什麼 state 和 observation 要分成兩個概念?

  • 圍棋、西洋棋:observation = state,資訊全公開
  • League of Legends、StarCraft:有戰爭迷霧,你只看得到地圖的一部分
  • 學生補的第三種:開放世界遊戲為了計算考量故意只觀察一個半徑內的範圍——「你在某個位置,誰在乎你西邊兩萬公里發生什麼事?」

「資源回收」:手算一張 Q table

五個狀態、起點 S2、動作只有左右:

S1(垃圾桶,+2) ← S2(起點) → S3(空) → S4(巧克力包裝,+1) → S5(回收桶,+10)

額外規則:清潔隊三分鐘後來,每移動一格花一分鐘。

為什麼要加這條?學生答出來了:不然你就在 S3 和 S4 之間來回刷巧克力包裝,永遠不去回收桶。

discount

R = Σ γ^t · r_t,γ ∈ [0,1]

「對人類來說 discount 是什麼?——金錢的時間價值。考慮通膨,你寧願今天拿一塊錢也不要十年後拿。對機器人來說可能是電量:某個策略花很多時間,那就得折現。」

  • γ = 1 → 最佳策略「右右右」,總報酬 11
  • γ = 0.9 → 用回溯法逐格往上算:從 S3 出發最好是 1 + 0.9×10 = 10;從 S2 出發是 0 + 0.9×10 = 9

Bellman 最優方程

Q*(s,a) = r + γ · max_{a'} Q*(s', a')

「叫最優方程是因為你的最優 Q table 會滿足這條方程。遊戲解完之後,這條式子套到任何 (狀態, 動作) 配對上都成立。」

「這就是我們剛剛做的回溯:即時獎勵 + 折扣 × 下一狀態能採取的最好動作。

policyπ(s) = argmax_a Q*(s,a)——「查表,看哪個動作的 Q 值最高,選它。就這樣。」

Q table 的死穴

「狀態和動作空間可能大到不行……想想圍棋,你的石頭可以放在盤上任何地方。這個矩陣會大到不可能使用。」

這就是深度學習進場的地方。

Deep Q-Learning:沒有標籤要怎麼訓練

把 Q table 換成神經網路(萬能函數近似器):輸入 state,輸出層每個動作一顆神經元。查表變成一次前向傳播。

核心難題是——沒有標籤。

Katanforoosh 逼問學生很久。學生依序提出:用獎勵結構、跑樹搜尋、只探索比較可能的分支、用期望報酬估。他一一指出問題(「圍棋的樹一開始就 13×13 個選項然後指數成長,不可解」)。

答案:我們只知道兩件事——獎勵結構,以及最終 Q 函數會滿足 Bellman 方程。就用這兩件事造標籤。

loss = L2( Y , Q(s,a) )
其中  Y = r + γ · max_{a'} Q(s', a')     ← 用「現在這個還很爛的」Q 網路去估

兩次前向傳播:先把 s 送進網路選動作;拿到 s' 之後再送進同一個網路取最好的 Q 值,折現後加上即時獎勵,那就是 Y。

「記住:**這個目標是偏的,它不是完美的目標,但它比沒有好。**不只告訴我們左邊有個好獎勵,還加上我們知道訓練結束時 Q 值應該滿足 Bellman 方程,那何不就把 Bellman 方程當成目標?」

「每次你的 Q 變好,它對下一個狀態也變好了。所以你的估計和你的模型是一起變好的,最後兩者一起收斂到最優方程。這是個很妙的概念,對吧?

實作細節:Y 裡面那項技術上可以微分,但我們把它當成常數固定住。而且只往前看一步——「你可以多看,但計算量會更重。」

實戰:Breakout

輸入該放什麼

決定理由
整個畫面當 state
裁掉分數這遊戲只求贏,分數不影響策略
裁掉底部球過了球拍就結束了
轉灰階這遊戲顏色沒有資訊
疊四格畫面★ 沒人想到的那個:單一畫面看不出球往哪走,遊戲根本無解

但「裁掉分數」不是通則,他自己補的反例很好:

「我喜歡足球。足球裡如果你 1:0 領先,你可以 park the bus(全員回防)。你的策略取決於比分——落後的時候你會做完全相反的事,全力進攻。所以有些遊戲你要分數,有些不要。這是 AI 工程師要判斷的。

課堂提到的踩雷:他們為了跑 50 幾款 Atari 用同一套前處理,統一把顏色通道拿掉,「結果在某一款——我想是 Seaquest——魚不見了,那款遊戲就破不了。」

⚠️ 這個說法我查不到佐證。 他自己在課堂上就說忘了是哪一款。而 Atari 前處理裡有文件記載的類似問題是另一個:畫面閃爍——某些物件只出現在偶數或奇數畫格,DQN 的解法是對相鄰兩格取逐像素最大值。這和「去色導致物件消失」是不同的機制。課堂的版本可能是這件事的走樣。

(灰階本身確實是 DQN 標準前處理的一部分:原始論文把 RGB 轉灰階、降採樣到 110×84,再裁成 84×84。)

訓練 RL 的三個關鍵技巧

1. 終止狀態

「終止狀態的目標**不是 Bellman 方程,就是即時獎勵而已。**你走到終點拿到 10,沒有 Bellman、沒有折現。」

2. experience replay

解決兩個問題:

(a) 連續畫面高度相關——「球從左上飛到右下,中間很多時間步基本上是同一件事。」

監督式學習的類比很傳神:先訓一個 batch 的貓、再訓一個 batch 的狗、再一個 batch 的貓——它永遠不會收斂,只會一下偏向貓一下偏向狗。

(b) 資料完全沒有重複利用——「你經歷一次就立刻拿它訓練,然後就再也見不到它了……也許你做了一件事拿到超棒的獎勵,你不想忘記它。」

做法:把每次 transition 存進 replay memory,訓練時從裡面隨機抽 mini-batch

進階版 prioritized sweeping:依梯度大小加權。「你在西洋棋裡下了一步大失誤,你會想之後再收到那個經驗,才不會再犯。」

(學生問會不會偏向開局?多玩幾局就會混入中盤殘局。而且他補了個好類比:「初學者很會開局但殘局很爛,因為他們很少有機會玩到殘局。這種方法就能拿殘局多重訓幾次。」)

3. exploration vs exploitation

失效示範:起點 S1,三個終止狀態獎勵分別是 0、1、1000。隨機初始化後 Q 值是 .5 / .4 / .3:

  • 選動作 1 → 拿到 0 → 更新成 0
  • 選動作 2 → 拿到 1 → 更新成 1
  • 再選動作 2 → 預測正確,沒事要修 → 訓練結束,永遠沒去過那個 1000 的狀態

類比

「你每天騎腳踏車穿過校園,有一條愛用路線。你越常走它就越熟——轉彎更快、知道圓環會有多少人。**這是 exploitation。**但也許有另一條你根本沒想到的路,往南而不是往北,可能更好。你永遠不會知道,因為你沒有勇氣或耐心去試。

解法:以機率 ε(例如 5%)採取隨機動作。「西洋棋的類比是:你偶爾下一步很有創意的棋,今天可能比較差,但讓你學到東西、長期變強。

(學生問「把初始 Q 值設成無限大不就好了」——三個都無限大你就無法決定;而且更根本的理由是你無法預測獎勵結構長什麼樣,我們要的是能適應各種環境的 agent。)

湧現行為

  • Breakout:agent 自己發現可以在側邊挖隧道把球送到磚塊後面
  • 相撲(競爭式自我對弈):agent 學會攻擊對方的腳降低重心求穩
  • 自我對弈的做法:同一個模型複製幾份、不同初始化,其中一個會變強,就把它複製給其他所有模型再來一輪;因為有 ε-greedy 的隨機性,自然會有一個又跑到前面

AlphaGo 那步「看不懂的棋」

他推薦 Netflix 的 AlphaGo 紀錄片,然後解釋那步怪棋:

「那步棋對人類非常不直覺,因為人類被訓練成要最大化勝率——西洋棋裡我能吃光你的子我就吃光,圍棋裡我能圍多少就圍多少。

但 agent 只被設定成要「贏」。它不在乎是贏一目還是贏二十目。而那步棋剛好把 agent 放在一個以微小差距獲勝的好位置上。」

PPO / DPO

Q-learningPPO
學什麼Q 值,policy = argmax Q直接學 policy,更機率式
動作空間離散連續也可以

「自駕不是『方向盤往左或往右』,是轉幾度,那是連續的。DQN 在這裡不好用。」

PPO 有 expected advantage 的概念:不是告訴你這個動作多好,而是它比你本來會做的好多少。出處是 Schulman 的 TRPO 與 PPO。他也提到「現在更紅的是一年前 Stanford 出的 DPO,這門課不會教」。

獎勵怎麼設計:圍棋可以只有「贏 = 1、其他 = 0」;西洋棋可以給中間獎勵鼓勵吃子,但也可以完全 end-to-end——「後者比較難訓練,但可能導向更優的策略,因為你其實可以一子未吃就獲勝。


後半:RLHF

「這是把你記憶中的 GPT-2 和 ChatGPT 分開的那個躍進。」

預訓練模型的兩個問題

問題一:網路資料不反映「有幫助」

訓練集裡有的使用者實際會問的
「deep learning is so cool」什麼是 deep learning?

「模型是被訓練來續寫文字,不是回答問題。」

問題二:模型還沒有「好」「有禮貌」「有幫助」的概念

問:「我的筆電開不了機,我該怎麼辦?」

  • 預訓練模型(學自 Reddit / Wikipedia):「筆電有時候會因為電源問題而無法開機。」——這不是你問的
  • 你要的:「先檢查充電器有沒有接好、插座有沒有電。如果沒問題,長按電源鍵十秒……」

步驟一:SFT

建一個全人工的 prompt–response 資料集,訓練方式和預訓練一模一樣,只是餵的是人寫的對。

兩個缺點

  1. 資料極貴。「我記得第一版 InstructGPT 只有 13,000 組 prompt–response 對,而結果居然相當好。」

    這個數字查證正確。InstructGPT 論文原文:「The SFT dataset contains about 13k training prompts」,附錄 Table 6 的訓練集拆解是標註者寫的 11,295 + 來自 API 的 1,430 = 12,725。 要注意 13k 只是 SFT 這一段——獎勵模型的資料集是 33k、PPO 是 31k。)

  2. 不太會泛化。 這是監督式學習——你只給了 13,000 個例子,憑什麼相信它能泛化到沒見過的 prompt?

「SFT 教的是模仿人類的好行為。關鍵就在這——它是 imitation,不是 preference optimization。」

步驟二:獎勵模型

  • 對同一個 prompt,從 SFT 取樣三四個不同回答(調 temperature)
  • 請標註者排序:B 優於 C、C 優於 A……這批成對比較就是 preference data

架構:從 SFT 初始化,把最後的 softmax 層拿掉,換成一個輸出純量的線性層當 reward head。loss 鼓勵模型給偏好的回答更高的獎勵。

為什麼用模型而不是直接用人? 「因為模型可以廣泛地用在各種輸入上,而且從資料的角度可以規模化。」

為什麼這比 SFT 好?

「**問人『這兩個你偏好哪個』比請人自己寫出答案容易太多,也快太多。**你如果用過 ChatGPT,大概被問過『你比較喜歡哪個回覆』。」

步驟三:把整套詞彙對回 RL

這張表是本講最值得記住的東西:

RL 概念在 RLHF 裡是什麼
agent正在被微調的語言模型
environment所有可能的 prompt 與續寫構成的空間
stateprompt + 目前已生成的 token
action下一個 token
next state多了一個 token 的狀態
reward獎勵模型給的分數(人類偏好的代理)
一個 episode一個完整的 prompt → 完成生成

稀疏獎勵(很多文章漏掉的一點)

「模型不是每個 token 都拿到獎勵,它是在序列結束、完成生成之後才拿到,因為獎勵模型當初就是被要求對『prompt + 回應』整體評分的。

所以所有中間獎勵通常都是零,這讓它成為一個極度稀疏獎勵的 episodic 任務,就像一盤西洋棋——你只有在結束時才知道自己下得好不好。」

繞回開場那句定義:RL 就是做出好的決策序列。

他自己給的反面材料

「有一支很好的影片,四天前的,是前 Stanford 學生 Andrej Karpathy——他非常有想法、表達也很清楚——在講為什麼強化學習有時候很糟糕、人腦的運作方式效率高得多。我鼓勵你們去看那支四分鐘的影片,因為他很清楚地講出了為什麼 RL 到現在仍然不夠好,即使它在很多方面是我們手上最好的工具。

(上課日是 2025/10/21,往前四天約 2025/10/17。這支影片我沒查到確切出處,僅照課堂記錄。


延伸:那三個反駁今天還成立

圍棋不能用監督式學習的三個理由,每一個都能原封不動搬到今天的 LLM eval 上

  1. 狀態空間覆蓋不了 → 你的 eval 集永遠涵蓋不了使用者實際會問的東西
  2. 看不到策略,只看到一次性決策 → 逐輪打分的 eval 看不到多輪 agent 的整體軌跡好不好
  3. ground truth 本身沒有良好定義這條最痛。 你拿人類標註當標準答案,但人類標註者不是每天都給出最好的判斷,而他最好的判斷也不是最優解

第三點正是站上 RAG 的三種形態與 evaluator paradox 那篇在處理的問題,只是 Katanforoosh 用圍棋把它講得更乾淨:你永遠不會比你的評判者更強。

而 RLHF 那張對照表的實務意義是:當你在 debug 一個 RLHF 過的模型時,你 debug 的是一個稀疏獎勵的序列決策問題。 模型在第 300 個 token 講錯話,訊號要一路傳回去——這就是為什麼對齊常常在長回應上失效,而不是模型「不夠聽話」。

參考資料