1. Sigmoid
存在的问题:
- 饱和神经元使得梯度消失。 当输入x过大或者过小时,从sigmoid的曲线都可以看到,区域水平,这将导致梯度消失。
- sigmoid不是一个零中心函数。 上游回传的梯度
的数值正负皆有可能,权重的梯度
,如果输入x恒为正,则相当于保留了上游梯度的符号,所有关于W的梯度总朝着一个方向移动。导致梯度更新非常低效。
当权重的梯度恒正或者恒负时,只允许产生一三象限方向的优化,假设最优权重向量是图中蓝色向量,那么梯度更新的过程需要经过非常多步,如图中红色向量的更新方向。
所以一般情况下我们倾向于使用均值为0的数据,这样能够得到正负都含有的数值,避免上述问题的产生。 - 指数函数计算量大,计算慢。
2. tanh
优点:零中心函数
问题:饱和神经元使得梯度消失
ReLU (Rectified Linear Unit)
优点:
- 正区间不会产生饱和
- 计算简单、速度快
- 收敛速度大概在sigmoid和tanh的6倍
- 比sigmoid在生物学上更合理
问题:
- 不是零中心函数
- 存在dead ReLU问题,即负半轴区域无作为。dead ReLU是常见的问题,产生的原因可能为①不合适的初始化配置,初始权重没有设置好,恰巧不在数据云内,导致一个能激活神经元的数据输入也无法产生合适的回传梯度,神经元既不会更新也不回被激活。(示意图如下)所以我们通常使用较小的正偏置来初始化ReLU,以增加它在初始化时被激活的可能性,并获得更新。也有学者认为这种做法并没有什么意义,仍旧使用全0初始偏置。
3. Leaky ReLU | PReLU
都是ReLU的改进,赋予其负区间微小的斜率。
优点
- 不会有饱和的神经元
- 不会产生dead ReLU
PReLU (Parametric Rectifier) 和 Leaky ReLU类似,但负区间的斜率由alpha参数确定,不需要特殊地指定alpha,而是把alpha作为一个可以反向传播和学习的参数,拥有更高的灵活性。
4. ELU(Exponential Linear Units)
可以认为ELU介于ReLU 和 Leaky ReLU 之间。
优点
具有ReLU的所有有点,且输出均值更接近0
问题
负区间存在饱和问题
5. Maxout Neuron 最大输出神经元
泛化ReLU和Leaky ReLU,不会产生饱和也不会消亡。
形式不同: 没有使用先做点积运算,然后把这个元素级的非线性特征放在它的前面的方式。而是分别计算 和 ,取其中的最大值。
问题
每个神经元的参数数量翻倍,即原来每个神经元只需要权重W,现在需要权重 和
6. 常用情况
- 使用ReLU并谨慎调整学习速率
- 尝试Leaky ReLU / Maxout / ELU (实验性强于实用性)
- 尝试tanh(实验性强于实用性)
- 一般不使用sigmoid
7. 初始化网络权重
我们的期望是不同的神经元可以学到不同的知识,如果所有神经元的初始权重相同,神经元将进行相同的操作,用相同的方式更新,与期望不符。
一般从一个概率分布中抽样选择一个小的随机数推荐:Xavier初始化法
注意,初始权重不宜太大也不宜太小。
如果初始值过小,激活值和权重都将渐渐趋近于0,因为它们都在不断乘一个很小的值。
如果初始值过大,不断乘以值过大的权值矩阵,数值会爆炸增长。