动手学习深度学习——读书笔记(2)
深度学习模型的训练,一直是该领域的研究热点。梯度消失是深度模型训练中常见的问题,梯度消失会导致靠近输入的层的参数无法得到有效更新,从而阻碍模型的正常学习。不同的激活函数被设计出来解决该问题,本文对常见的激活函数的优缺点进行总结,一方面加深对激活函数作用的理解,另一方面也方便在实际使用时进行查询。
1.sigmoid
sigmoid函数,早期使用最广泛的激活函数,其数学表达式如下所示:
s
i
g
m
o
i
d
(
x
)
=
1
1
+
exp
(
−
x
)
sigmoid(x) = \frac{1}{1+\exp{(-x)}}
sigmoid(x)=1+exp(−x)1
特点:能把输入的连续值变换为0和1之间的输出,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。
缺点:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,可参看它的函数图像加深理解;其次,其输出不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
2.tanh
tanh为双曲正切函数,其数学表达式如下:
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
tanh(x)=ex+e−xex−e−x
特点:能把输入的连续实值变换为-1和1之间的输出。
缺点:虽然解决了输出zero-centered的问题,但梯度消失问题仍然存在。
3.ReLU
ReLU是目前使用较为广泛的激活函数,其数学表达式如下:
r
e
l
u
(
x
)
=
m
a
x
(
0
,
x
)
relu(x)=max(0,x)
relu(x)=max(0,x)
优点:解决了gradient vanishing问题 (在正区间),相较于前两种激活函数计算速度更快,收敛速度也更快。
缺点:其输出也没有zero-centered;存在Dead ReLU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。通常可以采用Xavier初始化方法,不宜将learning rate设置太大,或动态调整learning rate。
4.Leacky ReLu
ReLU的改进版本,其数学表达式如下:
l
r
e
l
u
(
x
)
=
m
a
x
(
α
x
,
x
)
lrelu(x)=max(\alpha x, x)
lrelu(x)=max(αx,x)
和ReLU最大的区别在于用
α
x
\alpha x
αx替代了0。
优点:ReLU有的有点它都有,并且解决了Dead ReLU 问题。
缺点:实际使用中,有研究表明其效果不一定能够由于ReLU。
5.ELU
其全称为指数线性单元,其表达式为:
f
(
x
)
=
{
x
i
f
x
>
0
α
(
e
x
−
1
)
o
t
h
e
r
w
i
s
e
f(x)= \begin{cases} x \quad & if \quad x>0 \\ \alpha (e^x-1) &otherwise \end{cases}
f(x)={xα(ex−1)ifx>0otherwise
优点:ReLU有的有点它都有,并且解决了Dead ReLU和zero-centered等问题。
缺点:由于涉及指数运算,计算量过大,且和Leacky ReLU一样,在实际使用中效果并不一定优于ReLU。
目前,激活函数的选择没有绝对的标准,不同激活函数在不同的问题中有着不同的表现,针对不同的问题,需要具体分析,具体尝试。