所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
如果使用线性激活函数,那么输入跟输出之间的关系为线性的,无论神经网络有多少层都是线性组合。
使用非线性激活函数是为了增加神经网络模型的非线性因素,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。
输出层可能会使用线性激活函数,但在隐含层都使用非线性激活函数。
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
公式:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
对其求导数:
σ ′ ( x ) = e − x ( 1 + e − x ) 2 = σ ( x ) ( 1 − σ ( x ) ) \sigma^{'} (x) = \frac{e^{-x}}{(1+e^{-x})^2} = \sigma(x) (1-\sigma(x)) σ′(x)=(1+e−x)2e−x=σ(x)(1−σ(x))
图示:

优点:
缺点:
双曲正切函数。
公式:
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 ) = 1 − t a n h 2 ( x ) tanh'(x) = 1 - tanh^2(x) tanh′(x)=1−tanh2(x)
图示:

与 sigmoid 函数的关系:
2 σ ( x ) − 1 = t a n h ( x 2 ) 2 \sigma(x) -1 = tanh(\frac{x}{2}) 2σ(x)−1=tanh(2x)
优点:
缺点:
线性整流函数。
公式:
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
对其求导数:
f
′
(
x
)
=
{
0
,
i
f
x
<
0
;
1
,
i
f
x
>
0
;
f'(x) = \bigg\{
图示:

优点:
缺点:
但是dead ReLU是一个动态的问题,而并不是一个永久性问题,只要不是所有输入都小于0,神经元就可以保持活跃,权重可以更新,网络可以继续学习。因此,dead的relu也是可以复活的。
渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。这里的斜率都是确定的。
公式:
f
(
x
)
=
{
x
,
i
f
x
≥
0
;
α
x
,
i
f
x
<
0
;
α
∼
U
(
l
,
u
)
,
l
<
u
a
n
d
l
,
u
∈
[
0
,
1
)
f(x) = \bigg\{
对其求导数:
f
′
(
x
)
=
{
1
,
i
f
x
≥
0
;
α
,
i
f
x
<
0
;
α
∼
U
(
l
,
u
)
,
l
<
u
a
n
d
l
,
u
∈
[
0
,
1
)
f'(x) = \bigg\{
图示:

优点:
缺点:
参数整流线性单元(Parametric Rectified linear unit),也是用来解决ReLU带来的dead relu的问题。PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。
公式:
f ( x ) = m a x ( α x , x ) f(x) = max(\alpha x , x) f(x)=max(αx,x)
对其求导数:
f
′
(
x
)
=
{
1
,
i
f
x
≥
0
;
α
,
i
f
x
<
0
;
f'(x) = \bigg\{
图示:

其中 α \alpha α 是通过反向传播学习出来的,而不是预先设定的.
优点:
缺点:
指数线性单元(ELU).
公式:
f
(
x
)
=
{
x
,
i
f
x
≥
0
;
α
(
e
x
−
1
)
,
i
f
x
<
0
;
f(x) = \bigg\{
其中 α = 1 \alpha = 1 α=1
对其求导数:
f
′
(
x
)
=
{
1
,
i
f
x
≥
0
;
α
e
x
,
i
f
x
<
0
;
f'(x) = \bigg\{
图示:

优点:
缺点:
缩放指数线性单元(scaled exponential linear units).
公式:
f
(
x
)
=
λ
{
x
,
i
f
x
>
0
;
α
(
e
x
−
1
)
,
i
f
x
≤
0
;
f(x) = \lambda \bigg\{
其中 α ≈ 1.6733 \alpha \approx 1.6733 α≈1.6733, λ ≈ 1.0507 \lambda \approx 1.0507 λ≈1.0507
对其求导数:
f
′
(
x
)
=
{
λ
,
i
f
x
>
0
;
λ
α
e
x
,
i
f
x
≤
0
;
f'(x) = \bigg\{
ReLU的变形.
公式:
R e L U 6 ( x ) = m i n ( 6 , m a x ( 0 , x ) ) ReLU6(x) = min(6, max(0, x)) ReLU6(x)=min(6,max(0,x))
对其求导数:
f
′
(
x
)
=
{
0
,
i
f
x
<
0
o
r
x
>
6
;
1
,
i
f
x
>
0
;
f'(x) = \bigg\{
图示:

优点:
缺点:
公式:
f ( x ) = x ∗ σ ( β x ) f(x) = x * \sigma(\beta x) f(x)=x∗σ(βx)
其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅)是sigmoid函数. β \beta β 可以是固定的,也可以是训练出来的. 如果 β = 1 \beta = 1 β=1 就和SiLU是一样的.
对其求导数:
f
′
(
x
)
=
σ
(
β
x
)
+
β
x
⋅
σ
(
β
x
)
(
1
−
σ
(
β
x
)
)
=
σ
(
β
x
)
+
β
x
⋅
σ
(
β
x
)
−
β
x
⋅
σ
(
β
x
)
2
=
β
x
⋅
σ
(
x
)
+
σ
(
β
x
)
(
1
−
β
x
⋅
σ
(
β
x
)
)
=
β
f
(
x
)
+
σ
(
β
x
)
(
1
−
β
f
(
x
)
)
图示:

优点:
缺点:
MobileNetV3上面使用的激活函数.对swish进行优化
公式:
h-swish(x) = x ReLU6(x+3) 6 \text{h-swish(x)} = x \frac{\text{ReLU6(x+3)}}{6} h-swish(x)=x6ReLU6(x+3)
或者
h-swish(x)
=
{
0
,
i
f
x
≤
−
3
x
,
i
f
x
≥
3
x
(
x
+
3
)
6
,
o
t
h
e
r
w
i
s
e
\text{h-swish(x)} = \bigg \{
对其求导数:
f
′
(
x
)
=
{
0
,
i
f
x
≤
−
3
1
,
i
f
x
≥
3
2
x
+
3
6
,
o
t
h
e
r
w
i
s
e
f'(x) = \bigg \{
图示:

优点:
缺点:
可以看作是ReLU的平滑.
公式:
f ( x ) = l n ( 1 + e x ) f(x) = ln(1+e^x) f(x)=ln(1+ex)
对其求导数:
f
′
(
x
)
=
1
1
+
e
−
x
f'(x) = \frac{1}{1+ e^{-x}}
f′(x)=1+e−x1
它的导数是sigmoid函数
图示:

优点:
缺点:
YOLOv4采用的激活函数
公式:
f
(
x
)
=
x
∗
tanh
(
softplus
(
x
)
)
f(x) = x * \text{tanh} (\text{softplus}(x))
f(x)=x∗tanh(softplus(x))
对其求导数:
f ′ ( x ) = e x ( 4 ( x + 1 ) + 4 e 2 x + e 3 x + e x ( 4 x + 6 ) ) ( 2 e x + e 2 x + 2 ) 2 f'(x) = \frac{e^x(4(x+1) + 4e^{2x} + e^{3x} + e^x(4x+6))}{(2e^x+e^{2x}+2)^2} f′(x)=(2ex+e2x+2)2ex(4(x+1)+4e2x+e3x+ex(4x+6))
图示:

优点:
缺点:
**softmax通常来讲是激活函数,但是softmax函数要与交叉熵损失函数一起使用来避免数值溢出的问题。**所以,在我们的深度学习框架中,在网络构造中通常是看不见softmax函数的,而在我们调用交叉熵损失函数时(cross-entropy),框架会在cross-entropy之前自动为我们添加softmax函数。