注意力机制
每个位置都能直接「看到」其他所有位置,并按相关性动态分配注意力
定义
注意力机制让序列中的每个位置按相关性,动态地查看其他位置并对它们加权求和。它由 Query、Key、Value 三组向量构成:Query 与所有 Key 做相似度打分,经 softmax 归一化成权重,再对 Value 加权求和,得到当前位置的新的表示。
直观理解
读阅读理解时,碰到「它」这个代词的瞬间,你会自动回看前文,去找「它」指代的动物,并让那句话在心里获得更高权重。注意力就是这种「回头看、按需分配关注度」的机制,只不过对序列中所有位置同时进行。会议室里你(Query)根据每个人(Key)的发言是否切题决定听谁,最后脑中留下的是加权后的内容(Value)。
一个注意力头的权重矩阵:行是 Query(当前词),列是 Key(被看的词),每行和为 1;颜色越深表示关注度越高
真实句子的自注意力分配:代词 "it" 那个 Query 行在 "animal" 列上出现明显尖峰,正是模型完成指代消解的痕迹
工作原理
- 01
生成 Q、K、V
把每个 token 的向量分别乘上三个可学习矩阵 W_Q、W_K、W_V,得到 Query(我在找什么)、Key(我能提供什么)、Value(我实际携带的信息)。同一序列自我注意时三者同源,交叉注意时 Query 来自解码端、Key/Value 来自编码端。
- 02
缩放点积打分
用 Query 与每个 Key 做点积衡量相似度,再除以 √d_k 做缩放。除以维度平方根是必要的:维度一大,点积方差随之增大,softmax 会被推到饱和区,梯度几乎消失。
- 03
softmax 归一化成权重
把每个 Query 得到的一排分数用 softmax 变成和为 1 的权重分布。解码器里还要先把未来位置的分数置为 −∞,保证模型生成时不能偷看后面的词(因果掩码)。
- 04
对 Value 加权求和
用权重对 Value 加权求和,得到当前位置的输出。多个注意力头并行执行这一过程,各自学到不同的关注模式——有的盯语法依存,有的盯指代,有的盯局部邻接。
关键公式
Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V应用场景
- 机器翻译的词对齐:源语言与目标语言词之间自动学到对应关系
- 长文与文档建模:让远距离的指代与依赖无需逐字传递即可关联
- 跨模态对齐:图像 patch 与文本 token 互相检索(如 CLIP)
- 可解释性分析:可视化注意力权重,观察模型在「看」哪些位置
常见误区
- 注意力权重高不等于因果解释。它只说明当前层、当前头的一次加权,不能直接读作「模型因为看这里才做出决定」,多层的复合效应才是真正的依据。
- 多头不是为了算得更快,而是为了在不同的子空间里并行捕捉多种关系。砍掉头数往往直接损伤语言能力。
- 计算与显存随序列长度呈平方增长。上下文翻一倍,注意力矩阵的规模变成四倍,这也是长上下文昂贵、需要稀疏或线性注意力的根本原因。
关键术语
- Query / Key / Value
- 注意力里「查询、索引、内容」三组向量
- 自注意力
- Q/K/V 都来自同一序列的注意力
- 交叉注意力
- Q 来自一侧序列、K/V 来自另一侧
- 多头注意力
- 并行多组注意力,各学一种关注模式