1.Sigmoid
公式:
σ
(
x
)
=
1
1
+
e
−
x
\sigma \left ( x \right ) =\frac{1}{1+e^{-x} }
σ(x)=1+e−x1
σ
′
(
x
)
=
σ
(
x
)
[
1
−
σ
(
x
)
]
\sigma '\left ( x \right ) = \sigma\left ( x \right ) \left [ 1-\sigma \left ( x \right ) \right ]
σ′(x)=σ(x)[1−σ(x)]
图像:
Sigmoid函数的图像是一个S形的曲线,它在x轴上的范围是(−∞,+∞),而在y轴上的范围是(0,1)。当x趋近于负无穷时,σ(x)趋近于0;当x趋近于正无穷时,σ(x)趋近于1。这种特性使得Sigmoid函数非常适合用作二分类问题的输出层激活函数,因为它可以将任意实数值压缩到0和1之间,从而可以被解释为概率值。
优点:
- Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层;
- 连续函数便于求导。
缺点:
- 会有梯度弥散;
- 不是关于原点对称;
- 计算exp时费时。
2.Tahn
公式:
a
=
t
a
n
h
(
z
)
=
e
z
−
e
−
z
e
z
+
e
−
z
a=tanh\left ( z \right ) =\frac{e^{z}-e^{-z} }{e^{z}+e^{-z}}
a=tanh(z)=ez+e−zez−e−z
t
a
n
h
(
z
)
=
2
s
i
g
m
o
i
d
(
2
x
)
−
1
tanh\left ( z \right ) =2sigmoid\left ( 2x \right ) -1
tanh(z)=2sigmoid(2x)−1
图像:
优点:
- 解决了原点对称的问题;
- 比Sigmoid更快。
缺点:
具有软饱和性,从而造成梯度消失,在两边一样有趋近于0的情况。
3.Relu
公式:
f
(
x
)
=
{
x
if
x
≥
0
0
if
x
<
0
f\left ( x \right ) =\begin{cases} x & \text{ if } x\ge 0 \\ 0 & \text{ if } x< 0 \end{cases}
f(x)={x0 if x≥0 if x<0
f
(
x
)
=
m
a
x
(
0
,
x
)
f\left ( x \right ) =max\left ( 0,x \right )
f(x)=max(0,x)
图像:
优点:
- 收敛速度比s型和tanh快;
- 在x>0区域上,不会出现梯度消失、饱和的问题;
- 计算复杂度低,只要一个阈值就可以得到激活值。
缺点:
梯度消失没有完全解决,在x<0时,梯度为0,相当于神经元死亡且不会复活。
4.Leaky Relu
公式:
y
i
=
{
x
i
if
x
i
≥
0
x
i
a
i
if
x
i
<
0
y_{i} =\begin{cases} x_{i} & \text{ if } x_{i}\ge 0 \\ \frac{x_{i} }{a_{i} } & \text{ if } x_{i}< 0 \end{cases}
yi={xiaixi if xi≥0 if xi<0
a
i
a_{i}
ai是
(
1
,
+
∝
)
区间
\left ( 1, + \propto\right ) 区间
(1,+∝)区间内的固定参数。
图像:
优点:
解决神经死亡的问题。
5.softmax
softmax函数可以被视为一种特殊的激活函数,特别是在处理多分类问题时。主要用于多分类问题的输出层,它将一个含任意实数的K维向量压缩(或归一化)到另一个K维实向量中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。
公式:
σ
(
z
)
j
=
e
z
j
∑
k
=
1
K
e
z
k
\sigma \left ( z \right ) _{j} =\frac{e^{z_{j} } }{ {\textstyle \sum_{k=1}^{K}}e^{z_{k} } }
σ(z)j=∑k=1Kezkezj
其中,
z
z
z是输入向量,
z
j
z_{j}
zj是
z
z
z中的第
j
j
j个元素,
K
K
K是类别的总数,
σ
(
z
)
j
\sigma \left ( z \right ) _{j}
σ(z)j是输出向量中对应于第
j
j
j个类别的概率值。
softmax在数值上可能出现上溢和下溢的问题。
- 上溢发生的原因:
当softmax函数中的某个输入值 z j z_{j} zj非常大时,计算 e z j e^{z_{j} } ezj会导致结果变得非常大,甚至可能超过计算机能表示的最大浮点数范围,这种情况通常发生在某个类别得分远高于其他类别时。
- 解决办法:
对输入向量进行平移,即减去输入向量中的最大值 M = m a x ( z j ) M=max(z_{j}) M=max(zj)。这样,新的输入向量中的最大值变为0,从而避免了上溢。
- 下溢发生的原因:
当softmax函数中的某个输入值 z j z_{j} zj非常小时,计算 e z j e^{z_{j} } ezj会得到一个近似0的正数。如果多个这样的数相加,和可能依然很小,接近计算机的浮点数下界,导致后续计算中被当成0来处理。特别是这些数被作为分母时,可能导致除以0的错误。
- 解决办法:
通过减去输入向量中的最大值
M
=
m
a
x
(
z
j
)
M=max(z_{j})
M=max(zj)可以避免,因为
e
z
j
−
M
e^{z_{j}-M }
ezj−M至少包含一个值为1的项(当
z
j
=
M
z_{j}=M
zj=M时),这样分母不会为0。
此外,如果softmax的输出需要进一步计算(如计算对数似然),则可以直接对其进行对数化处理,这样可以在数值上更精确。