LLM(大型語言模型)是近年廣受討論的 AI 技術基礎,包括 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google 的 Gemini 以及 Meta 的 LLaMA 等。訓練這些模型需要掌握五大核心元件:
-
1
架構(Architecture):LLM 是神經網路,需要選擇合適的架構設計。目前幾乎所有 LLM 都以 Transformer 為基礎。
-
2
訓練損失與訓練演算法:如何實際訓練模型,包含損失函數的設計與優化方法。
-
3
資料(Data):模型的訓練資料來源,是目前業界認為最關鍵的要素之一。
-
4
評估(Evaluation):如何衡量模型是否真正在進步,是實務上容易被忽視的重要環節。
-
5
系統(Systems):如何讓龐大的模型在現代硬體上有效運行,現在比以往任何時候都更為關鍵。
重要觀點: 學術界傾向聚焦架構與訓練演算法,但在實務中,資料、評估與系統才是影響模型表現的主要因素,也是業界著力最深的地方。
語言模型從高層次來說,就是對詞元(token)或詞序列的機率分布模型——也就是某個句子被人類說出或出現在網路上的機率。
| 句子範例 | 機率評估 | 原因 |
| 老鼠吃了起司 | 高機率 ✓ | 語法正確、語意合理 |
| 老鼠吃起司 | 低機率 | 語法錯誤(缺少「了」) |
| 起司吃了老鼠 | 極低機率 | 語意不合(起司不會吃東西) |
自回歸語言模型(Autoregressive Language Model)是目前的主流範式。其核心思想是:把整段序列的機率,拆解為「依序預測下一個詞」的乘積,即機率的連鎖法則。這裡沒有任何近似——只是對分布建模的一種方式。
P(x₁, x₂, ..., xL) = P(x₁) × P(x₂|x₁) × P(x₃|x₁,x₂) × ...
= ∏ P(xᵢ | x₁, ..., xᵢ₋₁)
⚠️
缺點: 生成時採用迴圈方式,逐步產出下一個 token,因此序列越長,生成時間越久——這是自回歸範式的主要限制。
訓練流程:將句子分詞 → 嵌入(Embedding)→ 通過 Transformer → 線性層映射到詞彙表大小 → Softmax 得到機率分布 → 以交叉熵損失(Cross-entropy Loss)訓練,等同於最大化文本的對數似然。取樣和反分詞步驟僅在推論時才需要。
分詞器極其重要,卻常被忽視。 平均每個 token 對應約 3–4 個字元。
✗ 問題
有錯字的詞可能沒有對應 token;泰語等語言沒有空格,無法按空格分詞
✗ 問題
逐字元分詞使序列過長,Transformer 複雜度隨序列長度平方增長
位元對編碼(BPE, Byte Pair Encoding)是最常見的分詞演算法之一:
- 1
從大型語料庫出發,為每個字元賦予獨立 token。
- 2
反覆掃描,找出最常出現的相鄰 token 對,合併為一個新 token。
- 3
重複步驟 2,直至達到預設的詞彙表大小。
- 4
應用時,始終選擇能應用的最大 token(例如「token」不會分成「t」)。
🔢
數字分詞的問題: 「327」可能有自己的 token,模型無法以組合的方式理解數字,嚴重影響數學推理能力。GPT-4 改進程式碼分詞方式後,程式理解能力顯著提升。
困惑度(Perplexity)是驗證損失的指數化版本,直覺上代表「模型在預測下一個 token 時,平均在幾個選項之間猶豫」:
困惑度 = 2^(平均每 token 損失)
範圍:1(完美)→ 詞彙表大小(完全猜測)
| 年份 | 困惑度(tokens) | 意義 |
| 2017 | ~70 | 每次在 70 個詞之間猶豫 |
| 2023 | <10 | 每次在不到 10 個詞之間猶豫 |
為何困惑度不再用於學術比較? 它受分詞器詞彙表大小影響,不同模型之間難以直接對比。但在開發過程中仍非常重要。
現代學術評估多採用標準化基準測試:HELM(Stanford)、Hugging Face Open LLM Leaderboard,以及最廣泛使用的 MMLU——涵蓋大學醫學、物理、天文等多領域的問答集合,考察模型在 A/B/C/D 四選一題目中的表現。
⚠️
訓練集與測試集污染: 同一基準測試,不同機構的評估方式不同,結果差異可達 15% 以上(LLaMA 65B 在不同方式下準確率分別為 63.7% 和 48.8%)。
「在整個網路上訓練」聽起來簡單,實際上流程極其複雜。Common Crawl 目前約有 2,500 億個網頁,約 1 PB 資料,但隨機的網頁內容雜亂無比——絕非想像中的維基百科。
- 1
爬取網頁: 使用 Common Crawl 等工具,每月新增 Google 索引的所有新網站。
- 2
HTML 解析與文字擷取: 移除 HTML 標籤,保留有效文字(含數學公式等),去除重複的頁首頁尾(boilerplate)。
- 3
過濾不當內容: 移除 NSFW、有害內容、個人識別資訊(PII)等。每家公司都有很長的黑名單。
- 4
去重複(Deduplication): 移除重複的段落、相同內容的不同 URL,以及在網路上被大量複製的書籍段落。
- 5
啟發式過濾: 剔除 token 分布異常、字數過短或過長的低品質文件。
- 6
基於模型的過濾: 訓練分類器,優先保留類似維基百科引用來源的高品質內容。
- 7
領域加權: 程式碼 ↑(提升推理能力)、書籍 ↑、娛樂內容 ↓。
- 8
高品質收尾: 預訓練尾聲以維基百科等高品質來源進行低學習率訓練。
| 資料集 | 規模 |
| The Pile(學術) | 約 280B tokens / ~800 GB |
| LLaMA 2 | 2 兆 tokens |
| LLaMA 3 | 15.6 兆 tokens |
| 目前頂尖模型(估計) | ~15 兆 tokens / ~100,000 GB |
資料是關鍵: 使用好的資料,擴展定律曲線的截距(起始點)會大幅改善;糟糕的資料,再多算力也無法彌補。
核心發現: 模型越大、訓練資料越多,性能越好;且在雙對數座標下呈現近乎線性關係——這讓「預測未來模型性能」成為可能。
測試損失 ∝ (算力)^(-α)
測試損失 ∝ (資料量)^(-β)
測試損失 ∝ (參數量)^(-γ)
其中 α, β, γ 為可擬合的常數
Chinchilla 最優配置: 在固定算力預算下,最優訓練配置為:
訓練最優
每個參數對應約 20 個 token(Chinchilla 論文)
推論最優
每個參數對應約 150 個 token(考慮長期部署成本)
擴展定律的實務應用:
不需要在最終規模上直接試錯——在小規模模型上調整超參數,擬合擴展定律曲線,再外推至大規模模型。例如可在小模型上比較 Transformer vs. LSTM,預測在大規模下哪個架構更優。
💡
苦澀的教訓(Bitter Lesson): 既然算力越多模型越好,且算力持續增長,真正重要的是有能夠利用算力的架構。這意味著系統、資料遠比小型架構差異(激活函數等)更重要。
算力分配
架構選擇
資料混合
模型寬度 vs. 深度
GPU vs. 資料
| 項目 | 數值 |
| 訓練 token 數 | 15.6 兆 |
| 參數量 | 405B |
| tokens / 參數比 | 約 40(介於訓練最優與推論最優之間) |
| 總算力 | ≈ 3.8 × 10²⁵ FLOPs |
| 硬體 | 16,000 張 H100 |
| 訓練時長 | 約 70 天(≈ 2,600 萬 GPU 小時) |
| GPU 租用成本($2/小時) | 約 5,200 萬美元 |
| 人員薪資(50 人 × $50 萬/年) | 約 2,500 萬美元 |
| 總計 | 約 7,500 萬美元 |
| 碳排放 | 約 4,000 噸 CO₂ 當量 |
FLOPs ≈ 6 × 參數量(N) × 訓練 token 數(D)
每一代新模型,訓練算力大約是上一代的 10 倍。 Biden 行政令規定:超過 10²⁶ FLOPs 的模型需受特別審查——LLaMA 3 的算力剛好在此門檻的一半以下(3.8 × 10²⁵)。
後訓練的目的是把預訓練的語言模型轉化為 AI 助理。純語言模型並不是你在 AI 助理中想要的——例如問 GPT-3「用六歲孩子能理解的方式解釋月球登陸」,它可能回答的是「用六歲孩子能理解的方式解釋重力理論」,因為它學到的是:一個問題後面通常跟著類似的問題,而不是答案。
核心思路: 先在整個網路上預訓練(資料多但不是我們想要的),再對期望的資料類型進行少量微調(知識已習得,只需調整「風格」)。
後訓練包含兩個主要步驟:監督式微調(SFT)與人類反饋強化學習(RLHF/DPO)。
在人工收集的「指令—回答」配對上,以 next-token prediction 損失進行微調。損失函數與預訓練完全相同——只是換了資料,以及使用不同的(較高的)學習率。
🦙
Alpaca 案例(Stanford): 以 175 筆人工種子問答,讓 text-davinci-003 生成 52,000 筆合成問答,再微調 LLaMA 7B。開啟了「合成資料生成」的廣泛研究方向。
驚人發現(LIMA 論文): SFT 資料量從 2,000 增加到 32,000,幫助幾乎沒有!擴展定律在這裡完全不適用。
原因:SFT 並不是在教模型新知識,而是告訴模型「要模仿哪種使用者的風格」。知識早在預訓練階段就習得了。
SFT 的限制: 行為複製受限於標注者能力;且可能加劇幻覺(Hallucination)——如果人工標注者引用了一本模型從未見過的書,模型就學會了「生成聽起來合理但自己不確定的引用」。
RLHF(人類反饋強化學習)的核心思路:與其複製人類行為,不如最大化人類偏好。
PPO 的挑戰: 強化學習理論優美,實踐極其混亂——rollout 外迴圈、clipping、文件匱乏……這正是 ChatGPT 最初的方式,也是 DPO 出現的動機。
DPO(直接偏好優化)是 PPO 的簡化替代方案(Stanford 提出):
PPO 流程
收集偏好 → 訓練獎勵模型 → 強化學習(複雜)
DPO 流程
收集偏好 → 直接最大化似然(簡單!)
DPO 的損失函數:直接增加人類偏好回答的生成機率,降低不偏好回答的生成機率。數學上可以證明,在特定假設下,DPO 的全域最優解與 PPO 等價。
現狀: DPO 性能與 PPO 相當,但實作簡單得多,已成為開源社群主流,業界也廣泛採用。
RLHF 資料收集的挑戰:
人工標注者之間的一致性只有約 66%(即使是論文作者本人也只達 67–68%)。標注者傾向偏好「更長的回答」,導致 RLHF 訓練後模型輸出越來越冗長——這就是 ChatGPT 回答超長的原因。
🤖
LLM-as-a-Judge: 用 LLM 替代人工評審。成本約為人工的 1/50,與人類眾數的一致性甚至優於人類自身(因為模型方差更低)。現已成為業界標準做法。
後訓練模型難以用傳統指標評估:驗證損失不可比較;困惑度對對齊後的模型失去意義(PPO 訓練的模型不再是校準的機率分布);問題類型多樣且開放式。
| 評估方式 | 優點 | 缺點 |
| Chatbot Arena | 真實用戶盲評,高可信度 | 慢、貴;參與者偏技術背景 |
| AlpacaEval | 3 分鐘、<$10;與 Arena 相關性達 98% | LLM 評審偏好更長的回答(需校正) |
長度偏差(Length Bias): 把 GPT-4 提示詞改為「詳細回答」,AlpacaEval 勝率從 50% 升至 64.4%;改為「簡潔回答」,降至 20%。解決方案:使用因果推斷工具控制長度因素。
算力是訓練 LLM 的巨大瓶頸。GPU 不僅昂貴且稀缺,多張 GPU 之間的通訊也需要時間。模型 FLOP 利用率(MFU)達到 50% 就非常好——Facebook LLaMA 約達 45%。
一般計算:32 位元(FP32)→ 降至 16 位元(FP16/BF16)
節省:記憶體減半、通訊更快
自動混合精度(AMP):
· 前向/後向傳播:FP16
· 權重儲存 & 梯度更新:FP32(確保小 LR 更新有效)
✗ 未融合
每行 PyTorch 程式碼:DRAM → 計算核心 → DRAM → 計算核心 → DRAM...(大量記憶體往返)
✓ 融合後
DRAM → 計算核心(執行所有操作)→ DRAM(只往返一次)速度提升約 2 倍
⚡
在 PyTorch 中只需加上 torch.compile,就能自動獲得約 2 倍速度提升——它會將程式碼重寫為 C++ 和 CUDA,自動實現運算元融合。
01
CS224N · 自然語言處理
NLP 基礎與語言模型歷史脈絡,涵蓋 Transformer 等周邊材料,適合建立背景知識。
02
CS324 · 大型語言模型
對本講座所有主題的深度延伸閱讀與講座,涵蓋更多細節與最新研究。
03
CS336 · 從零建構 LLM ⚠️
親手建構完整的 LLM,由講者的兩位導師開設。課程精彩但工作量非常重,請評估後選修。
未涵蓋但重要的主題: 推論優化 · 多模態 · 使用者介面 · 資料版權問題 · LLM 濫用風險 · 未來資料瓶頸(網路上的資料是否足夠訓練下一代模型?)