说明:本文部分文本参考知乎博主chuang的一篇文章
-
softmax
-
计算过程如图所示:
-
logsoftmax
而logsoftmax无非是在softmax的结果至上进行log操作,即log(yi),输出结果均为负数;
值域范围在(0, 1)之间如图所示:(随便画的有点丑)
-
重点:
-
log_softmax能够解决函数overflow和underflow,加快运算速度,提高数据稳定性。
如上图所示:
- softmax会进行指数操作,当上一层的输出,也就是softmax的输入比较大的时候, 可能就会产生overflow。比如上图中,z1、z2、z3取值很大的时候,超出了float能表示的范围。
- 同理当输入为负数且绝对值也很大的时候,会出现分母会变得极大,有可能四舍五入为0,导致下溢出。
-
尽管在数学表示式上是对softmax在取对数的情况。但是在实操中是通过
来实现,其中即 M为所有概率分布中最大的值。 -
可以解决这个问题,在加快运算速度的同时,可以保持数值的稳定性