用例子和自题解释 Transformer 如何使用 attention 学习文档
Transformer 中的 Attention:用例子和自测吃透核心机制 一句话先建立直觉 Attention 是一种"软邻居平均"算法:每个 token 发出一个 Query 去和序列里所有 token 的 Key 比相似度,softmax 把相似度变成权重,再用这些权重对 Value 做加权平均。据《从另一个视…
Transformer 中的 Attention:用例子和自测吃透核心机制
一句话先建立直觉
Attention 是一种"软邻居平均"算法:每个 token 发出一个 Query 去和序列里所有 token 的 Key 比相似度,softmax 把相似度变成权重,再用这些权重对 Value 做加权平均。据《从另一个视角看 Transformer》给出的"软 k-NN"框架,这正是注意力头的一种直观解释——可微分、考虑序列顺序的软邻居平均。
把它想成一句话: Query 在问"谁跟我最像",softmax 投票,邻居的 Value 们按票数加权汇总。
---
一、为什么需要 Attention:解决 RNN 的"长路径依赖"
在 RNN/LSTM 里,第 N 个位置要把信息传到第 1 个位置,必须走 N 步,路径越长信息损失越大。Transformer 用 self-attention 让序列内任意两个位置直接相连,路径长度都是 1。据知乎《经典精读:Transformer 模型和 Attention 机制》一文引述,其"核心思想"就是"使用 attention 机制,在一个序列的不同位置之间建立 distance 1 的平行关系,从而解决 RNN 的长路径依赖问题(distance N)"。
由此带来的两个性质:
并行计算 :所有位置的 Query/Key/Value 可以同时算,不需要像 RNN 那样一步步传递。
全局感受野 :每个位置都能看到整个序列。
---
二、QKV 到底从哪来:三步生成过程
设输入序列经过 embedding 得到向量矩阵 $X$,维度 $d {\text{model}}$。Transformer 用三个可学习的权重矩阵 $W^Q, W^K, W^V$ 把 $X$ 投影到三个不同空间:
直觉分工(综合知乎《动画详解 Transformer》一文关于 QKV 来自 $W q W k W v$ 三个矩阵的描述,以及《从另一个视角看 Transformer》给出的"软 k-NN"框架):
Query(问询) :当前 token 想知道"谁跟我相关"。
Key(索引) :每个 token 提供一个"我能被怎样检索到"的标签。
Value(内容) :被检索到时实际返回的信息。
注意 Q、K、V 来自同一个输入 X,所以这叫 self-attention ——序列自己检索自己。
---
三、Scaled Dot-Product Attention:完整公式
据《从另一个视角看 Transformer》和 deephub《Transformer 自回归关键技术》两篇可读正文一致的写法,最常见的缩放点积注意力为:
四步走(其中前三步来自《从另一个视角看 Transformer》"三步走"框架,第四步合并 softmax 与加权):
打分 :$Q K^\top$ 得到 $(n q \times n k)$ 的相似度矩阵。
缩放 :除以 $\sqrt{d k}$,避免 softmax 进入饱和区(见下文)。
掩码 :加上 $M$ 矩阵,0 表示允许,$-∞$ 表示屏蔽。
归一化 加权 :softmax 把分数变成权重,再乘 $V$ 得到输出。
为什么要除以 √d k?
据《从另一个视角看 Transformer》可读正文:"随机 d 维向量的点积会按 $O(\sqrt{d})$ 增长。不做缩放的话,softmax 就变成了胜者通吃(一个权重接近 1,其他都接近 0),梯度直接就消失了,所以除以 $\sqrt{d}$ 能让分数方差保持在合理范围,这样 softmax 的熵也就稳定了。"知乎《NLP(五):Transformer 及其 attention 机制》一文给出过同方向的方差推导线索,但未读取原文,仅作为佐证。
---
四、三个关键变形:Mask 与 Multi-Head
因果掩码(Causal Mask):解码器只看过去
生成式模型在预测第 $t$ 个 token 时不能偷看第 $t 1$ 及之后的信息。做法是在 $QK^\top$ 上加一个上三角矩阵,对角线以上填 $-∞$,softmax 之后权重为 0。deephub《Transformer 自回归关键技术》给出的 PyTorch 实现核心:
据 deephub 该文,register buffer 的意义是"确保掩码矩阵会跟随模型在 CPU 和 GPU 之间移动,但不会作为可训练参数参与梯度更新"。
Padding Mask:屏蔽补位 token
句子长度不一需要 pad,pad 位置不应被关注。知乎《动画详解 Transformer》一文未读到原文,仅作为线索指出:在 mask 里把 pad 位置设为 $-∞$ 即可,让"做 softmax 前添加 mask,避免 pad 的地方没有注意力"。这里以"软 k-NN"框架的 mask 约定(0 允许,$-∞$ 阻塞)作支撑。
Multi-Head Attention:分头并行抓不同关系
把 $Q, K, V$ 沿通道维度切成 $h$ 份,每份独立做 attention,最后 concat 起来:
直觉:不同 head 可以学会不同子空间的关系——比如一个 head 学主谓一致,另一个 head 学指代消解。
---
五、一个完整算例:6 个 2 维 token
把维度降到二维,方便手算和可视化(改编自《从另一个视角看 Transformer》一文提供的 NumPy 实验框架)。
设定 :$n 6$,$d k 2$,$d v 2$,key 矩阵为:
查询 :$q k 1 (1.0, 0.2)$。
Step 1 打分 :$s i q \cdot k i$
Step 2 缩放 :除以 $\sqrt{2} \approx 1.414$
Step 3 softmax :$\text{softmax}(s' i) \frac{e^{s' i}}{\sum j e^{s' j}}$
可以验证:所有 $w i$ 之和约等于 1。
观察 :$k 1$ 和 $k 2$ 方向最接近 $q$,拿到最大权重;$k 6$ 方向几乎相反,权重最小。这正是"软 k-NN"的直观体现——结果主要被与 query 相似的 token 主导。
如果想观察因果掩码的效果,可以让 $q k 3$,并把 $j 3$ 的位置 mask 掉,权重就会只分布在 $k 1, k 2, k 3$ 上。
---
六、与传统 k-NN 的对照
维度 硬 k-NN Attention(软 k-NN)
--- --- ---
邻居选择 top-k 离散选择 所有邻居加权
相似度函数 距离 点积 / 余弦 / 负距离
权重 1/k 或相等 softmax 概率分布
是否可微 不可微 可微(可端到端训练)
据《从另一个视角看 Transformer》可读正文给出三种相似度变体:
点积 :同时考虑方向和幅度
余弦相似度 :只看角度,忽略长度
负距离 / RBF :专注欧氏邻域
温度参数 $\tau$ 控制"软硬程度":$\tau$ 越小越接近 argmax,越大越接近均匀分布——这一点原文已明确给出。
---
七、常见误区
"Attention 就是相似度" :Attention 返回的是加权后的 Value 向量,不是相似度本身。相似度只是中间产物。这一点《从另一个视角看 Transformer》明确区分了"相似度"和"加权平均后的 Value"。
"Self-attention 复杂度是 $O(N)
quot; :错,是 $O(N^2 d)$。知乎《Swin Transformer Attention 机制的详细推导》一文未读取原文,仅作为线索说明:Swin Transformer 等工作通过 local window 把计算复杂度由 $O(N^2)$ 降至 $O(N)$ 水平。
"掩码就是把权重置 0" :错。掩码是在 softmax 之前 把分数置为 $-∞$,softmax 之后才变成 0。先 softmax 再乘 0 会改变概率分布。
"所有权重加起来一定等于 1" :这是 softmax 的硬约束,但只针对 同一行的权重 。不同 query 行独立归一化。
"Attention 陷阱"问题 :清华大学等机构联合揭秘的"注意力陷阱"(资料未读取原文,仅作为线索):softmax 的"必须花完"约束可能导致 attention 出现病态分布——延伸阅读,需要直接核验原论文。
---
八、自测题(含参考答案)
题 1:公式默写
写出 Scaled Dot-Product Attention 的完整公式,并解释 $\sqrt{d k}$ 的作用。
参考答 :
据《从另一个视角看 Transformer》,缩放因子防止点积方差随 $d k$ 增长而过高,导致 softmax 饱和、退化为胜者通吃,梯度消失。
题 2:算例手算
给定 $q (1,0)$,$k 1 (1,0)$,$k 2 (0,1)$,$k 3 (-1,0)$,$d k 2$。计算未做 softmax 的缩放分数,并判断哪个 key 会被分配最大权重。
参考答 : 原始点积 $s 1 1, s 2 0, s 3 -1$;缩放后 $s' 1 0.707, s' 2 0, s' 3 -0.707$。$k 1$ 与 $q$ 方向一致,softmax 后权重最大。
题 3:掩码位置
因果掩码应该在 softmax 之前 还是 之后 加?为什么?