Sigmoid函数,详细介绍请参考《AI数学基础4:Sigmoid函数》。Sigmoid函数作为激活函数经历了从大热(广泛使用)到大冷(现在基本不用)的过程,Andrew Ng说,他仅仅在Logistics Regression里面使用Sigmoid函数作为激活函数。
Sigmoid函数及其导数的曲线如下:
可以看出Sigmoid函数的特点是:
1,把输入值映射到(0,1)区间,这个特性对于二值分类是比较好的,这也是为什么Logistics Regression使用Sigmoid函数作为激活函数的原因;
2,当输出值接近0或者1的时候,可以看到Sigmoid曲线非常的平滑,曲线的斜率接近为0;这个特点意味着在输出值接近0或者1的时候,Sigmoid函数的梯度值接近0,又叫做梯度消失,这样导致梯度下降法收敛的非常慢。Sigmoid函数存在饱和区间,在饱和区间中,梯度消失。为了防止饱和,必须对于权重矩阵的初始化特别留意,比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。这是sigmoid用于激活函数的一个缺点。
梯度消失 或者说 饱和区间 的特点,使得随着网络层次增加,Sigmoid函数更容易进入饱和区间,从而梯度消失,权重更新非常困难,或者进入不更新状态,整个网络就几乎不学习。这也是多层次的深度学习网络在隐藏层不用Sigmoid做激活函数的原因。
3,从Sigmoid函数曲线可以看到,Sigmoid函数的输出值是以0.5为中心(not zero-centered)对称分布的且恒为正。这导致梯度下降法收敛速度走Z字型收敛路线
下面证明一下激活函数输出值非零为中心(not zero-centered)的影响
假设有m个样本,每个样本只有两个特征x1,x2, 权重为w1,w2,偏置为b,则z的计算公式为
经过激活函数后,神经元的输出为:
全局损失函数J为:
其中L是单一样本的损失函数,y是单一样本的标签值
根据梯度下降法,权重w的更新值为:
a为学习速率,是一个超参数,一旦设定好了,权重w的改变方向就由Partial(J)/(Partial(w)决定。
现在我们要研究输入参数x全部为正,对权重w的改变方向的影响,根据求导链式法则,有:
假设前一级神经元使用Sigmoid函数作为激活函数,则其输出全部为正,换句话来说,当前的神经元的输入x_i,全部为正。
根据上面假设的条件,权重只有w1,w2。
当w1,w2优化方向相同的时候,由于神经元的输入x1和x2全部为正,可以满足w1,w2一起变大,或者一起变小;
当w1,w2优化方向不同的时候,由于神经元的输入x1和x2全部为正,若刚好满足w1的优化方向,由于w1,w2优化方向不同,则w2向恶化方向发展;那么下一步,梯度下降法,必将先优化w2的方向,w1又向恶化方向发展;如此循环往复,形成Z字形优化路径,效率比直线优化路径差多了。
如下图所示:
推而广之,可以把w1想象为权重集合的一部分,w2想象为权重集合的另一部分,对于激活函数输出不以0为中心,恒为正或恒为负的情况下,会造成Z字形优化路径,迭代次数会变多,收敛速度会变长。
参考文献:《谈谈激活函数以零为中心的问题》