3-5 激活函数

激活函数( Activation functions) 

常用激活函数:

依次为:

Sigmoid函数

tanh函数或双曲正切函数

tanh可以看做是sigmoid函数向下平移和伸缩的结果,对它变形之后,穿过了(0,0)点,并且阈值介于-1和+1之间。

在隐藏层上使用tanh函数效果优于sigmoid,因为函数值域在-1和+1的激活函数,其均值更接近于0,这样会使下一层的学习变得简单。

Sigmoid函数和tanh函数两者共同的缺点是,在z特别大或者特别小的情况下,导数梯度或者函数的斜率会变得小,最后接近于0,导致梯度下降的速度降低。

Relu函数

即修正线性单元函数:

只要z是正值,导数恒等于1,当z是负数的时候,导数恒等于0,从实际来讲,z=0的导数是没有定义的,但在编程时可以将z=0时的导数设置为1或者0不会对结果有影响。

Leaky Relu

这是另一个版本的Relu:

当z为负值时,这个函数的值不等于0,而是稍微的倾斜。

这个函数的效果比Relu激活函数好,尽管在实际使用的并不多。

Relu进入负半区后,梯度为0,神经元不会训练,产生所谓的稀疏性,而Leaky Relu不会。

激活函数选用准则

相比于Sigmoid、tanh函数,Relu、LeakyRelu的优点有:

  • Sigmoid、tanh函数的计算涉及浮点四则运算,在神经网络训练的过程中,使用Relu、Leaky Relu函数学习更快。
  • Sigmoid函数、tanh函数的导数在正负饱和区的梯度都会接近于0,这会造成梯度弥散,而Relu、Leaky Relu大于0的部分导数都是常数,不会出现梯度弥散。

Sigmoid函数,除了输出层是一个二分类问题外基本不会使用。

tanh激活函数:非常优秀的激活函数,几乎适合所有场合。

Relu激活函数,最常用的默认函数,如果不确定使用哪个激活函数,就使用Relu或者Leaky Relu函数。 

在不同的神经网络层中,激活函数可以不同,为了表示不同的激活函数,使用${g^{[m]}}$表示,m表示不同的层。

为什么要使用非线性激活函数

假如使用线性激活函数:

从而:

进一步可以简化为:

上面的式子表明,如果使用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输出。

在这种情况下,不管隐藏层有多少层,本质上在做就是计算线性函数,不如直接把隐藏层全部去掉。比如,如果在隐藏层使用线性激活函数,在输出层使用sigmoid函数,那么这个模型的复杂度和没有使用任何隐藏层的标准logistic回归是一样的。

只有一个地方可能会使用线性激活函数,就是在输出层,例如使用机器学习预测房价,输出可能是0到正无穷的任意实数,此时在输出层使用线性激活函数也许可行。

posted @ 2018-08-23 21:50  刘-皇叔  阅读(606)  评论(0编辑  收藏  举报