一句话定义:注意力缩放因子是点积注意力(dot-product attention)在送进 softmax 之前,对 Query 和 Key 的点积结果乘以的一个系数 1/√d,其中 d 是每个注意力头里向量的维度。它的唯一使命,是防止 softmax 被过大的数值"撑爆"。
不缩放会怎样
注意力机制的核心动作是:拿当前词的 Query 向量,去和每个词的 Key 向量做点积,得分越高表示"越该关注"。然后 softmax 把这些得分变成一组加和为 1 的权重。
问题出在点积上。假设 Q 和 K 的每个分量都是均值 0、方差 1 的独立随机数,那么 d 维点积就是 d 个乘积之和,它的方差会变成 d,标准差变成 √d。也就是说,维度越高,点积的绝对值天然就越大。
打个比方:softmax 像按"得票数"分一块蛋糕。如果每个人只有 0~10 票,票数虽有高低,蛋糕还是分得比较开;但如果维度一高,每个人的票数都在几百上千的量级上乱跳,第一名和第二名差出几十倍,蛋糕就几乎被第一名独吞了。
这正是 softmax 的饱和(saturation):输入差距越大,输出越接近"一个 1、其余全 0"的 one-hot 分布。而 softmax 在这种状态下的梯度几乎为零——梯度推不动参数,模型学不到东西。除以 √d,就是把方差从 d 拉回 1,让得分回到温和的区间。
和相邻概念的区别
| 概念 | 作用位置 | 目的 |
|---|---|---|
| 1/√d 缩放 | 点积之后、softmax 之前 | 抵消维度带来的方差膨胀,防饱和 |
| 温度参数">温度参数(temperature) | softmax 内部分母 | 人为调节输出分布的软硬程度 |
| 归一化层(如 AI 词典:LayerNorm">LayerNorm) | 各层的激活上 | 稳定整体数值分布 |
值得注意的是,1/√d 本质上就是一个固定为 √d 的温度。两者做的是同一件事,只是一个由维度自动决定,一个由人手动调。
对实际工作的意义
对从业者:注意力头的维度调大时,缩放因子的必要性会迅速上升;在低精度训练里,未缩放的巨大点积还容易造成数值溢出。这也解释了为什么有些实现把缩放系数做成可学习参数,或在注意力内部再加一次归一化。它与具体实现和硬件相关,细节以官方实现为准。
对普通人:它解释了为什么大模型不会"死盯一个字"。没有这个系数,注意力会退化成硬邦邦的查表,模型根本训不起来。你看到的每一次流畅续写,背后都有这个不起眼的根号在维持秩序。
