Attention→K3 三十天课 · Day 9 / 30 课程首页 面试视角 自测题
Day 9 · 缩放点积注意力

缩放点积注意力:Q、K、V 的分工与物理因果律

昨天我们看到,RNN 因为排队传话导致长程遗忘与算力闲置。今天我们拆解替代它的绝对核心——缩放点积注意力(Scaled Dot-Product Attention)。我们将搞懂 Q、K、V 三个字母到底分工是什么、为什么注意力必须严格遵守「只能回头看」的物理因果律,以及公式里那个小小的 √dₖ 是如何拯救模型梯度的。

学完你能回答
Q、K、V 分别代表什么,为什么缺一不可?
学完你能回答
为什么注意力类比必须严格遵守因果律?
学完你能回答
公式里除以 √dₖ 到底是在防什么?

1起点:这些你早就会了

注意力机制听起来高深,但它的本质就是日常生活中的「按需检索」:

你已经会的AI 世界里对应的东西
百度搜索:输入关键词,比对网页标题,阅读网页正文Q、K、V:Query(查询词)、Key(网页标签)、Value(网页内容)
加权平均分:期末考占 60%、平时表现占 40%注意力加权和:根据相关度分数,按比例把各个 Value 汇总起来
考试开卷:只能看已经写完的前半张卷子,不能看后面的题因果律:当前 token 只能向前面已生成的 token 索取信息
温度计刻度:数字太大爆表时,按比例缩小量程缩放因子 √dₖ:防止点积数值过大导致 Softmax 梯度消失
向量内积:两根箭头方向越接近,乘积数值越大相关度打分(Dot-Product):用向量点积计算 Q 和 K 的匹配度

2Q、K、V 的三位一体分工

在 Transformer 中,输入的每个 token 经过线性变换后,都会分身成 3 个不同的向量:Query(Q)、Key(K)、Value(V)。

核心类比:图书馆借书
  • Query(Q,查询):「我想找什么?」——读者拿着借书需求单(如「我想找关于古罗马历史的书」)。
  • Key(K,索引标签):「我有什么特征?」——每本书书脊上的分类标签与摘要卡(如「欧洲古代史」「罗马帝国」)。
  • Value(V,真实内容):「我的实质信息是什么?」——这本书里每一页记录的具体文字内容。
匹配动作:
1. 拿你的 Q 去和书架上所有书的 K 逐一比对(算点积 Q·Kᵀ),算出一个相关度得分;
2. 把得分过一遍 Softmax,变成一组百分比权重(加起来正好 100%);
3. 按照这组权重,把对应书籍的 V 按比例混合吸收,得到你的最终理解!

严格来说:Q、K、V 并不是三样独立的东西——它们是同一个 token 的表示经过三组不同的线性变换得到的三个向量;而且真实的比对是所有 token 两两同时进行的矩阵运算,不是读者一本一本地翻书架。
缩放点积注意力的四步流水线:内积打分、缩放、Softmax归一化、加权汇总 Q 和 K 相乘除以根号 dk,通过 Softmax 得到权重矩阵,再乘以 V 得到加权输出 缩放点积注意力(Scaled Dot-Product Attention)四步法 1. 内积打分 Q · Kᵀ 算两两相关度 2. 缩放稳定 ÷ √dₖ 控制方差防饱和 3. 归一化 Softmax( · ) 权重和为 100% 4. 加权汇总 × V 聚合上下文表示
图 9.1:缩放点积注意力的计算四步。Q 与 K 负责算权重分,V 才是真正被提取并加权带走的内容。

3严守因果律:你只能听先到的同学发言

很多科普在解释注意力时,常说「全班所有同学自由讨论互相听」。这个比喻有一个严重违背底层物理机制的漏洞——它破坏了因果掩码(Causal Mask)。

红线纪律:生成式模型只能「回头看」 在文本生成(自回归)场景下:
• 当 AI 正在生成第 5 个 token 时,第 6、第 7 个 token 在物理世界中根本还没有诞生!
• 如果第 5 个 token 的 Q 能够去跟第 6 个 token 的 K 打分,就等于在考场上提前「偷看了未来的标准答案」——这在模型训练和推理中是绝对不允许的。

正确的心智模型:生成第 t 个 token 时,它只能把注意力投向位置小于等于 t 的历史 token。未来的位置必须被强制掩码(遮挡)。

4为什么要除以 √dₖ?(防方差爆炸与梯度消失)

在 2017 年之前,大家常用的注意力要么是不带缩放的点积,要么是用小型神经网络算的加法注意力。为什么论文要特意除以一个缩放因子 √dₖ?

数学直觉:为什么点积大了会出事?
假设向量的维度 dₖ = 64。
• 当 q 和 k 的每个分量都是均值为 0、方差为 1 的正常随机数时,它们做内积求和(64 个乘积相加),总和的方差就会直接膨胀到 64(标准差为 8)!
• 这么大的数字扔进 Softmax(eˣ 指数函数)之后,最大的那个数会被放大到极点(如输出 0.9999,其余全变成 0.0001——数值为示意)。
• 后果是灾难性的:Softmax 曲线两端极其平坦,导数几乎为 0,反向传播时梯度瞬间消失,模型彻底学不动了!

解法:除以 √dₖ = √64 = 8,把方差硬生生拉回 1,让 Softmax 重新工作在梯度最灵敏的平缓区域。

严格来说:真实模型里 q、k 的分量并非严格独立同分布,「方差恰好膨胀到 dₖ」是理想化推导;实践中还要配合参数初始化等手段一起稳住数值。但「维度越大、点积量级越大、Softmax 越容易饱和」这个方向性结论是对的。

5一行代码背后的终极公式

把上面四步连起来,就得到了深度学习历史上被引用次数最多的公式之一:

Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V

• Q ∈ R^(n × d_k):n 个查询向量组成的矩阵;
• K ∈ R^(m × d_k):m 个键向量组成的矩阵;
• V ∈ R^(m × d_v):m 个值向量组成的矩阵;
• 输出矩阵维度为 n × d_v。

进阶小注:点积注意力 vs 加法注意力 加法注意力(Additive Attention)使用单隐藏层前馈网络计算相关度,虽然在大维度下更平稳,但需要额外的参数矩阵且难以矩阵化。点积注意力只包含矩阵乘法,能吃满 GPU 的矩阵乘法优化,因此成为了绝对赢家。

6面试视角

面试视角 · 高频考点
面试官可能会问:「Scaled Dot-Product Attention 为什么要除以 √dₖ?不除会怎么样?」
八股答「为了缩放数值,防止点积太大导致梯度消失。」——结论对,但如果你能当场给出方差推导,面试官好感度直接拉满。
本课答「核心是控制方差与保护 Softmax 梯度:假设 q 和 k 的各个分量独立同分布且均值为 0、方差为 1,则它们的点积 q·k = Σ(i=1…d_k) qᵢ·kᵢ 的方差会线性放大至 dₖ。当 dₖ 较大(如 64 或 128)时,点积数值绝对值极大,会把 Softmax 函数推入两端的饱和区,导致局部导数趋近于 0,引发严重的梯度消失;除以 √dₖ 可以将点积的方差标准化回 1,使 Softmax 保持在梯度最陡峭的敏感区域。」

7映射到原文:Attention 论文 §3.2.1

来看《Attention Is All You Need》论文第 3.2.1 节对这一推导的原著注解:

论文原文对照 · 《Attention Is All You Need》§3.2.1
“We suspect that for large values of d_k, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients. To counteract this effect, we scale the dot products by 1 / √d_k.”

逐词翻译:「我们推测,当 dₖ 很大时,点积的量级会膨胀得非常大,从而将 softmax 函数推入梯度极小的区域。为了抵消这种影响,我们将点积乘以 1/√dₖ 进行缩放。」

d_k
Query 与 Key 的特征维度(Base为64)
√64 = 8
Base 模型中的实际缩放除数
1.0
除以根号 dk 后的标准化方差
100%
Softmax 归一化后的权重总和

8自测题(先自己答,再点开看解析)

Q1 用一句话说清 Q、K、V 的各自角色?
解析:Q 是查询条件(我想找什么),K 是被检索者的索引标签(我有什么特征),V 是真正要提取的信息实质(我的具体内容)。Q 与 K 匹配算权重,按权重提取 V。
Q2 为什么自注意力在自回归生成时不能看后面的 token?
解析:因为物理因果律——生成当前 token 时,未来的 token 尚未生成;如果在计算中引入未来 token,就破坏了因果掩码,属于信息泄露。
Q3 为什么点积的值会随着维度 dₖ 增大而变大?
解析:点积是 dₖ 个乘积项的累加和。当每个分量方差为 1 时,dₖ 个独立项相加后总方差为 dₖ。维度越高,点积波动的极值越大。
Q4 什么是 Softmax 的「饱和区」?它为什么会导致模型学不动?
解析:当输入 Softmax 的数值差异极大时,输出概率非 0 即 1。此时处于函数极其平缓的两端,导数趋近于 0,反向传播时传递的梯度极小,导致权重无法更新。
Q5 如果把公式里的 V 换掉,注意力还能正常工作吗?
解析:注意力机制的核心输出就是 V 的加权和。如果没有 V,模型只能算出权重分布,却无法提取任何实质上下文表示。
《从 Attention 到 K3 · 大模型近十年设计演进》30 天课 · Day 9 / 30 · 返回课程首页