A trick in Log-Sum-Exp
March 15, 2018
在计算
z=logn=1∑Nexp{xn}
时,可能会遇到溢出问题:
- exp{1000}=inf, log(inf)=inf, 向上溢出
- exp{-1000}=0, log(0)无法计算
为了避免这种情况,能够正常计算,将上式转化为:
logn=1∑Nexp{xn}=a+logn=1∑Nexp{xn−a}
其中对任意的 a 都成立,这个推导非常简单,这里就不写了。
最简单的做法是把 a 取为 {xn} 中的最大值,即
a=nmaxxn
这时 x-a 一定小于等于 0,exp{x-a} 就会在 0 到 1 之间,不会发生上溢出;而当 x=a 时,exp(x-a) = 1,也就是 log 的真数一定大于等于 1,因此也不会发生下溢出。
Reference
Computing Log-Sum-Exp