卷 V · 当助手CH 20深度 20/20

续写下去

这本书从一张表开始:读完前面所有的字,给下一个 token 打分。十九章之后,那张表背后的东西都摆在桌上了——token、坐标、梯度、总线、头、电路、叠加、温度、缓存、文档、后训练、校准。最后一章做三件事:把十九个被推翻的直觉收成一张表,让你亲手训一台小 Transformer 收个尾,然后告诉你从这里往哪走、哪里还在吵。

自查表亲手训一台继续往下走
◉ 这一章在 GPT-2 的哪一段

▷ 先猜一下

这本书每一章开头都让你猜一道题,章末再揭晓答案。读到揭晓、发现自己猜错时的那一下「啊?」——在这台模型的训练里,对应的是哪个量?

A 熵。你对这道题有多拿不准 B 意外,也就是损失:−log₂(你给正确答案的概率) C 梯度。你该往哪边改自己的看法 D 温度。你猜的时候有多随意

答案在本章末尾。

全书压成一张图

文字 ─分词─▶ 编号 ─查表─▶ 坐标
                              │
                ┌─────────────▼─────────────┐
                │ 总线:每一层只往上加一笔     │ × 12(今天是几十层)
                │   注意力:按内容回头查表     │
                │   MLP:看到模式,推一个方向  │
                └─────────────┬─────────────┘
                              ▼
                     一张 50257 行的候选表 ─挑一个─▶ 接到末尾,再来一遍

训练:猜下一个 → 量意外(比特)→ 反向传播 → 每个旋钮拧一点 → 几十亿次
助手:在这台续写机上,再用一点对话数据教它格式、放大它的自信

这本书的主线,是第 1 章那句话的展开:它只做一件事——给下一个 token 打分;你见过的一切本事,都是为了把这件事做到极致,被迫在它肚子里长出来的零件。这些零件里,有的像理解(把相似的词放在一起,把 Mary 从 12 个 token 之外搬过来),有的像背书(MIT 许可证),有的像照抄(归纳头),有的像虚张声势(微调后的笃定)。它们都在,比例随规模和训练方式而变。

This is not the end. It is only the ▍ … ␣not ␣the ␣end . ␣It ␣is ␣only ␣the 下一个 token 概率 意外 ' beginning' 90.56% 0.14 比特 ' start' 5.37% 4.22 比特 ' first' 0.93% 6.74 比特 ' starting' 0.66% 7.23 比特 ' end' 0.58% 7.42 比特 熵 0.79 比特

自查表:十九个被推翻的直觉

每一章都推翻了一个直觉。如果下面哪一行的左边你还觉得「对啊」,回去读那一章。

章✗ 你以为✓ 其实
1它先想好答案,再一个字一个字写出来每一步只产出一张表;「The capital of France is」后面,它最想写的是 the(8.46%),Paris 排第 5
2数不清 strawberry 里的 r,说明它不会数数␣strawberry 是一个编号 41236 的符号,它看不见里面的字母
3大模型不过是一张更大的统计表看前 9 个字符,63.6% 的上下文在一百万字里没出现过;表永远填不满,必须靠「像」来泛化
4loss 只是个抽象的指标loss 就是压缩后的文件大小:GPT-2 把一篇新文章压到 zlib 的 1/3.19
5词向量的每一维代表一个意思意思在方向和邻居里;king − man + woman 最近的还是 king(0.776)
6训练就是随机试错反向传播一次算出全部梯度,只花 2.31 次前向;一个个试要贵 11 万多倍
7意外低,说明它理解了它背过:MIT 许可证 0.29 比特/字符,打乱顺序 2.15
8大 10 倍就聪明 10 倍大 12.5 倍,每字符只少 11.4%;可单道题会跨阈值(Au:第 1066 名 → 第 1)
9注意力权重高 = 重要中间层一半左右的注意力倒在第一个 token 上;看 Mary 最多的头在给 Mary 减分
1012 层是 12 道工序是一条总线:删掉第 1 层只多 0.6% 的意外
11知识是一条条记录逐层删 MLP,basketball 最低只降到 5.72%;找不到那一格
12能现学,就是理解了乱码也能第二遍猜中 97.1%;关掉 4 个头就降到 9.1%
13一个神经元一个概念2 维里放下 5 个特征(五角星);概念比维度多
14每步挑最可能的就是最好的贪心解码 200 个 token 里只有 8% 不重复
15输出贵是因为生成更难计算量一样,读能并行、写不能:读比写快 60.6 倍
16没说对就是不知道一个例子把 Paris 从 1.77% 推到 63.71%
17后训练教会了新知识56 条对话教会了格式;训练里没有法国,Paris 却从 16.22% 到 99.06%——不丹也成了北京
18说得越肯定越可能对基座「九成把握」对 91.7%;微调后同一档只对 73.0%
19GPT-2 那套早就过时了骨架没变,换了五个零件;GQA 把 128K 对话的缓存从 64 GiB 降到 16 GiB

亲手训一台

读了这么多拆解,最后自己造一台。Andrej Karpathy 的 nanoGPT 是一个几百行的仓库,里面有一个现成的配方:在第 3 章那份 TinyShakespeare 上训一台字符级的小 Transformer。它的训练集和测试集的切法,恰好和第 3 章一模一样(前 1003854 个字符训练,后 111540 个考试)——所以可以和这本书里的另外三台机器同台比。

⌨ 自己跑一遍

五行命令(Apple 芯片用 --device=mps,NVIDIA 显卡改成 cuda,都没有就 cpu 加上更小的模型):

git clone https://github.com/karpathy/nanoGPT && cd nanoGPT
pip install torch numpy tiktoken
python data/shakespeare_char/prepare.py
python train.py config/train_shakespeare_char.py --device=mps --compile=False --max_iters=2000 --lr_decay_iters=2000
python sample.py --out_dir=out-shakespeare-char --device=mps --num_samples=1 --max_new_tokens=300

本机(Apple M3 Max,MPS)的结果:模型 1065 万个参数,训练 2000 步用了 11 分 34 秒。nanoGPT 自己报告的验证集损失是 1.4537(单位是 nat,按随机抽的片段估计),换算成比特是 2.10 比特/字符;训练集是 1.55。它写出来的一段:

They never be so for me fourteen shall not wear with them
A good silver bloody store, do thou shame thee
And let me to't: for what he is contempt
That renown'd the warlike his head
By slew the high one blood of this daughter's man
Or mortal hand upon that. What thou?

SICINIUS:
Help him, is thy lord

不通,但已经「像」了:格式对、用词像、韵律像。把它和这本书里的另外三台机器放在同一份测试集上比:

续写机参数测试集(比特/字符)
第 3 章:最好的计数模型(5-gram)—2.55
第 6 章:手写反向传播的小网络13 万2.40
这一章:你自己训的小 Transformer1065 万2.10
GPT-2 small(它可能读过莎士比亚)1.24 亿1.81

四台机器做的是同一件事:看前文,给下一个字符打分。差别全在它们能看多远、能把「像」的东西归到一起到什么程度。

bash 20.sh

没有合适的机器:在 Google Colab 里选 GPU 运行时,把 --device=mps --compile=False 换成 --device=cuda,几分钟训完。想一行行看懂它:Karpathy 的视频《Let's build GPT: from scratch, in code, spelled out》从零写的就是这个仓库。

继续往下走

按你想去的方向分岔。标了「有争议」的,是这个领域里还没有共识的地方。

想亲手造:从零写一遍

  • Andrej Karpathy 的「Neural Networks: Zero to Hero」视频系列:从手写反向传播(micrograd)一路写到 GPT。这本书第 3、6、12 章讲的东西,他都在代码里亲手造了一遍。
  • picoGPT:用 numpy 写的 GPT-2 前向,只有几十行,加载的是 OpenAI 的真权重——和这本书探针里那台 numpy GPT-2 是同一个思路。
  • 3Blue1Brown 的深度学习系列里讲 Transformer、注意力和「MLP 存储事实」的几集,是这本书卷 III 最好的可视化补充。
  • MLX(Apple)/ llama.cpp:在自己的 Mac 上跑和微调开源模型。第 17 章那个 56 条数据的实验,可以换成一个 8B 模型再做一遍,看结论还成不成立。

想打开看:可解释性

  • Anthropic 的 Transformer Circuits 系列(transformer-circuits.pub):第 10 章的总线视角、第 12 章的归纳头、第 13 章的叠加,原始论文都在这里;2024 年之后的稀疏自编码器、2025 年的「电路追踪」把同样的方法用到了大模型上。
  • TransformerLens 和 ARENA 课程:可解释性研究的标准工具和公开教程,GPT-2 small 是默认的实验对象——你在这本书里做过的每一个实验,在那里都是一行代码。
  • Neel Nanda 的入门指南与开放问题清单:想真正做研究,从这里挑一个小问题。

想往大了推:规模与训练

  • Kaplan 等人 2020 年的《Scaling Laws for Neural Language Models》和 2022 年的 Chinchilla 论文:第 8 章那条幂律的出处。
  • Rich Sutton 的短文《The Bitter Lesson》(2019):为什么「通用方法 + 更多算力」一次次赢过精心设计的知识。短,但会改变你看 AI 历史的方式。
  • 有争议:幂律还能延续多远?高质量文本数据会不会先用完(所谓「数据墙」)?合成数据能不能补上?这些问题在 2026 年仍然没有定论。

想往对了调:后训练与对齐

  • InstructGPT(2022):第 17 章那个「13 亿胜过 1750 亿」的出处,也是 RLHF 流程的经典描述。
  • DPO(2023):把第 17 章那个「重新加权」的公式反过来用,不用单独训奖励模型就能做偏好训练;今天开源社区用得最多的方法之一。
  • Constitutional AI(Anthropic,2022):用一组写下来的原则让模型自己给自己打分。
  • 书架上的《打分》:强化学习的全貌,以及「你写下的分数会被精确地最大化」这件事有多危险。

想往快了跑:推理系统

  • FlashAttention(2022)、vLLM 与 PagedAttention(2023):第 15 章那两笔账(注意力的平方、KV 缓存的内存)在工程上是怎么被省下来的。
  • 投机解码(2023):把「写」变成「读」的那个技巧的原始论文。

想用好它

  • 书架上的《我,Agent》:站在这台续写机上面一层,讲工具、循环、上下文工程。读完这本书再读它,你会知道「上下文」在模型眼里是什么:一份要续写的文档。
  • 书架上的《证伪》:模型输出的是「它以为对的东西」,第 18 章说了为什么;那本书讲怎么用测试当外部的真相来源。

还在吵的问题

  • 它「理解」吗?2021 年的一篇论文把大模型叫做「随机鹦鹉」——只是把见过的文字按概率拼起来;另一派拿出了反例,比如 2023 年的 Othello-GPT 实验:一个只读过棋谱(一串落子位置)的小模型,内部长出了棋盘状态的表示。这本书给的证据两边都有:归纳头在乱码上照抄、MIT 许可证逐字背诵,是鹦鹉的一面;相似的词被放到一起、Mary 被从 12 个 token 之外准确地搬过来、知识以方向的形式叠加存储,是另一面。「理解」这个词本身可能就需要被拆开。
  • 「涌现」是真的吗?第 8 章的例子支持「很多突然性来自阈值式的评分」;但也有研究认为,有些能力在连续指标下同样陡峭。
  • 知识能被定位、能被精确编辑吗?第 11 章:ROME 说能,后续研究说定位和编辑的关系很弱。
  • 归纳头能解释多大一部分「上下文学习」?第 12 章:在小模型上几乎是全部;在大模型上,是主体还是之一,还没有定论。
  • 幻觉能根治吗?第 18 章说它是结构性的;能不能通过训练和评测方式的改变把它压到足够低,是现在最活跃的方向之一。
▸ 在现实里

把这本书变成日常用 AI 时的几条习惯:

  • 把它当成一张表,而不是一个人。换问法、给例子、调温度,都是在改那张表的条件;结果不满意,先换一份「文档」再下结论(第 1、14、16 章)。
  • 需要精确的地方,给它工具。数字母、算数、查最新的事实——它看不见字母、记不住会变的事、也不会说「我不知道」(第 2、11、18 章)。
  • 让它多写几步。每个 token 只有固定的计算量,写出推理过程等于多给它算力(第 1、15 章)。
  • 稳定的放前面,变化的放后面,长提示词才能吃到缓存;能让它「读」的,就别让它「写」(第 15 章)。
  • 别信语气,核对说法。流畅是它的训练目标,笃定是后训练的副产品(第 18 章)。
✗ 这个直觉是错的

「拆了这么多,总该有个结论:大模型到底是『只会统计的鹦鹉』,还是『真的在理解』?」

这本书拆出来的东西,两个标签都贴不上。同一台 GPT-2 里,有逐字背诵的记忆、有在乱码上也照抄的电路,也有把相似的词放到一起、把正确的名字从远处搬过来的机制,还有以方向形式叠加存储、删不掉的知识。「鹦鹉还是理解」是一个二选一的问题,而模型里是一堆为了猜准下一个 token 而长出来的、性质各异的零件。

更有用的问题是具体的:在这个任务上,它主要靠的是哪一种零件?那个零件能不能被测出来?这本书里的每一个实验——删层、关头、打乱顺序、换一份没见过的文章——都是在回答这种具体的问题。

◇ 揭晓

正确答案是 B:猜错时的那一下「啊?」,就是意外,−log₂(你给正确答案的概率)。
你越确定地猜错,这一下越疼——和交叉熵惩罚模型的方式一模一样。

A 「熵」——熵是揭晓之前你有多拿不准(你的候选表有多平),而那一下「啊?」发生在揭晓之后,取决于真实答案落在你表里的哪个位置。熵是意外的平均值,不是某一次的意外。 C 「梯度」——梯度是意外之后的那一步:读「◇ 揭晓」里对每个错误选项的解释,弄明白自己的直觉错在哪、该往哪边改——那才是反向传播。这本书每章末尾那一栏,就是在给你算梯度。 D 「温度」——温度决定你从自己的候选表里抽答案时有多随意。它影响你会不会猜错,但不是猜错时的那一下。 二十章读下来,你做的事和模型训练时一模一样:读前文,给下一个猜一张表,被告知真实的答案,算一下意外,改一点自己的看法。区别是你只做了二十次,而它做了几十亿次。

这一章的一句话

它只做一件事:读完前文,给下一个 token 打分。为了把这件事做到极致,它长出了坐标、电路、记忆和自信;看懂了这些零件,你就能更好地用它、更准地怀疑它——并且知道,这本书合上之后,这个领域还在续写。

合上书之后,去 nanoGPT 训一台自己的,再打开 TransformerLens 拆一拆它。你会发现,下一个 token 的那张表,你已经读得懂了。