[深度学习]20170921 各种激活函数 - xiaobu1986/Notes GitHub Wiki
在上一节中,我们设计的模型,在训练时,出现梯度爆炸
在反向传播计算梯度过程中(可参考Deep Learning Basics: Neural Networks, Backpropagation and Stochastic Gradient Descent,写得非常详细易懂http://alexminnaar.com/deep-learning-basics-neural-networks-backpropagation-and-stochastic-gradient-descent.html)。随着层数的增大,梯度值会越来越小,或者越来越大;也因此如果导数参数都在1附近是最好的,如果小于1会出现梯度消失,大于1会出现梯度爆炸
- 激活函数的使用
1)Sigmoid函数[上图左] sigmoid将一个实数输入映射到[0,1]范围内 f(x) = 1/(1+exp(-x)), 其导数是f'(x) = (1+exp(-x))^2 exp(-x),即当f(x)本身很小的时候,其导数更小,即更新的也小,即当sigmoid的函数输出值为0附近的时候,参数基本不怎么更新了,另外当sigmoid函数输出值为1附近时,参数也基本不怎么更新了。
2)tanh函数[上图右]
TanHyperbolic(tanh)函数又称作双曲正切函数,数学表达式为y=(ex−e−x)/(ex+e−x),其函数曲线与Sigmoid函数相似,如图。 在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值。而tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP网络的梯度求解,容错性好,有界,渐进于0、1,符合人脑神经饱和的规律,但比sigmoid函数延迟了饱和期。
- ReLu函数和softplus函数 ReLu函数的全称为Rectified Linear Units,函数表达式为y=max(0,x),softplus函数的数学表达式为y=log(1+ex),它们的函数表达式如下: 可以看到,softplus可以看作是ReLu的平滑。根据神经科学家的相关研究,softplus和ReLu与脑神经元激活频率函数有神似的地方。也就是说,相比于早期的激活函数,softplus和ReLu更加接近脑神经元的激活模型,而神经网络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪潮。
[***] softplus和ReLu相比于Sigmoid的优点在哪里呢?引用https://www.zhihu.com/question/29021768的解释就是: 第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。 第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释)。