深度学习中的激活函数

1. 什么是激活函数

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

深度学习中的激活函数_第1张图片

2. 为什么要使用激活函数

如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函数。无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

比如在如下问题中:

深度学习中的激活函数_第2张图片

在最简单的情况下,数据是线性可分的,只需要一条直线就已经能够对样本进行很好地分类。

但如果情况变得复杂了一点呢?

深度学习中的激活函数_第3张图片

在上图中,数据就变成了线性不可分的情况。在这种情况下,简单的一条直线就已经不能够对样本进行很好地分类了。

于是我们尝试引入非线性的因素,对样本进行分类。

深度学习中的激活函数_第4张图片

在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好能够帮助我们引入非线性因素,它使得我们的神经网络能够更好地解决较为复杂的问题。

3. 常用的几号函数

Sigmoid函数

Sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。Sigmoid函数被定义为:

深度学习中的激活函数_第5张图片

其函数图像及导数图像如下:

深度学习中的激活函数_第6张图片

优点:

        (1)Sigmoid函数的输出映射在(0,1)(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。可以用来做二分类,在特征相差比较复杂或是相差不是特别大时效果比较好。

        (2)求导容易。

缺点:

       (1)容易出现梯度消失(gradient  vanishing)的现象:当激活函数接近饱和区时,变化太缓慢,导数接近0,根据后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。

       (2)其输出并不是以0为中心的。

tann函数

tann函数被定义为:

深度学习中的激活函数_第7张图片

其函数图像和导数图像分别为:

深度学习中的激活函数_第8张图片

优点:

        (1)比Sigmoid函数收敛速度更快。

        (2)相比Sigmoid函数,其输出以0为中心。

缺点:

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

ReLU函数

ReLU的定义为:

深度学习中的激活函数_第9张图片

其函数图像和导数图像为:(ReLU在0点不可导)

深度学习中的激活函数_第10张图片

优点:

        (1)相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛。

        (2)计算复杂度低,不需要进行指数运算。

        (3)有效缓解了梯度消失的问题。

        (4)提供了神经网络的稀疏表达能力。

缺点:

        (1)Dead  ReLU  Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。产生这种现象的两个原因:参数初始化问题;learning  rate太高导致在训练过程中参数更新太大。 

softmax函数

softmax用于多分类的神经网络中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类。原理及推到参照大佬文章。

总结

关于激活函数的选取,目前还不存在定论,实践过程中更多还是需要结合实际情况,考虑不同激活函数的优缺点综合使用。同时,也期待越来越多的新想法,改进目前存在的不足。

 

你可能感兴趣的:(深度学习,深度学习,激活函数)