Transformer Attention 机制入门:从直觉到公式
一句话理解 Attention 让模型在处理一个 token 时, 按需"查阅"序列里所有其他 token ,并按相关性强弱分配注意力权重——这一步替代了 RNN 串行传递信息的方式,让远距离 token 之间可以一步直达。 --- 生活例子:在一间嘈杂的咖啡馆里听人说话 想象你在咖啡馆听朋友讲一段故事,背景有 6…
一句话理解
Attention 让模型在处理一个 token 时, 按需"查阅"序列里所有其他 token ,并按相关性强弱分配注意力权重——这一步替代了 RNN 串行传递信息的方式,让远距离 token 之间可以一步直达。
---
生活例子:在一间嘈杂的咖啡馆里听人说话
想象你在咖啡馆听朋友讲一段故事,背景有 6 个人同时在聊天。朋友讲到"他"的时候,你需要知道"他"指的是谁。
Query(查询) :你脑子里那个悬而未决的问题——"这里的'他'是谁?"
Key(键) :故事里之前出现的每个人名,像图书馆书脊上的标签,告诉你"我能匹配哪类问题"。
Value(值) :一旦匹配上,每个名字背后携带的实体信息(身份、关系、状态)。
你不会平等地听所有人说话——你把"注意力"集中在和"他"最相关的那个人名上,并按相关程度打分。这就是 attention。
---
Query / Key / Value 的直观含义
角色 是什么 类比 维度
--- --- --- ---
Q 当前 token 发出的"提问向量" 我想找什么 $(n, d_k)$
K 每个位置的"标签向量" 我能提供什么 $(n, d_k)$
V 每个位置携带的"信息向量" 我实际提供的内容 $(n, d_v)$
三者都由同一个输入 $X$ 经过三个不同的可学习权重矩阵 $W^Q, W^K, W^V$ 线性投影得到,这是 attention 拥有强大表达力的关键: 同一个语义空间被投影成三种角色 。
---
Scaled Dot-Product Attention 公式
逐步拆解:
$QK^\top$:用点积衡量每对 token 的相似度,得到 $n \times n$ 的相关性矩阵。
除以 $\sqrt{d_k}$ (scaling) :维度越高,点积方差越大,softmax 容易把所有权重压到一个 token 上(梯度消失)。除以 $\sqrt{d_k}$ 把方差拉回 1,稳定训练。原论文给出的经验值就是 $\sqrt{d_k}$。
softmax(按行) :把每一行分数变成概率分布 $\alpha_{ij}$,所有权重和为 1,这就是"注意力分配"。
乘以 $V$ :用权重对所有 value 做加权求和,得到每个位置的新表示。
这就是 scaled dot-product 的全部故事: 相似度打分 → 归一化 → 加权聚合 。
紧凑图解流程
---
Self-Attention vs Cross-Attention
维度 Self-Attention Cross-Attention
--- --- ---
Q 来源 当前序列的某个位置 解码器 当前位置
K, V 来源 同一个序列 的其他位置 编码器 输出
用途 让序列内每个位置看到全序列上下文 让解码器在生成时"查阅"输入序列
出现位置 编码器、解码器都有 只在解码器
直觉上: self-attention 是"内部对话",cross-attention 是"和外部资料对话" 。Transformer 解码器在生成第 $t$ 个词时,通过 cross-attention 回头查编码器,把"我应该关注输入的哪一部分"这个决策交由学习得到的 $W^Q$、$W^K$、$W^V$ 自动完成。
---
Multi-Head Attention:多角度观察
单头 attention 只能学到一种"相关性模式",但语言里有多种关系需要捕捉(主谓、指代、并列、修饰等)。Multi-Head 的做法是:
把 $d_{\text{model}}$ 拆成 $h$ 份,每份独立做 attention。
不同的 head 学会关注不同子空间——一个可能抓语法,一个可能抓共指,一个可能抓长距离依赖。
最后拼接回 $d_{\text{model}}$ 维,过一层线性投影 $W^O$ 融合。
直觉 :Multi-Head 不是"多个模型投票",而是"同一序列在多个语义频道上被同时观察"。
---
Masked Attention:让模型"看不到未来"
在解码器训练时,第 $t$ 个位置不能看到 $t 1$ 之后的 token,否则就是"作弊"。
实现方式很简洁——在 softmax 之前,把要屏蔽的位置加上一个极大的负数(通常是 $-\infty$):
softmax 后,被屏蔽的位置权重严格为 0。这种 mask 叫 causal mask 或 look-ahead mask ,保证自回归生成的合法性。
---
Softmax 归一化的直觉
为什么要用 softmax,而不是直接用原始点积做加权?
可解释性 :权重变成概率,可以直接说"这个位置 70% 的注意力在主语上"。
梯度友好 :把无界分数压到 $(0,1)$,避免数值爆炸。
竞争机制 :softmax 让高分的更突出,低分的被压扁,实现"赢者通吃"——但因为有平滑性,梯度仍可流动。
可加性 :权重和为 1,加权平均是凸组合,数值稳定。
一个常见误区:softmax 不是"算概率",而是 把任意实数向量映射成单纯形上的概率分布 ——在这里它顺带完成了"归一化 竞争 平滑"三件事。
---
Transformer Attention vs RNN
维度 RNN Transformer Attention
--- --- ---
信息传递路径 沿时间步串行,长度 $O(n)$ 任意两位置一步直达,$O(1)$
长距离依赖 梯度易消失/爆炸 直接通过 $\alpha_{ij}$ 传递
并行性 必须按时间步顺序算 整序列可并行
计算复杂度 $O(n \cdot d^2)$(逐时间步) $O(n^2 \cdot d)$(自注意力的 $n^2$ 项)
内存 隐藏状态,常驻显存 需存 $n \times n$ 注意力矩阵
位置信息 天然有序 需要额外 position encoding
核心取舍 :RNN 用"顺序归纳偏置"换长序列的线性复杂度;Transformer 用"全连接注意力"换远距离依赖和并行性。Attention 的 $O(n^2)$ 在长序列下成为瓶颈,这是后来 Longformer、Linformer、FlashAttention、线性 attention 等优化的出发点。
---
自测题(8 道)
Q1. Q、K、V 一定来自不同输入吗?
答 :不一定。Self-attention 中三者都来自同一序列;Cross-attention 中 Q 来自解码器,K/V 来自编码器。Q/K/V 的来源取决于 attention 的角色,不要求物理上不同。
Q2. 为什么要除以 $\sqrt{d_k}$?
答 :当 $d_k$ 较大时,$QK^\top$ 的方差会随 $d_k$ 线性增长,导致 softmax 输入过大,梯度接近 0。除以 $\sqrt{d_k}$ 把方差拉回 1,稳定训练。原论文(Vaswani et al., 2017)给出了这一推导。
Q3. Multi-Head Attention 中,头数 $h$ 越多越好吗?
答 :不是。$h$ 增大时,每头维度 $d_k d_{\text{model}}/h$ 相应减小,单头表达能力下降;且增加显存与算力开销。需要在表达力和效率间权衡,实践中常取 $h 8$ 或 $16$。
Q4. 训练时使用 mask,推理时还需要吗?
答 :需要。推理是自回归生成,每一步仍然只能看到已生成的 token,否则会"预知未来"导致生成崩塌。Mask 不是训练专属技巧,而是自回归结构的内在约束。
Q5. Softmax 的输出一定是稀疏的吗?
答 :不一定。Softmax 天然给所有位置非零权重,只有当某个分数远大于其他时,才会出现"近似 one-hot"的近稀疏现象。这正是温度参数或 attention dropout 调控的对象。
Q6. Attention 权重 $\alpha_{ij}$ 的大小说明什么?
答 :它表示位置 $i$ 在形成新表示时,从位置 $j$ 提取了多少信息。数值大说明 $j$ 对 $i$ 的预测/编码"贡献大",但不直接等于因果关系——attention 不是解释性指标,需谨慎使用。