三种非线性激活函数sigmoid、tanh、ReLU。网络
sigmoid: y = 1/(1 + e-x)函数
tanh: y = (ex - e-x)/(ex + e-x)spa
ReLU:y = max(0, x)blog
在隐藏层,tanh函数要优于sigmoid函数,能够看做是sigmoid的平移版本,优点在于其取值为 [-1, 1],数据的平均值为0,而sigmoid的平均值为0.5,有相似数据中心化的效果。it
但在输出层,sigmoid可能会优于tanh,缘由在于咱们但愿输出结果的几率落在0~1之间,好比二元分类问题,sigmoid能够做为输出层的激活函数。神经网络
在实际状况中,特别是在训练深层网络时,sigmoid和tanh会在端值趋近饱和,形成训练速度减慢,故深层网络的激活函数可能是采用ReLU,浅层网络能够采用sigmoid和tanh函数。im
为弄清在反向传播中如何进行梯度降低,来看一下三个函数的求导过程:数据
1. sigmoid求导db
sigmoid函数定义为 y = 1/(1 + e-x) = (1 + e-x)-1img
相关的求导公式:(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)' = (u' v - 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)2 - (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做为激活函数,这种现象尤其明显,将致使模型收敛停滞不前。