深色模式
02 · 注意力与 Transformer:模型怎么「看上下文」
学完你能说出:
- 注意力就是「处理每个词时,决定该重点看句子里的哪些词」。
- Q、K、V 分别是什么(用「图书馆查书」讲清楚)。
- Transformer 为什么取代了 RNN:能并行、看得远。
先看地图
上一篇说模型「看完前文再猜下一个字」。这一篇讲怎么看。
本篇讲 4 个点:① 注意力在解决什么问题 → ② Q/K/V 怎么算出「看谁」 → ③ 多头注意力和位置编码 → ④ 为什么 Transformer 取代了 RNN。
一句话本质
注意力(Attention)= 给句子里每个词打一个「我该多关注你」的分数,再按分数把大家的信息加权混合。
生活类比:开会时听谁的
你在会上想搞清楚「这个方案谁负责」:
- 你不会平均听每个人说话,而是重点听项目经理和你的直属领导,其他人的话权重很低;
- 换个问题,比如「预算多少」,你会转而重点听财务。
注意力也是这样:同一个词,问的问题不同,关注的对象就不同。
一步步看:「它」指的是谁?
句子:「小猫没吃鱼,因为它饱了。」模型处理到「它」时,要搞清楚「它」指谁。
注意力给每个词打的权重(示意数字):小猫 0.62、鱼 0.18、吃 0.06……加起来等于 1。于是「它」的新表示里,大部分信息来自「小猫」。模型因此「理解」了它 = 小猫。
如果句子改成「小猫没吃鱼,因为它臭了」,权重就会偏向「鱼」。上下文决定意思,这正是注意力的价值。
分数是怎么算出来的:Q、K、V
用图书馆查书来理解。每个词都会生成三样东西:
| 名字 | 类比 | 作用 |
|---|---|---|
| Q(Query,查询) | 你手里的「借书需求」 | 我现在想找什么信息 |
| K(Key,键) | 每本书的「标签」 | 我能提供什么信息 |
| V(Value,值) | 书的「内容」 | 真正被取走的信息 |
计算分三步(用 2 个词的小例子):
- 算匹配度:拿「它」的 Q 和每个词的 K 做点积(对应位置相乘再相加)。假设「它·小猫」= 4,「它·鱼」= 1。
- 变成权重:用 softmax(把一组分数变成「都为正、加起来为 1」的比例)换算:4 和 1 → 约 0.95 和 0.05。
- 加权混合:新的「它」= 0.95 × 小猫的 V + 0.05 × 鱼的 V。
公式写出来就是:
Attention(Q, K, V) = softmax( Q·Kᵀ / √d ) · V√d(d 是向量长度)用来把分数缩小一点,原因见下面「为什么」。
为什么这么设计
为什么要注意力,而不是平均看所有词?
- 问题:平均混合会把关键信息稀释掉。「它」要靠「小猫」来定义,跟「因为」「了」关系不大。
- 方案:让模型自己学会给每个词打分,相关的分高、无关的分低。
- 好处:同一个词在不同上下文里能得到不同的含义;而且离得很远的词也能直接关注到。
一句话答法
因为不同词对理解当前词的贡献不同,注意力让模型按相关程度加权混合信息,所以能处理指代、歧义这种依赖上下文的问题。
为什么要除以 √d?
- 问题:向量越长,点积的数值越大。数值太大时,softmax 会变得「一家独大」(比如 0.999 和 0.001),梯度几乎为 0,模型就学不动了。
- 方案:除以 √d,把分数拉回到合适的范围。
- 好处:训练更稳定。
一句话答法
防止向量维度大时点积过大,导致 softmax 饱和、梯度消失,起到稳定训练的作用。
为什么要「多头」注意力?
- 问题:一组 Q/K/V 只能学一种「关注方式」。但理解句子需要同时看多种关系:指代、语法、语义……
- 方案:同时开很多组(比如 8 组、32 组),每组叫一个头(head),各学各的关注方式,最后拼起来。
- 好处:一个头专门找指代,另一个头专门看搭配,信息更全面。
一句话答法
多头让模型在不同的子空间里同时学习多种关注关系,比单一的注意力表达能力更强。
为什么需要位置编码?
- 问题:注意力本身只看「谁和谁相关」,不管顺序。「狗咬人」和「人咬狗」在它眼里是同一堆词。
- 方案:给每个位置加一个位置编码(Positional Encoding),把「我是第几个词」的信息加进去。
- 好处:模型能区分词序。
一句话答法
因为注意力计算对顺序不敏感,必须额外注入位置信息,模型才能区分「狗咬人」和「人咬狗」。
为什么 Transformer 取代了 RNN?
RNN(循环神经网络) 是之前的主流做法:一个词一个词地顺序读,前面的信息靠一个「记忆」往后传。
| RNN | Transformer | |
|---|---|---|
| 怎么读 | 一个一个按顺序读 | 所有词同时看 |
| 能不能并行 | 不能,必须等前一个算完 | 能,GPU 一次算完 |
| 远距离关系 | 要传很多步,信息会衰减 | 任意两个词一步直达 |
一句话答法
RNN 必须顺序计算、远距离信息容易丢;Transformer 用注意力让任意两个词直接交互,并且可以并行训练,所以能把模型做大。
英文术语拆解
| 术语 | 拆开看 | 一句话意思 |
|---|---|---|
| Attention | 注意、关注 | 按相关程度给其他词打分并加权混合 |
| Self-Attention | self 自己 + attention | 自注意力:一句话内部的词互相关注 |
| Query / Key / Value | 查询 / 钥匙、键 / 值 | 「我要找什么」/「我有什么标签」/「我的内容」 |
| softmax | soft 柔和的 + max 最大值 | 把一组分数变成加起来为 1 的概率 |
| Multi-Head | multi 多 + head 头 | 多组注意力并行,各学一种关系 |
| Positional Encoding | positional 位置的 + encoding 编码 | 把「第几个词」的信息加进去 |
| Transformer | transform 变换 + -er 「…的东西」 | 以注意力为核心的模型结构,2017 年提出 |
| RNN | Recurrent 循环的 + Neural Network 神经网络 | 按顺序逐个处理词的旧结构 |
面试怎么问
Q:讲一下自注意力的计算过程。
每个 Token 通过三个矩阵得到 Q、K、V;用 Q 和所有 K 做点积得到相关性分数,除以 √d 缩放后过 softmax 得到权重,再用权重对 V 加权求和,得到这个 Token 融合了上下文的新表示。
Q:为什么要除以 √d?
维度大时点积方差大,softmax 会进入饱和区,梯度很小、训练不稳定。除以 √d 让分数的尺度和维度无关。
Q:Transformer 相比 RNN 的优势是什么?
一是可以并行计算,训练效率高;二是任意两个位置之间的路径长度为 1,长距离依赖更容易建模。代价是注意力的计算量随序列长度平方增长,所以上下文窗口有上限。
容易混的地方
- 注意力权重 ≠ 模型的「理解」:它是一种信息混合方式。说「模型关注了小猫」是方便理解的说法。
- Q、K、V 不是三份不同的输入:它们都由同一个词的向量,乘以三个不同的(训练出来的)矩阵得到。
- 上下文窗口有上限:注意力要算「每个词 × 每个词」,长度翻倍,计算量约变成 4 倍。
和其他知识的连接
- ← 来自 大模型在做什么:「看完前文再猜」靠的就是这里的注意力。
- → 影响 Embedding:每个词进注意力之前,先要变成向量。
- → 影响 Prompt 与采样参数:上下文窗口为什么有上限,源头在注意力的平方计算量。
自测 3 问
Q1:用「开会听谁的」类比,解释注意力在做什么。
点开看答案
开会时你不会平均听所有人,而是根据当前问题重点听相关的人。注意力也一样:处理每个词时,给句子里每个词打分,相关的权重高,再按权重把信息混合起来。问题不同,关注的对象就不同。
Q2:Q、K、V 分别是什么?用图书馆类比说一下。
点开看答案
Q 是「借书需求」(我想找什么),K 是每本书的「标签」(我能提供什么),V 是书的「内容」。用 Q 和每个 K 算匹配度 → softmax 变成权重 → 按权重把各本书的 V 加起来。
Q3:为什么注意力需要位置编码?
点开看答案
注意力只看词和词之间的相关性,对顺序不敏感,「狗咬人」和「人咬狗」算出来一样。加入位置编码,模型才知道每个词排在第几个。
✅ 验收清单
- 能用「它指谁」的例子,讲清注意力权重的作用
- 能用图书馆类比说出 Q、K、V 各自是什么
- 能说出注意力计算的三步:点积 → softmax → 加权求和
- 能讲清除以 √d、多头、位置编码各自解决什么问题(问题 → 方案 → 好处)
- 能对比 RNN 和 Transformer 的两个关键区别
下一步该懂什么
- 词是怎么变成向量的?向量之间怎么算「像不像」?→ Embedding:把文字变成坐标
- 想看原论文:Attention Is All You Need(2017),只读摘要和图 1 就够了。