使用激活函数的目的

  1. 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
  2. 激活函数的主要作用是提供网络的非线性建模能力,可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

sigmoid

定义

sigmoid函数能够把输入的连续实数值转化为0和1之间的实数,如果负数过大则输出0,如果正数过大则输出1

  • 公式σ(x)=11+ex\sigma(x)=\frac {1}{1+e^{-x}}
  • 导数σ(x)=σ(x)[1σ(x)]\sigma'(x)=\sigma(x)[1-\sigma(x)]
  • 图像sigmoid

优缺点

  • 优点
  1. sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定
  2. 连续函数,便于求导
  • 缺点
  1. 幂运算,计算开销大
  2. 随着网络层数的增加,反向传播容易出现梯度消失
  3. 不是以0为中心,收敛速度慢

tanh

定义

Tanh函数也称为双曲正切函数,取值范围为[-1,1]。

  • 公式tanh(x)=exexex+extanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
  • 导数f(x)=1f(x)2f'(x)=1-f(x)^{2}
  • 图像Tanh

优缺点

  • 优点
  1. 相较于sigmoid函数,tanh函数输出均值为0,收敛速度快
  • 缺点
  1. 幂运算,计算开销大
  2. 随着网络层数的增加,反向传播容易出现梯度消失

ReLU

定义

整流线性单元(Rectified linear unit,ReLU)是现代神经网络中最常用的激活函数,大多数前馈神经网络默认使用的激活函数。

  • 公式f(x)=max(0,x)f(x)=max(0, x)
  • 图像ReLU

优缺点

  • 优点
  1. 使用ReLU的SGD算法的收敛速度比sigmoid和tanh快
  2. 在x>0区域上,不会出现梯度爆炸、梯度消失问题
  3. 计算复杂度低
  4. ReLU函数会使得一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的互相依存关系,缓解了过拟合问题的发生
  • 缺点
  1. 对参数初始化和学习率非常敏感
  2. 在x<0时,梯度为0。之后与该神经元相连的神经元,梯度永远为0,参数永远不会被更新
  3. ReLU函数的输出均值大于0,偏移现象和神经元死亡会共同影响网络的收敛性
    解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法

Leaky ReLU

定义

渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。

  • 公式f(x)=max(0.01x,x)f(x)=max(0.01x, x)

PReLU

定义

参数整流线性单元(Parametric Rectified linear unit,PReLU),用来解决ReLU带来的神经元坏死的问题。

  • 公式f(x)=max(αx,x)f(x)=max(\alpha x, x) α\alpha不是固定的,是通过反向传播学习出来的

ELU

定义

指数线性单元(ELU):具有relu的优势,没有Dead ReLU问题,输出均值接近0,实际上PReLU和Leaky ReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于ReLU和Leaky ReLU之间的一个函数。当然,这个函数也需要计算exp,从而计算量上更大一些。

  • 公式f(x)={xif x>0α(exp(x)1)if x0f(x)=\begin{cases} x & \text{if } x>0 \\ \alpha(exp(x)-1) & \text{if } x \leq 0 \end{cases}

Maxout

Maxout是通过分段线性函数来拟合所有可能的凸函数来作为激活函数的,但是由于线性函数是可学习,所以实际上是可以学出来的激活函数。具体操作是对所有线性取最大,也就是把若干直线的交点作为分段的边界,然后每一段取最大。

  • 优点
  1. Maxout的拟合能力非常强,可以拟合任意的凸函数。
  2. Maxout具有ReLU的所有优点,线性、不饱和性。
  3. 不会出现神经元坏死的现象。
  • 缺点
  1. 增加了参数量。