跳到主内容
快讯直播
AI智模界
AI 词典

LogSumExp 技巧:先减最大值再取指数

一句话定义:LogSumExp(LSE)技巧,就是在计算 log(∑exp(x_i)) 时,先把所有 x_i 减去其中的最大值,再取指数、求和、取对数,最后把最大值加回来,从而避免指数爆炸。

先看问题。exp(x) 是个放大镜:x 稍大,结果就冲上 inf;x 稍小,结果又缩到 0。计算机浮点数范围有限,直接算 exp(1000) 会溢出(overflow),算 exp(-1000) 会下溢(underflow),求和时小项直接消失。LogSumExp 的做法是找一个参照物:令 m = max(x_i),然后计算:

LSE(x) = m + log(∑exp(x_i - m))

因为每个 x_i - m ≤ 0,所以 exp(x_i - m) ≤ 1,不会上溢;同时最大那一项是 exp(0)=1,也不会全变成 0。数学上它和原式完全相等,只是换了个更安全的算法。

生活化比方:几个人收入差距很大,直接比“资产绝对值”可能数字爆炸;先把最有钱的人设为 0,其他人记成负数,相对差距没变,但算起来清爽多了。

这一招在三个地方反复出现:

场景直接算的风险LSE 怎么介入
AI 词典:Softmax">Softmax大 logits 取指数溢出分子分母同减最大值,结果不变
交叉熵(cross-entropy)log(0) 或 inf 导致 NaNlog_softmax(z) = z_y - LSE(z)
贝叶斯求和(Bayesian summation)多个小概率连乘后下溢在对数域相加,再用 LSE 回到概率域并归一化

Softmax 是把一组分数变成概率分布,它的分母正是 LogSumExp。交叉熵是分类训练常用的损失函数,内部常写成 log_softmax,也依赖 LSE。贝叶斯求和则是在有隐变量时做边缘化:把多个路径的概率加起来,但在对数域里加,必须用 LSE 才能安全地变回普通概率。

区别在于:LogSumExp 不是模型,也不是损失函数,它是一个数值计算技巧;Softmax 是归一化指数函数;交叉熵是衡量预测与标签差距的指标;贝叶斯求和是概率推断里的操作。它们共用 LSE,是因为都要在“对数域求和”和“普通域指数”之间来回切换。

对从业者来说,写代码时应优先使用框架提供的 logsumexp、log_softmax、cross_entropy 等稳定实现,不要手写 log(sum(exp(x))),否则训练中很容易遇到 NaN、loss 爆炸或梯度异常。对普通人来说,这也是一种通用思路:遇到极大或极小的数连乘、求和,先拿最大值做参照,统一缩放后再计算,结果等价但更稳。具体 API 行为以所用框架的官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。