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