跳到主要内容

注意力机制

假设两份信息分别用下面两个向量表示:

v1=[2,0],v2=[0,4].\mathbf{v}_1=[2,0],\quad \mathbf{v}_2=[0,4].

各取一半再相加,就得到

12[2,0]+12[0,4]=[1,2].\tfrac12[2,0]+\tfrac12[0,4]=[1,2].

那么,各取多少由什么决定?注意力根据内容计算这些权重,不必始终各取一半。

算出两份信息的权重

要混合的两个向量称为(value)。为了确定它们的权重,先引入查询(query),也就是用来检索信息的向量。

每份值还配有一个(key),用来与查询比较、计算匹配分数。本例取

q=[1,0],k1=[1,0],k2=[0,1],\mathbf{q}=[1,0],\quad \mathbf{k}_1=[1,0],\quad \mathbf{k}_2=[0,1],

先只用 query 和 key 算权重。两个点积分别是 qk1=1\mathbf q^\top\mathbf k_1=1qk2=0\mathbf q^\top\mathbf k_2=0。key 有两个分量,除以维数的平方根 2\sqrt2 后,分数为 [1/2,0][0.707,0][1/\sqrt2,0]\approx[0.707,0]

Softmax 把分数转换为非负且总和为 1 的权重:先对分数取指数,再除以总和。

α1=e1/2e1/2+10.67,α2=1e1/2+10.33.\alpha_1=\frac{e^{1/\sqrt2}}{e^{1/\sqrt2}+1}\approx0.67, \qquad \alpha_2=\frac{1}{e^{1/\sqrt2}+1}\approx0.33.

接着才混合 value:每个权重乘以同一位置的 value,再把结果相加。用舍入后的权重计算,输出约为

0.67[2,0]+0.33[0,4]=[1.34,1.32].0.67[2,0]+0.33[0,4]=[1.34,1.32].

第一项更匹配,但输出仍包含第二个 value。温度、score 差异、重复 key 和 mask 都会改变混合;“关注了一个位置”通常不是二值事实。

在下图中改变 q\mathbf q 的任一分量,key 和 value 保持不变。取 q=[0,0]\mathbf q=[0,0] 时,两个分数都是零,权重为 [1/2,1/2][1/2,1/2],输出为 [1,2][1,2];取 [0,1][0,1] 时,两个权重对调,输出约为 [0.66,2.68][0.66,2.68]。分数决定混合比例,value 决定混合的内容。

xyv₁ = [2, 0]v₂ = [0, 4]O

k1 = [1, 0]得分 0.707

权重 67.0%

k2 = [0, 1]得分 0.000

权重 33.0%

输出 O: [1.340, 1.321]得分为 q · kᵢ / √2,经 softmax 得到两个总和为 1 的权重。O = w₁v₁ + w₂v₂ 是两份值向量的加权混合。改变 q,O 就沿着 v₁ 与 v₂ 之间的线段移动。

推广到任意多组 key/value,同样的计算写成

Attention(q,K,V)=iαivi,αi=expa(q,ki)jexpa(q,kj).\operatorname{Attention}(\mathbf{q},K,V) =\sum_i\alpha_i\mathbf{v}_i, \qquad \alpha_i=\frac{\exp a(\mathbf{q},\mathbf{k}_i)} {\sum_j\exp a(\mathbf{q},\mathbf{k}_j)}.

Query、key、value 是计算角色,不是天然语义标签。它们通常由输入经过不同学习投影得到;value 也不必与 key 相同。根据内容计算权重、再混合值的这种可微运算称为内容寻址。

两种常见打分

加性注意力可写为

a(q,k)=vtanh(Wqq+Wkk),a(\mathbf{q},\mathbf{k}) =\mathbf{v}^{\top}\tanh(W_q\mathbf{q}+W_k\mathbf{k}),

缩放点积注意力为

a(q,k)=qkdk.a(\mathbf{q},\mathbf{k}) =\frac{\mathbf{q}^{\top}\mathbf{k}}{\sqrt{d_k}}.

若 query 与 key 的各坐标相互独立、均值为零且方差为 1,未经缩放的点积方差为 dkd_k,标准差为 dk\sqrt{d_k},Softmax 更容易进入饱和区域;dk\sqrt{d_k} 是控制尺度的一种设计,不是所有 attention 的普遍定律。

矩阵形式、形状和 mask

QRnq×dkQ\in\mathbb{R}^{n_q\times d_k}KRnk×dkK\in\mathbb{R}^{n_k\times d_k}VRnk×dvV\in\mathbb{R}^{n_k\times d_v}

A=softmax ⁣(QKdk+M),O=AV.A=\operatorname{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}+M\right), \qquad O=AV.

因此 AA 的形状是 nq×nkn_q\times n_kOOnq×dvn_q\times d_v。mask 应在 Softmax 前作用:

  • padding mask 排除占位元素;
  • causal mask 排除未来位置;
  • 结构 mask 可限制局部、图或块状连接。

采用 -\infty 加性掩码时,整行被屏蔽会使所有 logits 都变成 -\infty,普通 Softmax 无法定义概率分布。应查看所用 API 的行为并明确处理这类行,不能假设各实现都会返回同一个值。只要允许位置的 Q/K/V 表示保持不变,改变被屏蔽 token 的内容就不应改变未被屏蔽的输出。

沿 key 维归一化

AA 中的 Softmax 分别沿每一行,也就是 key 维计算。加性掩码对允许连接取 Mij=0M_{ij}=0,对禁止连接取 -\infty。三个位置的因果序列中,第一行只能看 key 一,第二行能看 key 一和二,第三行能看全部三个。若允许位置的分数均为零,三行权重依次为 [1,0,0][1,0,0][1/2,1/2,0][1/2,1/2,0][1/3,1/3,1/3][1/3,1/3,1/3]。当当前位置的输入用于预测下一个 token 时,对角线允许连接。原始 Transformer采用的就是这种约定。

key-padding mask 不会自动消除填充位置的 query 输出,损失或后续池化还须排除这些输出。不同 API 的布尔掩码约定不同,要确认 True 表示允许还是禁止。改变被屏蔽 token 不影响输出这一测试,前提是允许位置的 Q/K/V 保持不变:上游操作不能已经把被屏蔽的内容混入这些表示。

Self、Cross 与 Multi-head

  • Self-attention:Q/K/V 来自同一组表示,但投影参数可不同;
  • Cross-attention:query 来自一侧,key/value 来自另一侧;
  • Multi-head attention:在多个投影子空间并行执行 attention,再拼接并投影。

多头提供多个计算通道,但不能保证每个 head 自动对应“语法”“指代”等稳定人类概念。head 可以冗余,也可能在重新参数化后改变而保持输出接近。

现代序列模型中的注意力并非从 Transformer 才开始。Bahdanau 等人在 RNN encoder–decoder 中,让每个解码步从多个 encoder state 构造不同 context;Luong 等又比较了 global/local 形式。Transformer 后来把 self-attention 提升为主要层内操作。

现代效率设计不是一回事

全连接 self-attention 形成 n×nn\times n score,在 head 维数固定时,朴素实现的时间和中间显存随序列长度平方增长。常见改动解决不同瓶颈:

设计改了什么没自动解决什么
FlashAttention用分块与 IO-aware kernel 计算精确 attention,避免保存完整中间矩阵算术量仍通常为平方级;依赖硬件/kernel
MQA多个 query head 共享一组 K/V head可能损失容量;训练和兼容性仍要验证
GQA多个 query head 分组共享较少 K/V head只是 cache/质量折中,不是新打分函数
sliding-window / sparse限制每个位置可连接的范围被排除位置无法直接访问,需跨层传播
linear/kernel attention重写或近似聚合顺序归一化、数值与质量不一定等价于 Softmax

MQA/GQA 主要减少自回归解码的 K/V cache 和内存带宽;它们不会减少 query head 数,也不能从名字推断质量。报告时应写出 query head、K/V head、head dimension、窗口、dtype 和 kernel。

当任务只需固定状态的流式更新时,RNN/状态空间方法可能更合适;当局部结构很强时,卷积可能更节省数据和计算。attention 不是所有关系的默认答案。

注意力权重能解释什么

权重确实描述了某次前向计算中的路由系数,但它通常不足以证明因果重要性:

  • 不同权重可能产生相似输出;
  • value 与后续层会改变最终影响;
  • 梯度、反事实替换和干预可能给出不同排序;
  • 极尖或极平的分布都不自动代表好坏。

“Attention is not Explanation” 展示了把权重直接当解释的问题;后续反驳指出,在明确定义诊断目标和反事实测试时,attention 仍可能提供信息。合理结论是:权重可以成为诊断证据,但应与删除、替换或其他干预及任务验证结合,不能单独充当因果解释。

与其他笔记的连接

权重归一化使用的运算与 Softmax 回归相同,但这里的权重用来混合 value,不是在预测类别标签。Transformer解释注意力如何与位置信息、残差连接、归一化和前馈层组合。注意力变体与 KV Cache则沿着同一套 Q/K/V 形状,继续说明自回归推理与内存成本。

本文采用序列建模中的 Q/K/V 表述,因而偏重 NLP/Transformer 传统;视觉、集合、图和更早的统计核方法只覆盖到概念边界。

探索关联打开关联网络