参考1:【机器学习】神经网络-激活函数-面面观(Activation Function) 参考2:深度学习中激活函数的优缺点

为什么要引入激活函数?
引入非线性激活函数,神经网络财局比了分层的非线性映射能力。

不同激活函数及其优缺点 - 图1

sigmoid

  • 不同激活函数及其优缺点 - 图2

  • 好处

    • 是在物理意义上最为接近生物神经元。 (0, 1) 的输出还可以被表示作概率,或用于输入的归一化。Batch Normalization的逐层归一化,Xavier和MSRA权重初始化等代表性技术。能够一定程度上面缓解梯度消失的问题。
  • 缺点

    • 梯度消失:sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。因此一旦输入落入饱和区,f’(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失

    • 非零均值:这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。以 f=sigmoid(wx+b)为例, 假设输入均为正数(或负数),那么对w的导数总是正数(或负数),这样在反向传播过程中要么都往正方向更新,要么都往负方向更新,导致有一种捆绑效果,使得收敛缓慢。

    • 激活函数计算量大(指数运算),反向传播求误差梯度时,求导涉及除法

tanh

  • 不同激活函数及其优缺点 - 图3

  • 零均值化

relu

  • 不同激活函数及其优缺点 - 图4

  • 好处

    • 计算复杂度低,不需要进行指数运算

    • 梯度不会饱和,解决了梯度消失问题,SGD算法的收敛速度要比 sigmoid 和 tanh 快

    • 保留正向激活的特征,防止过拟合(这也是缺点)

  • 缺点

    • 非零均值化

    • 不会对数据做幅度压缩,因此数据的幅度会随着模型层数的增加而不断扩张

    • Dead ReLu Problem,部分神经元坏死。某些神经元永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。

      • 产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大。

      • 解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。