Module 1 · Transformer Lesson 07 数值稳定小技巧

缩放点积 ÷√d

一个很小、但真实存在于公式里的步骤:打分 q·k 之后、softmax 之前,先除以 √d。只为一个目的——别让分数太大把 softmax 逼成"死板的一个独大"。

TopicScaled 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,那就除掉这个 √d,把幅度拉回到 ≈ ±1 的正常范围:

Attention(Q,K,V) = softmax( Q·Kᵀ / √d ) · V

效果:无论维度多高,进入 softmax 的分数都在一个稳定的、温和的范围,softmax 就不会一上来就饱和成 one-hot,能保留"按比例分配注意力"的能力。

不缩放:分数 [20, 15, 14] 缩放后:分数 [2.5, 1.9, 1.75] 0.98 0.013 0.005 ≈ 只看第一个(死板) 0.50 0.27 0.23 按比例分配(灵活)
同样的相对大小关系,分数整体偏大时 softmax 极端化;÷√d 把分数压回温和范围,保留"软"分配。
⚠️ 别过度解读:÷√d 不改变谁比谁大的顺序,也不改变注意力的核心思想。它只是把分数缩放到"softmax 工作得最好"的范围。名字叫 Scaled Dot-Product Attention 里的 "Scaled" 就是指这一步。为什么偏偏是 √d(而不是 d 或别的)——因为前面说的"和的标准差 ≈ √d",除以它正好把方差normalize回 1。

④ 几何直觉:不是"压扁曲线",是把输入落点挪回平缓区

回忆 softmax 里的 e^x 曲线(右边陡到爆炸)。÷√d 不改曲线本身——它把送进曲线的分数先缩小(20 → 2.5),让落点从"陡峭区"回到"平缓区"。等价地看:若把 x 轴当作原始分数,就是把响应曲线沿 x 轴横向撑开,同样的输出变化需要跨越更大的分数范围才发生。

e^x:同一条曲线,两个落点 分数 x e^x 2.5 缩放后:平缓区 → softmax 柔和 20 不缩放:陡峭区 → softmax 爆炸/独大 ÷√d 把落点拉回来
曲线(e^x)是固定的"放大机";÷√d 把分数从陡峭区(20)拉回平缓区(2.5)。换个视角:等于把曲线沿 x 轴横向撑开。

✅ 快速检查(用自己的话答)

  1. 为什么向量维度 d 越大,q·k 的分数天然越大?(跟"相关性"有关系吗?)
  2. 如果不缩放、分数普遍很大,softmax 出来的权重会变成什么样?为什么这不好?
  3. 一句话:÷√d 这一步的目的是什么?它改变"谁比谁更相关"的排序吗?

答完这 3 题,我们就把单个注意力的公式 softmax(QKᵀ/√d)V 完整拼齐了。下一课 E. Multi-head——为什么要并行开多组注意力。