浙江大學團隊開源的大模型教材(第一版,持續月更)。授權: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)

大模型基礎

🧠 大模型基礎

Foundations of LLMs

🏗 第 2 章 架構

🎯 什麼情境該想到我

當你「要做文字分類、抽取、翻譯或生成,在猶豫用 BERT 類小模型、T5 類,還是直接呼叫 GPT/LLaMA 這種生成式大模型」的時候。

⚙️ 怎麼用(步驟 / 公式)

1. 三種架構差在注意力看得到哪裡

架構注意力矩陣意思
Encoder-only完全(雙向)處理每個詞時看得到整句前後文
Encoder-Decoder編碼器雙向+解碼器下三角+交叉注意力產生第 i 個輸出時,參考整個輸入,以及已產生的前 i−1 個輸出
Decoder-only下三角(只看前面)產生第 i 個詞時只能看前面已產生的

預訓練任務也對應不同:Encoder-only 練挖空填詞(BERT 遮掉約 15% 的 token 讓模型補回);Encoder-Decoder 練截斷補全、片段還原(T5 把連續片段遮掉讓模型生成);Decoder-only 練預測下一個詞(GPT)。

2. 依任務選(書的對照,「同等參數規模下」)

架構擅長弱點代表
Encoder-only理解與判別:情感分析、文本分類、命名實體辨識、語意相似度沒有解碼器,不能直接生成;硬要生成的話,每產一個詞都要重算整個序列BERT、RoBERTa、ALBERT、ELECTRA
Encoder-Decoder有條件生成:翻譯、摘要、問答(要先理解輸入再產出)多了解碼器,參數與計算量大T5、BART、Flan-T5、mT5
Decoder-only開放式生成;規模夠大後什麼任務都能做規模小時(GPT-1、GPT-2 時代)缺雙向上下文,理解複雜輸入不如前兩者GPT 系列、LLaMA 系列

3. 實務判斷(我依書的結論整理)

  • 要大量、低延遲、低成本地做分類/抽取/向量化,標註資料夠:BERT 類模型仍然划算。書說這類模型「參數止步 6.6 億」,代表跑得動、跑得便宜。
  • 翻譯、摘要這種輸入輸出成對的任務,又要自己微調一個中型模型:T5/BART 類。
  • 任務多變、沒有標註資料、需要指令跟隨與推理:直接用 Decoder-only 大模型配 prompt(見 工具-上下文學習的示例怎麼挑怎麼排)。

4. 為什麼最後是 Decoder-only 勝出(書給的理由)

  1. 生成能力:Encoder-only 沒有生成元件,只能迭代挖空、反覆前向傳播,在生成式 AI 的需求下吃虧。
  2. 計算效率:Encoder-Decoder 參數多、長序列時編碼器與解碼器都很重;開放式生成的輸入很短甚至沒有,保留完整的編碼器沒必要。
  3. 結構簡單、參數好擴展:只留解碼器,每步只看已生成的部分,好往上堆規模。2019 年底後算力起飛,2021 年起在 GPT-3 推動下成為主流。
  4. 規模大了以後的任務泛化:湧現出上下文學習,不微調也能做多種任務。

書的措辭多是「可能」,這是歷史歸因,不是嚴格實驗比較。

5. 序列很長、Transformer 太貴時:非 Transformer 架構

Transformer 的注意力計算量隨序列長度平方成長。書介紹的替代方案都把計算壓到跟長度成線性:

架構訓練推論書的評價
SSM(S4 等)用卷積形式平行訓練用遞迴形式,對長度線性參數少、長序列快
RWKV可平行每步計算與記憶體固定擴到 14B,NLP 任務與同規模 Transformer 相當;長距離依賴仍有局限
Mamba計算與記憶體隨長度線性每步常數時間;A100 上吞吐量是同規模 Transformer 的 5 倍3B 勝過兩倍參數的 Transformer,能處理百萬級長度;但上下文超過 16k 後困惑度幾乎不再下降
TTT外層正常預訓練,內層用自監督更新線性用模型參數當隱狀態,書說更能捕捉超長上下文

核心機制:SSM 用狀態方程 x_k = Ā x_{k−1} + B̄ u_k、y_k = C̄ x_k 把歷史壓進固定大小的狀態。正因為狀態大小固定,上下文一長就可能過早飽和。Mamba 讓 B、C、Δ 依輸入內容改變(選擇機制),補強處理文字這類資訊密集資料的能力。

判斷(我的整理):這些架構目前主要是研究與特定長序列場景的選項(基因、音訊、超長文件)。一般產品要處理長文時,先考慮 RAG 切塊或長上下文的 Transformer 模型,生態系成熟得多。

🧪 我實際套用的紀錄

  • (尚無)

⚠️ 注意 / 什麼時候不適用

  • 書寫作截至 2024 年中,非 Transformer 架構的版圖變動很快;書也沒提混合架構(如 Jamba)、RetNet、Hyena。選型前要重新查證。
  • 書中幾處數字前後不一:GPT-2 XL 的注意力頭數正文寫 25、表格寫 36;BART 語料正文寫 160GB、表格寫約 20GB。引用時以原論文為準。
  • 「BERT 類便宜」的前提是有標註資料可以微調;沒有標註資料時,大模型零樣本常常更省事。

🔗 相關工具

💬 第 3 章 Prompt 工程

🎯 什麼情境該想到我

當你「要在 prompt 裡放範例讓模型照著做,卻不知道該挑哪幾個、放幾個、怎麼排,換個範例結果就不一樣」的時候。

⚙️ 怎麼用(步驟 / 公式)

上下文學習(ICL):在 prompt 裡放任務說明和幾個示範,模型從上下文學到任務的規則,不需要額外訓練。

1. 先選形式

形式做法優點代價
零樣本只給任務說明泛化最廣效果完全看模型本身能力
單樣本給 1 個示範像「舉一反三」效果強烈依賴那一個示範夠不夠代表性
少樣本給幾個到十幾個特定任務明顯變好示範越多推理越貴;示範的代表性和多樣性決定效果

2. 挑示範:相似性 vs 多樣性

兩個原則:相似性(跟眼前問題越像越好)、多樣性(涵蓋不同面向,讓模型從多角度理解任務)。書整理三種做法:

做法代表怎麼挑缺點
直接檢索KATE用編碼器把問題和候選示範(拿掉標籤)轉成向量,取 cosine 最高的前 K 個不管多樣性,示範容易同質化
聚類檢索Self-Prompting先用 K-Means 把候選分成 K 群,每群挑一個跟問題最像的有些群跟問題根本不像,相似性不夠
迭代檢索RetICL每挑一個,就依「問題+已挑的示範」更新狀態再挑下一個計算比較複雜

書的判斷:前兩種常在相似性與多樣性之間顧此失彼;迭代檢索兼顧兩者,複雜任務上較好。
實務起點(我的整理):先用直接檢索,發現示範都長得一樣、模型只會照抄某一類時,再換聚類或迭代。

3. 示範本身的五個坑

  1. 格式:簡單分類只要「輸入 → 輸出」;算術、程式這類推理任務,示範要寫出中間推理步驟(CoT 形式),只給答案不夠(見 工具-思維鏈的變體怎麼選)。
  2. 標籤要對:標錯的示範會讓模型學到錯的對應。★ 越大的模型對錯誤標籤越敏感,小模型反而不太受影響。
  3. 數量:多放通常會變好,但邊際效益遞減;生成任務比分類任務更吃示範數量。
  4. 順序:不同順序表現會顯著不同,而且最佳順序依模型而定:對 A 模型有效的順序,換到 B 模型不一定有效,也跟資料集特性有關。所以換模型就要重新驗證順序。
  5. 任務說明:寫清楚的任務說明本身就能提升 ICL。

4. ICL 為什麼有效、什麼時候沒用

  • 書給的解釋(Xie et al. 2022,仍是開放研究問題):把 ICL 看成隱式貝葉斯推理。模型在預訓練時學到很多潛在「概念」,示範的作用是把模型錨定到其中相關的概念上。
  • 推論:預訓練裡沒什麼相關資料的垂直領域,光靠 prompt 做不到領域適配(書在第 4 章開頭也這樣說),這時要考慮微調或 RAG。
  • 模型要夠大:ICL 是規模夠大才出現的能力,書說通常要億級參數以上,舉出最小有 ICL 能力的是 Qwen2-0.5B。
  • 預訓練資料跨領域、任務多樣、含罕見類別與「突發性」分佈時,ICL 比較穩。即使單一領域語料跟目標任務高度相關,也不保證 ICL 最好。

5. 檢查清單

  • 示範的標籤都正確(大模型會被錯標帶偏)
  • 示範之間夠多樣,不是同一類的重複
  • 推理型任務的示範有寫中間步驟
  • 換模型時重測示範順序
  • 示範用分隔符和輸入清楚隔開:書的消融實驗中拿掉分隔符後,模型把示範也當成待分類的句子

🧪 我實際套用的紀錄

  • (尚無)

⚠️ 注意 / 什麼時候不適用

  • 書對這些因素幾乎沒給實驗數字,都是方向性結論;實際影響要在自己的評估集上量(見 工具-AI系統評估)。
  • 示範很長時成本會疊上去,要跟效益一起算。書提到 LLMLingua 壓縮 prompt 可壓到原長的 1/20、幾乎不掉效能,不過這是論文宣稱的數字。
  • 做過指令微調的對話模型零樣本就很強,未必需要示範;先試零樣本當基準線。

🔗 相關工具

🎯 什麼情境該想到我

當你「想讓模型做推理(算術、邏輯、規劃),在考慮要不要叫它『一步一步想』、要不要多跑幾次投票、或讓它探索多條思路」的時候。

⚙️ 怎麼用(步驟 / 公式)

0. 先判斷:該不該用思維鏈

動機:書引 Flat Scaling Curves 現象,模型變大後語意理解、翻譯會變強,但算術、常識、符號推理不太跟著變好;加了思維鏈,推理能力才會隨規模提升。

但書明確列出不該用的情況,依任務、模型規模、模型能力三點判斷:

條件結論
任務簡單(情感分類、常識問答)標準 prompt 就夠,思維鏈難以加分,反而增加複雜度
模型小(書的例子是十億級)可能產生不連貫的推理鏈,比標準 prompt 更差;書說思維鏈在千億級模型上才顯著有效
★ 模型做過推理方向的指令微調(ChatGPT、GPT-4、LLaMA2-Chat)不給指令也會自己寫出推理步驟;很多情況下不加思維鏈指令反而更好(書推測已在微調中內化)
Base 模型(LLaMA2-13B-Base 等)做推理題適當的思維鏈提示能激發推理能力

1. 三種模式(書的分類)

模式比喻結構方法
按部就班照預定路線一步步走單一條推理鏈CoT、Zero-Shot CoT、Auto-CoT
三思後行在森林裡每走一步就停下來評估,可回頭樹或圖,可回溯ToT、GoT
集思廣益開會整合各方意見多條獨立推理鏈,最後彙整Self-Consistency

2. 各方法怎麼做

  • CoT(少樣本):在 prompt 放幾個手寫的「題目 → 推理步驟 → 答案」示範。缺點:要人工寫很多示範,而且效果強烈依賴示範品質。

  • Zero-Shot CoT:不用示範,分兩次呼叫:

    1. 問題後面接「Let’s think step by step/讓我們一步一步思考」,讓模型寫出推理;
    2. 把「原問題+第一步的推理」接起來,結尾加「Therefore, the answer is/因此,最終答案為」,取出最終答案。

    書說在多個推理任務上可媲美、甚至勝過少樣本 CoT。

  • Auto-CoT:自動產生示範。用聚類從題庫挑題,用 Zero-Shot CoT 幫這些題寫推理鏈當示範,再接觸發句回答新問題。(書寫「挑跟使用者問題同一群的題」;原論文是每群各取一題以求多樣性,兩者描述不同。)

  • Self-Consistency:用隨機取樣(temperature > 0)跑 N 條推理路徑,收集各自的最終答案,取出現最多次的。★ 不綁定特定 CoT 形式,可以疊在任何一種上面。成本約是單次的 N 倍。

  • ToT(思維樹):四件事要設計:

    1. 拆解:一步要多大,數學題是一行等式,寫作是一段大綱;
    2. 衍生:產生下一步候選。思路空間大(寫作)時用多個示範擴大候選;空間受限(24 點)時在 prompt 寫明規則限制候選;
    3. 評估:讓模型對節點投票或打分,砍掉不可能的分支;
    4. 搜尋:BFS/DFS,或 A*、蒙地卡羅樹搜尋。

    書的 24 點例子:輸入 4 9 10 13,每步挑兩個數運算產生子節點,讓模型評估剩下的數「能/可能/不可能湊成 24」,只保留有希望的節點,BFS 往下展開。其中一條成功路徑是 13−9=4、10−4=6、4×6=24。

  • GoT(思維圖):把樹擴成有向圖,可以合併不同分支的結果,也能自我反思修正。

3. 選型

書在 3.4.3 的建議:

需求選
只要邏輯推理、不需領域知識Zero-Shot CoT/Auto-CoT
要高準確、高可靠(例如寫程式時生成多個版本挑最一致的)Self-Consistency
帶創意的任務(例如寫故事時探索不同情節)ToT/GoT

成本面是我依機制推導的:單次 CoT ≈ 1 次呼叫(Zero-Shot CoT 是 2 次);Self-Consistency ≈ N 次;ToT/GoT ≈ 節點數 ×(衍生+評估),常常是幾十次起跳,延遲也最高。先用最便宜的,評估集上不夠再升級。

4. 控制推理寫多詳細

用示範的風格控制輸出:示範只寫「(7−3=4)顆」,模型就只給簡短算式;示範寫完整步驟,模型也寫完整步驟。使用者需要看過程時才放完整示範,省 token。

5. 延伸:用執行結果投票

Text-to-SQL 的 C3 方法把 Self-Consistency 用在 SQL 上:取樣多條 SQL,依執行結果投票選最終答案。能執行驗證的任務(程式、SQL、數學)都可以這樣做,比單純比對文字可靠。

🧪 我實際套用的紀錄

  • (尚無)

⚠️ 注意 / 什麼時候不適用

  • 對已經會自己推理的對話模型,硬加「一步一步想」可能變差,一定要跟不加的版本比。
  • 書裡的效果描述幾乎沒有實驗數字,以自己的評估集為準。
  • 「千億級才有效」是書寫作時的經驗,新的小模型經過推理訓練後未必如此,視為方向,不是門檻。
  • Self-Consistency 只適合答案可以比對是否相同的任務(數字、選項、SQL 結果);開放式長文沒辦法直接投票。
  • 書沒有涵蓋 Least-to-Most、ReAct、Reflexion。需要邊推理邊呼叫工具時,見 ReAct 與 Agent Loop。

🔗 相關工具

✏️ 第 5 章 模型編輯

🎯 什麼情境該想到我

當你「發現模型對某個特定事實答錯(或會吐出某段不該說的資訊),想精準地只改這一點,又不想付重新訓練或微調的代價」的時候。

⚙️ 怎麼用(步驟 / 公式)

1. 先確認:為什麼不是重訓或微調

書的論點(第 5 章):

  • 重新預訓練:清洗資料成本高、知識一直在變、重訓算力巨大,每發現一個錯就重訓是「捨本逐末」。
  • 微調:即使用 PEFT 仍有成本;修正一個錯誤能拿到的樣本很少,少量樣本微調容易過擬合和災難性遺忘。
  • 模型編輯的目標:精準、高效地修正特定知識點,而且不影響其他無關輸出。

形式化(書的定義 5.1):對知識點 k =(問題 x_k,答案 y_k),編輯後的模型 M* 要滿足

M*(x) = y_k     若 x = x_k 或與 x_k 相關
M*(x) = M(x)    若 x 與 x_k 無關

難點全在「相關/無關」的邊界:知識之間牽一髮動全身。

跟 RAG 怎麼選,書沒有正面比較,以下是我的綜合判斷:知識常常變、量很大 → RAG(換文件就好,見 工具-RAG檢索增強生成);模型本身的錯誤認知、身分錯亂、要抹掉的個資或偏見,而且不想每次都靠外部檢索 → 模型編輯。

2. 用五個面向驗收編輯有沒有成功

用書的斑馬例子(模型錯答「斑馬的皮膚是肉色」,正解是黑色):

面向問什麼例題要求
準確性原題改對了嗎斑馬的皮膚是什麼顏色?答「黑色」
泛化性換句話問還對嗎剃毛後的斑馬是什麼顏色?答「黑色」
可遷移性間接相關的推論跟著更新了嗎皮膚是黑色的馬是什麼馬?(反向)/斑馬的皮膚和毛色一樣嗎?(推理)答案不是「黑色」,而是推論出來的新答案
局部性無關的知識沒被弄壞吧赤兔馬的皮膚是什麼顏色?/鴕鳥會飛嗎?答案跟編輯前一樣
高效性花多少時間、資源;能不能批量——

每一項都是「答對的比例」:例如 Loc = 平均 I(M*(x_i) = M(x_i)),在一組無關題上算編輯前後一致的比例。

  • 書的判斷:準確性是前提,沒過就不用看其他項;局部性是模型編輯相較於單純微調的主要改進;多數方法的可遷移性都不好,這是公認難題。所以上線前一定要測「它不知道要連帶更新的推論」。

3. 選方法:二層四類

大類子類做法代表
外部拓展(不改原參數)知識緩存門控判斷輸入跟緩存的知識相不相關,相關就交給推理模組,否則走原模型SERAC、Language Patch
附加參數在模型裡加少量新參數,只訓練它T-Patcher、GRACE、CALINET
內部修改(直接改原參數)元學習訓練一個「學會怎麼編輯」的超網路,輸出參數更新量KE、MEND
定位編輯先找出知識存在哪些參數,再只改那裡KN、ROME、MEMIT

書整理的比較(依 Yao et al. 2023 的實驗):

方法準確泛化可遷移局部批量
SERAC高高低高✓
T-Patcher高高高中✗
MEND中高中高✓
ROME高高高高✗
MEMIT高高高高✓

選擇原則(依書的判斷整理):

  • 一次改一兩條事實,decoder-only 模型 → ROME。
  • 要一次改上千條 → MEMIT(ROME 的批量版)。
  • 不想動原參數、要能隨時撤銷 → 外部拓展法;代價是知識只是「求助」來的,沒有真正內化,而且緩存越多、存儲與檢索負擔越大。
  • 元學習法是從全域更新參數,即使加了局部性損失,也可能讓模型不穩定。

4. 兩個代表方法的機制

T-Patcher:一個錯誤配一個神經元

  • 把 FFN 看成鍵值記憶體,在最後一層 FFN 加一個補丁(鍵 k_p、值 v_p、偏置 b_p):FFN_p(q) = FFN(q) + a_p · v_p,a_p 是補丁對這個輸入的激活值。
  • 凍結原參數,只訓練補丁;每個要編輯的 token 加一個補丁。損失有三部分:讓目標輸入激活補丁、讓激活後輸出變成正解、讓無關輸入(從記憶集抽樣)不要激活補丁。
  • 書的評價:換模型架構時表現會波動;批量編輯很吃記憶體。

ROME:先定位再做秩一更新

  1. 定位(因果追蹤):對「斑馬的膚色是」這類輸入,先在主體(斑馬)的嵌入加雜訊讓模型答不出來,再逐層、逐位置把某一個隱藏狀態還原成乾淨值,看答案機率回升多少。結果是:中間層的 FFN 在處理主體最後一個 token(「馬」)時效應最大。再把後續的 FFN 凍結成干擾狀態,效應就消失,證實關鍵在 FFN。
  2. 找鍵 k*:主體最後一個 token 進入被編輯 FFN 下投影矩陣前的向量;在主體前接多個隨機前綴,取平均,讓它不依賴特定句子。
  3. 找值 v*:梯度下降找一個輸出向量,讓模型答出新答案;同時加一項 KL,讓「斑馬是……」這類泛泛的 prompt 輸出分佈不變(守住局部性)。
  4. 插入:解帶約束的最小平方,得到閉式解
    Ŵ = W + Λ (C⁻¹ k*)ᵀ ,   Λ = (v* − W k*) / ((C⁻¹ k*)ᵀ k*) ,   C = K Kᵀ
    
    驗算:Ŵ k* = W k* + Λ·(C⁻¹k*)ᵀk* = W k* + (v* − W k*) = v* ✔。更新量是「列向量 × 行向量」,所以是秩一矩陣,只改一個方向。C 用維基百科大量文本的鍵向量事先估計。
  • 書的評價:準確、泛化、局部都好;但只能處理(主體、關係、客體)這種三元組事實,複雜事實效果不佳,而且不支援批量。

5. 實際能拿來做什麼(書的應用)

  • 精準修正:例如模型自我介紹錯成別家模型。書引 2023 年 Gemini Pro 被問「你是誰」答成文心的事件,明說是推測 Google 用了模型編輯。
  • 被遺忘權:DEPN 先找出跟某段隱私相關的神經元,再把激活值設成零。
  • 去毒、減偏見:找出相關 FFN 參數做編輯(LSDM、DAMA)。

🧪 我實際套用的紀錄

  • (尚無)

⚠️ 注意 / 什麼時候不適用

  • 可遷移性普遍差:改了「斑馬皮膚是黑色」,模型不一定會推出「黑皮膚的馬是斑馬」。驗收一定要包含反向題與推理題。
  • 詞層級的去毒會傷到正常表達:只壓低「炸彈」這類詞,模型反而說不出「不要製造炸彈」這種安全回答。
  • ROME/MEMIT 主要針對 decoder-only 設計,書說沒在 encoder-decoder 上比較過。
  • 書沒有討論模型編輯被惡意用來植入錯誤知識,也沒討論連續大量編輯的累積退化(推測:連續編輯越多,局部性越可能慢慢流失,要定期回歸測試)。
  • 知識量大又常變時,別用編輯硬撐,改走 RAG。
  • 書中 ROME 的協方差寫「去中心化」,原論文用的是未中心化的二階矩。實作時以原論文為準。

🔗 相關工具

📖 機制層(既有卡)

[[注意力機制]]、[[取樣與解碼策略]] [[PEFT 方法比較]]、[[LoRA 與 QLoRA]] [[稀疏與密集檢索]]、[[RAG 評估與營運]]

Link to original

🧰 這本書給我的工具(連到 tools/)

✨ 關鍵重點(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 工程