AI Infra Academy
返回题库
中等AttentionAttention数值稳定面试高频

为什么 Softmax 需要做数值稳定处理(减去最大值)?

7 0 0

参考答案

**问题**:Softmax 计算 `exp(xᵢ) / Σexp(xⱼ)`。当输入 xᵢ 较大时,`exp(x)` 会数值溢出(FP16 中 exp(x) 在 x>11 左右就溢出,FP32 在 x>88 左右溢出),得到 inf,进而 inf/inf = NaN,训练/推理崩溃。 **解法(safe softmax)**:利用 softmax 的平移不变性——给所有输入减去同一个常数,结果不变: `softmax(xᵢ) = exp(xᵢ - m) / Σexp(xⱼ - m)`,取 `m = max(x)`。 这样最大的指数项变成 `exp(0)=1`,其余都 ≤1,不会上溢;分母至少为 1,也避免下溢导致的除零。 **与 FlashAttention 的联系**:FlashAttention 分块计算时无法一次看到全局最大值,于是用 **online softmax**:遍历各块时动态维护当前最大值 m 和归一化和 l,每遇到新块就用新旧最大值的差做指数缩放(rescale)来修正已累加的结果,最终等价于全局 safe softmax。这个平移不变性正是 FlashAttention 能分块且结果精确的数学基础。

讨论区(0)

还没有评论,来做第一个发言的人吧