激活函数(Activation Function)
激活函数为神经网络模型引入了非线性计算。
如果神经网络中没有激活函数,那么神经网络中的每一层的输出都是上层输入的线性函数,因此无论神经网络有多少层,输出都是输入的线性组合,这就是最原始的感知机(Perceptron)。
在现实任务中,大多数任务都是非线性的,因此激活函数给神经网络引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性计算任务中。
如下图,在神经元中,输入的 inputs 通过加权,求和后,被作用于一个函数,这个函数就是激活函数。
常见激活函数
Sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间。
Sigmoid函数的数学公式:
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x)=\frac{1}{1+e^{-x}}
σ(x)=1+e−x1
Sigmoid函数的图像(两个图坐标尺度不同):
tanh函数
双曲正切函数,其数学公式:
tanh
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
tanh(x)=ex+e−xex−e−x
tanh函数的图像:
ReLu函数
整流线性单元(Rectified Linear Unit),其公式如下:
R
e
l
u
(
x
)
=
m
a
x
(
0
,
x
)
Relu(x)=max(0, x)
Relu(x)=max(0,x)
ReLu函数的图像:
Leaky ReLu函数
渗漏整流线性单元,其公式如下:
L
e
a
k
y
R
e
L
u
(
x
)
=
m
a
x
(
x
,
α
x
)
LeakyReLu(x)=max(x, \alpha x)
LeakyReLu(x)=max(x,αx)
Leaky ReLu函数的图像 (
α
=
0.01
\alpha=0.01
α=0.01):
hard tanh函数
硬双曲正切函数,其形状和tanh及ReLu相似,但不同于后两者,它是有界的。
其数学公式为:
H
a
r
d
t
a
n
h
(
x
)
=
m
a
x
(
−
1
,
m
i
n
(
1
,
x
)
)
Hardtanh(x)=max(-1,min(1,x))
Hardtanh(x)=max(−1,min(1,x))
函数图像为:
softplus函数
这是ReLu单元的平滑版本。
其数学公式如下:
s
o
f
t
p
l
u
s
(
x
)
=
l
o
g
(
1
+
e
x
)
softplus(x)=log(1+e^x)
softplus(x)=log(1+ex)
softplus函数的图像:
ELU函数
指数线性单元(Exponential Linear Units)
其公式如下:
E
L
U
(
x
)
=
m
a
x
(
x
,
α
(
e
x
−
1
)
)
ELU(x)=max(x, \alpha(e^x-1))
ELU(x)=max(x,α(ex−1))
ELU函数的图像(蓝色线和橙色线在
x
>
0
x>0
x>0处重合):
maxout单元
maxout(maxout unit)进一步扩展了整流线性单元。maxout单元将
x
x
x 划分为每组具有
k
k
k 个值的组,而不是使用作用于每个元素的函数。每个maxout单元输出每组中的最大元素:
m
a
x
o
u
t
(
z
)
i
=
m
a
x
j
∈
[
1
,
k
]
z
j
maxout(z)_i=max_{j\in{[1,k]}}z_j
maxout(z)i=maxj∈[1,k]zj
maxout提供了一种方法来学习对输入
x
x
x 空间中多个方向响应的分段线性函数。
maxout单元可以学习具有多达
k
k
k 段的分段线性凸函数。maxout单元因此可以视为学习激活函数本身,而不仅仅是单元之间的关系。使用足够大的
k
k
k,maxout单元可以任意的精确来近似任何凸函数。
各种激活函数总结
函数名 | 描述 | 缺点 |
---|---|---|
Sigmoid | 能够把输入的连续实值变换为0和1之间的输出,如果是非常大的负数,输出就是0;如果是非常大的正数,输出就是1 | 1. 易导致梯度消失;2. Sigmoid 的 output 不是0均值(即zero-centered)。这会导致后一层的神经元得到上一层输出的非0均值数据作为输入,产生的一个结果就是:如 x>0, f=w^T x+b, 那么对w求局部梯度则都为正,在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,使得收敛缓慢; 3. 含有幂运算,计算机比较耗时 |
tanh | 解决了Sigmoid函数的不是zero-centered输出问题 | 梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在 |
ReLu | 1. 解决了gradient vanishing问题 (在正区间);2. 计算速度非常快,只需要判断输入是否大于0;3. 收敛速度远快于sigmoid和tanh | 1. ReLU的输出不是zero-centered; 2.(Dead ReLU Problem)某些神经元可能永远不会被激活,导致相应的参数永远不能被更新 |
Leaky ReLu | 解决Dead ReLU Problem | Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU |
hard tanh | 硬双曲正切函数,其形状和tanh及ReLu相似,但不同于后两者,它是有界的 | 。。。 |
softplus | ReLu的平滑版本 | softplus表明隐藏单元类型的性能可能是非常反直觉的—因为它处处可导或者因为它不完全饱和,在实际应用中其性能并不优于ReLu |
ELU | ELU有ReLU的基本所有优点; 不会有Dead ReLU问题; 不会有Dead ReLU问题 | 计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU |
ReLu和它的扩展都基于它们的行为更加接近线性,使模型更容易优化。
softmax是一种用于输出的单元,有时也可以用作激活函数。softmax单元表示具有
k
k
k 个可能值的离散型随机变量的概率分布,可以作为一种开关。具体可参考softmax1、softmax2