深度学习中的激活函数之 sigmoid、tanh和ReLU

 

 

 

三种非线性激活函数sigmoid、tanh、ReLU。

sigmoid: y = 1/(1 + e-x)

tanh: y = (ex - e-x)/(ex + e-x)

ReLU:y = max(0, x)

在隐藏层,tanh函数要优于sigmoid函数,可以看作是sigmoid的平移版本,优势在于其取值为 [-1, 1],数据的平均值为0,而sigmoid的平均值为0.5,有类似数据中心化的效果。

但在输出层,sigmoid可能会优于tanh,原因在于我们希望输出结果的概率落在0~1之间,比如二元分类问题,sigmoid可以作为输出层的激活函数。

在实际情况中,特别是在训练深层网络时,sigmoid和tanh会在端值趋近饱和,造成训练速度减慢,故深层网络的激活函数多是采用ReLU,浅层网络可以采用sigmoid和tanh函数。

 

为弄清在反向传播中如何进行梯度下降,来看一下三个函数的求导过程:

1. sigmoid求导

sigmoid函数定义为  y = 1/(1 + e-x)  = (1 + e-x)-1

相关的求导公式:(xn)' = n * xn-1   和  (ex)= ex

应用链式法则,其求导过程为:

                                                        dy/dx = -1 * (1 + e-x)-2 * e-x * (-1)

                                                     = e-x * (1 + e-x)-2

                                                     = (1 + e-x - 1) / (1 + e-x)2

                                                     = (1 + e-x)-1 - (1 + e-x)-2
                                                     = y - y2
                                                     = y(1 -y)

2. tanh求导

tanh函数定义为 y = (ex - e-x)/(ex + e-x)

相关的求导公式:(u/v)= (uv - uv') / v2 

应用链式法则,其求导过程为:

                                                                dy/dx = ( (ex - e-x)' * (ex + e-x) - (ex - e-x) * (ex + e-x)) / (ex + e-x)2 

                             =  ( (ex - (-1) * e-x) * (ex + e-x) - (ex - e-x) * (ex + (-1) * e-x) ) / (ex + e-x)2   

                             =  ( (ex + e-x) -  (ex - e-x)2 ) / (ex + e-x)2 

                             =  1 -  ( (ex - e-x)/(ex + e-x) )2 

                             = 1 - y2 

3. ReLU求导

ReLU函数定义为 y = max(0, x)

简单地推导得 当x <0 时,dy/dx = 0; 当 x >= 0时,dy/dx = 1

 

接下来着重讨论下ReLU

在深度神经网络中,通常选择线性整流函数ReLU,Rectified Linear Units)作为神经元的激活函数。ReLU源于对动物神经科学的研究,2001年,Dayan 和 Abbott 从生物学角度模拟出了脑神经元接受信号更精确的激活模型,如图:

其中横轴是刺激电流,纵轴是神经元的放电速率。同年,Attwell等神经学科学家通过研究大脑的能量消耗过程,推测神经元的工作方式具有稀疏性和分布性;2003年,Lennie等神经学科学家估测大脑同时被激活的神经元只有1~4%,这进一步表明了神经元工作的稀疏性。

那么,ReLU是如何模拟神经元工作的呢

 

从上图可以看出,ReLU其实是分段线性函数,把所有的负值都变为0,正值不变,这种性质被称为单侧抑制。因为单侧抑制的存在,才使得神经网络中的神经元也具有了稀疏激活性。尤其在深度神经网络中(如CNN),当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。或许有人会问,ReLU的函数图像为什么非得长成这样子。其实不一定这个样子。只要能起到单侧抑制的作用,无论是镜面翻转还是180°翻转,最终神经元的输入也只是相当于加上了一个常数项系数,并不会影响模型的训练结果。之所以这样定义,或许是为了符合生物学角度,便于我们理解吧。

这种稀疏性有什么作用呢?因为我们的大脑工作时,总有一部分神经元处于活跃或抑制状态。与之类似,当训练一个深度分类模型时,和目标相关的特征往往也就几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,使网络拟合训练数据。

相比其他激活函数,ReLU有几个优势:(1)比起线性函数来说,ReLU的表达能力更强,尤其体现在深度网络模型中;(2)较于非线性函数,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。(注)梯度消失问题:当梯度小于1时,预测值与真实值之间的误差每传播一层就会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。

 

posted @ 2020-04-13 20:01  BooTurbo  阅读(4900)  评论(0编辑  收藏  举报