常用激活函数及导数
一、激活函数简介
激活函数是深度神经网络的重要组成部分,其作用是对模型引入非线性表达与特性。神经网络通常由多层神经元组成,后一层的单个神经元可以表达为前层神经元的线性组合。显然,如果不引入非线性因素,深层神经网络也仅仅是输入的线性组合。激活函数将非线性的表达引入模型,对每个神经元,根据前层输出线性计算得到的数值进行非线性的映射,从而增大模型的表达性能。
二、常见激活函数及导数
1.Sigmiod
f
(
x
)
=
1
1
+
e
−
x
f(x) = \frac{1}{1+e^{-x}}
f(x)=1+e−x1
其导数为:
f
′
(
x
)
=
e
−
x
(
1
+
e
−
x
)
2
f^{'}(x) = \frac{e^{-x}}{(1+e^{-x})^{2}}
f′(x)=(1+e−x)2e−x
则有:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
f^{'}(x)=f(x)(1-f(x))
f′(x)=f(x)(1−f(x))
2.tanh
f
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
f(x)=ex+e−xex−e−x
其导数为:
f
′
(
x
)
=
4
e
2
x
(
e
2
x
+
1
)
2
f^{'}(x) = \frac{4e^{2x}}{(e^{2x}+1)^{2}}
f′(x)=(e2x+1)24e2x
对比Tanh与Sigmoid,二者存在如下关系:
t
a
n
h
(
x
)
=
2
(
s
i
g
m
o
i
d
(
2
x
)
)
−
1
tanh(x) = 2(sigmoid(2x))-1
tanh(x)=2(sigmoid(2x))−1
Sigmoid与Tanh在x较大或较小时,都会出现饱和的现象,也即导数趋近于0,易造成梯度弥散(或称梯度消失)现象
3.ReLu
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x) = max(0,x)
f(x)=max(0,x)
其导数为:
f
′
(
x
)
=
{
0
,
i
f
(
x
<
0
)
1
,
i
f
(
x
≥
0
)
f^{'}(x) = \begin{cases} 0, if (x<0)\\ 1, if(x\ge0) \end{cases}
f′(x)={0,if(x<0)1,if(x≥0)
ReLu在x<0时导数为0,该神经元在这次反向传播中不会有更新,具有一定程度上保持参数稀疏性特点。
4.Leaky ReLu
f
(
x
)
=
{
α
x
,
i
f
(
x
<
0
)
x
,
i
f
(
x
≥
0
)
f(x) = \begin{cases} \alpha x, if (x<0)\\ x, if(x\ge0) \end{cases}
f(x)={αx,if(x<0)x,if(x≥0)
其导数为:
f
′
(
x
)
=
{
α
,
i
f
(
x
<
0
)
1
,
i
f
(
x
≥
0
)
f^{'}(x) = \begin{cases} \alpha, if (x<0)\\ 1, if(x\ge0) \end{cases}
f′(x)={α,if(x<0)1,if(x≥0)