第 8 章 · 第三部分 语言

每个词都能看见其他词

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

人工智能导论 · 上海交通大学「AI+教育」平台 · 讲义版幻灯片

这一讲对应《Hello, AI》第 8 章《每个词都能看见其他词》。主线约 7 分钟的阅读量,展开讲一节课。

本章要回答的问题:模型怎样知道「苹果」在这句话里指水果还是公司?它又是怎样一个词一个词地写出回答的?

开场同一个 token,两个意思

「我早上吃了一个苹果。」
「苹果昨晚发布了新手机。」

上一章的嵌入层会给这两个「苹果」同一个向量。
但它们的意思显然不同。

模型要怎样知道该把哪个「苹果」理解成水果?
答案是看周围的词
  • 第一句有「吃」
  • 第二句有「发布」「手机」

好的语言模型必须让每个词的表示根据上下文改变:进入模型时「苹果」是一个固定向量,几层之后它应该变成「水果的苹果」或「公司的苹果」。

做这件事的机制叫注意力。2017 年的 Transformer 把它变成了一切的核心。

这一章是整门课的心脏。开场先给学生一句定心丸:不需要线性代数,只需要跟着一个比喻走。

?

模型怎样知道「苹果」在这句话里指水果还是公司?
它又是怎样一个词一个词地写出回答的?

一

注意力

每个词发出一个问题。

二

一个模块

四个部件,叠一百次。

三

生成

一次一个 token。

提醒学生:这一章之后,「Transformer」这个词对他们就不再是黑箱了。

一Part One

注意力:每个词发出一个问题

想象一个班级,每个词是一个学生,坐成一排。现在轮到「苹果」发言,它想弄清自己在这句话里是什么意思。它做了三件事。

查询键值
比喻一个班级

查询、键、值

  1. 发出查询「苹果」问:谁能告诉我,我是水果还是公司?
  2. 每个同学举着一张键「吃」的牌子写着我和食物有关;「发布」写着我和商业行为有关;「一个」写着我是量词。
  3. 比对,算相关度「吃」得分高,「一个」得分低。用 softmax 变成一组加起来等于 1 的权重——这就是注意力。
  4. 按权重把所有同学的值加起来因为「吃」的权重大,新向量里混入了大量「食物」的信息。「苹果」的表示已经偏向了水果。

这个比喻要讲慢,四步逐个展开。学生听懂了这一页,这一章就过了一半。

自注意力每个词同时做这件事

序列里的每个位置,都在看所有位置——包括自己

我 早上 吃了 一个 苹果 0.050.080.620.100.15 「苹果」发出查询:我是水果还是公司? 每个词举着键:「吃了」:我和食物有关 相关度 → 权重:加起来等于 1 新的「苹果」= 0.05·值(我) + 0.08·值(早上) + 0.62·值(吃了) + 0.10·值(一个) + 0.15·值(苹果) 按权重把所有词的「值」加起来:「食物」的信息占了大头,表示偏向水果 每个词同时做这件事,一层之后每个词都吸收了上下文;叠几十层,关系越来越复杂。 Attention(Q,K,V) = softmax(QKᵀ/√d)·V
查询与每个键比对得到权重,再按权重把所有值加起来。

一层之后,每个词的向量都吸收了上下文。

再来一层,它们吸收的是已经吸收过上下文的向量,关系越来越复杂。

实验 · 注意力可视化

连线越粗,注意力越大。换一个词,整张图重新分配。

现场演示注意力实验:你会看到代词在看它指代的名词,动词在看它的宾语——这些语法关系没有人教过它。这是全课最好的「哇」时刻之一,留足时间。

深入那个公式

一行,每个符号都对应比喻里的一步

Attention(Q,K,V) = softmax( QKᵀ / √d ) · V

  • Q = XWQ,K = XWK,V = XWV三个可训练的矩阵,把每个词的向量变换成它的查询、键、值。
  • QKᵀ一次算出所有词对所有词的相关度打分。
  • ÷ √d让分数的尺度不随维度膨胀,否则 softmax 会把权重挤到极端。
  • × V按权重对所有词的值加权求和。
里面没有任何语法规则

三个矩阵一开始是随机的。模型为了预测下一个词,在训练中逐渐学到了让注意力落在有用位置上的变换。语法关系是被逼出来的副产品。

另一个关键性质:并行。循环网络处理第一千个词要等前九百九十九个算完;注意力一次矩阵乘法算完全部。

这是 Transformer 能用几万块 GPU 训练、从而做到今天规模的直接原因。代价:计算量随长度的平方增长。

不要求学生会推导,只要求他们看到公式时能指出哪一项是「比对」、哪一项是「加权求和」。

深入循环网络为什么输了

一个词一个词地读,把整句话挤进一个向量

RNN / LSTM 输在两处

记忆的瓶颈

不管句子多长,所有信息都要挤进一个固定大小的向量。读到第一百个词时,第一个词已经被冲淡到几乎不剩。

加各种「门」改善了,但没有根除。

无法并行

第一百个词必须等前九十九个算完。训练时几万块 GPU 只能排队。

2014
注意力作为 RNN 的补丁出现用于翻译:让解码器生成每个词时回头看输入的所有位置。
2017
一个大胆的删减既然注意力这么好用,干脆把循环去掉,只留注意力。

论文标题里的「你所需要的一切」说的就是这个。
结果:记忆瓶颈消失,并行也有了。
代价:平方复杂度,以及需要位置编码补回顺序。

近几年出现了状态空间模型等试图兼得两者的架构,在长序列上有优势,但目前 Transformer 仍是主流。

二Part Two

多头与位置

两个补充,让这个机制真正好用。

多头位置编码
补充两个

一组查询键值不够用;而它根本不在乎顺序

多头

一个词和其他词的关系不止一种

语法关系、语义关系、指代关系、位置关系——让一组查询键值同时表达太勉强。Transformer 用多组,每组叫一个「头」,各自学关注不同的东西,最后拼起来。

事后观察训练好的模型,确实能看到:有的头专门看前一个词,有的头专门看句首,有的头专门追踪指代。

位置

「猫追狗」和「狗追猫」

对上面的机制来说,每个词的查询、键、值都相同,注意力的结果也相同。

办法是在每个词的向量上加一个表示位置的向量,让「第一个位置的猫」和「第三个位置的猫」在进入注意力之前就已经不同。

具体做法有好几种,目的都一样:把顺序信息塞回一个本身不在乎顺序的机制。

第二道自测题就是「猫追狗」。这一页讲完可以直接现场提问。

深入注意力的账

为什么长上下文难

一千个词100 万对
一万个词1 亿对
十万个词100 亿对

计算量和显存都随长度平方增长。这就是早期模型窗口只有几千 token 的原因,也是「上下文窗口」曾是各家竞争焦点的原因。

缓解的三条路
  • 算得更聪明不改变数学结果,重新安排计算顺序以减少显存读写。同样的硬件能处理几倍长的序列。
  • 算得更少只看附近的词,或只看少数「摘要」位置。牺牲精度换长度。
  • 换架构状态空间模型等不依赖两两比较,计算量随长度线性增长。

第七章讲窗口进化时说的「工程优化」,就是这里的第一条。

深入生成时还有另一笔账

KV 缓存:为什么长对话还能实时响应

每写一个新 token,都要把整个序列重新算一遍吗?

不用。前面的词的键和值在上一步已经算过了,把它们缓存起来,新 token 只需要算自己的,再和缓存比对。

代价是显存

一个长上下文的缓存可能有几十 GB。

这是长上下文的调用更贵的直接原因——不只是算得多,还占着昂贵的显存。

KV 缓存也解释了为什么「只用解码器」的架构赢了——下面会讲到。

深入一个模型的参数都在哪

四处,分布很不均匀

部件规模(四千维、十万词表)作用
嵌入层约 4 亿词表 × 维度。输出层常复用同一张表把向量变回 token
注意力每层约 6000 万四个矩阵:查询、键、值、输出
前馈网络每层约 1.3 亿参数最多的地方,中间维度通常是四倍;被认为是「知识」主要储存处
归一化与位置几乎可忽略

这个分布解释了三件事:为什么扩大词表会显著增加参数;为什么混合专家只改前馈网络;为什么「知识编辑」的研究主要盯着前馈层。

提醒:「参数」不是均匀分布的智慧,而是几种功能不同的矩阵。学生看模型参数量时,这个直觉很有用。

三Part Three

一个 Transformer 模块

注意力层之后还有几个部件,合起来是一个「模块」,整个模型就是几十上百个模块叠起来。

前馈网络残差层归一化
模块一根线穿过几十个一模一样的模块

整个模型的样子

Transformer
一根线穿过几十个一模一样的模块。

强调「一模一样」:模型的深度不是设计出几十种不同的层,而是同一个模块复制几十份。

模块四个部件

注意力,加残差,归一化;前馈,加残差,归一化

一个模块 · 复制几十份叠起来就是整个模型 自注意力 相加 + 层归一化 前馈网络 相加 + 层归一化 ↑ 下一个模块 残差:绕过去直达 残差:绕过去直达 词与词之间搬运信息 每个词单独「消化」;大部分参数和知识在这里 让数值不失控 GPT、Llama、Qwen、DeepSeek、Claude,架构上都是它的变体。
  • 前馈网络注意力负责在词与词之间搬运信息,前馈网络负责对每个词单独做一次非线性变换——注意力收集上下文,前馈网络消化它。它就是第六章的多层感知机。
  • 残差连接每个子层的输出加上它的输入。信息可以绕过某一层直接往下走,深度网络因此能训到上百层。
  • 层归一化把向量重新缩放到稳定范围,防止数值在几十层之后失控。

复制几十份叠起来,前面接嵌入层,后面接一个把向量变回词表概率的输出层——这就是一个完整的语言模型。GPT、Llama、Qwen、DeepSeek、Claude,架构上都是这个东西的变体。

残差和归一化在第六章都露过面。这里是它们第二次出现,学生会有「原来到处都是它」的感觉。

深入三条路线,一个赢家

为什么「只用解码器」赢了

只用编码器

BERT,2018

每个词看到全句,擅长理解和分类,但不擅长生成。

编码器 + 解码器

T5

保留 2017 年为翻译设计的原始结构:编码器读源语言,解码器生成目标语言。

只用解码器

GPT 系列

每个词只看前面,天然就是「预测下一个词」的语言模型。

  • 训练目标最简单和「语言模型」的定义完全一致,不需要设计特殊任务。
  • 生成能覆盖理解要分类,就让它生成「正面」或「负面」。
  • 规模扩展得最顺规模定律在它身上最干净。
  • 工程原因:KV 缓存只看前面,意味着生成时可以缓存已算过的键和值。

顺带解字:GPT = 生成式预训练 Transformer。「生成式」指的就是这条只用解码器的路线。学生记住这个,很多术语就串起来了。

四Part Four

生成:一次一个 token

理解了模型的内部,最后看它怎样写出一段回答。

自回归采样温度
自回归它真的在一个一个算

你看到文字一个个蹦出来,不是打字效果

  1. 提示词切成 token 送进模型。
  2. 模型输出一个对下一个 token 的概率分布。
  3. 从分布里选一个,接在后面。
  4. 把整个序列再送进去,得到再下一个的分布。
  5. 重复,直到选中一个表示「结束」的特殊 token。
一段五百字的回答几百次完整的前向计算
重要推论:模型没有「计划」

它不会先想好整段回答再写,每一步只决定下一个 token。

回答的结构感、逻辑性,全部来自它在训练中见过太多有结构、有逻辑的文本,以至于「按概率续写」自然就带出了结构。

这个推论要讲透,它是第十章「幻觉」的根源:它在每一步选的都是「最像会出现在这里的词」,而不是「最真实的词」。

采样「从分布里选一个」

温度:稳定与多样之间的那个旋钮

温度低

分布被压得更尖

接近贪心——永远选概率最大的。结果稳定、可复现,但容易重复、单调。

写代码、事实性回答用低温度。

温度高

分布被压平

低概率的词也常被抽中。结果有变化,但也可能抽到怪词。

写诗、头脑风暴用高温度。

实验 · 下一个 token

现场演示下一个 token 实验:一个真正的小型语言模型在浏览器里跑。看每一步的概率分布,然后调温度——0.1 时它几乎每次写出同样的话,1.5 时它开始胡言乱语。

看完这个实验,「大模型的回答每次不一样」和「大模型有时候会说出很怪的话」这两件事就都有了解释。

深入解码策略比较表

API 里那两个参数对应的就是这张表

策略做法优点缺点适合
贪心每步取概率最大稳定、可复现单调、易重复短答案、事实性回答
束搜索同时保留最好的几条候选序列整体更优长文本会「安全得无聊」翻译、摘要
温度采样按调整过的概率随机抽多样温度高时会离谱创作、头脑风暴
Top-k只在前 k 个候选里抽去掉长尾怪词k 固定,不自适应通用
Top-p(核采样)只在累积概率达 p 的候选里抽自适应候选数需要调 p今天最常用的默认

实际产品通常组合使用:temperature 0.7 加 top_p 0.9 是常见默认。

让学生去 API 文档里找这两个参数,对照这张表。这是理论落到手上的一刻。

带走一句话

Transformer 让每个词
按与所有其他词的相关度
加权吸收信息。

一层层叠加,把固定的词向量变成随上下文变化的表示。

生成时,它一次只预测一个 token,
靠温度和采样在「稳定」与「多样」之间取舍。

这是全书最值得背下来的一段。

自测第 1、2 题

用查询、键、值的比喻解释:模型怎样知道「苹果」在「苹果发布了新手机」里指公司?

注意力机制本身不在乎词的顺序,那模型怎么区分「猫追狗」和「狗追猫」?

参考答案 一、「苹果」发出查询,「发布」和「手机」的键与它高度相关,注意力权重集中在它们身上,于是「苹果」的新向量混入大量「商业」「电子产品」的值,表示偏向公司。这个判断来自上下文,不来自「苹果」这个词本身。

二、靠位置编码:在每个词的向量上加一个表示位置的向量,让同一个词在不同位置进入注意力之前就已经不同。

先让学生回答,再按右键展开答案。

自测第 3 题

为什么 Transformer 比之前的循环网络更容易训练到超大规模?

参考答案 注意力对整个序列的计算是并行的一次矩阵运算,而循环网络必须逐词顺序处理。并行意味着可以把计算摊到成千上万块 GPU 上,这是规模扩展的前提。

可以追问代价是什么:平方复杂度。学生能同时说出优点和代价,才算真懂。

自测第 4 题

温度调到 0 和调到 2,模型的行为各会怎样?
分别适合什么场景?

参考答案 趋近 0 时接近贪心,每次输出几乎相同,稳定但可能单调重复——适合代码、事实性回答。
调高时分布被压平,低概率的词也常被抽中,输出多样但可能离谱——适合创意写作、头脑风暴。

可以让学生现场在实验里把温度拉到两端各生成一次,比任何解释都直观。

收束第 8 章

这一章留下什么

  • 自注意力:每个词发出查询,每个词提供键和值,按相关度加权求和,于是表示随上下文改变。
  • 语法关系是被逼出来的副产品:三个矩阵一开始随机,模型为了预测下一个词才学会把注意力放对地方。
  • 多头补充关系的多样性,位置编码补回顺序;注意力本身并不在乎词序。
  • 一个模块四个部件:注意力、前馈网络、残差、层归一化;复制几十份就是一个完整的语言模型。
  • 生成是自回归的,模型没有计划:每一步只选「最像会出现在这里的词」——这也是幻觉的根源。
本章术语
自注意力查询键值多头注意力位置编码Transformer前馈网络残差连接自回归生成采样与温度

继续读

正文与「深入」段落:ai4edu.sjtu.edu.cn/helloai/read/attention/
下一章:第 9 章 从续写机到助手

留三到五分钟做本页的回顾,让学生用自己的话复述其中一条。

阅读本章正文 ↗ 全部幻灯片

放映快捷键

← → 空格
上一页 / 下一页
数字 + 停顿
跳到第 N 页
O
缩略总览,点一张跳过去
N
讲者备注抽屉
S
改成一步一点(默认一次一整页)
F
全屏
P
打印 / 导出 PDF(每页一张)
Esc
退出总览或关闭本窗

鼠标移到屏幕底部会显示控制条;页码记在地址栏的 # 后面,刷新不会丢。
手机上:竖着拿会自动把版面转过来(底下那条里的「转向」可以切回去),点右半边或往上滑翻页。

在手机上怎么翻

竖着拿的时候,整张幻灯片会自动转过来,字大一倍;把手机横过来也一样能看。

点右半边或往上滑是下一页,点左半边回上一页。屏幕底下那条里有缩略总览和讲者备注。

或者读这一章的正文 →