nlp

softmax

"softmax"

Posted by zwt on March 11, 2024

softmax公式

\(\operatorname{Softmax}\left(z_i\right)=\frac{\exp \left(z_i\right)}{\sum_j \exp \left(z_j\right)}\)

什么是上溢下溢问题

溢出指的是超过二进制的精度。上溢出值为inf,下溢出值为0。计算机存储数值时不是一个精确的值,如果数值过小则会被四舍五入到0,就出现下溢出,反之过大就是上溢出。

softmax计算时的问题

如果计算softmax的数值有极值,则在计算$e^x$时会出现上溢。如果x是负数,但是绝对值很大则计算$e^x$会出现下溢。

如何解决

通过改变softmax公式为: \(\operatorname{Softmax}\left(z_i\right)=\frac{\exp \left(z_i -z_{max}\right)}{\sum_j \exp \left(z_j - z_{max}\right)}\) 可以解决上溢出问题,在计算log softmax的时候先进行计算化简再计算,则可解决下溢问题。

参考

1.知乎1