1.sigmoid函数
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'(x) = f(x) (1 - f(x))
f′(x)=f(x)(1−f(x))
sigmoid经常用于隐层神经元输出,函数与导数的图像如下
观察函数的图像,我们很容易发现其优点与缺点。
优点:
1.输出值再(0,1)之间,输出的范围在稳定的范围内,可以用作输出层。实际上sigmoid经常用作输出层来表征概率做二分类问题。
2.函数连续,求导简单高效。
缺点:
1.如果x取值绝对值非常大,输出会饱和,表现为函数图像的两端都很平,此时对输入的变化不敏感。
2.其导数值再函数值很大或者很小的时候都趋近与0,反向传播求导时,很容易梯度消失。
3.因为是指数形式,计算复杂度较高。
4.输出不是0均值,会导致后层的神经元的输入是非0均值的信号,会对梯度产生影响。
2.正切函数
正切函数也名叫双曲正切函数。
函数形式如下
f
(
x
)
=
t
a
n
h
x
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x) = tanhx = \frac{e^x - e^{-x}}{e^x + e^{-x}}
f(x)=tanhx=ex+e−xex−e−x
求导为:
f
′
(
x
)
=
1
−
(
f
(
x
)
)
2
f'(x) = 1 - (f(x))^2
f′(x)=1−(f(x))2
函数及其导数的图像为
与sigmoid函数相比,tanhx是0均值的。但是其导数在两端也存在饱和的现象,导致反向传播无法进行。
3.relu激活函数
ReLU函数,全称为Rectified linear unit,直译过来称为整流线性单元,是目前使用最广泛的激活函数之一。
其表达式很简单:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x) = max(0, x)
f(x)=max(0,x)
函数及其导数的图像为:
对比sigmoid,tanh函数,relu有明显的有点:
1.x>0时,不会有梯度消息的现象,反向传播可以顺利进行。
2.没有指数运行,计算简单。
3.收敛速度比上面的激活函数要快。
其主要缺点是 Dead ReLU Problem(神经元坏死现象)。
如果参数初始化不当,或者learning rate太高导致在训练过程中参数更新太大,当x<0时候,梯度为0,那么这个神经元以及后面的神经元梯度一直为0,所有的数据将不再被更新。
一般可以采用Xavier初始化方法,同时将learning rate设置为合理的范围,可以避免Dead ReLU Problem现象。
4.针对relu的优化
针对relu的 Dead ReLU Problem,后续有各种relu的优化版本,比如渗漏整流线性单元(Leaky ReLU), 参数整流线性单元(Parametric Rectified linear unit,PReLU),指数线性单元(ELU)等。下面我们以渗漏整流线性单元(Leaky ReLU)为例来说明。
其函数表达式为
f
(
x
)
=
m
a
x
(
α
x
,
x
)
f(x) = max(\alpha x, x)
f(x)=max(αx,x)
α
\alpha
α是个定值,比如我们取0.1,函数与导数的图像如下
因为有0.1的存在,从而使得ReLU在负数区域更偏向于激活而不是死掉,因此可以避免出现Dead ReLU Problem的问题。