特性
SVM(支持向量机)这样的算法只能进行线性划分,要想拟合更复杂问题,必须加入非线性部分,这就是激活函数的作用。
sigmoid函数和tanh函数
传统的思想是使用sigmoid函数或者tanh函数:
函数:取值(0,1)
σ
=
1
1
+
e
−
x
\sigma = \frac{1}{1+e^{-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))
函数:取值(-1,1)
tanh
=
e
x
−
e
−
x
e
x
+
e
−
x
\tanh = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
tanh=ex+e−xex−e−x
导数:
f
′
(
x
)
=
1
−
f
(
x
)
2
f^{'}(x)=1-f(x)^{2}
f′(x)=1−f(x)2
这两个激活函数缺点如下:
1.计算复杂,消耗计算量
2.损失较小时导数大,损失大时导数小(函数两侧导数大,中间导数小),导致损失较大的参数无法传递回权重
3.梯度爆炸或消失,较深层的网络要多次乘以激活函数导数,如果导数持续大于或小于1会导致梯度爆炸或消失
Relu函数
在Alexnet种使用的Relu函数是现在最常用的激活函数
R
e
l
u
=
m
a
x
(
0
,
x
)
Relu=max(0,x)
Relu=max(0,x)
Relu在整体上是非线性的,小于0时不存在,大于等于0时为x,梯度为1,解决了上述缺点,但由于小于0时直接不存在,存在“死神经元”问题,可以通过降低学习率来缓解。
为了解决这一点创造了Leaky ReLU函数,
softmax函数
多分类问题中,我们通常回使用softmax函数作为网络输出层的激活函数,softmax函数可以对输出值进行归一化操作,把所有输出值都转化为概率,所有概率值加起来等于1
s
o
f
t
m
a
x
=
e
x
∑
e
x
softmax=\frac{e^{x}}{\sum e^{x}}
softmax=∑exex
激活函数要什么条件?
激活函数肯定要满足非线性要求,还有单调可微,应当计算简单,输出范围有限,接近恒等变换(导数接近1)
非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。