激活函数

  • 什么是激活函数
  • 激活函数的用途
  • 有哪些激活函数
  • sigmoid
  • tanh
  • relu函数
  • Leaky ReLU函数(PReLU)
  • ELU (Exponential Linear Units) 函数


什么是激活函数

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

激活函数的用途

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

有哪些激活函数

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_激活函数

sigmoid

Sigmoid 是常用的非线性的激活函数,它的数学形式如下:

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_bp神经网络单层隐藏神经元个数代码_02


特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

缺点:sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些 缺点。

缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。

tanh

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_激活函数_03


图像

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_深度学习_04


它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

relu函数

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_神经网络_05


图像:

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_自然语言处理_06


特点:

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:

1) 解决了gradient vanishing问题 (在正区间)

2)计算速度非常快,只需要判断输入是否大于0

3)收敛速度远快于sigmoid和tanh

ReLU也有几个需要特别注意的问题:
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

Leaky ReLU函数(PReLU)

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_深度学习_07


图像:

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_神经网络_08


特点:

人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为α x 而非0,通常α = 0.01。另外一种直观的想法是基于参数的方法,即 R e L U : f ( x ) = max ⁡ ( α x , x ) 其中α可由方向传播算法学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

ELU (Exponential Linear Units) 函数

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_神经网络_09


图像:

bp神经网络单层隐藏神经元个数代码 神经网络隐藏层函数_激活函数_10


特点:

ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:

1)不会有Dead ReLU问题

2)输出的均值接近0,zero-centered