深度学习中常见的非线性函数(激活函数)

  在深度学习的神经网络中,神经元进行X(输入)*   W(权重)+   b(偏执)的计算之后会增加一个非线性函数,最终得到该神经元的输出。这是因为X*W+b是一个线性的操作,如果神经元只有线性操作,那么这个神经网络无论有多少深,有多少个神经元它最终拟合的依然是一个线性函数,这样的拟合没有任何意义,所以会在计算完成以后增加一个非线性函数,这样只要我的神经网络只要够深,神经元够多,就能拟合任何函数。 并且在卷积神经网络中,进行了卷积或者池化等操作后通常也会在后面加上一个非线性函数。下面我们就来介绍一下常见的非线性函数,以及他们之间的区别。

1.Sigmoid函数

深度学习中常见的非线性函数(激活函数)_第1张图片

首先是最常见的Sigmod函数,每一个输入值都会被压缩到(0,1)的范围内,在x接近0的一小段范围内可以近似得将它看作线性函数,x稍微比0大一点,它的值就非常接近1,稍微比0小一点,它的值就非常接近0。

仔细观察这个函数你会发现,只有在x等于0的附近这个函数的才有较大的梯度,其余地方梯度都很小,如果我们的x很大,或者很小梯度甚至会接近0,在进行梯度下降时会造成梯度消失的现象,反向传播得到的梯度很小,每次只对权重w更新一点点甚至不更新,造成梯度下降缓慢。同时,函数中用到了指数运算,计算量会相对高一点,不过这无伤大雅。

2.tanh函数

深度学习中常见的非线性函数(激活函数)_第2张图片

 tanh函数和Sigmoid函数很相似,只不过它的值的范围在(-1,1)之间,所以它也会有梯度消失的现象。

3.ReLU函数

深度学习中常见的非线性函数(激活函数)_第3张图片

 函数输入<=0,输出为0;输入>0输出等于输入。

ReLU函数在输入>0的区域梯度恒为1,输入空间有一半的区域没有梯度消失,并且ReLU函数的计算成本也不高。相较于前面两个ReLU函数的收敛速度、计算速度更快。因此在2012年左右,AlexNet出现之后,ReLU函数开始被大量使用。但正如上面所说有一半的区域没有梯度消失,相对的,就有一半的区域梯度为0。所以ReLU函数任然会发生梯度消失的现象,只是相较于上面两个函数会少很多。

4.Leaky ReLU函数

深度学习中常见的非线性函数(激活函数)_第4张图片

 这是在ReLU函数的基础上进行的升级,在负半轴上也添加一个斜率,这样就不会再有梯度消失的现象发生。同时,Leaky ReLU和ReLU的计算速度大致相同,都是取一个最大值。 

对于负半轴的斜率,也可以不用指定为0.01,而是作为一个需要学习的函数放入神经网络中,增加它的灵活性。

深度学习中常见的非线性函数(激活函数)_第5张图片

5.ELU函数

深度学习中常见的非线性函数(激活函数)_第6张图片

 与Leaky ReLU不同,ELU函数在负半轴引入了指数运算。一些观点认为这样的模型对噪音具有更强的鲁棒性,但这样也在函数的负半轴又带来了梯度消失的现象,同时因为指数运算,ELU的计算时间也会更长。

如何选择函数,根据使用经验来说,ReLU函数是最好的,因为函数的性质,它可能在绝大多数情况下表现都非常不错。但并非在所有问题上ReLU都是表现最好的,可能某一具体问题上,其他函数表现更好。所以不妨在具体的问题上对每一函数都进行测试,选择性能最好的那一个。

你可能感兴趣的:(深度学习,深度学习,人工智能,python)