注意力机制:让神经网络学会“看重点”
如果你刚开始学习深度学习,第一次听到“注意力机制”(Attention Mechanism)时,可能会觉得这个名字有些抽象。
它听起来像心理学概念,但在深度学习里,注意力机制其实是在解决一个非常朴素的问题:
当信息很多时,模型应该重点关注哪些部分?
人类在处理信息时并不会平均关注所有东西。比如你在一张照片里找朋友,你不会认真分析画面中的每一棵树、每一块地砖,而是会快速把注意力放在人脸、衣服、姿态这些关键信息上。
注意力机制做的事情也类似:它让模型在处理输入时,不是平均对待所有信息,而是根据当前任务,动态决定哪些信息更重要。
从一个生活例子理解注意力
假设你正在查资料,问题是:
Transformer 是什么?
现在你面前有几段文字:
1. Transformer 是一种深度学习模型结构。
2. 今天的天气很好。
3. 注意力机制是 Transformer 的核心组成部分。
4. 我晚上吃了面条。
显然,第 1 段和第 3 段更有用,第 2 段和第 4 段几乎无关。
如果让模型回答“Transformer 是什么”,它也应该更关注第 1 段和第 3 段,而不是平均看待所有句子。
注意力机制的核心思想就是:
根据当前问题,给不同信息分配不同权重。
如果某段信息重要,权重大一些;如果不重要,权重小一些。
注意力机制到底在算什么?
注意力机制通常可以分成三类角色:
| 名称 | 英文 | 直观含义 |
|---|---|---|
| 查询 | Query | 我现在想找什么 |
| 键 | Key | 每个信息用来被匹配的特征 |
| 值 | Value | 真正要取出来的信息内容 |
可以用“查资料”来类比:
- Query:我想知道“Transformer 是什么”
- Key:每段资料的主题或关键词
- Value:每段资料的具体内容
模型会拿 Query 去和每个 Key 比较,看哪个 Key 更匹配当前 Query。匹配程度越高,对应的 Value 权重就越大。
最后,模型把所有 Value 按权重加权求和,得到最终结果。
可以写成:
其中:
- \(q\) 是 Query;
- \(k_i\) 是第 \(i\) 个 Key;
- \(v_i\) 是第 \(i\) 个 Value;
- \(\alpha_i\) 是第 \(i\) 个 Value 的权重。
权重通常由下面这个过程得到:
这里的 \(\text{score}(q,k_i)\) 表示 Query 和 Key 的匹配程度。
一个更简单的数值例子
假设现在有三个信息:
A:和问题非常相关
B:有一点相关
C:几乎无关
模型计算出的注意力权重可能是:
A:0.7
B:0.2
C:0.1
最后输出就是:
这表示模型主要使用 A 的信息,同时参考一点 B,几乎不看 C。
这就是注意力机制最直观的含义:
不是只选一个信息,也不是平均看所有信息,而是按重要程度加权汇聚。
注意力机制和普通加权平均有什么不同?
从形式上看,注意力机制确实像加权平均。
普通平均是:
每个输入的权重都一样。
注意力机制是:
每个输入的权重不同。
更关键的是,注意力权重 \(\alpha_i\) 不是人为固定的,而是模型根据当前 Query 和每个 Key 动态计算出来的。
也就是说,注意力机制不是简单地“加权平均”,而是:
根据当前任务动态生成权重的加权平均。
这就是它比普通池化或平均操作更灵活的地方。
为什么要用 softmax?
注意力权重通常会经过 softmax。
softmax 的作用是把一组分数变成一组概率形式的权重。
比如模型算出三个相关性分数:
[3.0, 1.0, 0.2]
经过 softmax 后可能变成:
[0.80, 0.11, 0.09]
这样有两个好处:
- 每个权重都大于 0;
- 所有权重加起来等于 1。
也就是说,softmax 后的权重可以理解为“注意力分配比例”。
点积注意力:最常见的注意力计算方式
在 Transformer 中,常用的是点积注意力。
如果 Query 和 Key 都是向量,可以用点积衡量它们的相似程度:
如果两个向量方向越相似,点积通常越大,说明它们越匹配。
Transformer 里使用的是缩放点积注意力:
其中:
- \(Q\) 是所有 Query 组成的矩阵;
- \(K\) 是所有 Key 组成的矩阵;
- \(V\) 是所有 Value 组成的矩阵;
- \(d\) 是 Key 的维度。
为什么要除以 \(\sqrt{d}\)?
因为当向量维度很高时,点积的数值可能变得很大,softmax 后会变得过于极端:最大的权重接近 1,其余接近 0。这样训练可能不稳定。
除以 \(\sqrt{d}\) 是为了把分数缩放到更合适的范围。
自注意力:让序列内部互相看
自注意力(Self-Attention)是注意力机制的一种重要形式。
它的特点是:
Query、Key、Value 都来自同一个序列。
比如一句话:
我 喜欢 深度学习
在自注意力中,每个词都会去关注这句话里的其他词。
例如“喜欢”这个词,可以关注:
我
喜欢
深度学习
这样,“喜欢”的表示就不再只是它自己的词向量,而是融合了上下文的信息。
这和 RNN 的思路不一样。
RNN 是按顺序处理:
我 → 喜欢 → 深度学习
而自注意力可以让任意两个位置直接建立联系:
我 ↔ 深度学习
喜欢 ↔ 深度学习
我 ↔ 喜欢
这使模型更容易捕捉长距离依赖。
自注意力为什么需要位置编码?
自注意力有一个明显问题:它本身不知道顺序。
比如下面两个句子:
我 爱 你
你 爱 我
它们包含完全相同的词,但顺序不同,意思也不同。
如果模型只看词本身,而不知道词的位置,就很难区分这两句话。
所以 Transformer 会给每个 token 加上位置编码:
其中:
- \(E(x_t)\) 表示 token embedding,也就是“这个词是什么”;
- \(P_t\) 表示 position encoding,也就是“这个词在第几个位置”。
相加之后,模型看到的是:
这个词是什么 + 它在什么位置。
这让自注意力模型具备了处理序列顺序的能力。
查看之前写的关于位置编码的文章
多头注意力:从多个角度看问题
单个注意力头只能从一个角度计算注意力。
但语言中的关系往往很复杂。
比如一句话中,模型可能需要同时关注:
- 主语和谓语的关系;
- 代词和它指代对象的关系;
- 当前词和上下文主题的关系;
- 远距离词之间的依赖关系。
多头注意力(Multi-Head Attention)的想法就是:
不只做一次注意力,而是并行做多次注意力,让不同的头从不同角度观察信息。
可以写成:
然后把多个头拼接起来:
直观理解:
一个头关注语法关系;
一个头关注语义关系;
一个头关注长距离依赖;
一个头关注局部搭配。
这些头的结果合并后,模型就能得到更丰富的表示。
注意力机制为什么重要?
注意力机制重要,主要有几个原因。
-
它让模型可以动态选择重点。
以前很多模型会把整个输入压缩成一个固定向量,这容易丢失信息。注意力机制允许模型在不同位置关注不同输入部分。 -
它改善了长距离依赖问题。
在 RNN 中,远距离信息需要经过很多时间步传递,容易衰减。而自注意力可以让任意两个位置直接交互。 -
它适合并行计算。
RNN 必须按顺序处理序列,而自注意力可以同时计算所有位置之间的关系,因此更适合 GPU 并行训练。 -
它具有较好的可解释性。
虽然不能把注意力权重完全等同于人类解释,但注意力权重至少可以帮助我们观察模型大概关注了哪些位置。
注意力机制是不是只用于自然语言处理?
不是。
注意力机制最早在机器翻译中大放异彩,后来成为 Transformer 的核心。但现在它已经被广泛用于很多领域:
- 自然语言处理:翻译、摘要、问答、对话生成;
- 计算机视觉:图像分类、目标检测、图像生成;
- 语音处理:语音识别、语音合成;
- 多模态任务:图文匹配、视觉问答、图像描述生成;
- 推荐系统:用户兴趣建模;
- 时间序列预测:关注关键时间点。
只要任务中存在“很多信息里哪些更重要”的问题,注意力机制就可能发挥作用。
注意力机制和 Transformer 的关系
注意力机制不是 Transformer 本身。
更准确地说:
注意力机制是一种计算模块,Transformer 是一种主要由注意力模块搭建起来的模型架构。
Transformer 使用了多头自注意力、位置编码、前馈网络、残差连接和层归一化等组件。
其中注意力机制是最核心的部分,但不是全部。
可以这样理解:
注意力机制:一种让模型选择重点的计算方法
Transformer:大量使用注意力机制构建起来的深度学习架构
GPT、BERT、T5 等模型都属于 Transformer 家族,但它们使用 Transformer 的方式不同。
初学者容易误解的几个点
-
注意力机制一定比 RNN 好
注意力机制在很多任务中表现很好,但它并不是所有情况下都绝对优于 RNN。
对于短序列、小模型、资源受限场景,RNN 仍然有应用价值。 -
注意力只是在选最大值
注意力不是简单选一个最大值,而是对多个 Value 做加权求和。
它可以同时关注多个位置,只是权重不同。 -
自注意力天然知道顺序
自注意力本身不知道顺序,所以 Transformer 需要位置编码。
查看之前写的关于位置编码的文章
用一句话总结注意力机制
注意力机制可以用一句话概括:
根据当前需求,计算每个信息的重要程度,再按重要程度汇聚信息。
如果用更工程化的语言说,就是:
Query 和 Key 计算匹配分数,softmax 得到权重,再用权重对 Value 加权求和。
公式是:
其中:
这就是注意力机制的核心。
结语
注意力机制之所以重要,不只是因为它带来了 Transformer,更因为它提供了一种非常通用的建模思想:
模型不必平均处理所有信息,而是可以根据当前任务动态选择重点。
这种思想非常符合人类处理信息的方式,也非常适合复杂数据场景。
从机器翻译到大语言模型,从图像识别到多模态理解,注意力机制已经成为现代深度学习中最基础、最重要的模块之一。
对于入门者来说,刚开始不必急着掌握所有公式和实现细节。先理解这件事就够了:
注意力机制的本质,是让模型学会“看哪里更重要”。

浙公网安备 33010602011771号