一个很小、但真实存在于公式里的步骤:打分 q·k 之后、softmax 之前,先除以 √d。只为一个目的——别让分数太大把 softmax 逼成"死板的一个独大"。
| Topic | Scaled Dot-Product:÷√d 缩放 |
| Objectives | 理解分数为何会随维度变大;√d 如何把它拉回正常范围 |
| Prerequisites | 点积 ✅、softmax(含"独大"行为)✅、Q/K/V ✅ |
| Outcome | 能说清完整公式 softmax(q·k/√d)·v 里 √d 的作用 |
| Warning | 这是数值稳定技巧,不改变注意力的核心思想 |
回忆点积:q·k = q₁k₁ + q₂k₂ + … + q_d k_d,把 d 个乘积加起来。d 就是向量维度(d_model,常见 64、128 甚至更大)。
关键观察:加的项越多,和的波动越大。若每个 q、k 分量大致是均值 0、方差 1 的随机数,那么 d 个乘积加起来,这个和的标准差大约是 √d。也就是说:
维度越高,点积分数天然越大——不是因为更相关,纯粹因为加的项更多。
回忆 softmax 的性质:某个分数明显大时,权重会接近"一个独大"(≈ one-hot)。当分数普遍很大(比如差距是 20 vs 15),softmax 会变得极端——几乎把全部权重压给最大那个,其余几乎为 0。
这带来两个坏处:
既然分数的典型幅度 ≈ √d,那就除掉这个 √d,把幅度拉回到 ≈ ±1 的正常范围:
效果:无论维度多高,进入 softmax 的分数都在一个稳定的、温和的范围,softmax 就不会一上来就饱和成 one-hot,能保留"按比例分配注意力"的能力。
回忆 softmax 里的 e^x 曲线(右边陡到爆炸)。÷√d 不改曲线本身——它把送进曲线的分数先缩小(20 → 2.5),让落点从"陡峭区"回到"平缓区"。等价地看:若把 x 轴当作原始分数,就是把响应曲线沿 x 轴横向撑开,同样的输出变化需要跨越更大的分数范围才发生。
答完这 3 题,我们就把单个注意力的公式 softmax(QKᵀ/√d)V 完整拼齐了。下一课 E. Multi-head——为什么要并行开多组注意力。