引言
今天来学习下LogSumExp(LSE)1技巧,主要解决计算Softmax或CrossEntropy2时出现的上溢(overflow)或下溢(underflow)问题。
我们知道编程语言中的数值都有一个表示范围的,如果数值过大,超过最大的范围,就是上溢;如果过小,超过最小的范围,就是下溢。
什么是LSE
LSE被定义为参数指数之和的对数:
LSE ( x 1 , ⋯ , x n ) = log ∑ i = 1 n exp ( x i ) = log ( exp ( x 1 ) + ⋯ + exp ( x n ) ) \text{LSE}(x_1,\cdots,x_n) = \log \sum_{i=1}^n \exp(x_i) =\log \left(\exp(x_1) + \cdots + \exp(x_n) \right)LSE(x1,⋯,xn)=logi=1∑nexp(xi)=log(exp(x1)+⋯+exp(xn))
输入可以看成是一个n维的向量,输出是一个标量。
为什么需要LSE
在机器学习中,计算概率输出基本都需要经过Softmax函数&