1. Softmax函数计算概率时,数值不稳定,上溢。
如果,存在较大的xi时,对其使用使用exp指数函数很容易出现上溢。
而当负数过多时,分母每一个部分都为0,相加也为0,会出现除以0问题。
以下中的b为xi…xn中的max。
Softmax(xi)=∑j=1nexp(xj)exp(xi)=∑j=1n(exp(xj−b)⋅exp(b))exp(xi−b)⋅exp(b)=exp(b)⋅∑j=1nexp(xj−b)exp(xi−b)⋅exp(b)=∑j=1nexp(xj−b)exp(xi−b)=Softmax(xi−b)
经过这样的恒等变换,分子上最大为1,分母中即使全是负数,也至少会出现一个1,避免了除以0的情况。
2. 在计算KL散度或者交叉熵时,LSE的数值稳定性,上溢或者对数0。
log(∑i=1nexiexj)=log(exj)−log(i=1∑nexi)=xj−log(i=1∑nexi)
和上面一样,如果xi有较大的,则会出现上溢。如果全是很小的负数,则会出现对0取对数的情况。
分母部分做以下处理,c为max(xj)。
LogSumExp(x1…xn)=log(i=1∑exi)=log(i=1∑nexi−cec)=log(eci=1∑nexi−c)=log(i=1∑nexi−c)+log(ec)=log(i=1∑nexi−c)+c
这样,类似地,不会出现上溢,并且对数内最少有个1,不会出现对对数取0的情况。
log(Softmax(xj,x1…xn))=xj−LogSumExp(x1…xn)=xj−log(i=1∑nexi−c)−c