激活函数本质
增加神经网络的非线性型,具体而言为提升神经网络的拟合能力。
各类激活函数
relu
求导
f ′ ( x ) = { 1 i f x > 0 0 i f x ⩽ 0 f'(x)=\left\{\begin{matrix} 1 \ \ \ \ if \ x > 0 \\ 0 \ \ \ \ if \ x \leqslant 0 \end{matrix}\right. f′(x)={1 if x>00 if x⩽0
优点
- 收敛速度快很多。
- 简单,实现比较容易。
缺点
- 容易梯度消失,如下情况网络参数W的梯度会消失:W初始化为一个很小的正值,与正值x相乘后得到y(正值),之后y经过relu得到z,根据链式法则对W进行梯度计算得 ∂ L ∂ W = ∂ L ∂ z ∂ z ∂ y ∂ y ∂ W = ∂ L ∂ z ⋅ 1 ⋅ x \frac{\partial L}{\partial W}=\frac{\partial L}{\partial z}\frac{\partial z}{\partial y}\frac{\partial y}{\partial W}=\frac{\partial L}{\partial z}\cdot 1 \cdot x ∂W∂L=∂z∂L∂y∂z∂W∂y=∂z∂L⋅1⋅x,当 ∂ L ∂ z \frac{\partial L}{\partial z} ∂z∂L>0且较大时,W更新后的取值 W = W − α ∂ L ∂ z ⋅ 1 ⋅ x W=W-\alpha \frac{\partial L}{\partial z}\cdot 1 \cdot x W=W−α∂z∂L⋅1⋅x < 0,而当下一轮正值x与负值W相乘后得到y(负值),根据relu计算公式得到 ∂ z ∂ y \frac{\partial z}{\partial y} ∂y∂z为0,直接导致W的梯度 ∂ L ∂ W = ∂ L ∂ z ∂ z ∂ y ∂ y ∂ W \frac{\partial L}{\partial W}=\frac{\partial L}{\partial z}\frac{\partial z}{\partial y}\frac{\partial y}{\partial W} ∂W∂L=∂z∂L∂y∂z∂W∂y为0,进而W的取值得不到更新,进而形成梯度消失的现象。
- relu不会对数据做幅度压缩,所以如果数据的幅度不断扩张,那么模型的层数越深,幅度的扩张也会越厉害,最终会影响模型的表现。
- 在0点不可导,造成推导结果不稳定。
leaky relu
f
(
x
)
=
{
x
i
f
x
>
0
.
α
x
i
f
x
⩽
0
,
α
>
0
f(x)=\left\{\begin{matrix} x \ \ \ \ if \ x > 0 \ \ \ \ \ \ \ \ .\\ \alpha x \ \ \ if \ x\leqslant 0, \alpha > 0 \end{matrix}\right.
f(x)={x if x>0 .αx if x⩽0,α>0
求导
f ( x ) = { 1 i f x > 0 . α i f x ⩽ 0 , α > 0 f(x)=\left\{\begin{matrix} 1 \ \ \ \ if \ x > 0 \ \ \ \ \ \ \ \ .\\ \alpha \ \ \ if \ x\leqslant 0, \alpha > 0 \end{matrix}\right. f(x)={1 if x>0 .α if x⩽0,α>0
优点
- 能够有效避免relu造成的梯度消失问题。
prelu
f ( x ) = { x i if x i > 0 a i x i if x ⩽ 0 f(x) =\begin{cases} x_i & \text{ if } x_i>0 \\ a_i x_i & \text{ if } x\leqslant 0 \end{cases} f(x)={xiaixi if xi>0 if x⩽0
优点
- 多了一个参数,非线性变换的效果更好。
- 参数更新时采用的是momentum更新, Δ a i : = μ Δ a i + ϵ ∂ ε ∂ a i \Delta a_i := \mu\Delta a_i + \epsilon \frac{\partial \varepsilon }{\partial a_i} Δai:=μΔai+ϵ∂ai∂ε。
- 更新 a i a_i ai时不添加L2正则化,这样会将 a i a_i ai直接干到0附近。
sigmoid
求导
f ′ ( x ) = e − x 1 + e − x ⋅ 1 1 + e − x = ( 1 − f ( x ) ) ⋅ f ( x ) f'(x)=\frac{e^{-x}}{1+e^{-x}}\cdot \frac{1}{1+e^{-x}} = (1 - f(x))\cdot f(x) f′(x)=1+e−xe−x⋅1+e−x1=(1−f(x))⋅f(x)
优点
- 把实数压缩到[0,1]范围内,实现了真正意义上的激活。
缺点
- 容易饱和,输入过大或者过小的时候都会使得梯度变为0,因而导致更新很慢。
- 幂计算相对耗时。
tanh
f
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
f(x)=ex+e−xex−e−x
求导
f ′ ( x ) = 1 − f 2 ( x ) f'(x)=1-f^2(x) f′(x)=1−f2(x)
优点
- 和sigmoid类似,实现数据的压缩。
缺点
- 依然面临sigmoid的缺点,输入过大或者过小的时候都会使得梯度变为0,因而导致更新很慢。