激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
下图为激活函数的计算过程
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+e−x1,由基本的微积分知识可以推导出,该函数的导数形式为:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f^{\prime}(x)=f(x)(1-f(x))
f′(x)=f(x)(1−f(x))。该函数的图像如下所示
从图像中不难看出,Sigmoid函数会出现梯度消失和梯度爆炸的情况,这是因为该函数将输入和输出映射到(0,1),当自变量很大或者很小的时候,该函数的导数
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f^{\prime}(x)=f(x)(1-f(x))
f′(x)=f(x)(1−f(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+e−zez−e−z
其对应的导数形式为:
f
′
(
z
)
=
1
−
(
f
(
z
)
)
2
f^{\prime}(z)=1-(f(z))^2
f′(z)=1−(f(z))2,其图像如下图所示
从图像中不难看出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)(x⩽0),其对应的导数形式为:
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)(x⩽0),其图像如下图所示
四、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)(x⩽0),其图像如下图示(假设a的值为0.01):
LReLU与ReLU的区别在于, 当z<0时其值不为0,而是一个斜率为a的线性函数,一般a为一个很小的正常数, 这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方面,a值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。
基于此,参数化的PReLU(Parametric ReLU)应运而生。它与LReLU的主要区别是将负轴部分斜率a作为网络中一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。而另一个LReLU的变种增加了“随机化”机制,具体地,在训练过程中,斜率a作为一个满足某种分布的随机采样;测试时再固定下来。Random ReLU(RReLU)在一定程度上能起到正则化的作用。