浙江大學團隊開源的大模型教材(第一版,持續月更)。授權:CC BY-NC-ND 4.0。來源:https://github.com/ZJU-LLMs/Foundations-of-LLMs。
本頁與工具卡都是我自己的摘要與整理,不是原文轉載;圖表與原文細節請看原書。
📌 30 秒摘要(Layer 3)
一本從「語言模型怎麼算機率」一路講到「怎麼讓大模型在實務上可用」的中文教材,共六章:
- 語言模型基礎:n-gram → RNN → Transformer、解碼、評測
- 大語言模型架構:Encoder-only/Encoder-Decoder/Decoder-only 的演化,以及非 Transformer 架構
- Prompt 工程:上下文學習、思維鏈、prompt 技巧
- 參數高效微調
- 模型編輯
- 檢索增強生成
每章用一種動物貫穿舉例(長頸鹿、水豚、小浣熊、鵜鶘、斑馬、考拉),封面也是這六種動物。
跟庫裡的《AI工程》比,這本更偏機制與方法分類。最獨特的是第 5 章模型編輯:不重新訓練,精準改掉模型的一條錯誤知識。
🗺 心智圖(Canvas)
大模型基礎
Link to original
🧰 這本書給我的工具(連到 tools/)
- 工具-不重訓就改掉模型的一條錯誤知識 —— 模型對某個事實一直答錯,又不想重訓或微調時(第 5 章)
- 工具-上下文學習的示例怎麼挑怎麼排 —— prompt 裡的範例不知道挑哪幾個、怎麼排時(3.2)
- 工具-思維鏈的變體怎麼選 —— 推理題要不要叫模型一步一步想、要不要多跑幾次投票時(3.3、3.4.3)
- 工具-選Encoder-only還是Decoder-only模型 —— 分類該用 BERT 還是大模型、長序列要不要換架構時(第 2 章)
✨ 關鍵重點(Layer 1–2)
第 1 章 語言模型基礎(長頸鹿)
- n-gram:用詞序列在語料中的相對頻率算機率;bigram 的頻率比恰好就是極大似然估計。n 越大越容易遇到「零機率」,n 越小承載的資訊越少。
- RNN:
h_t = g(W_H h_{t−1} + W_I x_t)。不增加參數就能看歷史,但循環權重最大特徵值小於 1 會梯度消失、大於 1 會爆炸,所以有了 LSTM/GRU。 - Teacher Forcing 與曝光偏差:訓練時餵標準答案、推論時餵自己的輸出,兩者不一致;Scheduled Sampling 讓訓練逐步改用自己的輸出來預演推論。
- Transformer:FFN 佔了將近 2/3 參數,可以看成鍵值記憶體(第一層是 key、第二層是 value),這個觀點是第 5 章模型編輯的基礎。Post-LN 抗表徵坍塌較強,Pre-LN 較不怕梯度消失。
- 解碼:貪婪與 beam search 容易產出平庸重複的「廢話文學」;Top-K 在分佈尖時會抽到怪詞(書的例子是「長頸鹿有四條褲子」),分佈平時候選又不夠;Top-P 依累積機率動態決定候選數,可以兩邊兼顧。→ 機制細節見 取樣與解碼策略
- 評測:困惑度
PPL = exp(−(1/N) Σ log P(w_i | w_<i)),代表模型對測試文本有多「不意外」。BLEU 看精度(翻譯)、ROUGE 看召回(摘要),都只算字面重疊,跟不上表達的多樣性。BERTScore 用上下文向量算相似度,但仍需要參考答案。G-EVAL 讓 GPT-4 依自動產生的評分步驟打分,並對各分數的機率加權平均,區分度才夠。→ LLM-as-Judge
第 2 章 大語言模型架構(水豚)
- Scaling Laws:
- Kaplan(OpenAI)認為預算 ×10 時,模型應放大 5.37 倍、資料 1.86 倍。
- Chinchilla(DeepMind)修正為模型與資料大致等比例,常見的記法是 20 倍法則:訓練 token 約為參數量的 20 倍。
- 書舉 GPT-3(175B 參數只用 3000 億 token)、MT-NLG 當欠訓練的反例。→ Scaling Laws 與 Chinchilla
- 湧現能力:上下文學習、常識推理、程式碼、邏輯推理,在 20 億、130 億、1750 億三個規模點上呈現跳躍。
- 三種架構:依注意力矩陣(雙向、下三角、混合)與預訓練任務(挖空、片段還原、下一詞預測)區分;Decoder-only 因為生成能力、計算效率與好擴展而勝出。→ 工具-選Encoder-only還是Decoder-only模型
- 代表模型的演進:
- BERT(遮罩語言模型+下一句預測)→ RoBERTa(拿掉 NSP、動態遮罩、160GB 語料)→ ALBERT(嵌入分解讓嵌入參數降到約 1/6、跨層共享參數)→ ELECTRA(替換詞偵測,每個 token 都參與學習)。
- T5 把所有任務統一成「文字轉文字」,用前綴指示任務,書稱是早期的 prompt。
- GPT-1 → GPT-3 的湧現 → InstructGPT 引入 RLHF → DPO 省掉獎勵模型。
- LLaMA 走「小模型+大資料」,使用 RoPE、SwiGLU、Pre-Norm、GQA;LLaMA3 參數不變但資料增為 7 倍、詞表擴大三倍,書說這「充分證明了數據的力量」。
- 非 Transformer:SSM 訓練用卷積形式、推論用遞迴形式;RWKV 擴到 14B;Mamba 用選擇機制加上硬體感知演算法,吞吐量是同規模 Transformer 的 5 倍,但上下文超過 16k 後困惑度飽和;TTT 拿模型參數當隱狀態。
第 3 章 Prompt 工程(小浣熊)
- 為什麼 prompt 有效:把新任務改寫成預訓練時熟悉的形式,借用模型本來的泛化能力。
- 四要素:任務說明、上下文、問題、輸出格式。長 prompt 的任務說明放開頭和結尾(Lost in the Middle);書的消融實驗中拿掉分隔符後,模型把示範也當成待分類的句子。
- 分詞效率影響費用:中文《朱自清散文》上,DeepSeek/Qwen 每個 token 約 1.3 字,GPT-3.5/GPT-4 約 0.77 字。同一段中文在 GPT-4 上的 token 數約是 DeepSeek 的 1.29÷0.77 ≈ 1.7 倍(依表推算)。
- 上下文學習、思維鏈 → 兩張工具卡。
- 追問三型:深入、擴展、反饋(指出錯誤要求改正)。
- 角色扮演:寫明屬性、職責、知識、技能,挑對任務有優勢的角色。
- 應用:Agent 四模組(Profile、Memory、Planning、Action,各配一種 prompt 技術);Self-Instruct(175 條種子、每次抽 8 條當示範,循環擴增資料);Text-to-SQL 的 C3(先挑相關表欄縮短上下文、在對話歷史植入提示、依執行結果投票)。
- → 整體寫法見 工具-提示工程
第 4 章 參數高效微調(鵜鶘)
- 三類:
- 參數附加:加在輸入是 Prompt-tuning;加在模型是 Prefix-tuning、Adapter(每層參數 2dr+d+r);加在輸出是 Proxy-tuning,用「大模型分數+小專家分數-小反專家分數」調大模型,黑盒模型也能用。
- 參數選擇:BitFit 只調偏置,約佔 0.08–0.09% 參數;Child-tuning 用 Fisher 資訊挑子網路。
- 低秩適配:LoRA,以及 ReLoRA、AdaLoRA、DoRA、LoRAHub 等變體。
- LoRA 的帳:LLaMA2-7B 一個 11008×4096 的權重有 4508 萬參數,r=4 時只要 11008×4+4×4096=60,416 個;單張 RTX4090 上全量微調約要 60GB(放不下),LoRA 約 23GB,速度快 1.9 倍。書沒交代 60GB 的設定(精度、優化器、batch);照標準的 bf16+Adam+fp32 主權重算是 16 bytes/param,7B ≈ 112GB,見 GPU 記憶體估算。
- 注意:書寫「B 用高斯、A 用零初始化」,跟 LoRA 原論文(A 高斯、B 零)相反;書也說
lora_alpha通常與 r 成反比,跟常見做法不同。以原論文為準。 - → PEFT 方法比較、LoRA 與 QLoRA、工具-LLM微調實作路線
第 5 章 模型編輯(斑馬)
- 目標:精準修正一個知識點,不影響無關輸出。用準確性、泛化性、可遷移性、局部性、高效性五個面向驗收。
- 方法分兩大類四小類:外部拓展(知識緩存、附加參數)與內部修改(元學習、定位編輯)。代表方法是 T-Patcher(最後一層 FFN 加補丁神經元)與 ROME(因果追蹤定位中間層 FFN,再做秩一更新)。
- → 工具-不重訓就改掉模型的一條錯誤知識
第 6 章 檢索增強生成(考拉)
- 幻覺的成因:資料面是知識過時、知識邊界、資料偏差;模型面是知識長尾、曝光偏差、對齊不當、解碼偏差。
- 架構分類:黑盒 vs 白盒:
- 黑盒:無微調(In-Context RALM),或只微調檢索器(REPLUG 用 LLM 的困惑度當監督訊號),閉源模型也能用。
- 白盒:只微調 LLM(RETRO、SELF-RAG),或兩者協同微調(Atlas),效果較好但要大量算力。
- 檢索:
- 建知識庫時,可以用 LLM 幫文件產生偽查詢和標題當檢索錨點。
- 查詢增強有兩個方向:同義改寫與多視角拆解,或先生成背景文件補充查詢。
- 檢索器有判別式(稀疏、稠密的雙編碼器與交叉編碼器)和生成式(直接生成文件 ID,效果仍不如稠密檢索)。
- 生成增強:
- 何時:非必要不檢索。無關資料會把本來答對的問題帶錯,例如問樹袋熊住哪卻檢索到袋熊;可以用實體熱門程度或內部探針判斷模型是否已經知道。
- 何處:輸入端、中間層、輸出端。
- 多次:拆解式(DSP)處理多跳問題,漸進式(思維樹形式的澄清)處理模糊問題。
- 降本:從 token、子文本、全文三個層級壓縮,以及 RAGCache 重用 KV 快取。
- → 工具-RAG檢索增強生成、稀疏與密集檢索、向量索引 ANN、Reranker 重排序、查詢改寫與 HyDE、RAG 評估與營運
讀這本書要注意的地方
書內有不少筆誤與前後不一,下面這些引用時要回原論文核對:
- GPT-2 XL 的注意力頭數:正文 25、表格 36。
- BART 的語料量:正文 160GB、表格約 20GB。
- Chinchilla 的指數寫 0.46/0.54:這本身對應原論文 Approach 3(三種方法分別約 0.50/0.50、0.49/0.51、0.46/0.54),不算錯;真正前後不一的是接著說預算 ×10 時模型與資料都 ×3.16——那是 0.5/0.5 的結果,照 0.46/0.54 應為 ×2.88、 ×3.47。見 Scaling Laws 與 Chinchilla。
- 解碼的搜尋空間寫成 M^D,應為 |D|
- LoRA 的初始化方向寫反。
- ROME 的協方差寫成「去中心化」。
- Self-Instruct 的分類與生成任務例子寫反。
另外,書裡的效果描述大多沒附實驗數字。
💬 金句原文(Layer 0)
- 「把新任务通过 Prompt 构建为模型在预训练阶段已经熟悉的形式,利用模型固有的泛化能力来执行新任务。」(第 3 章)
- 「确保局部性能够降低模型编辑的副作用,是模型编辑相较于朴素微调的重要改进。」(第 5 章)
🔗 相關
- AI工程 —— 同主題,偏應用層的產品工程;本書偏機制與方法分類,兩本互補
- LLM Course 課程文件 —— 訓練與部署的學習路徑,與第 4 章微調重疊
- AI 工程