模組 09 · 從零弄懂大模型

從零實現 Transformer

手寫分詞器和注意力,搭一個完整的小 GPT,在三萬多首唐詩上訓練它學會寫詩,再講生成、KV 快取,以及從小 GPT 到真正的大模型還差什麼。

各課

  1. 01
    手寫 BPE 分詞器

    第 01 模組說過模型看到的是詞元。這一課親手寫一個位元組級 BPE 分詞器,在唐詩上訓練它,看它怎樣從位元組一步步拼出漢字和常用詞,也看清它在小資料上的毛病。

    45 分鐘 · 進階
  2. 02
    注意力機制

    一個字要理解自己的意思,得看看前面都有哪些字。從最簡單的"平均前面所有的字"出發,一步步加上查詢、鍵、值,因果掩碼和縮放,寫出一個完整的注意力頭,並和 PyTorch 的實現核對。

    50 分鐘 · 深入
  3. 03
    多頭注意力和位置編碼

    一個注意力頭只能按一種標準去看前面的字,多開幾個頭就能同時看好幾樣東西。注意力本身也分不清字的順序,所以要把位置告訴它。這一課用實驗看清這兩件事,也看到一個意料之外的結果。

    40 分鐘 · 深入
  4. 04
    搭一個完整的 GPT

    把注意力、前饋網路、殘差連線和 LayerNorm 組裝成 Transformer 塊,疊幾層,加上嵌入和輸出層,就是完整的 GPT。逐段讀 gpt.py,數清一百六十萬個參數在哪裡。

    50 分鐘 · 深入
  5. 05
    訓練它:讓模型學會寫唐詩

    用三萬四千首唐詩訓練上一課搭好的 GPT,在筆記本 CPU 上跑七分鐘,看它從亂碼一步步學會五言七言。再只給它三百首詩,看它怎樣把詩背下來而不是學會作詩。

    50 分鐘 · 深入
  6. 06
    生成文字和 KV 快取

    訓練好的模型只會給下一個字打分,怎麼從分數變成一首詩?這一課用自己的 GPT 試溫度、top-k、續寫和藏頭詩,再實現 KV 快取,量一量它省下了多少重複的計算。

    40 分鐘 · 深入
  7. 07
    從小 GPT 到大模型

    我們的小 GPT 會寫詩,卻不會回答問題。從它到一個能對話的大模型,中間隔著規模、預訓練、指令微調和偏好對齊。這一課用論文裡的真實數字,把每一步講清楚。

    30 分鐘 · 進階

第 01 模組說過,大模型只做一件事:預測下一個詞元。這個模組親手造一個做這件事的模型。

我們要從零寫一個 GPT:分詞器、注意力、多頭、位置編碼、Transformer 塊,全部手寫,不用任何現成的模型庫。然後在《全唐詩》裡挑出的三萬五千首格律詩上訓練它。它只有 161 萬個參數,在筆記型電腦的 CPU 上訓練 7 分鐘左右,就能寫出像模像樣的五言、七言詩。

它和 ChatGPT、DeepSeek 的差別主要在規模和訓練方法上,原理是相同的。學完這個模組,你能看懂真實大模型程式碼的主體結構。

為什麼是這個順序

先分詞,因為模型的輸入是詞元。然後是注意力,它是 Transformer 的核心;第 3 課補上多頭和位置資訊,第 4 課把所有零件組裝成完整的模型。第 5 課訓練它,第 6 課用它生成文字,並解釋推理時最重要的最佳化 KV 快取。最後一課不寫程式碼,講從我們的小 GPT 到真正能對話的大模型,中間還有哪幾步。

這個模組的程式碼都在 code/09-transformer/ 下,gpt.py 是後面幾課共用的模型。需要先學完第 08 模組,特別是反向傳播、PyTorch 和交叉熵。

學完的標準

  • 能手寫一個位元組級 BPE 分詞器,並解釋它為什麼在資料少時切得很碎。
  • 能寫出帶因果掩碼和縮放的注意力,並說出 q、k、v 各自的作用。
  • 能解釋多頭注意力和位置編碼為什麼需要,以及因果掩碼本身會洩露順序資訊。
  • 能逐段讀懂 gpt.py,並算出每一部分有多少參數。
  • 能在自己的電腦上訓練出一個會寫詩的小 GPT,從損失曲線和生成結果判斷它是在學習還是在背誦。
  • 能解釋溫度、top-k 和 KV 快取,並量出 KV 快取的加速效果。
  • 能說出預訓練、指令微調和偏好對齊分別在做什麼。

本模組的程式碼

程式碼和執行結果保留原樣(簡體中文),與實際執行時完全一致。