神经网络中的激活函数对比

爿臣戈王耑/ 一月 25, 2018/ 机器学习/ 0 comments

在神经网络中激活函数是必不可少的一部分,选择合适的激活函数对训练模型也是至关重要。

1、那激活函数到底有什么作用呢?

激活函数通常有如下一些性质:

  • 非线性: 当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
  • 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
  • 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
  • f(x)x 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
  • 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.
神经网络中每一层通过这些激活函数后,就会变比以前复杂很多,从而提升了神经网络模型的表达能力。

2、为什么要采用非线性的激活函数

上图可以看做普通的线性分类器,也是线性回归方程。这个比较基础就不解释了。

根据上面的简单线性分类,我们可以延伸到网络神经模型中,即再多加一层

如下图所示

此时当我们队公式进行运算,就会发现,这样的一个神经网络组合起来,输出的时候无论如何都是还是一个线性方向,换句话说无论增加了多少层,经过公式推导总能推导为只有一层的神经网络模型,如下图所示,就是上图就等价于下图。

当我们再一层加入激活函数,如下图

扩展到多层,就变成下图,也就是一个简单的前链接神经网络(MLP),

下图是上图的转换为简单图,右边表示可视化,很明显的增加了图像的复杂程度,拟合能力也会更强。

 

加入非线性激活函数简单的说:就是使得神经网络具有拟合非线性函数的能,使得其具有更强大的表达能力。

3、常用的激活函数对比

3-1、Sigmoid

Sigmoid的数学表达式是
其图形如下:

Sigmoid激活函数是将一个实数转换为0~1之间的输出,具体说来就是越大的负数转换到越靠近0,越大的正数转化到越靠近1.

现在Sigmoid激活函数越来越被人使用,因为sigmoid主要有以下2个缺点(划重点)

(1)Sigmoid会造成梯度消失。一个非常不好的特点就是Sigmoid函数在靠近1和0的两端时,梯度会几乎变成0,这样就会造成没有任何信息来更新参数,从而造成模型不收敛。另外,如果使用Sigmoid函数,那么需要再初始化权重的时候也必须非常小心。如果初始化权重太大,那么经过激活函数的也会导致大多数神经元变的饱和,没有办法更新参数。

(2)Sigmoid输出不以0为均值,这就会导致经过Sigmoid激活函数之后的输出,作为后面一层网络的输入的时候都是非0均值的,这个时候如果输入进入下一层神经元的时候全是正的,这就会导致梯度全是正的,那么在更新参数的时候永远都是正梯度。怎么理解呢?比如进入下一层神经元的输入是x,参数是w和b,那么输出就是,这个时候梯度,所以如何x是0均值的数据,那么梯度就会有正有负。但是这个问题并不严重,因为一本神经网络再训练的时候都是按batch进行训练的,这个时候可以在一定程度上缓解这个问题,所以说虽然0均值这个问题会产生一些不好的影响,但是总体来讲跟上一个缺点来讲还是要好很多。

3.2Tanh

Tanh激活函数是Sigmoid激活函数的变形,其数学表达式为

图形如下

Tanh激活函数是将输入的数据转换到-1到1之间,这样就将输出转换为0均值的,在一定解决了Sigmoid函数的第二个缺点,但是它仍然存在这梯度消失的问题。

3.3ReLU

ReLu激活函数是近期比较常用的激活函数,ReLU数学公式:

ReLU优点

(1)相比于Sigmoid激活函数和TanH激活函数,ReLU激活函数能极大地加速随机梯度下降的收敛速度,这是因为它是线性的,且不存在梯度消失的问题。

(2)相比于Sigmoid激活函数和Tanh激活函数的复杂计算而言,ReLu的计算方法更加简单,只需要一个阈值过滤就可以得到结果,不需要进行一大堆复杂的运算。

ReLU缺点

训练的时候很脆弱,比如一个很大的梯度经过ReLu激活函数,更新参数之后,会使得这个神经元不会对任何数据有激活现象。如果发生这种情况之后,经过ReLU的梯度永远都会是0,也就意味着着无法更新参数了,因为ReLU激活函数本质上是一个不可逆的过程,因为它会直接去掉输入小于0的部分。在实际操作的情况可以通过设置比较小的学习率来避免这个小问题。

3.4Leaky ReLU

Leaky ReLU激活函数是ReLU激活函数的变式,主要是为了修复ReLU激活函数中训练比较脆弱这个问题。数学公式如下:

图像如下:

关于Leaky ReLU激活函数的效果,一些实验证明很好,一些实验证明并不好。

发表 评论

电子邮件地址不会被公开。 必填项已用*标注

你可以使用 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*