激活函数对比分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiankong_/article/details/88383855

1.激活函数的作用

提供网络的非线性建模能力

2.激活函数中的常见概念

饱和

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

硬饱和与软饱和

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

3.常见的激活函数介绍

3.1 sigmoid

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


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

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

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

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

优点:

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

缺点:

  1. 由于其软饱和性,容易产生梯度消失,导致训练出现问题。
  2.  sigmoid函数的输出均大于0,这就使得输出不是0均值,这称为偏置现象。这将会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。(对数据的分布变动影响较大)

3.2 tanh

表达式如下:

图像:

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

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

优点:

比Sigmoid函数收敛速度更快。
相比Sigmoid函数,其输出以0为中心。
缺点:

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

3.3 relu

ReLU。在近些年ReLU变得非常流行。它的函数公式是f(x)=max(0,x)。换句话说,这个激活函数就是一个关于0的阈值(如上图左侧)。使用ReLU有以下一些优缺点:

  • 优点:相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的。
  • 优点:sigmoid和tanh神经元含有指数运算等耗费计算资源的操作,而ReLU可以简单地通过对一个矩阵进行阈值计算得到。
  • 缺点:在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。例如,如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

具体关于relu导致神经元死亡的问题解释,参见https://www.zhihu.com/question/67151971/answer/434079498

3.4 leaky relu

Leaky ReLU函数

f(x) = \max(0.01x, x)

人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为而非0。另外一种直观的想法是基于参数的方法,即Parametric ReLU:,其中可由back propagation学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

猜你喜欢

转载自blog.csdn.net/tiankong_/article/details/88383855