前言

  激活函数值域关于零对称的问题在激活函数那篇文章中未详细介绍,在那里说到,当激活函数的值域不关于0点对称,会导致梯度下降的速度下降,关于这一点,过去我只是将其记下,却并未理解背后的原因。此篇谈谈背后的原因。
要探讨为什么Sigmoid函数会影响学习效率这个问题,需要找到影响梯度的因素。

权重更新

  深度学习一般的学习方法是反向传播,简单来说,就是通过链式法则,求解全局损失函数 L 对某一参数 w 偏导数,而后乘以学习率,向梯度的反方向更新参数 w ,更新公式可以表示为:

上述的参数更新方式,这个 w i指的是某两层之间的权重,例如下面的图像:


其中我们的目的是借助误差更新W1和W2的参数值,而参数W1和W2分别对应于X1与X2。
于是有:

为什么所有的 x i 都是正数就会影响更新效率呢?
  要解决这一点,我们需要理解反向传播的原理,向着梯度下降的方向改变权重,那么在学习过程中就肯定存在梯度方向不同的情况,例如有的 w i 梯度方向是下降,有的 w j 梯度方向是上升,这样不断迭代就会影响效率。优点像梯度下降法里面的锯齿状迭代,假设在一次迭代过程中 w 1 需要向着正方向更新, w 2 则需要向着负方向进行更新,但是反向传播的权重更新都是同一方向的,假设计算得到的梯度都是朝着正向更新的,那么参数 w 1 在更新过程中就会更收益,而参数 w 2 在更新时就会朝着反方向更新,这必定会造成一定的误差。这一代更新后得到新的参数 w 1 ′  w 2 ,后续再用 w 1 ′  w 2 ′ 来计算误梯度时,可能计算的更新方式就是负方向了,这个时候参数 w 2 就更收益,而参数 w 1 就向放方向更新,这样不断地迭代,虽然说误差会在不断减小,但是减小的速度肯定会受到一定的影响,虽然最后也会收敛到一个好的解,但是过程是“曲折”的。
  此外,在更新输入层到第一层隐含层的权重时,按理来说,这一层的权重可以有不同方向的迭代,因为输入值不一定是同方向的。
基于Sigmoid函数改进的Tanh函数就能很好的解决这个问题,Tanh函数图像如下:

在这里插入图片描述
Tanh函数的值域是-1到1,是基于0点对称的,所以在更新参数时能进行有效更新,并不会造成所有参数发生同方向更新。