一、什么是激活函数
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
二、常用的几种激活函数
1、Sigmoid函数
(1)数学公式
σ
(
x
)
=
1
1
+
e
x
\displaystyle \sigma(x) =\frac{1}{1+e^{x}}
σ(x)=1+ex1
(2)导数公式
σ
(
x
)
′
\sigma ( x)'
σ(x)′ =
σ
(
x
)
(
1
−
σ
(
x
)
)
\displaystyle \sigma ( x)( 1-\sigma ( x))
σ(x)(1−σ(x))
(3)函数图像及导数图像
(4)优缺点
- 优点:
1)求导容易,利用其本身函数值即可;
2)它能够把输入的连续实值变换为0和1之间的输出 - 缺点:
1)容易引起梯度消失。如,初始化神经网络的权值为 [0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0到0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 (1,+∞) 区间内的值,则会出现梯度爆炸情况(较少出现)。
2)输出不以0为均值,如果数据输入神经元是正的,那么会导致计算的梯度也始终为正。如, x > 0 x>0 x>0, f = w T x + b \displaystyle f=w^{T} x+b f=wTx+b那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。
3)解析式中含有幂运算 e − x \displaystyle e^{-x} e−x,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
2、Tanh函数
(1)数学公式
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
\displaystyle tanh( x) =\frac{e^{x} -e^{-x}}{e^{x} +e^{-x}}
tanh(x)=ex+e−xex−e−x
(2)导数公式
t
a
n
h
(
x
)
′
tanh( x)'
tanh(x)′=
1
−
(
t
a
n
h
(
x
)
)
2
\displaystyle 1-( tanh( x))^{2}
1−(tanh(x))2
(3)函数图像及导数图像
(4)优缺点
- 优点
输出以0为中心。
比sigmoid函数训练时收敛更快。 - 缺点
仍然是饱和函数,没有解决梯度消失问题。
3、ReLU函数
(1)数学公式
R
e
l
u
=
m
a
x
(
0
,
x
)
\displaystyle Relu\ =\ max( 0,x)
Relu = max(0,x)
(2)导数公式
(3)函数图像及导数图像
(4)优缺点
- 优点
1) 解决了gradient vanishing问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh - 缺点
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
4、Leaky ReLU
(1)函数公式
(2)导数公式
(3)函数图像及导数图像
左半边直线斜率非常接近0,所以看起来像是平的(如
α
=
0.01
α=0.01
α=0.01)。
(4)优缺点
Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题。但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
5、Maxout
(1)数学公式:
m
a
x
(
w
1
x
+
b
1
,
w
2
x
+
b
2
)
\displaystyle max( w_{1} x+b_{1} ,w_{2} x+b_{2})
max(w1x+b1,w2x+b2)
(2)优缺点
R
e
l
u
Relu
Relu激活函数只是
M
a
x
o
u
t
Maxout
Maxout中
w
1
=
0
w_{1}=0
w1=0,
b
1
=
0
b_{1}=0
b1=0 的特殊形式。因此
M
a
x
o
u
t
Maxout
Maxout既有着
R
e
l
u
Relu
Relu激活函数的优点,同时也
避免了
R
e
l
u
Relu
Relu激活函数训练脆弱的缺点。它的缺点是加倍了模型的参数,导致了模型的存储变变大。
6、gelu
详细介绍:https://blog.csdn.net/sinat_36618660/article/details/100088097
https://baijiahao.baidu.com/s?id=1653421414340022957&wfr=spider&for=pc添加链接描述
三、应用中如何选择合适的激活函数?
1、深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
2、如果使用 Relu,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky Relu或者 Maxout.
3、最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上Relu和 Maxout.
参考文献:
1、常用激活函数(激励函数)理解与总结:https://blog.csdn.net/tyhj_sf/article/details/79932893
2、神经网络中的常用激活函数和导数:https://blog.csdn.net/lw_power/article/details/90291928