深度学习|深度学习中的激活函数

1. 什么是激活函数 如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。
深度学习|深度学习中的激活函数
文章图片

2. 为什么要使用激活函数 如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函数。无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
比如在如下问题中:
深度学习|深度学习中的激活函数
文章图片

在最简单的情况下,数据是线性可分的,只需要一条直线就已经能够对样本进行很好地分类。
但如果情况变得复杂了一点呢?
深度学习|深度学习中的激活函数
文章图片

在上图中,数据就变成了线性不可分的情况。在这种情况下,简单的一条直线就已经不能够对样本进行很好地分类了。
于是我们尝试引入非线性的因素,对样本进行分类。
深度学习|深度学习中的激活函数
文章图片

在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好能够帮助我们引入非线性因素,它使得我们的神经网络能够更好地解决较为复杂的问题。
3. 常用的几号函数 Sigmoid函数 Sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。Sigmoid函数被定义为:
深度学习|深度学习中的激活函数
文章图片

其函数图像及导数图像如下:
深度学习|深度学习中的激活函数
文章图片

优点:
(1)Sigmoid函数的输出映射在(0,1)(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。可以用来做二分类,在特征相差比较复杂或是相差不是特别大时效果比较好。
(2)求导容易。
缺点:
(1)容易出现梯度消失(gradientvanishing)的现象:当激活函数接近饱和区时,变化太缓慢,导数接近0,根据后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。
(2)其输出并不是以0为中心的。
tann函数 tann函数被定义为:
深度学习|深度学习中的激活函数
文章图片

其函数图像和导数图像分别为:
深度学习|深度学习中的激活函数
文章图片

优点:
(1)比Sigmoid函数收敛速度更快。
(2)相比Sigmoid函数,其输出以0为中心。
缺点:
还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。
ReLU函数 ReLU的定义为:
深度学习|深度学习中的激活函数
文章图片

其函数图像和导数图像为:(ReLU在0点不可导)
深度学习|深度学习中的激活函数
文章图片

优点:
(1)相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛。
【深度学习|深度学习中的激活函数】(2)计算复杂度低,不需要进行指数运算。
(3)有效缓解了梯度消失的问题。
(4)提供了神经网络的稀疏表达能力。
缺点:
(1)DeadReLUProblem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。产生这种现象的两个原因:参数初始化问题;learningrate太高导致在训练过程中参数更新太大。
softmax函数 softmax用于多分类的神经网络中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类。原理及推到参照大佬文章。
总结 关于激活函数的选取,目前还不存在定论,实践过程中更多还是需要结合实际情况,考虑不同激活函数的优缺点综合使用。同时,也期待越来越多的新想法,改进目前存在的不足。

    推荐阅读