一、Sigmoid
1、函数公式:
公式中,z是单个原始输出值,如原始输出值为[-0.5,0.3, 1.5, -2.0],则z1=-0.5,z2=0.3,z3=1.5,z4=-2.0;
sigmoid函数连续,光滑,严格单调,以(0,0.5)中心对称,是一个非常良好的阈值函数。sigmoid函数把一个实数压缩到(0,1),当z无穷大时,函数值趋于1,反之趋于0;我们知道(0,1)与概率值的范围是相对应的,这样sigmoid函数就能与一个概率分布联系起来了。
我们经常说的logistic函数,就是sigmoid函数,表征的是类别概率,多用于二分类。
2、 sigmoid的应用:
神经网络分类问题中,在输出层中,我们可以应用sigmoid函数。例如原始输出值为[-0.5, 1.2, 0.1, 2.4],经过sigmoid函数后,输出为概率值[0.37, 0.77, 0.48, 0.91],如下图:
(蓝色框内输出的是原始输出值,红色框为sigmoid计算出的概率值)
我们发现概率值总和不为1,即 0.37+0.77+0.48+0.91≠1,是因为Sigmoid 在解决多标签分类问题,Sigmoid分别处理每一个原始输出值,其结果相互独立,允许多种可能性并存,概率总和不一定为1。如果模型原始输出值为非互斥类别,且可以同时选择多个类别。
3、sigmoid的不足
sigmoid具有明显的饱和性,其两侧导数趋近于0,在反向传播的过程中,sigmoid的梯度会包含一个f '(x)因子,在两端的饱和区内,f '(x)会趋于0,导致反向传播的梯度边的非常小,甚至不更新,也是常说的梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。
sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
二、Softmax
1、函数公式:
分子是某个原始输出值的e^zi,分母是1到k的所有原始输出值的e^zj,也就是说,softmax将所有原始输出值映射到(0,1)之间的值,且所有输出的映射总和就是1;
2、softmax应用
神经网络分类问题中,在输出层中,我们可以应用softmax函数。例如原始输出值为[-0.5, 1.2, 0.1, 2.4],经过softmax函数后,输出为概率值[0.04, 0.21, 0.05, 0.70],如下图:
(蓝色框内输出的是原始输出值,红色框为softmax计算出的概率值)
我们发现概率值总和为1,即 0.04+0.21+0.05+0.70=1,符合概率模的性质,我们将映射输出的结果理解为概率值,最后选出概率最大的值所在节点作为分类的label输出。所以如果模型输出为互斥类别,且只能选择一个类别,则采用Softmax函数计算该网络的原始输出值。
Softmax函数的输出值相互关联,其概率的总和始终为1。因此,为了增大某一类别的概率,其他类别的概率必须相应减少。
如果预测的是多分类问题,且只有一个正确答案,那么就选用softmax函数处理原始输出值。
3、 softmax的不足
softmax对样本类别覆盖较全的数据,可以按照分类个数进行划分,保证类别可分,即保证可分性;但是Softmax并不要求类内紧凑和类间分离,这一点非常不适合人脸识别任务,因为相对全世界70亿人口,我们的训练样本微不足道。
三、总结
sigmoid函数针对两点分布提出。神经网络的输出经过它的转换,可以将数值压缩到(0,1)之间,得到的结果可以理解成“分类成目标类别的概率P”。而不分类到该类别的概率,就是(1 - P),这也是典型的两点分布的形式;
softmax本身针对多项分布提出,当类别数是2时,它退化为二项分布,而它和sigmoid真正的区别就在这儿——二项分布包含两个分类类别(姑且分别称为A和B);而两点分布其实是针对一个类别的概率分布,其对应的那个类别的分布,直接由1-P粗暴得出。
据上所述,sigmoid函数,我们可以当作成它是对一个类别的“建模”。将该类别建模完成,另一个相对的类别就直接通过1减去得到;
而softmax函数,是对两个类别建模。同样的,得到两个类别的概率之和也是1.