激活函数
Sigmoid
σ ( x ) = 1 1 + e − x \sigma(x)=\dfrac{1}{1+e^{-x}} σ(x)=1+e−x1
导数
σ ′ ( x ) = ( 1 − σ ( x ) ) σ ( x ) \sigma'(x)=(1-\sigma(x))\sigma(x) σ′(x)=(1−σ(x))σ(x)
优点
- 将数值压缩到 ( 0 , 1 ) (0,1) (0,1)之间
- 曲线平滑,便于求导
缺点
- 容易饱和输出,导致回传梯度消失,参数无法更新
- 不是零均值, w i w_i wi的梯度都是正数或者负数,梯度“之字形”更新,收敛满
- exp函数计算复杂度高
tanh
t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\dfrac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+e−xex−e−x
优点
- 将数值压缩到 ( − 1 , 1 ) (-1,1) (−1,1)之间
- zero-centered
- 曲线平滑,便于求导
缺点
- 容易饱和输出
- exp计算复杂度高
ReLU
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
优点
- 在正区间不会饱和
- 计算复杂度极低
- 收敛速度比sigmoid和tanh快
缺点
- 不是零均值
- 不压缩数据,数据幅度会随着网络加深不断增大
- 神经元坏死(Dead ReLU)(采用合适的参数初始化和调整学习率可以缓解这种现象)
Leaky ReLU
f ( x ) = m a x ( 0.01 x , x ) f(x)=max(0.01x,x) f(x)=max(0.01x,x)
优点
- 不会造成饱和
- 计算复杂度低
- 收敛速度比Sigmoid和tanh快
- 近似零均值
- 解决ReLU的神经元坏死问题
缺点
- 数值幅度不断增大
- 实际表现不一定比ReLU好
ELU (Exponential Linear Units)
f ( x ) = { x α ( e x p ( x ) − 1 ) x ≤ 0 f(x)=\begin{cases} x&\\ \alpha(exp(x)-1)&x\le0 \end{cases} f(x)={xα(exp(x)−1)x≤0
优点
- 不会造成饱和
- 收敛速度比Sigmoid和tanh快
- 近似零均值
- 解决ReLU的神经元坏死问题
缺点
- exp计算复杂度高
- 实际表现不一定比ReLU好
激活函数的选择
- 首选ReLU,但是要注意初始化和学习率设置
- 不要使用Sigmoid
- 可以使用tanh,不过效果一般不太好
- 其他激活函数可以尝试