激活函数不以零为中心的问题

声明

神经元

  • 该神经元整合前一层神经元的消息为z(x,w,b)=iwixi+bz(\vec{x}, \vec{w}, \vec{b}) = \sum_i{w_ix_i+b},再送到激活函数f(z)f(z)。这里整合的过程是线性加权

Sigmoid和tanh

  • Sigmoid函数的一般形式为

σ(z)=11+ez\sigma(z) = \frac{1}{1+e^{-z}}

-tanh函数的一般形式为

tanh(z)=ezezez+eztanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}

收敛速度

  • 模型的最优解即是模型参数的最优解,通过多轮迭代,模型参数会被更新到接近最优解,这一过程,迭代次数越多,收敛速度越慢;反之,迭代次数越少,收敛速度越快。

参数更新

  • 深度学习一般的学习方法是反向传播。简单来说,就是通过链式法则,求解全局损失函数L(x)L(\vec{x})对某一参数ww的偏导数(梯度);然后辅以学习率η\eta,向梯度的反方向更新参数ww

wwηLww \leftarrow w-\eta \cdot \frac{\partial L}{\partial w}

  • 考虑学习率η\eta是全局设置的超参数,参数更新的核心步骤是计算Lw\frac{\partial L}{\partial w},再考虑到对于某个神经元来说,输入和输出的关系是:

f(x;w,b)=f(z)=f(iwixi+b).f(\vec{x} ; \vec{w}, b)=f(z)=f\left(\sum_i w_i x_i+b\right) .

  • 链式法则可以表示为:

Lwi=Lffzzwi=xiLffz.\frac{\partial L}{\partial w_i}=\frac{\partial L}{\partial f} \frac{\partial f}{\partial z} \frac{\partial z}{\partial w_i}=x_i \cdot \frac{\partial L}{\partial f} \frac{\partial f}{\partial z} .

  • 因此参数更新步骤变为:

wiwiηxiLffz.w_i \leftarrow w_i-\eta x_i \cdot \frac{\partial L}{\partial f} \frac{\partial f}{\partial z} .

更新方向

  • 由于wiw_i是上一轮迭代的结果,这里可以视为常数。因此参数wiw_i的更新方向是由xiLffzx_i \cdot \frac{\partial L}{\partial f} \frac{\partial f}{\partial z}的符号决定的。

  • 随便拿出来两个参数,他们的更新反向由以下关系决定:

{xiLffzxjLffz\left\{\begin{matrix} x_i \cdot \frac{\partial L}{\partial f} \frac{\partial f}{\partial z}\\ x_j \cdot \frac{\partial L}{\partial f} \frac{\partial f}{\partial z} \end{matrix}\right.

  • 因此每个ww更新方向,由此时的xix_i的方向决定。假设当前情况下,wiw_i变小合适,wjw_j变大合适。但在Sigmoid函数中,输出值恒为正。也就是说如果上一级神经元采用Sigmoid函数作为激活函数,那么我们无法做到xix_ixjx_j方向相反。此时模型为了收敛,只能Z字形逼近最优解


激活函数不以零为中心的问题
https://fansaorz.github.io/2024/08/17/激活函数不以零为中心的问题/
作者
Jiashi Zhang
发布于
2024年8月17日
许可协议