常见激活函数
阶跃型函数
s g n sgn sgn函数
s
g
n
sgn
sgn函数定义为:
s
g
n
(
x
)
=
{
1
,
x
≥
0
;
0
,
x
<
0.
sgn(x) = \begin{cases} 1, & x \geq 0; \\ 0, & x< 0. \end{cases}
sgn(x)={1,0,x≥0;x<0.
s
g
n
(
x
)
sgn(x)
sgn(x)通过将输入转换为输出值
0
0
0和
1
1
1,来表示神经元的抑制(
0
0
0)和兴奋(
1
1
1)。

然而,由于 s g n ( x ) sgn(x) sgn(x)具有不连续、不光滑等不太好的性质,因此实际常用 S i g m o i d Sigmoid Sigmoid型函数做为激活函数。
S i g m o i d Sigmoid Sigmoid型函数
S i g m o i d Sigmoid Sigmoid型函数是指一类 S S S型曲线函数,为两端饱和函数。常用的 S i g m o i d Sigmoid Sigmoid型函数有 L o g i s t i c Logistic Logistic函数和 T a n h Tanh Tanh函数。
饱和
对于函数 f ( x ) f(x) f(x),若 x → − ∞ x \rightarrow -\infty x→−∞时,其导数 f ′ ( x ) → 0 f^\prime(x) \rightarrow 0 f′(x)→0,则称其为左饱和。
若 x → + ∞ x \rightarrow +\infty x→+∞时,其导数 f ′ ( x ) → 0 f^\prime(x) \rightarrow 0 f′(x)→0,则称其为右饱和。
当同时满足左、右饱和时,就称为两端饱和。
L o g i s t i c Logistic Logistic函数
L
o
g
i
s
t
i
c
Logistic
Logistic函数定义为:
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x) = \frac{1}{1+e^{-x}}
σ(x)=1+e−x1
L
o
g
i
s
t
i
c
Logistic
Logistic函数将输入映射为区间
(
0
,
1
)
(0,1)
(0,1)之间的输出值,当输入值在
0
0
0附近时,
S
i
g
m
o
i
d
Sigmoid
Sigmoid型函数近似为线性函数;当输入值靠近两端时,对输入进行抑制。输入越小,越接近于0;输入越大,越接近于1。这样的特点也和生物神经元类似,对一些输入会产生兴奋(输出为1),对另一些输入产生抑制(输出为0)。和感知器使用的阶跃激活函数相比,
L
o
g
i
s
t
i
c
Logistic
Logistic函数是连续可导的,其数学性质更好。
函数图如下:

T a n h Tanh Tanh函数
T
a
n
h
Tanh
Tanh函数定义为:
t
a
n
h
(
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
T
a
n
h
(
x
)
Tanh(x)
Tanh(x)函数将输入映射为区间
(
−
1
,
1
)
(-1,1)
(−1,1)上的输出值,可以看作是放大并平移的
L
o
g
i
s
t
i
c
Logistic
Logistic函数:
t
a
n
h
(
x
)
=
2
σ
(
2
x
)
−
1
tanh(x)=2\sigma(2x)-1
tanh(x)=2σ(2x)−1
函数图如下:


T
a
n
h
Tanh
Tanh函数的输出是零中心化的(Zero-Centered),而
L
o
g
i
s
t
i
c
Logistic
Logistic函数的输出恒大于0. 非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。
H a r d − L o g i s t i c Hard-Logistic Hard−Logistic函数和 H a r d − T a n h Hard-Tanh Hard−Tanh函数
L o g i s t i c Logistic Logistic函数和 T a n h Tanh Tanh函数都是 S i g m o i d Sigmoid Sigmoid型函数,具有饱和性,但是计算开销较大。因为这两个函数都是在中间(0 附近)近似线性,两端饱和。因此,这两个函数可以通过分段函数来近似。
H a r d − L o g i s t i c Hard-Logistic Hard−Logistic函数
以
L
o
g
i
s
t
i
c
Logistic
Logistic函数为例,其导数为
σ
′
(
x
)
=
σ
(
x
)
(
1
−
σ
(
x
)
)
\sigma^\prime(x)=\sigma(x)(1-\sigma(x))
σ′(x)=σ(x)(1−σ(x))。
L
o
g
i
s
t
i
c
Logistic
Logistic函数在
0
0
0附近的一阶泰勒展开(Taylor expansion) 为:
g
l
(
x
)
≈
σ
(
0
)
+
x
×
σ
′
(
0
)
=
0.5
+
0.25
x
\begin{aligned} g_l(x) & \approx \sigma(0)+x \times \sigma^\prime(0) \\ & =0.5+0.25x \end{aligned}
gl(x)≈σ(0)+x×σ′(0)=0.5+0.25x
这样
L
o
g
i
s
t
i
c
Logistic
Logistic函数可以用分段函数
h
a
r
d
−
l
o
g
i
s
t
i
c
(
𝑥
)
hard-logistic(𝑥)
hard−logistic(x)来近似:
h
a
r
d
−
l
o
g
i
s
t
i
c
(
𝑥
)
=
{
1
g
l
(
x
)
≥
1
g
l
0
<
g
l
(
x
)
<
1
0
g
l
(
x
)
≤
0
=
max
(
min
(
g
l
(
x
)
,
1
)
,
0
)
=
max
(
min
(
0.25
x
+
0.5
,
1
)
,
0
)
\begin{aligned} hard-logistic(𝑥) &= \begin{cases} 1 & g_l(x) \geq 1 \\ g_l & 0< g_l(x)<1 \\ 0 & g_l(x) \leq 0 \end{cases} \\ &= \max(\min(g_l(x),1),0) \\ &=\max(\min(0.25x+0.5,1),0) \end{aligned}
hard−logistic(x)=⎩⎪⎨⎪⎧1gl0gl(x)≥10<gl(x)<1gl(x)≤0=max(min(gl(x),1),0)=max(min(0.25x+0.5,1),0)

H a r d − T a n h Hard-Tanh Hard−Tanh函数
T
a
n
h
Tanh
Tanh函数在0 附近的一阶泰勒展开为:
g
t
(
x
)
≈
t
a
n
h
(
x
)
+
x
×
t
a
n
h
′
(
x
)
=
x
\begin{aligned} g_t(x) & \approx tanh(x)+x \times tanh^\prime(x) \\ & =x \end{aligned}
gt(x)≈tanh(x)+x×tanh′(x)=x
T
a
n
h
Tanh
Tanh函数也可以用分段函数
h
a
r
d
−
t
a
n
h
(
𝑥
)
hard-tanh(𝑥)
hard−tanh(x)来近似:
h
a
r
d
−
t
a
n
h
(
𝑥
)
=
{
1
g
t
(
x
)
≥
1
g
t
(
x
)
−
1
<
g
t
(
x
)
<
1
−
1
g
t
(
x
)
≤
−
1
=
max
(
min
(
g
t
(
x
)
,
1
)
,
−
1
)
=
max
(
min
(
x
,
1
)
,
−
1
)
\begin{aligned} hard-tanh(𝑥) &= \begin{cases} 1 & g_t(x) \geq 1 \\ g_t(x) & -1<g_t(x)<1 \\ -1 & g_t(x) \leq -1 \end{cases} \\ &= \max(\min(g_t(x),1),-1) \\ &=\max(\min(x,1),-1) \end{aligned}
hard−tanh(x)=⎩⎪⎨⎪⎧1gt(x)−1gt(x)≥1−1<gt(x)<1gt(x)≤−1=max(min(gt(x),1),−1)=max(min(x,1),−1)

R e L U ReLU ReLU函数
R
e
L
U
ReLU
ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier函数,是目前深度神经网络中经常使用的激活函数。
R
e
L
U
ReLU
ReLU实际上是一个斜坡(ramp)函数,定义为:
r
e
l
u
(
x
)
=
{
x
x
≥
0
0
x
<
0
=
m
a
x
(
0
,
x
)
\begin{aligned} relu(x) &= \begin{cases} x & x \geq 0 \\ 0 & x<0 \end{cases} \\ & = max(0,x) \end{aligned}
relu(x)={x0x≥0x<0=max(0,x)

优点:
采用
R
e
L
U
ReLU
ReLU的神经元只需要进行加、乘和比较的操作,计算上更加高效。
在优化方面,相比于
S
i
g
m
o
i
d
Sigmoid
Sigmoid型函数的两端饱和,
R
e
L
U
ReLU
ReLU函数为左饱和函数,且在
x
>
0
x > 0
x>0时导数为
1
1
1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。
缺点:
R
e
L
U
ReLU
ReLU函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。此外,如果参数在一次不恰当的更新后,第一个隐藏层中的某个
R
e
L
U
ReLU
ReLU神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为 死亡
R
e
L
U
ReLU
ReLU问题 (Dying
R
e
L
U
ReLU
ReLU Problem) ,并且也有可能会发生在其他隐藏层。
带泄露的 R e L U ReLU ReLU
带泄露的
R
e
L
U
ReLU
ReLU(Leaky ReLU) 在输入𝑥 < 0 时,保持一个很小的梯度
λ
\lambda
λ。这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活。带泄露的
R
e
L
U
ReLU
ReLU 的定义如下:
L
e
a
k
y
R
e
L
U
(
x
)
=
{
x
x
>
0
γ
x
x
≤
0
=
max
(
0
,
x
)
+
γ
min
(
0
,
x
)
\begin{aligned} LeakyReLU(x) &= \begin{cases} x & x>0 \\ \gamma x & x \leq 0 \end{cases} \\ & = \max(0,x)+\gamma \min(0,x) \end{aligned}
LeakyReLU(x)={xγxx>0x≤0=max(0,x)+γmin(0,x)
其中
γ
\gamma
γ是一个很小的常数,比如
0.01
0.01
0.01。当
γ
<
1
\gamma <1
γ<1 时,带泄露的
R
e
L
U
ReLU
ReLU 也可以写为:
L
e
a
k
y
R
e
L
U
(
x
)
=
max
(
x
,
γ
x
)
LeakyReLU(x) =\max(x,\gamma x)
LeakyReLU(x)=max(x,γx)
带参数的 R e L U ReLU ReLU
带参数的
R
e
L
U
ReLU
ReLU(Parametric ReLU,PReLU) 引入一个可学习的参数,不同神经元可以有不同的参数。对于第
i
i
i个神经元,其
P
R
e
L
U
PReLU
PReLU的定义为:
P
R
e
L
U
i
(
x
)
=
{
x
x
>
0
γ
i
x
x
≤
0
=
max
(
0
,
x
)
+
γ
i
min
(
0
,
x
)
\begin{aligned} PReLU_i(x) &= \begin{cases} x & x>0 \\ \gamma_i x & x \leq 0 \end{cases} \\ & = \max(0,x)+\gamma_i \min(0,x) \end{aligned}
PReLUi(x)={xγixx>0x≤0=max(0,x)+γimin(0,x)
其中
γ
i
\gamma_i
γi为
x
≤
0
x \leq 0
x≤0时函数的斜率。因此,
P
R
e
L
U
PReLU
PReLU是非饱和函数. 如果
γ
i
=
0
\gamma_i = 0
γi=0,那么
P
R
e
L
U
PReLU
PReLU就退化为
R
e
L
U
ReLU
ReLU。如果
γ
i
\gamma_i
γi为一个很小的常数,则
P
R
e
L
U
PReLU
PReLU可以看作带泄露的
R
e
L
U
ReLU
ReLU。
P
R
e
L
U
PReLU
PReLU可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。
E L U ELU ELU函数
E
L
U
ELU
ELU(Exponential Linear Unit,指数线性单元) 是一个近似的零中心化的非线性函数,其定义为:
E
L
U
(
x
)
=
{
x
x
>
0
γ
(
e
x
−
1
)
x
≤
0
=
max
(
0
,
x
)
+
min
(
0
,
γ
(
e
x
−
1
)
)
\begin{aligned} ELU(x) &= \begin{cases} x & x>0 \\ \gamma (e^x-1) & x \leq 0 \end{cases} \\ & = \max(0,x)+ \min(0,\gamma (e^x-1)) \end{aligned}
ELU(x)={xγ(ex−1)x>0x≤0=max(0,x)+min(0,γ(ex−1))
其中
γ
≥
0
\gamma \geq 0
γ≥0是一个超参数,决定
x
≤
0
x \leq 0
x≤0时的饱和曲线,并调整输出均值在0 附近。
S o f t p l u s Softplus Softplus函数
S
o
f
t
p
l
u
s
Softplus
Softplus函数可以看作是
R
e
c
t
i
f
i
e
r
Rectifier
Rectifier函数的平滑版本,其定义为:
S
o
f
t
p
l
u
s
(
𝑥
)
=
log
(
1
+
e
x
)
Softplus(𝑥) = \log(1 + e^x)
Softplus(x)=log(1+ex)
S
o
f
t
p
l
u
s
Softplus
Softplus函数其导数刚好是
L
o
g
i
s
t
i
c
Logistic
Logistic函数。
S
o
f
t
p
l
u
s
Softplus
Softplus函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活性。

S w i s h Swish Swish函数
S
w
i
s
h
Swish
Swish函数是一种 自门控(Self-Gated) 激活函数,定义为:
s
w
i
s
h
(
x
)
=
x
σ
(
β
x
)
swish(x) = x \sigma (\beta x)
swish(x)=xσ(βx)
其中
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)为
L
o
g
i
s
t
i
c
Logistic
Logistic函数,
β
\beta
β为可学习的参数或一个固定超参数。
σ
(
⋅
)
∈
(
0
,
1
)
\sigma(\cdot) \in (0,1)
σ(⋅)∈(0,1)可以看作是一种软性的门控机制。
σ
(
β
x
)
\sigma (\beta x)
σ(βx)接近于1 时,门处于“开”状态,激活函数的输出近似于
x
x
x本身;当
σ
(
β
x
)
\sigma (\beta x)
σ(βx) 接近于0 时,门的状态为“关”,激活函数的输出近似于0。

当
β
=
0
\beta = 0
β=0时,
S
w
i
s
h
Swish
Swish函数变成线性函数
x
/
2
x/2
x/2。
当
β
=
1
\beta = 1
β=1时,
S
w
i
s
h
Swish
Swish函数在
x
>
0
x>0
x>0时近似线性,在
x
<
0
x<0
x<0时近似饱和,同时具有一定的非单调性。
当
β
→
+
∞
\beta \rightarrow +\infty
β→+∞时,
σ
(
β
x
)
\sigma (\beta x)
σ(βx)趋向于离散的
0
−
1
0-1
0−1函数,
S
w
i
s
h
Swish
Swish函数近似为
R
e
L
U
ReLU
ReLU函数。
因此,
S
w
i
s
h
Swish
Swish函数可以看作是线性函数和
R
e
L
U
ReLU
ReLU函数之间的非线性插值函数,其程度由参数
β
\beta
β控制。
高斯误差线性单元
高斯误差线性单元(Gaussian Error Linear Unit,GELU)和
S
w
i
s
h
Swish
Swish函数比较类似,也是一种通过门控机制来调整其输出值的激活函数,定义为:
G
E
L
U
(
x
)
=
x
P
(
X
≤
x
)
GELU(x) = xP(X \leq x)
GELU(x)=xP(X≤x)
其中
P
(
X
≤
x
)
P(X \leq x)
P(X≤x)是高斯分布
N
(
μ
,
σ
2
)
\mathscr{N}(\mu,\sigma^2)
N(μ,σ2)的累积分布函数,其中
μ
,
σ
\mu,\sigma
μ,σ为超参数,一般设
μ
=
0
,
σ
=
1
\mu=0,\sigma=1
μ=0,σ=1即可。由于高斯分布的累积分布函数为
S
S
S 型函数,因此
G
E
L
U
GELU
GELU可以用
T
a
n
h
Tanh
Tanh函数或
L
o
g
i
s
t
i
c
Logistic
Logistic函数来近似:
G
E
L
U
(
x
)
≈
0.5
x
(
1
+
t
a
n
h
(
2
π
(
x
+
0.044715
x
3
)
)
)
GELU(x) \approx 0.5x(1+tanh(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)))
GELU(x)≈0.5x(1+tanh(π2(x+0.044715x3)))
或
G
E
L
U
(
x
)
≈
x
σ
(
1.702
x
)
GELU(x) \approx x \sigma(1.702x)
GELU(x)≈xσ(1.702x)
当使用
L
o
g
i
s
t
i
c
Logistic
Logistic函数来近似时,
G
E
L
U
GELU
GELU相当于一种特殊的
S
w
i
s
h
Swish
Swish函数。
M a x o u t Maxout Maxout单元
M
a
x
o
u
t
Maxout
Maxout单元也是一种分段线性函数。
S
i
g
m
o
i
d
Sigmoid
Sigmoid型函数、
R
e
L
U
ReLU
ReLU等激活函数的输入是神经元的净输入
𝑧
𝑧
z,是一个标量。而
M
a
x
o
u
t
Maxout
Maxout单元的输入是上一层神经元的全部原始输出,是一个向量
x
=
[
x
1
,
x
2
,
⋯
,
x
D
]
x=[x_1,x_2,\cdots,x_D]
x=[x1,x2,⋯,xD]。
每个
M
a
x
o
u
t
Maxout
Maxout单元有
K
K
K个权重向量
w
k
∈
R
D
w_k \in R^D
wk∈RD和偏置
b
k
(
1
≤
k
≤
K
)
b_k(1 \leq k \leq K)
bk(1≤k≤K)。对于输
入
x
x
x,可以得到
𝐾
𝐾
K个净输入
z
k
,
1
≤
k
≤
K
z_k,1 \leq k \leq K
zk,1≤k≤K。
z
k
=
w
k
T
+
b
k
z_k=w_k^T+b_k
zk=wkT+bk
其中
w
k
=
[
w
k
,
1
,
w
k
,
2
,
⋯
,
w
k
,
D
]
T
w_k=[w_{k,1},w_{k,2},\cdots,w_{k,D}]^T
wk=[wk,1,wk,2,⋯,wk,D]T 为第
𝑘
𝑘
k个权重向量。
M
a
x
o
u
t
Maxout
Maxout单元的非线性函数定义为:
m
a
x
o
u
t
(
x
)
=
max
k
∈
[
1
,
K
]
(
z
k
)
maxout(x) = \max_{k \in [1,K]}(z_k)
maxout(x)=k∈[1,K]max(zk)
M
a
x
o
u
t
Maxout
Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。
M
a
x
o
u
t
Maxout
Maxout激活函数 可以看作任意凸函数的分段线性近似,并且在有限的点上是不可微的。
参考:
[1] 邱锡鹏.神经网络与深度学习[D].
本文详细介绍了多种激活函数,包括阶跃型函数中的sgn函数,Sigmoid型函数如Logistic和Tanh函数,以及Hard-Logistic和Hard-Tanh函数。重点讨论了ReLU家族,包括ReLU、Leaky ReLU和PReLU,还有ELU、Softplus、Swish和GELU等函数。这些函数在神经网络中起到关键作用,影响网络的优化和性能。
2481

被折叠的 条评论
为什么被折叠?



