激活函数
API
- torch activation functions api torch.nn
- keras activation functions api tf.keras.activations
- tensorflow activation functions api tf.nn
- wiki activation functions
性质
激活函数应该具备如下性质:
- 非线性:保证多层网络不退化成单层线性网络。
- 可微性:保证梯度或SubGradient的可计算性。
- 单调性:(非强制)保证单层网络是凸函数, mish例外。
S Model
Sigmoid
函数:
σ
(
x
)
=
1
1
+
e
−
x
\sigma \left( x\right) =\dfrac {1} {1+e^{-x}}
σ(x)=1+e−x1
导数:
σ
′
(
x
)
=
σ
(
x
)
⋅
(
1
−
σ
(
x
)
)
\sigma'(x) = \sigma(x) \cdot (1 - \sigma(x))
σ′(x)=σ(x)⋅(1−σ(x))
图像:
def Sigmoid(x):
return 1. / (1 + np.exp(-x))
- 优点
- 梯度平滑,求导容易。
- 输出映射在(0, 1)之间,单调连续,优化稳定。
- 缺点
- 计算量大:包含指数运算。
- 梯度消失:输入值较大或较小时,Sigmoid导数则接近于零,在反向传播时,参数更新较慢。
- Sigmoid 的输出不是0中心(Zero-Centered)。
- 参考
Tanh
等价于Sigmoid的平移与缩放,函数:
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
(
x
)
2
tanh'(x) = 1 - tanh(x)^{2}
tanh′(x)=1−tanh(x)2
图像:
def tanh(x):
return np.sinh(x)/np.cosh(x)
- 优点
- 比Sigmoid函数收敛速度更快。
- tanh(x) 的梯度消失问题比 sigmoid 要轻。
- 相比Sigmoid函数,输出是以 0 为中心 Zero-Centered.
- 缺点
- 计算量大。
- 梯度消失。
Linear Unit
ReLU
整流线性单元,Rectified Linear Unit.
E
L
U
(
x
)
=
{
x
,
i
f
x
>
0
0
i
f
x
≤
0
ELU(x)=\begin{cases} x, & if & x>0 \\ 0 & if & x \leq 0 \end{cases}
ELU(x)={x,0ififx>0x≤0
图像
指数线性单元,Exponential Linear Unit.
E
L
U
(
x
)
=
{
x
,
i
f
x
>
0
α
(
e
x
−
1
)
i
f
x
≤
0
ELU(x)=\begin{cases} x, & if & x>0 \\ \alpha (e^x-1) & if & x \leq 0 \end{cases}
ELU(x)={x,α(ex−1)ififx>0x≤0
图像:
def ELU(x, alpha):
return x if x > 0 else alpha * (exp(x) - 1)
- 优点
- 能避免死亡 ReLU 问题:x 小于 0 时函数值不再是 0,因此可以避免 dying relu 问题。
- 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化。
- 缺点
- 计算耗时:包含指数运算。
- α 值是超参数,需要人工设定。
SELU
尺度指数线性单元,Scale Exponential Linear Unit. 参见论文 Self-Normalizing Neural Networks.
S
E
L
U
(
x
)
=
λ
{
x
,
i
f
x
>
0
α
(
e
x
−
1
)
i
f
x
≤
0
SELU(x)=\lambda \begin{cases} x, & if & x>0 \\ \alpha (e^x-1) & if & x \leq 0 \end{cases}
SELU(x)=λ{x,α(ex−1)ififx>0x≤0
图像:
def SELU(x, alpha, scale):
return scale * x if x > 0 else scale * alpha * (exp(x) - 1)
- 优点
- SELU 激活能够对神经网络进行自归一化(self-normalizing)。
- 不可能出现梯度消失或爆炸问题,论文附录的定理 2 和 3 提供了证明。
- 缺点
- 应用较少,需要更多验证。
Soft Model
Softmax
Softmax 用于多分类工程,将多个输入映射到(0-1] 区间内,可以看成概率,从而进行多分类。
假设数组 X X X, x i x_i xi 表示 X X X中的第 i i i个元素,那么,该元素的Softmax值为:
S o f t m a x ( x i ) = e x i ∑ j e x j Softmax(x_i)=\frac {e^{x_i}} {\sum_j e^{x_j}} Softmax(xi)=∑jexjexi
Softmin
S o f t m i n ( x i ) = e − x i ∑ j e − x j Softmin(x_i)=\frac {e^{-x_i}} {\sum_j e^{-x_j}} Softmin(xi)=∑je−xje−xi
LogSoftmax
L o g S o f t m i n ( x i ) = L o g ( e x i ∑ j e x j ) LogSoftmin(x_i)=Log\left(\frac {e^{x_i}} {\sum_j e^{x_j}}\right) LogSoftmin(xi)=Log(∑jexjexi)