自注意力中随着根号dk的增大,qk点积的方差为什么也会增大

在标准的 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 函数始终处于梯度健康的区域,确保了模型训练的稳定。

相关推荐
benchmark_cc27 分钟前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读39 分钟前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放1 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下1 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐2 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹2 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi
cpolar技术支持2 小时前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
小嘉丶学长2 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
迪菲赫尔曼2 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
用户8356290780512 小时前
Python 调整 Excel 工作表显示设置
后端·python