通俗易懂的Softmax

作为有年头的炼丹师,现在来写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的尴尬;

扫描二维码关注公众号,回复: 9321450 查看本文章

2. softmax求导的计算开销非常小,简直就是送的

对于第1个优势,用负数和0代入公式就可以发现,输出总是(0,1)之间的有理数。

对于第2个优势,我们动笔算一算。先看Softmax的基本公式:

softmax(x)=\frac{e^{x_a}}{\sum e^{x_i}}    式(1)

看着费劲的话,我用三分类情况下的softmax简化一下:

softmax(x_0)=\frac{e^{x_0}}{e^{x_0}+e^{x_1}+e^{x_2}}    式(2)

x0,x1,x2分别是输出层神经元输出的信号, 式(2)是x0的softmax函数值。神经网络反向传播的过程中,对x0求偏导,可以把其他看作常数等价于:

[softmax(x_0)]'=[\frac{e^{x_0}}{e^{x_0}+C}]'  式(3)

用大学的知识,很容易求出式(3)的结果,推导如下:

每次计算softmax偏导值,只需做一个减法和一个乘法。在梯度反传过程中,给链式法则中的“那条链”造成的负担特别低。

这也就是softmax为何如此popular的原因了。

发布了147 篇原创文章 · 获赞 1858 · 访问量 90万+

猜你喜欢

转载自blog.csdn.net/leviopku/article/details/101542568