零中心(zero-centered)
上面为Sigmoid
函数和tanh
函数的函数图和导数图. 我们把tanh称为是零中心(zero-centered)的函数, 其输出值是单调且有正有负; sigmoid
函数非零中心(non-zero-centered)的, 函数的输出只有正值.
如果激活函数是non-zero-centered的, 一般会导致神经网络收敛较慢.
收敛慢的原因
non-zero-centered激活函数会导致神经网络收敛较慢, 原理要从反向传播开始讲起.
损失函数为L, 对于某一参数w的更新公式为:
w←w−η⋅∂w∂L
对于单个神经元, 其输入输出的关系为:
f(x;w,b)=f(z)=f(∑iwixi+b)
因此, 对于单个参数wi来说, 通过链式求导法则, 其导数为:
∂wi∂L=∂f∂L∂z∂f∂wi∂z=xi⋅∂f∂L∂z∂f
其中的f是神经元的输出, 也通常记为a, ∂wi∂z这一项的结果为xi. 因此wi的更新公式为:
wi←wi−ηxi⋅∂f∂L∂z∂f
参数wi的更新方向是由xi⋅∂f∂L∂z∂f决定的. 而对于某个神经元相关的所有wi来说, ∂f∂L∂z∂f是一个常数, 因此某个神经元相关的所有参数的更新方向之间的差异, 完全是由xi的符号决定的.
非零中心激活函数的弊端因此展现. 以Sigmoid
函数为例, 并且我们分析一个简单的网络, 对于某个神经元, 其上一层只有两个输入, 即两个神经元, 即:
f(x;w,b)=f(w0x0+w1x1+b)
对应的两个参数为w0, w1. 并假设当前时刻, 两个参数与最优解对应值的关系为:
{w0<w0∗w1⩾w1∗ 所以希望w0适当的增大, 而w1适当的减小, 要求w0和w1的符号相反.
但对于Sigmoid
函数, 其输出值恒为正, 即输入的x0和x1恒为正, 因此两个参数的更新方向肯定是同时增大或减小的. 而模型为了收敛, 只能走Z字形逼近最优解, 导致迭代步骤的增加, 这种现象也称为zig-zagging dynamics.
参考资料