A trick in Log-Sum-Exp

在计算

时,可能会遇到溢出问题:

  1. exp{1000}=inf, log(inf)=inf, 向上溢出
  2. exp{-1000}=0, log(0)无法计算

为了避免这种情况,能够正常计算,将上式转化为:

其中对任意的 a 都成立,这个推导非常简单,这里就不写了。

最简单的做法是把 a 取为 中的最大值,即

这时 x-a 一定小于等于 0,exp{x-a} 就会在 0 到 1 之间,不会发生上溢出;而当 x=a 时,exp(x-a) = 1,也就是 log 的真数一定大于等于 1,因此也不会发生下溢出。

Reference

Computing Log-Sum-Exp

Buy me a coffee
Zhao Li /
Published under (CC) BY-NC-SA in categories math  tagged with trick