神经网络的激活函数

激活函数的主要作用是提供网络的非线性建模能力。

1. sigmoid

优点

有解释性,取值范围在$(0,1)$,可以当做概率值。

缺点

  1. 有饱和区(梯度消失)。当输入为较大的正数或者负数是,梯度就会变成 0,使得神经元基本更新。为了防止过拟合,必须对权重的初始化特别留意。
  2. 计算指数耗时。
  3. 只有正数输出,不是 zero-centered 的,可能会导致 zigzag 现象。
    $y=\sigma(s)=\sigma(\sum_{i=1}^n w_i x_i)$
    损失$L$对$w_i$求导为$\frac{\partial L}{\partial w_i}=\frac{\partial L}{\partial y}y(1-y)x_i$,其中$y(1-y)$恒为正,$\frac{\partial L}{\partial y}$可正可负,若输入$x_i$恒为正或恒为负,那么最后的导数都是同号的(在二维空间来说,只能落在一三象限)。这将导致锯齿现象。

2. tanh

实际上等价于 sigmoid 函数,输出是 zero-centered 的,取值范围在 $[-1,1]$。$\tanh x=2\sigma(2x)-1$,相当于延迟了 sigmoid 的饱和区。

3. ReLU

Rectified Linear Unit(修正线性单元),是一种线性激活函数,消除了梯度饱和情况,并且梯度求解很简单。

优点

  1. 相较于 sigmoid 和 tanh,ReLU 对于随机梯度下降的收敛有巨大加速作用。
  2. 计算简单。可以直接对矩阵取阈值得到输出。

缺点

Dead ReLU。神经元的输入落入负数域,导致永远不会被激活,可能的导致原因有:参数初始化不好、学习率设置太高导致在训练过程中参数更新太大。

4. LeakyReLU

为了解决 ReLU 的 Dead ReLU 问题,但是并没有完全证明总是有效的,效果不稳定。

5. PReLU

Parametric ReLU。与 ReLU 和 LeakyReLU 相同具有非饱和性,额外参数 $\alpha$ 需要通过学习获得,原文建议初始化为 0.25,不采用正则化。收敛速度相较于 ReLU 更快,输出更接近 0 均值。

6. RReLU

where $a{j,i}\sim U(l,u),\hspace{1em}l<u\hspace{0.5em}\text{and}\hspace{0.5em}u\in[0,1)$
测试环节的激活函数为$y
{j,i}=\frac{x_{j,i}}{\frac{l+u}{2}}$
相当于将 LeakyReLU 的固定参数变为随机版本。

7. ELU

优点

  1. 可以缓解梯度消失问题。
  2. 输出均值接近于 0,所以收敛速度更快。

缺点

由于需要计算指数,所以计算量稍大,理论上虽然更好,但没有好的证据证明。

8. maxout

在前馈神经网络中,以节点为单位,该神经元的激活函数值为前一层每个神经元经过全连接后的最大值。
它拥有 ReLU 的所有优点,而没有 ReLU 的缺点,然而参数量却增加了一倍。

选取建议

一般情况下,建议使用 ReLU,但是必须注意初始化和学习率的设置,可以监控网络中死亡神经元占的比例。如果被单元死亡问题困扰,可以试试 LeakyReLU 或 maxout。sigmoid 直接被弃用,也可以试试 tanh,但效果一般不如 ReLU 或 maxout 好。

参考

深度学习系列(8):激活函数
常见激活函数
https://blog.csdn.net/edogawachia/article/details/80043673