在标准的 Scaled Dot-Product Attention 中,QQQ(Query)和 KKK(Key)矩阵的维度通常设定为 dkd_kdk。当 dkd_kdk 增大时,Q⋅KTQ \cdot K^TQ⋅KT 点积结果的方差确实会随之增大。其根本原因在于独立随机变量求和的统计学性质。
以下是详细的数学推导和原理解析:
1. 点积的数学本质
假设 QQQ 和 KKK 是维度为 dkd_kdk 的向量,它们的点积可以表示为:
DotProduct(Q,K)=∑i=1dkqiki \text{DotProduct}(Q, K) = \sum_{i=1}^{d_k} q_i k_i DotProduct(Q,K)=i=1∑dkqiki
其中,qiq_iqi 和 kik_iki 分别是 QQQ 和 KKK 在第 iii 个维度上的标量值。
2. 方差增大的统计学原因
在深度学习中,我们通常假设模型的权重和激活值在初始化或经过归一化后,均值为 000,且各个维度之间是相互独立的。
根据概率论中独立随机变量求和的方差性质 :如果 XXX 和 YYY 是相互独立的随机变量,那么它们乘积的期望 EXY=EXEYEXY = EXEYEXY=EXEY。
对于点积中的每一项 qikiq_i k_iqiki,假设 qiq_iqi 和 kik_iki 的均值都为 000,方差都为 σ2\sigma^2σ2:
- 单项乘积的方差:Var(qiki)=Eqi2ki2−(Eqiki)2=Eqi2Eki2−0=σ2⋅σ2=σ4\text{Var}(q_i k_i) = Eq_i\^2 k_i\^2 - (Eq_i k_i)^2 = Eq_i\^2Ek_i\^2 - 0 = \sigma^2 \cdot \sigma^2 = \sigma^4Var(qiki)=Eqi2ki2−(Eqiki)2=Eqi2Eki2−0=σ2⋅σ2=σ4
因为点积是 dkd_kdk 个这样相互独立的项相加,根据方差的加法公式(独立变量和的方差等于方差的和):
Var(∑i=1dkqiki)=∑i=1dkVar(qiki)=dk⋅σ4 \text{Var}\left(\sum_{i=1}^{d_k} q_i k_i\right) = \sum_{i=1}^{d_k} \text{Var}(q_i k_i) = d_k \cdot \sigma^4 Var(i=1∑dkqiki)=i=1∑dkVar(qiki)=dk⋅σ4
结论 :从公式可以看出,点积的方差与维度 dkd_kdk 呈严格的线性正比关系 。当 dkd_kdk 变大时,参与求和的独立随机变量增多,累加后的整体方差自然就会线性增大。
3. 方差增大带来的负面影响
在 Transformer 中,点积的结果会被送入 Softmax 函数进行归一化:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
如果不除以 dk\sqrt{d_k}dk ,当 dkd_kdk 很大时,点积结果的方差会非常大。这意味着 Softmax 函数的输入值会分布在非常宽广的区间内(出现很多绝对值很大的正数或负数)。
这会导致 Softmax 函数的输出进入梯度极小区域(饱和区) :输出概率分布变得极其尖锐(One-hot 化),导致反向传播时梯度趋近于 000,引发梯度消失问题,使模型难以训练。
4. 为什么是除以 dk\sqrt{d_k}dk ?
正是为了解决上述方差增大的问题,原始论文《Attention Is All You Need》引入了缩放因子 dk\sqrt{d_k}dk 。
我们在点积结果上除以 dk\sqrt{d_k}dk ,相当于对方差进行了如下缩放:
Var(∑qikidk)=1dk⋅Var(∑qiki)=1dk⋅(dk⋅σ4)=σ4 \text{Var}\left(\frac{\sum q_i k_i}{\sqrt{d_k}}\right) = \frac{1}{d_k} \cdot \text{Var}\left(\sum q_i k_i\right) = \frac{1}{d_k} \cdot (d_k \cdot \sigma^4) = \sigma^4 Var(dk ∑qiki)=dk1⋅Var(∑qiki)=dk1⋅(dk⋅σ4)=σ4
通过除以 dk\sqrt{d_k}dk ,无论 dkd_kdk 如何增大,缩放后的点积结果的方差都被强制稳定在了一个常数级别(σ4\sigma^4σ4),从而保证了 Softmax 函数始终处于梯度健康的区域,确保了模型训练的稳定。