第四章 注意力机制(Attention):模型如何“看懂上下文”?
最近抽空复盘梳理了这些年来零零散散积累的 AI 知识。上一章我们了解到,Transformer 实际上完成了三项关键操作:将文字转换为 Token(第二章所述),将 Token 转化为向量(Embedding),以及让模型在生成每个词时具备“回顾前文”的能力。
但问题随之而来——
人类阅读一句话时,大脑会自动执行一项任务:记住关键信息,过滤掉无关内容。例如看到“小明昨天去北京出差,今天他回来了”,我们几乎瞬间就能判断“他”指的是小明。这是因为大脑自动完成了“关联”过程。Transformer 中的注意力机制,本质上就是在模拟这一机制。
4.1 先举个例子~
举个日常场景中的例子。
图书馆找书
假设我们去图书馆找一本书——比如《Ja va并发编程实战》。我们会怎么做?肯定不是把整座图书馆的书通读一遍,而是:快速记住书名,定位到对应的技术分类(Ja va/并发),忽略无关书籍(小说、历史)。然后发现某排书架上正好有相关类别,于是集中注意力,主要在那排书架上搜寻。
注意力机制做的事情完全一致:它并非“平均看待所有信息”,而是有侧重地分配注意力权重。
4.2 再请出我们的小明
继续沿用经典例句:句子是“小明昨天去北京出差,今天他回来了”。现在模型要预测“他”指代的是谁。
模型会执行以下操作:将前面的所有 Token 全部提取出来——
小明 昨天 去 北京 出差 今天
然后提出一个问题:“哪个 Token 与当前预测最相关?”
用人类可理解的方式模拟一下:
| Token | 相关性 |
|---|---|
| 小明 | ⭐⭐⭐⭐⭐ |
| 昨天 | ⭐⭐ |
| 去 | ⭐ |
| 北京 | ⭐⭐ |
| 出差 | ⭐⭐ |
| 今天 | ⭐ |
模型并不会真正“理解”语义,但它会完成一个类似的计算:评估每个 Token 对当前预测的“贡献程度”,然后让贡献大的 Token 产生更大的影响。
4.3 Attention 的核心思想
注意力机制的本质用一句话概括就是:每个词在生成时,都要询问“上下文里哪些词更重要”,然后依据重要性加权融合信息。
注意这句话:当前 Token(正在预测的词)会向前面所有 Token 发出查询(Query),比对相关性(Key),然后最相关的 Token 会被赋予更高权重,最终加权汇总出 Value。
核心机制参见下图:
image
4.4 Q、K、V 按角色理解
现在终于可以引入 QKV 了,不过我们暂时不涉及数学公式,而是从角色视角来理解。
用一个简单的“会议室发言”理解 QKV
想象一个会议场景,每个人拥有三种属性:
① Key(身份标签)
每个人都进行自我介绍:小明是后端工程师,小红是产品经理,小李是数据库专家。
② Query(提问者)
此时你抛出一个问题:“数据库最近出现慢查询,谁有处理经验?”这个问题就是 Query。
③ Value(真正的信息)
当匹配成功时,比如小李回答“我上周刚处理过”,他所说的内容就是 Value。
因此,注意力机制的计算流程可以简化为:先用 Query 去匹配所有 Key,得到匹配分数,再以该分数作为权重去加权汇总 Value。
4.5 回到 Transformer
回到刚才那句话:“小明昨天去北京出差,今天他回来了”。模型内部实际上执行了以下步骤:
步骤1:每个 Token 生成 Q/K/V
例如:
| Token | Q | K | V |
|---|---|---|---|
| 小明 | 查询能力 | 身份标签 | 信息内容 |
| 北京 | 查询能力 | 身份标签 | 信息内容 |
(此处不关注具体维度数值)
步骤2:计算匹配度
“他”会向所有 Token 提问:“谁和我最相似?”结果如下:
| Token | 匹配分数 |
|---|---|
| 小明 | 0.92 |
| 北京 | 0.31 |
| 昨天 | 0.10 |
步骤 3:加权汇总信息
模型不会只选取一个 Token,而是将所有 Token 的信息按权重累加:
0.92 × 小明的信息 + 0.31 × 北京的信息 + 0.10 × 昨天的信息
最终得到一条融合了上下文的向量,用于准确预测“他”的含义。
4.6 Attention 的本质总结
如果只记住一句话:注意力机制就是让模型在生成每个词时,能够“回溯”整个上下文,并动态决定哪些词更重要。
4.7 为什么 Attention 这么重要?
在 Transformer 出现之前,主流模型是 RNN 和 LSTM。它们的核心缺陷是:句子越长,前面的信息就越容易被遗忘。例如“小明昨天去北京出差,今天他回来了”——如果句子特别长,模型处理到后面就容易忘记“小明”是谁。注意力机制完美地解决了这个问题:无论句子多长,每个词都可以直接访问前面的所有词,消除了距离限制。
4.8 Attention 革命性的变化
注意力机制带来了一项革命性的变化:让模型不再按顺序“逐步读取”,而是能够“跳跃式”关注任意位置。
你可以这样理解:传统模型是“逐字串行处理”,而注意力机制下的模型拥有“并行全局视野”。
4.9 多头 Attention(多头注意力机制)
你可以将其理解成:一个模型派出多个“专家”,每个专家关注不同的维度。例如对于句子“小明昨天去北京出差,今天他回来了”,不同的注意力头会分别关注:语义相似性、语法结构、指代关系、时间信息等。因此,模型并非单打独斗,而是多个“观察者”同时工作,最后将他们的结论融合起来。
4.10 本章核心总结
本章最重要的内容可以归纳为四点:
① Attention 在做什么?
每个词生成时,都要扫描一遍上下文,找出最相关的词,然后重点参考它们的信息。
② QKV 是什么?
Q:我正在问什么
K:你代表什么
V:你能提供什么信息
③ Attention 的本质
加权求和,权重由匹配度(Query 与 Key 的相似度)决定。
④ 为什么它重要?
解决了长距离依赖问题,让模型可以并行计算,并且能够捕获全局关系。
下一章预告
下一章我们会讲解 Transformer 另一个极其核心的模块:残差连接与层归一化。它们能让模型堆叠得更深,同时不会发生性能退化。
