简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)

激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

下图为激活函数的计算过程
简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)_第1张图片

y = h ( b + w 1 x 1 + w 2 x 2 ) y=h(b+w_{1}x_{1}+w_{2}x_{2}) y=h(b+w1x1+w2x2),我们将该式拆开可以写为: a = b + w 1 x 1 + w 2 x 2 a=b+w_{1}x_{1}+w_{2}x_{2} a=b+w1x1+w2x2 y = h ( a ) y=h(a) y=h(a)即为右侧圆圈中所示。

一、Sigmoid激活函数形式为: f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1,由基本的微积分知识可以推导出,该函数的导数形式为: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{\prime}(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))。该函数的图像如下所示
简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)_第2张图片
从图像中不难看出,Sigmoid函数会出现梯度消失和梯度爆炸的情况,这是因为该函数将输入和输出映射到(0,1),当自变量很大或者很小的时候,该函数的导数 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{\prime}(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))的值都会趋向于0,造成梯度消失的情况。

二、Tanh激活函数的形式为: f ( z ) = t a n h ( z ) = e z − e − z e z + e − z f(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} f(z)=tanh(z)=ez+ezezez
其对应的导数形式为: f ′ ( z ) = 1 − ( f ( z ) ) 2 f^{\prime}(z)=1-(f(z))^2 f(z)=1(f(z))2,其图像如下图所示
简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)_第3张图片
从图像中不难看出Tanh就是Sigmoid函数的平移,从函数表达式来看, t a n h ( x ) = 2 s i g m o i d ( 2 x ) − 1 tanh(x)=2sigmoid(2x)-1 tanh(x)=2sigmoid(2x)1,因此Tanh函数也会由于相同的原因导致梯度消失的情况。

三、ReLu激活函数的形式为: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)或者 h ( x ) = { x ( x > 0 ) 0 ( x ⩽ 0 ) h(x)=\left\{\begin{array}{ll}x & (x>0) \\0 & (x \leqslant 0)\end{array}\right. h(x)={x0(x>0)(x0),其对应的导数形式为: h ( x ) = { 1 ( x > 0 ) 0 ( x ⩽ 0 ) h(x)=\left\{\begin{array}{ll}1 & (x>0) \\0 & (x \leqslant 0)\end{array}\right. h(x)={10(x>0)(x0),其图像如下图所示
简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)_第4张图片
四、ReLu函数相比于Sigmoid函数和Tanh函数的优势在于
1.ReLu函数是利用阈值来进行因变量的输出,因此其计算复杂度会比剩下两个函数低(后两个函数都是进行指数运算)
2.ReLu函数的非饱和性可以有效地解决梯度消失的问题,提供相对宽的激活边界。
3.ReLU的单侧抑制提供了网络的稀疏表达能力。

五、ReLu函数相比于Sigmoid函数和Tanh函数的劣势在于
1.ReLU的局限性在于其训练过程中会导致神经元死亡的问题。这是由于函数 f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)导致负梯度在经过该ReLU单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。在实际训练中,如果学习率(Learning Rate)设置较大,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。
鉴于此,人们设计了ReLu函数的变体即Leaky ReLu(LReLu),其表达式为:
f ( x ) = { x ( x > 0 ) a x ( x ⩽ 0 ) f(x)=\left\{\begin{array}{ll}x & (x>0) \\ax & (x \leqslant 0)\end{array}\right. f(x)={xax(x>0)(x0),其图像如下图示(假设a的值为0.01):
简析深度学习常见激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU)_第5张图片
LReLU与ReLU的区别在于, 当z<0时其值不为0,而是一个斜率为a的线性函数,一般a为一个很小的正常数, 这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方面,a值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。
基于此,参数化的PReLU(Parametric ReLU)应运而生。它与LReLU的主要区别是将负轴部分斜率a作为网络中一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。而另一个LReLU的变种增加了“随机化”机制,具体地,在训练过程中,斜率a作为一个满足某种分布的随机采样;测试时再固定下来。Random ReLU(RReLU)在一定程度上能起到正则化的作用。

你可能感兴趣的:(Deep,Learning,深度学习)