知识中等
请推导并解释 Self-Attention 的计算过程,为什么要除以 √dk?
除以是为了控制点积的方差:dk 维点积的方差随维度线性增长,不缩放会让 softmax 饱和、梯度消失。
标准答案
Self-Attention 先由输入 X 得到、、,再计算:每个 query 与所有 key 做点积得分数,缩放后 softmax 成权重,对 value 加权求和。除以的原因是:若 q、k 的分量均值 0 方差 1,则点积 q·k 的方差为 dk,维度越大分数越尖锐,softmax 会趋近 one-hot,梯度趋近于零;除以把点积方差拉回约 1,保证 softmax 处于有梯度的区间。
深入理解
追问延伸:多头场景下,缩放因子随头维度自动调整;softmax 饱和解释是标准答案,可以补充「分数分布过尖 → one-hot → 梯度消失」这条链。还可以提到替代方案(对 logits 做 layernorm、可学习温度)以及 FlashAttention 并不改变这个缩放、只是改变计算顺序。