注意力机制是整门课的心脏。这一章把 Transformer 拆开,看它怎样让一个词根据上下文改变自己的含义,以及它怎样一个 token 一个 token 地写出文字。

这一讲对应《Hello, AI》第 8 章《每个词都能看见其他词》。主线约 7 分钟的阅读量,展开讲一节课。
本章要回答的问题:模型怎样知道「苹果」在这句话里指水果还是公司?它又是怎样一个词一个词地写出回答的?
上一章的嵌入层会给这两个「苹果」同一个向量。
但它们的意思显然不同。
好的语言模型必须让每个词的表示根据上下文改变:进入模型时「苹果」是一个固定向量,几层之后它应该变成「水果的苹果」或「公司的苹果」。
做这件事的机制叫注意力。2017 年的 Transformer 把它变成了一切的核心。
这一章是整门课的心脏。开场先给学生一句定心丸:不需要线性代数,只需要跟着一个比喻走。
每个词发出一个问题。
四个部件,叠一百次。
一次一个 token。
提醒学生:这一章之后,「Transformer」这个词对他们就不再是黑箱了。
想象一个班级,每个词是一个学生,坐成一排。现在轮到「苹果」发言,它想弄清自己在这句话里是什么意思。它做了三件事。
这个比喻要讲慢,四步逐个展开。学生听懂了这一页,这一章就过了一半。
一层之后,每个词的向量都吸收了上下文。
再来一层,它们吸收的是已经吸收过上下文的向量,关系越来越复杂。
连线越粗,注意力越大。换一个词,整张图重新分配。
现场演示注意力实验:你会看到代词在看它指代的名词,动词在看它的宾语——这些语法关系没有人教过它。这是全课最好的「哇」时刻之一,留足时间。
Attention(Q,K,V) = softmax( QKᵀ / √d ) · V
三个矩阵一开始是随机的。模型为了预测下一个词,在训练中逐渐学到了让注意力落在有用位置上的变换。语法关系是被逼出来的副产品。
另一个关键性质:并行。循环网络处理第一千个词要等前九百九十九个算完;注意力一次矩阵乘法算完全部。
这是 Transformer 能用几万块 GPU 训练、从而做到今天规模的直接原因。代价:计算量随长度的平方增长。
不要求学生会推导,只要求他们看到公式时能指出哪一项是「比对」、哪一项是「加权求和」。
不管句子多长,所有信息都要挤进一个固定大小的向量。读到第一百个词时,第一个词已经被冲淡到几乎不剩。
加各种「门」改善了,但没有根除。
第一百个词必须等前九十九个算完。训练时几万块 GPU 只能排队。
论文标题里的「你所需要的一切」说的就是这个。
结果:记忆瓶颈消失,并行也有了。
代价:平方复杂度,以及需要位置编码补回顺序。
近几年出现了状态空间模型等试图兼得两者的架构,在长序列上有优势,但目前 Transformer 仍是主流。
两个补充,让这个机制真正好用。
语法关系、语义关系、指代关系、位置关系——让一组查询键值同时表达太勉强。Transformer 用多组,每组叫一个「头」,各自学关注不同的东西,最后拼起来。
事后观察训练好的模型,确实能看到:有的头专门看前一个词,有的头专门看句首,有的头专门追踪指代。
对上面的机制来说,每个词的查询、键、值都相同,注意力的结果也相同。
办法是在每个词的向量上加一个表示位置的向量,让「第一个位置的猫」和「第三个位置的猫」在进入注意力之前就已经不同。
具体做法有好几种,目的都一样:把顺序信息塞回一个本身不在乎顺序的机制。
第二道自测题就是「猫追狗」。这一页讲完可以直接现场提问。
计算量和显存都随长度平方增长。这就是早期模型窗口只有几千 token 的原因,也是「上下文窗口」曾是各家竞争焦点的原因。
第七章讲窗口进化时说的「工程优化」,就是这里的第一条。
每写一个新 token,都要把整个序列重新算一遍吗?
不用。前面的词的键和值在上一步已经算过了,把它们缓存起来,新 token 只需要算自己的,再和缓存比对。
一个长上下文的缓存可能有几十 GB。
这是长上下文的调用更贵的直接原因——不只是算得多,还占着昂贵的显存。
KV 缓存也解释了为什么「只用解码器」的架构赢了——下面会讲到。
| 部件 | 规模(四千维、十万词表) | 作用 |
|---|---|---|
| 嵌入层 | 约 4 亿 | 词表 × 维度。输出层常复用同一张表把向量变回 token |
| 注意力 | 每层约 6000 万 | 四个矩阵:查询、键、值、输出 |
| 前馈网络 | 每层约 1.3 亿 | 参数最多的地方,中间维度通常是四倍;被认为是「知识」主要储存处 |
| 归一化与位置 | 几乎可忽略 |
这个分布解释了三件事:为什么扩大词表会显著增加参数;为什么混合专家只改前馈网络;为什么「知识编辑」的研究主要盯着前馈层。
提醒:「参数」不是均匀分布的智慧,而是几种功能不同的矩阵。学生看模型参数量时,这个直觉很有用。
注意力层之后还有几个部件,合起来是一个「模块」,整个模型就是几十上百个模块叠起来。
强调「一模一样」:模型的深度不是设计出几十种不同的层,而是同一个模块复制几十份。
复制几十份叠起来,前面接嵌入层,后面接一个把向量变回词表概率的输出层——这就是一个完整的语言模型。GPT、Llama、Qwen、DeepSeek、Claude,架构上都是这个东西的变体。
残差和归一化在第六章都露过面。这里是它们第二次出现,学生会有「原来到处都是它」的感觉。
每个词看到全句,擅长理解和分类,但不擅长生成。
保留 2017 年为翻译设计的原始结构:编码器读源语言,解码器生成目标语言。
每个词只看前面,天然就是「预测下一个词」的语言模型。
顺带解字:GPT = 生成式预训练 Transformer。「生成式」指的就是这条只用解码器的路线。学生记住这个,很多术语就串起来了。
理解了模型的内部,最后看它怎样写出一段回答。
它不会先想好整段回答再写,每一步只决定下一个 token。
回答的结构感、逻辑性,全部来自它在训练中见过太多有结构、有逻辑的文本,以至于「按概率续写」自然就带出了结构。
这个推论要讲透,它是第十章「幻觉」的根源:它在每一步选的都是「最像会出现在这里的词」,而不是「最真实的词」。
接近贪心——永远选概率最大的。结果稳定、可复现,但容易重复、单调。
写代码、事实性回答用低温度。
低概率的词也常被抽中。结果有变化,但也可能抽到怪词。
写诗、头脑风暴用高温度。
现场演示下一个 token 实验:一个真正的小型语言模型在浏览器里跑。看每一步的概率分布,然后调温度——0.1 时它几乎每次写出同样的话,1.5 时它开始胡言乱语。
看完这个实验,「大模型的回答每次不一样」和「大模型有时候会说出很怪的话」这两件事就都有了解释。
| 策略 | 做法 | 优点 | 缺点 | 适合 |
|---|---|---|---|---|
| 贪心 | 每步取概率最大 | 稳定、可复现 | 单调、易重复 | 短答案、事实性回答 |
| 束搜索 | 同时保留最好的几条候选序列 | 整体更优 | 长文本会「安全得无聊」 | 翻译、摘要 |
| 温度采样 | 按调整过的概率随机抽 | 多样 | 温度高时会离谱 | 创作、头脑风暴 |
| Top-k | 只在前 k 个候选里抽 | 去掉长尾怪词 | k 固定,不自适应 | 通用 |
| Top-p(核采样) | 只在累积概率达 p 的候选里抽 | 自适应候选数 | 需要调 p | 今天最常用的默认 |
实际产品通常组合使用:temperature 0.7 加 top_p 0.9 是常见默认。
让学生去 API 文档里找这两个参数,对照这张表。这是理论落到手上的一刻。
Transformer 让每个词
按与所有其他词的相关度
加权吸收信息。
一层层叠加,把固定的词向量变成随上下文变化的表示。
生成时,它一次只预测一个 token,
靠温度和采样在「稳定」与「多样」之间取舍。
这是全书最值得背下来的一段。
用查询、键、值的比喻解释:模型怎样知道「苹果」在「苹果发布了新手机」里指公司?
注意力机制本身不在乎词的顺序,那模型怎么区分「猫追狗」和「狗追猫」?
先让学生回答,再按右键展开答案。
为什么 Transformer 比之前的循环网络更容易训练到超大规模?
可以追问代价是什么:平方复杂度。学生能同时说出优点和代价,才算真懂。
温度调到 0 和调到 2,模型的行为各会怎样?
分别适合什么场景?
可以让学生现场在实验里把温度拉到两端各生成一次,比任何解释都直观。
继续读
正文与「深入」段落:ai4edu.sjtu.edu.cn/helloai/read/attention/
下一章:第 9 章 从续写机到助手
留三到五分钟做本页的回顾,让学生用自己的话复述其中一条。
鼠标移到屏幕底部会显示控制条;页码记在地址栏的 # 后面,刷新不会丢。
手机上:竖着拿会自动把版面转过来(底下那条里的「转向」可以切回去),点右半边或往上滑翻页。