模型是怎麼練成的:
預訓練到 RLHF
「預訓練」「微調」「對齊」不是三個獨立技術,是同一個模型的三段人生—— 每一段的資料量差好幾個數量級,教的東西也完全不同。點點看:
右邊的實驗場是真的 Python(在你的瀏覽器裡跑,不用安裝任何東西)。 首次載入約需 30–60 秒,正好夠你讀完第 1 節。這一課有三筆帳要親手算: LoRA 的參數帳、蒸餾的溫度、GRPO 的優勢——全部是真公式真計算。
預訓練:海量語料學通識
訓練目標簡單到不可思議:就是第 1 課那個自迴歸——給前文、猜下一個 token, 猜錯就調參數。神奇的是規模夠大之後,「為了把下一個字猜準」這個目標 逼著模型把文法、事實、甚至推理模式全都學起來。代價也很誠實:
| 項目 | Llama 3 8B(公開數字) |
|---|---|
| 訓練語料 | 15T tokens |
| GPU 時數 | 130 萬 H100-hours |
| 計算量粗估(6·N·D 公式) | ≈ 7.2 × 10²³ FLOPs |
量級來自 Meta 公開的模型卡與通用估算公式;右邊 1️⃣ 的參數帳會算出這顆 8.03B 從哪來。
預訓練的產物叫 base model——它只會「接龍」,你問它問題, 它很可能回你另一個問題(因為網路上問題後面常常接著更多問題)。 要讓它「好好回話」,得靠後面兩段。
微調(SFT):少量資料教特定行為
SFT(Supervised Fine-Tuning)跟預訓練用一模一樣的「猜下一個字」目標, 差別只在資料:從「整個網路」換成「你準備的示範對話」。 幾千筆高品質示範就能明顯改變行為——教格式、教語氣、教「遇到 X 要先問 Y」。 真實工具是 Hugging Face 的 trl:
SFT 學的是「照著示範演」;它不會讓模型長出新知識, 塞事實進模型該用第 7 課的 RAG——先記住這個分工,之後會一直用到。
LoRA:只調 0.5% 的參數
全參數微調 8B 模型要多少記憶體?權重+梯度+Adam 優化器狀態, 約 12 bytes/參數——90 GB 起跳,一張 24 GB 的 RTX 4090 連零頭都裝不下。 LoRA 把可訓練參數壓到 41.9M(0.52%),記憶體掉到約 15 GB (右邊 1️⃣ 用真公式算給你看;底模再用 4-bit 量化——QLoRA——還能再砍)。
別被 0.52% 騙了:低秩更新疊在每一層的注意力與 MLP 上, 改風格、學格式綽綽有餘——這是業界微調的預設起手式, 練完的 LoRA 權重檔只有幾十 MB,發佈與切換都輕。
知識蒸餾:大模型當老師
關鍵是「軟標籤」:老師模型看一張貓圖,輸出的不是「貓」一個字, 是「貓 88%、狗 8%、老虎 4%、汽車 0.1%」——「狗比汽車像貓 80 倍」 這件事 one-hot 標籤裡完全沒有,這叫暗知識(dark knowledge)。 把 softmax 除以溫度 T,分布蒸軟,暗知識才浮出來(右邊 2️⃣ 拉給你看):
LLM 時代的蒸餾還有更粗暴的版本:直接讓老師模型生成一大堆高品質問答, 拿去 SFT 小模型(DeepSeek-R1 就公開釋出了一整組這樣蒸出來的小模型)。 分布蒸餾與資料蒸餾,本質都是「老師教學生」。
RLHF 與 GRPO:用強化學習對齊
RLHF 的經典流程:收集人類偏好(同一題兩個回答,哪個好?)→ 練一個 reward model → 用 RL(傳統上是 PPO)讓模型最大化 reward。痛點是 PPO 要多養一個 跟模型一樣大的 value model 來估基準線,記憶體與工程都翻倍。
GRPO(Group Relative Policy Optimization)的解法漂亮得很:同一題抽一組答案 (例如 8 個),優勢=(reward − 組平均) / 組標準差—— 基準線直接用「同組其他答案」充當,value model 整個不用了。 右邊 3️⃣ 可以勾答案對錯,親眼看優勢怎麼算、以及「全對的題什麼都教不了」。
RL Reasoning 與 Aha Moment:DeepSeek-R1 的實驗展示了一件事—— 不給任何「怎麼推理」的人類示範,只用「答案對不對」的 RL 訊號, 模型自己長出「等等,我重新檢查一遍」的反思與回溯行為, 論文把那個湧現時刻稱為 Aha Moment。這條純 RL 路線, 就是第 4 課 reasoning model 的出身。
本課名詞速查卡
發講義用的濃縮版——一個名詞一句話:
| 預訓練 Pre-training | 兆級 token 玩接龍學通識,成本最高(Llama 3 8B:15T tokens、130 萬 H100-hours)。 |
| 微調 Fine-tuning / SFT | 幾千~幾十萬筆示範教特定任務或風格;教行為,不塞新知識。 |
| LoRA / PEFT | 凍結底模、只調低秩小矩陣(0.5% 參數)——消費級 GPU 也能微調。 |
| 知識蒸餾 Distillation | 大模型當老師教小模型(軟標籤或生成資料),能力濃縮進小體積。 |
| RLHF / GRPO | 強化學習對齊人類偏好;GRPO 用組內相對比較砍掉 value model,是 DeepSeek-R1 走紅關鍵。 |
| RL Reasoning / Aha Moment | 純 RL(只獎勵答對)讓模型湧現反思與回溯——不用人教怎麼想。 |
換你動手
在右邊 1️⃣ 把 LoRA 的 r 從 16 改成 64——可訓練參數變幾倍?訓練記憶體為什麼幾乎沒動?
在 2️⃣ 找出「暗知識剛好浮出來、又還沒被蒸糊」的溫度區間。T=1 學生學到什麼?T=10 又失去什麼?(實驗區有印好的數字可對照。)
在 3️⃣ 把 8 個答案全部勾對。優勢發生什麼事?這對「RL 訓練該配什麼難度的題目」意味著什麼?
卡住了?三題在 notebook 最後一格都有折疊解答——先自己做,再打開對照。
情境測驗
離開前試試看:下面的情境都真的會遇到。每題選一個你認為的最佳做法,選了馬上看得到解釋。
Q1 情境題
公司要讓一個 8B 開源模型學會客服部的回覆語氣與格式,手上有 5,000 筆歷史對話、一張 RTX 4090(24 GB)。最務實的做法是?
「教語氣與格式」正是 SFT 的主場,5,000 筆是很健康的量;記憶體才是真門檻——全參數微調 8B 要權重+梯度+Adam 狀態約 90 GB(本課算過的帳),24 GB 遠遠不夠,所以 B 直接卡死:跑不跑得動看的是記憶體帳,不是資料筆數。LoRA 把可訓練參數壓到 0.5%,配 4-bit 底模(QLoRA)就能塞進消費級卡。A 是拿大砲打蚊子——預訓練是兆級 token、百萬 GPU 時的工程,而且教語氣根本不需要動通識。D 多繞一大圈,蒸餾解決的是「部署體積」問題,這裡的目標是行為,而且蒸完還是要面對微調本身。
Q2 情境題
你的 App 要在手機上離線跑一個小模型,但希望它在「客訴分類」這個任務上盡量接近雲端大模型的水準。哪條路最對症?
「大能力、小體積、單一任務」是蒸餾的教科書場景:老師模型生成海量「客訴→分類」示範(或提供軟標籤),小模型在這個窄任務上可以逼近老師——它不需要老師的通識,只需要這一招。A 方向錯在量級:量化能把體積壓 3~4 倍(下一課的主題),但 70B 級的模型再怎麼壓也不是手機等級,而且 2-bit 這種極限壓縮品質掉得兇。C 高估了 prompt:prompt 能引導行為,變不出小模型沒有的能力,而且手機上長 prompt 還變慢。D 用錯工具——RLHF 管「偏好對齊」,不會把分類能力變出來。
Q3 錯誤診斷
同事跑了右邊實驗場的參數帳,看到下面的輸出後說:「LoRA 只訓練 0.52% 的參數,模型行為最多也只能改變 0.5%,這種微調是安慰劑吧。」他哪裡想錯了?
數字是真的(本課實算),推論錯在把兩個不同的量畫了等號。行為改變幅度取決於「更新作用在哪裡」:LoRA 的低秩矩陣掛在每一層的七個投影上,每個 token 流過模型都會經過這些更新——影響力是全域的,只是參數化很省。大量實務與研究都顯示:在教格式、語氣、領域行為這類任務上,LoRA 與全參數微調的差距很小,而記憶體帳(90 GB → 15 GB)才是它真正要解的問題。B 描述的機制不存在——底模是凍結的,這正是省記憶體的原因;D 方向錯了,r 加大主要是提高表達容量(同時提高過擬合風險),「佔比高」從來不是目標。