目錄
你打開 ChatGPT,問「如何寫一封道歉信?」,它回你一封結構清楚、語氣得體的範例信。感覺很自然——但回想前幾篇的內容:模型的核心能力只是「預測下一個 token」。一台只會補完文字的機器,怎麼變成一個會回答問題的助理?
答案是三個階段的訓練,每個階段教會模型一件不同的事。
第一幕:預訓練——讀完整個網路
預訓練是模型訓練中規模最大、花費最高的階段。目標很單純:讓模型學會語言本身。
做法是把網路上的文字——網頁、書籍、論文、程式碼、維基百科——蒐集成數兆個 token 的語料庫,然後讓模型做同一件事:遮住下一個 token,猜它是什麼。猜錯就算 cross-entropy loss,用梯度下降更新參數,然後再猜下一個。這跟前幾篇講的訓練循環完全一樣,只是規模大到需要數千張 GPU 跑好幾個月。
經過這麼大量的練習,模型學到什麼?
- 語言結構:文法、語序、詞語搭配。它知道「台灣的首都是」後面大概是「台北」。
- 世界知識:在預測大量事實性文本的過程中,事實被壓縮進參數裡。
- 推理模式:它在數學證明、程式碼、邏輯論證上做過大量的 next-token prediction,所以它學到一些推理的「套路」。
但這個階段出來的模型——叫做 base model——有一個根本性的問題:它只會續寫文字,不會對話。
你問它「台灣最高的山是哪座?」,它不會回答「玉山」。它更可能續寫成「台灣最高的山是哪座?這是一個常見的地理問題。根據教育部的教材……」——因為它在訓練資料裡看到的就是這種文體。它在補完一篇文章,不是在回答你的問題。
Base model 就像一個讀完所有書的學生:知識淵博,但你問它問題,它會開始長篇大論地背課文,而不是直接回答。
第二幕:SFT——學會對話的格式
Supervised Fine-Tuning(監督式微調)的目標是教模型一件事:當有人給你一個指令,你應該直接回答,而不是續寫一篇文章。
做法是人工準備大量的示範對話:
使用者:幫我用三句話總結量子力學。
助理:1. 微觀粒子的行為用機率描述,而非確定的軌跡。
2. 測量會影響粒子的狀態(觀察者效應)。
3. 粒子可以同時處於多個狀態(疊加),直到被測量。
這些不是從網路上爬來的,而是人類標註員一條一條寫出來的。每一條都示範了「好的回答長什麼樣」——簡潔、直接、有結構。
然後用這些示範對話繼續訓練 base model。機制跟預訓練一模一樣——還是 next-token prediction、cross-entropy loss、梯度下降——但資料不再是隨機的網頁文字,而是精心設計的指令/回覆對。
SFT 的資料量通常只有幾萬到幾十萬條,比預訓練的數兆 token 小了好幾個數量級。但效果很明顯:模型學會了一種新的「語體」。它不再把你的問題當成文章開頭來續寫,而是把它當成需要回答的指令。
你可以把 SFT 想成教學生「考試答題的格式」——不是教他新知識,而是教他把已經知道的東西用對的方式表達出來。
SFT 的極限
SFT 後的模型已經能正常對話了,但它還有一些問題:
- 它可能會回答有害的問題:如果你問它怎麼做危險物品,它可能會直接回答——因為它的訓練示範裡沒有涵蓋所有該拒絕的情境。
- 它的回答品質不穩定:有時候很好,有時候冗長、偏題、不精確。它學會了格式,但不一定知道什麼才算「好的回答」。
- 它只學了「該怎麼做」,沒學「什麼比較好」:SFT 的訊號是「這個回答是正確示範」,但它沒有告訴模型「這個回答比那個回答好」。
要解決這些問題,需要第三階段。
第三幕:RLHF——用人類偏好當訓練訊號
Reinforcement Learning from Human Feedback(從人類回饋的強化學習)的核心概念是:讓人類告訴模型,哪個回答比較好。
流程分兩步:
第一步:訓練一個 reward model
給模型同一個問題,讓它生成兩個(或多個)不同的回答。然後讓人類標註員看這些回答,排出順序:「回答 A 比回答 B 好」。
用這些人類偏好資料訓練一個獨立的小模型,叫 reward model(獎勵模型)。它的工作是:給一組(問題, 回答),輸出一個分數,代表「人類覺得這個回答有多好」。
第二步:用 reward model 引導模型
現在我們有了一個能代替人類打分的模型。接下來用它當訓練訊號:讓語言模型生成回答,reward model 給分,然後用強化學習的方法(PPO 是最常見的演算法)更新語言模型的參數,讓它下次生成分數更高的回答。
這就像請了一位家教。學生(語言模型)回答問題,家教(reward model)不直接告訴他正確答案,而是說「這個回答比上一個好」或「這個方向不對」。學生根據這些回饋調整自己的行為。
經過 RLHF,模型學到的不只是「怎麼回答」,而是「怎麼回答得更好」:
- 遇到危險問題知道要拒絕,而且拒絕的方式比較自然。
- 回答更精確、更有結構、更符合使用者的期待。
- 減少胡說八道(hallucination),因為人類標註員通常會把不準確的回答排在後面。
一個比喻總結三個階段
| 階段 | 做的事 | 學到什麼 | 比喻 |
|---|---|---|---|
| 預訓練 | 讀數兆 token 的文字 | 語言能力、世界知識 | 讀完所有書的學生 |
| SFT | 學幾萬條示範對話 | 對話格式、指令遵循 | 學會答題格式的學生 |
| RLHF | 從人類偏好排序學習 | 什麼回答「比較好」 | 有家教指導的學生 |
三個階段的資料量逐步縮小(兆 → 萬 → 千),但每個階段都不可或缺。預訓練給模型能力,SFT 給模型格式,RLHF 給模型品味。
DPO:更簡單的替代路線
RLHF 的流程有點複雜——要先訓練一個 reward model,再用它做強化學習。2023 年提出的 DPO(Direct Preference Optimization) 提供了一條捷徑。
DPO 的想法是:既然我們有人類偏好資料(A 比 B 好),為什麼不跳過 reward model,直接用這些偏好資料來更新語言模型的參數?
數學上,DPO 證明了你可以把 RLHF 的最佳化目標改寫成一個簡單的 loss function,直接在偏好資料上做梯度下降——跟 SFT 的訓練方式幾乎一樣。不需要 reward model,不需要強化學習,訓練穩定性也好很多。
很多近期的模型(包括 Llama 3、Mistral 的部分版本)都使用 DPO 或其變體,而不是傳統的 PPO-based RLHF。
為什麼你該在意這些?
理解三階段訓練有幾個實用價值:
-
看懂模型發布新聞:當 Meta 說「Llama 3 base model 開源」,你知道那是預訓練後、SFT 前的模型——你不能直接跟它對話。當他們另外發布「Llama 3-Instruct」,那才是經過 SFT 和偏好最佳化的版本。
-
理解模型的能力邊界:預訓練決定了模型「知道什麼」。如果預訓練資料裡沒有某個領域的資訊,後面的 SFT 和 RLHF 也救不回來——它們調整的是行為,不是知識。
-
理解微調的邏輯:當企業說「我們用自己的資料微調了模型」,他們通常是在做類似 SFT 的事——用自家的示範對話繼續訓練,讓模型學會用自家的口吻和格式回答。
下一篇
模型學會了語言、學會了對話、學會了人類偏好。但它的「知識」全部壓縮在參數裡,沒辦法更新、沒辦法引用來源。下一篇我們會看另一條路線:不改模型的參數,而是在推論時把外部知識餵給它——這就是 RAG(Retrieval-Augmented Generation),也是目前企業最常用的做法。
參考資料
- Ouyang, L. et al. (2022). Training language models to follow instructions with human feedback. NeurIPS 2022.
- Rafailov, R. et al. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023.
- Lambert, N. et al. (2022). Illustrating Reinforcement Learning from Human Feedback (RLHF). Hugging Face Blog.
- Touvron, H. et al. (2023). Llama 2: Open Foundation and Fine-Tuned Chat Models. Meta AI.
Loading...