从零实现 Transformer
手写分词器和注意力,搭一个完整的小 GPT,在三万多首唐诗上训练它学会写诗,再讲生成、KV 缓存,以及从小 GPT 到真正的大模型还差什么。
各课
- 01手写 BPE 分词器
第 01 模块说过模型看到的是词元。这一课亲手写一个字节级 BPE 分词器,在唐诗上训练它,看它怎样从字节一步步拼出汉字和常用词,也看清它在小数据上的毛病。
45 分钟 · 进阶 - 02注意力机制
一个字要理解自己的意思,得看看前面都有哪些字。从最简单的"平均前面所有的字"出发,一步步加上查询、键、值,因果掩码和缩放,写出一个完整的注意力头,并和 PyTorch 的实现核对。
50 分钟 · 深入 - 03多头注意力和位置编码
一个注意力头只能按一种标准去看前面的字,多开几个头就能同时看好几样东西。注意力本身也分不清字的顺序,所以要把位置告诉它。这一课用实验看清这两件事,也看到一个意料之外的结果。
40 分钟 · 深入 - 04搭一个完整的 GPT
把注意力、前馈网络、残差连接和 LayerNorm 组装成 Transformer 块,叠几层,加上嵌入和输出层,就是完整的 GPT。逐段读 gpt.py,数清一百六十万个参数在哪里。
50 分钟 · 深入 - 05训练它:让模型学会写唐诗
用三万四千首唐诗训练上一课搭好的 GPT,在笔记本 CPU 上跑七分钟,看它从乱码一步步学会五言七言。再只给它三百首诗,看它怎样把诗背下来而不是学会作诗。
50 分钟 · 深入 - 06生成文字和 KV 缓存
训练好的模型只会给下一个字打分,怎么从分数变成一首诗?这一课用自己的 GPT 试温度、top-k、续写和藏头诗,再实现 KV 缓存,量一量它省下了多少重复的计算。
40 分钟 · 深入 - 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 缓存的加速效果。
- 能说出预训练、指令微调和偏好对齐分别在做什么。