激活函数的目的:增加神经网络的非线性(只有线性的情况下网络的表达能力有限)
激活函数 | sigmoid | relu | tanh | ELU |
---|---|---|---|---|
输出区间 | (0,1) | (0,∞\infty∞) | (-1,1) | (-1,∞\infty∞) |
导数区间 | (0,14\frac{1}{4}41) | 0,1 | [0,1) | (0,1] |
优点 | 平滑;易求导; | 计算量小;缓解梯度弥散和梯度爆炸问题;避免过拟合 | 原点对称 | 能够缓解梯度弥散,稀疏性使得对输入变化或噪声更鲁棒 |
缺点 | 计算量大;存在梯度消失问题 | 没有完全解决梯度弥散,神经元有可能一旦死亡就不再复活 | 存在梯度消失问题 | _ |
是否0均值 | 否 | 否 | 是 | 接近于0 |
sigmoid
σ(x)=11+e−x,
\sigma(x) = \frac{1}{1+e^{-x}},
σ(x)=1+e−x1,
σ′(x)=ex(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)2ex=σ(x)[1−σ(x)]
Relu
Relu(x)={0,x<0x,x≥0
Relu(x)=\left\{
\begin{aligned}
0, x<0 \\
x, x \geq 0
\end{aligned}
\right.
Relu(x)={0,x<0x,x≥0
tanh
tanh(x)=ex−e−xex+e−x
tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}}
tanh(x)=ex+e−xex−e−x
tanh′(x)=1−tanh2(x) tanh^{' }(x)= 1-tanh^2(x) tanh′(x)=1−tanh2(x)
ELU(x)={α(ex−1),x<0x,x≥0
ELU(x)=\left\{
\begin{aligned}
\alpha (e^x-1), x<0 \\
x, x \geq 0
\end{aligned}
\right.
ELU(x)={α(ex−1),x<0x,x≥0
【ELU】Exponential Linear Unit 指数线性单元
其他激活函数:
(1)softsign(x)=x∣x∣+1
(1)softsign(x)=\frac{x}{|x|+1}
(1)softsign(x)=∣x∣+1x
(2)hard_sigmoid(x)={0,x<−2.50.2x+0.5,−2.5≤x≤2.50,x>2.5
(2)hard\_sigmoid(x)=\left\{
\begin{aligned}
0, x < -2.5 \\
0.2x+0.5, -2.5\leq x\leq 2.5 \\
0,x >2.5
\end{aligned}
\right.
(2)hard_sigmoid(x)=⎩⎪⎨⎪⎧0,x<−2.50.2x+0.5,−2.5≤x≤2.50,x>2.5
【hard_sigmoid(x)】sigmoid的改进,计算量较少,但不平滑;
(3)LeakRelu(x)={αx,x<0x,x≥0
(3)LeakRelu(x)=\left\{
\begin{aligned}
\alpha x, x<0 \\
x, x \geq 0
\end{aligned}
\right.
(3)LeakRelu(x)={αx,x<0x,x≥0
【LeakRelu】Relu的改进版,LeakyReLU在神经元未激活时,它仍允许赋予一个很小的梯度,避免ReLU死掉的问题;这里的α\alphaα是一个不可学习的固定值;
【PRelu】Relu的改进版,公式和LeakRelu是一样的,但PRelu的α\alphaα是一个可学习的数组,每个x对应一个α\alphaα;
(4)softplus(x)=log(ex+1)
(4)softplus(x)=log(e^x+1)
(4)softplus(x)=log(ex+1)
【softplus】relu的平滑版;
(4)softmax(x)=exi∑j=0nxj
(4)softmax(x)=\frac{e^{x_i}}{\sum^n_{j=0}x_j}
(4)softmax(x)=∑j=0nxjexi
【softplus】relu的平滑版;
参考文献:
https://zhuanlan.zhihu.com/p/46255482