作为有年头的炼丹师,现在来写softmax讲解多少还是有点羞耻的。不过有炼丹经验以后,看初级的算法可以有更清晰的见解。
我们带着2个问题看文章:
1. 什么是softmax
2. 为什么用softmax
Softmax
softmax往往加在神经网络的输出层,用于加工神经网络的输出结果:把微弱程度不同的信号整理成概率值,这便是机器学习模型对分类任务的置信度confidence。
图片来自:https://www.cnblogs.com/zongfa/p/8971213.html
用一句话来描述上图:softmax对神经元的输出信号进行加工,输出为分类的概率值。
举个二分类的例子,机器需要分类A和B。那么,机器的输出只可能是A或B,不可能到C。最后两个神经元的输出为(0.1, 0.1)和(100, 100)没有区别,因为机器对这两种分类的confidence依然是各50%。这样,无论神经元最后输出的结果是什么,它都是可以进行置信度量化的。
通过上图,应该可以完全理解softmax是怎么操作的。
为什么使用softmax
softmax有2个无法抗拒的优势:1. softmax作为输出层,结果可以直接反映概率值,并且避免了负数和分母为0的尴尬;
2. softmax求导的计算开销非常小,简直就是送的。
对于第1个优势,用负数和0代入公式就可以发现,输出总是(0,1)之间的有理数。
对于第2个优势,我们动笔算一算。先看Softmax的基本公式:
式(1)
看着费劲的话,我用三分类情况下的softmax简化一下:
式(2)
x0,x1,x2分别是输出层神经元输出的信号, 式(2)是x0的softmax函数值。神经网络反向传播的过程中,对x0求偏导,可以把其他看作常数等价于:
式(3)
用大学的知识,很容易求出式(3)的结果,推导如下:
每次计算softmax偏导值,只需做一个减法和一个乘法。在梯度反传过程中,给链式法则中的“那条链”造成的负担特别低。
这也就是softmax为何如此popular的原因了。