注意力为什么除以√d

黎 浩然/ 12 10 月, 2026/ 大语言模型/LARGELANGUAGEMODEL/LLM, 机器学习/MACHINELEARNING, 研究生/POSTGRADUATE, 计算机/COMPUTER/ 0 comments

注意力公式里的√d不是装饰。它控制进入softmax的分数尺度,避免维度增加时点积分数的波动也跟着放大。但“除以√d”不等于把每个分数限定在某个区间,更不能保证训练永远稳定。

文章目录
  1. 为什么是平方根
  2. 分数尺度怎样改变权重
  3. 缩放与数值稳定是两回事
  4. 从教学例子到实际模型
  5. 资料来源

为什么是平方根

单个query与key各有d个分量。假设各分量均值为0、方差为1,且满足用于推导的独立条件,点积是d个乘积之和,方差为d,标准差为√d。点积除以√d之后,方差回到1。

这是一个解释缩放因子的理想化推导。真实模型中的分量由学习得到,可能相关,方差也未必为1;不能把推导条件当成实际模型的统计检测结果。

Q · Kᵀ
÷ √d
softmax
加权汇总V
原创计算流程:先缩放分数,再归一化权重,最后汇总value。

分数尺度怎样改变权重

取两个候选key的点积分数8和0,d=64。未缩放时softmax给第一项约0.999665;缩放后分数为1和0,第一项约0.731059。例子只展示同一组分数的变化,不模拟训练过程。

对两个分数,相差Δ时第一项权重为1/(1+exp(-Δ))。差距越大,权重越接近0或1。softmax雅可比的对角项为p(1-p),因此极端权重对应较小的局部导数;整个网络的梯度还要考虑其他路径。

缩放与数值稳定是两回事

计算softmax前减去最大分数,不改变归一化结果,却能降低指数溢出的风险。它没有缩小分数之间的差,因此不能替代除以√d。

温度T也能缩放分数,但用途和位置要区分。这里讨论注意力内部的key维度缩放,不是生成阶段对词表logits进行温度采样。

import math

def softmax(xs):
    m = max(xs)
    es = [math.exp(x-m) for x in xs]
    return [e/sum(es) for e in es]

raw = softmax([8.0, 0.0])
scaled = softmax([8.0/math.sqrt(64), 0.0])
assert raw[0] > 0.999
assert math.isclose(scaled[0], 0.7310585786300049)
assert math.isclose(sum(scaled), 1.0)
assert all(math.isclose(a,b) for a,b in
           zip(scaled,softmax([101.0,100.0])))
print(round(raw[0],6), round(scaled[0],6))

从教学例子到实际模型

上述Python代码已执行,检查权重和为1、缩放后的数值以及平移不变性。没有加载模型或测量GPU,不构成质量与吞吐基准。

Attention Is All You Need在2017年首次公开,这里讲历史方法,不是新发布新闻。实现时应核对框架是否已自动应用缩放,避免重复除以√d。关于query头与KV头的区别,可接着读GQA原理。

English version

资料来源

Attention Is All You Need

本文于2026年10月12日整理;文章日期保留原计划时段。

支持

如果这篇文章对你有帮助,欢迎支持本站。

微信支持二维码,点击查看大图
微信
支付宝支持二维码,点击查看大图
支付宝
Buy Me a Coffee,点击支持本站
Buy Me a Coffee

二维码可点击放大。更多支持方式见支持页面。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*