常用的激活函数对比

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。

在ICML2016的一篇论文Noisy Activation Functions中,作者将激活函数作出了形象的定义,如下图所示:
常用的激活函数对比_第1张图片

在实际的应用中,我们需要先了解以下概念:

  • 饱和

    当一个激活函数h(x)满足 limn+h(x)=0 时,我们称之为右饱和
    当一个激活函数h(x)满足 limnh(x)=0 时,我们称之为左饱和
    当一个激活函数,既满足左饱和又满足又饱和时,我们称之为饱和

  • 硬饱和与软饱和

    对任意的x,如果存在常数c,当 x > c 时恒有 h(x)=0 则称其为右硬饱和
    对任意的x,如果存在常数c,当 x < c 时恒有 h(x)=0 则称其为左硬饱和
    若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为硬饱和
    如果只有在极限状态下偏导数等于0的函数,称之为软饱和

从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前常见的多是分段线性和具有指数形状的非线性函数。下文将依次对它们进行总结。

Sigmoid

Sigmoid 是使用范围最广的一类激活函数,具有指数函数形状 。正式定义为:

f(x)=11+ex

常用的激活函数对比_第2张图片

可见,sigmoid 在定义域内处处可导,根据上述对饱和的定义,其可被定义为软饱和激活函数。

Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f’(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f’(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。

这里给出一个关于梯度消失的通俗解释:

Sigmoid 函数能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是 f(x)=f(x)(1f(x)) 。因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。

最后总结一下 Sigmoid 函数的优缺点:

优点:

  1. Sigmoid 函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。它在物理意义上最为接近生物神经元。
  2. 求导容易。

缺点:

  1. 由于其软饱和性,容易产生梯度消失,导致训练出现问题。
  2. 其输出并不是以0为中心的。

Tanh

f(x)=1e2x1+e2x

函数位于[-1, 1]区间上,对应的图像是:
常用的激活函数对比_第3张图片

同样的,Tanh 激活函数也具有软饱和性。Tanh 网络的收敛速度要比 Sigmoid 快。因为 Tanh 的输出均值比 Sigmoid 更接近 0,SGD 会更接近 natural gradient(一种二次优化技术),从而降低所需的迭代次数。

总结一下 Tanh 激活函数的优缺点:

优点:

  1. 比Sigmoid函数收敛速度更快。
  2. 相比Sigmoid函数,其输出以0为中心。

缺点:

还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。

ReLU

ReLU 是近几年非常受欢迎的激活函数。被定义为:
常用的激活函数对比_第4张图片
其对应的函数图像为:
常用的激活函数对比_第5张图片

可见,ReLU 在x<0 时硬饱和。由于 x>0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。

最后总结一下 ReLU 函数的优缺点:

优点:

  1. 相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛。据称,这是因为它线性、非饱和的形式。
  2. Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。
  3. 有效缓解了梯度消失的问题。
  4. 在没有无监督预训练的时候也能有较好的表现。
  5. 提供了神经网络的稀疏表达能力。

缺点:

随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。

LReLU 与 PReLU

PReLU 是 ReLU 和 LReLU 的改进版本,具有非饱和性:
常用的激活函数对比_第6张图片

下面给出 LReLU 的函数图像:
常用的激活函数对比_第7张图片

ai 比较小且固定的时候,我称之为 LReLU。LReLU 最初的目的是为了避免梯度消失。但在一些实验中,我们发现 LReLU 对准确率并没有太大的影响。很多时候,当我们想要应用 LReLU 时,我们必须要非常小心谨慎地重复训练,选取出合适的 a,LReLU 的表现出的结果才比 ReLU 好。因此有人提出了一种自适应地从数据中学习参数的 PReLU。

PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。

ELU

ELU 融合了sigmoid和ReLU,具有左侧软饱性。其正式定义为:
常用的激活函数对比_第8张图片

常用的激活函数对比_第9张图片

右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。

激活函数选用总结

在进行深度学习的研究中,如何选择激活函数,仍需依靠实验指导。一般来说,在分类问题上建议首先尝试 ReLU,其次ELU,这是两类不引入额外参数的激活函数。

该博文主要参考资料:
1.深度学习中的激活函数导引
2.浅谈深度学习中的激活函数

你可能感兴趣的:(算法,深度学习,人工智能)