1、Sigmoid
-- 函数公式:
公式中,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函数,表征的是类别概率。
-- 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。如果模型原始输出值为非互斥类别,且可以同时选择多个类别,则采用Sigmoid函数计算该网络的原始输出值。
-- sigmoid的不足
sigmoid具有明显的饱和性,其两侧导数趋近于0,在反向传播的过程中,sigmoid的梯度会包含一个
f '(x)因子,在两端的饱和区内,f '(x)会趋于0,导致反向传播的梯度边的非常小,甚至不更新,也是常说的梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。
sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
2、Softmax
-- 函数公式:
分子是某个原始输出值的e^zi,分母是1到k的所有原始输出值的e^zj,也就是说,softmax将所有原始输出值映射到(0,1)之间的值,且所有输出的映射总和就是1;
-- softmax应用
神经网络分类问题中,在输出层中,我们可以应用sigmoid函数。例如原始输出值为[-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函数处理原始输出值。
-- softmax的不足
softmax对样本类别覆盖较全的数据,可以按照分类个数进行划分,保证类别可分,即保证可分性;但是Softmax并不要求类内紧凑和类间分离,这一点非常不适合人脸识别任务,因为相对全世界70亿人口,我们的训练样本微不足道。
欢迎关注我的公众号!