各类激活函数总结
是什么:模型输入经过计算后,还经过了一个函数的计算,这个函数就是激活函数(activation function)。
为什么:深度学习模型中每一层都是上一层的线性函数的输出,使用激活函数可以将函数变为非线性,让模型又更强的学习能力。
常用的激活函数
1. sigmoid函数
函数表示:
f
(
x
)
=
1
1
+
e
−
x
f\left( x \right) = \frac{1}{{1 + {e^{ - x}}}}
f(x)=1+e−x1
激活函数特性:可以将输入的数值转换为[0,1]的数值,输入值为大负数时,输出为0,输入值为大正数时,输出为1.
缺陷:
1.在反向传播中会导致梯度爆炸以及梯度消失
2.sigmoid函数包含幂运算,对于计算机而言会比较消耗计算资源,如果神经网络规模较大会增大训练时间。
3.非0均值,导致反向传播时数据捆绑w往正方向或负方向传播。
2.tanh函数
数学样式:
tanh
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
\tanh \left( x \right) = \frac{{{e^x} - {e^{ - x}}}}{{{e^x} + {e^{ - x}}}}
tanh(x)=ex+e−xex−e−x
激活函数特性:
相较于sigmoid函数,解决了不是0均值的问题,但幂运算以及梯度爆炸、梯度消失的问题依然存在。
3.relu函数
数学样式:
Re
l
u
(
x
)
=
max
(
0
,
x
)
\operatorname{Re} lu\left( x \right) = \max \left( {0,x} \right)
Relu(x)=max(0,x)
relu函数为取最大值函数,但并不是全局可导。
优点:
1.在正区间内解决了梯度消失的问题
2.计算速度迅速,只需要判断输入是否大于0
3.收敛速度相较于sigmoid与tanh更快
缺点
1.输出为非0均值
2.某些神经元因为参数初始化以及学习率太高的原因导致一直不能激活。
3.relu为最常用的激活函数
4.prelu函数
数学形式‘:
p
r
e
l
u
(
x
)
=
max
(
α
x
,
x
)
prelu(x) = \max (\alpha x,x)
prelu(x)=max(αx,x)
特点:为了解决relu函数dead relu problem的问题,将relu的前半段变成 α x \alpha x αx。
怎么选用激活函数
凭经验选择激活函数优先级为relu>tanh>sigmoid