1. 激活函数
- 激活函数是人工神经网络的一个极其重要的特色;
- 激活函数决定一个神经元是否应该被激活,激活代表神经元接管的信息与给定的信息无关;
- 激活函数对输出信息进行非线性变换,而后将变换后的输入信息作为输出信息传给下一层神经元。
激活函数的作用
如果不必激活函数,每一层输入都是下层输出的线性函数,无论神经网络有多少层,最终的输入都是输出的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络能够任意迫近任何非线性函数 。
2. 常见激活函数品种介绍
2.1 sigmoid
函数定义:
$f(x)=\sigma(x)=\dfrac{1}{1+e^{-x}}\quad\text{}$
导数:
$f^{‘}(x)=f(x)(1-f(x))$
-
长处:
- $sigmoid$ 函数的输入映射在 (0,1) 之间,枯燥间断,输入范畴无限,优化稳固,能够用作输入层;
- 求导容易;
-
毛病:
- 因为其软饱和性,一旦落入饱和区梯度就会靠近于 0,依据反向流传的链式法则,容易产生梯度隐没,导致训练呈现问题;
- Sigmoid 函数的输入恒大于 0。非零中心化的输入会使得其后一层的神经元的输出产生偏置偏移(Bias Shift),并进一步使得梯度降落的收敛速度变慢;
- 计算时,因为具备幂运算,计算复杂度较高,运算速度较慢。
2.2 tanh
函数定义:
$f(x)=\tanh (x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}$
导数:
$f^{'}(x)=1-f(x)^2$
-
长处:
- tanh 比 sigmoid 函数收敛速度更快;
- 相比 sigmoid 函数,tanh 是以 0 为核心的;
-
毛病:
- 与 sigmoid 函数雷同,因为饱和性容易产生的梯度隐没;
- 与 sigmoid 函数雷同,因为具备幂运算,计算复杂度较高,运算速度较慢。
2.3 ReLU
函数定义:
$f(x)=\left\{\begin{array}{lr}0&x<0\\ x&x\geq0\end{array}\right.$
导数:
$f(x)^{\prime}= \begin{cases}0 & x<0 \\ 1 & x \geq 0\end{cases}$
-
长处:
- 收敛速度快;
- 相较于 sigmoid 和 tanh 中波及了幂运算,导致计算复杂度高,ReLU能够更加简略的实现;
- 当输出 x>= 0 时,ReLU 的导数为常数,这样可无效缓解梯度隐没问题;
- 当 x<0 时,ReLU 的梯度总是 0,提供了神经网络的稠密表达能力;
-
毛病:
- ReLU 的输入不是以 0 为核心的;
- 神经元坏死景象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;
- 不能防止梯度爆炸问题;
2.4 LReLU
函数定义:
$f(x)=\left\{\begin{array}{lr}\alpha x&x<0\\ x&x\geq0\end{array}\right.\quad$
导数:
$f(x)^{'}=\begin{cases}\alpha&x<0\\ 1&x\geq0\end{cases}$
-
长处:
- 防止梯度隐没;
- 因为导数总是不为零,因而可缩小死神经元的呈现;
-
毛病:
- LReLU 体现并不一定比 ReLU 好;
- 无奈防止梯度爆炸问题;
2.5 PReLU
函数定义 :
$f(\alpha,x)=\left\{\begin{array}{lr}\alpha x&x<0\\ x&x\geq0\end{array}\right.\quad$
导数:
$f\left(\alpha,x\right)’=\left\{\begin{array}{cc}\alpha&x<0\\ 1&x\ge0\end{array}\right.\quad$
-
长处:
- PReLU 是 LReLU 的改良,能够自适应地从数据中学习参数;
- 收敛速度快、错误率低;
- PReLU 能够用于反向流传的训练,能够与其余层同时优化;
2.6 RReLU
函数定义:
$f(\alpha,x)=\left\{\begin{array}{lr}\alpha x&x<0\\ x&x\geq0\end{array}\right.$
导数:
$f(\alpha,x)’=\left\{\begin{array}{lr}\alpha&x<0\\ 1&x\geq0\end{array}\right.$
长处:为负值输出增加了一个线性项,这个线性项的斜率在每一个节点上都是随机调配的(通常遵从均匀分布)。
2.7 ELU
函数定义:
$f(\alpha,x)=\left\{\begin{array}{lr}\alpha\left(e^x-1\right)&x<0\\ x&x\ge0\end{array}\right.$
导数:
$f(\alpha,x)^{‘}=\left\{\begin{array}{lr}f(\alpha,x)+\alpha&x<0\\ 1&x\geq0\end{array}\right.$
-
长处:
- 导数收敛为零,从而进步学习效率;
- 能失去负值输入,这能帮忙网络向正确的方向推动权重和偏置变动;
- 避免死神经元呈现。
-
毛病:
- 计算量大,其体现并不一定比 ReLU 好;
- 无奈防止梯度爆炸问题;
2.8 SELU
函数定义:
$f(\alpha,x)=\lambda\left\{\begin{array}{lr}\alpha\left(e^x-1\right)&x<0\\ x&x\geq0\end{array}\right.$
导数:
$f(\alpha,x)’=\lambda\left\{\begin{array}{lr}\alpha\left(e^x\right)&x<0\\ 1&x\geq0\end{array}\right.$
-
长处:
- SELU 是 ELU 的一个变种。其中 λ 和 α 是固定数值(别离为 1.0507 和 1.6726);
- 通过该激活函数后使得样本分布主动归一化到 0 均值和单位方差;
- 不会呈现梯度隐没或爆炸问题;
2.9 softsign
函数定义:
$f(x)=\dfrac{x}{|x|+1}\quad\text{}$
导数:
$f'(x)=\frac{1}{\left(1+\left|x\right|\right)^2}\quad\text{}$
-
长处:
- softsign 是 tanh 激活函数的另一个替代选择;
- softsign 是拥护称、去核心、可微分,并返回 −1 和 1 之间的值;
- softsign 更平坦的曲线与更慢的降落导数表明它能够更高效地学习;
-
毛病:
- 导数的计算比 tanh 更麻烦;
2.10 softplus
函数定义:
$f(x)=\ln\left(1+e^x\right)\quad\quad$
导数:
$f'(x)=\dfrac{1}{1+e^{-x}}$
-
长处:
- 作为 relu 的一个不错的替代选择,softplus 可能返回任何大于 0 的值。
- 与 relu 不同,softplus 的导数是间断的、非零的,无处不在,从而防止出现死神经元。
-
毛病:
- 导数经常小于 1,也可能呈现梯度隐没的问题。
- softplus 另一个不同于 relu 的中央在于其不对称性,不以零为核心,可能会障碍学习。
3. 多分类激活函数
3.1 softmax
softmax 函数个别用于多分类问题中,它是对逻辑斯蒂(logistic)回归的一种推广,也被称为多项逻辑斯蒂回归模型 (multi-nominal logistic mode)。假如要实现 k 个类别的分类工作,Softmax 函数将输出数据 xi 映射到第 i 个类别的概率 yi 如下计算:
$y_i=software\max\left(x_i\right)=\dfrac{e^{x_i}}{\sum_{j=1}^{k}e^{x_j}}$
显然,$0<yi<1$。图 13 给出了三类分类问题的 softmax 输入示意图。在图中,对于取值为 4、1 和 -4 的 x1、x2 和 x3,通过 softmax 变换后,将其映射到 (0,1) 之间的概率值。
因为 softmax 输入后果的值累加起来为 1,因而可将输入概率最大的作为分类指标(图 1 中被分类为第一类)。
也能够从如下另外一个角度来了解图 1 中的内容:给定某个输出数据,可失去其分类为三个类别的初始后果,别离用 x1、x2 和 x3 来示意。这三个初始分类后果别离是 4、1 和 -4。通过 Softmax 函数,失去了三个类别分类工作中以概率示意的更好的分类后果,即别离以 95.25%、4.71% 和 0.04% 归属于类别 1、类别 2 和类别 3。显然,基于这样的概率值,可判断输出数据属于第一类。可见,通过应用 Softmax 函数,可求取输出数据在所有类别上的概率分布。
3.2 swish
函数定义:
$f(x)=x\cdot\sigma(x)$
其中,σ 是 sigmoid 函数。
- swish 激活函数的一阶导数如下
$\begin{aligned}f’\left(x\right)=\sigma\left(x\right)+x\cdot\sigma\left(x\right)\left(1-\sigma\left(x\right)\right)\\ =\sigma\left(x\right)+x\cdot\sigma\left(x\right)-x\cdot\sigma\left(x\right)^2\\ =x\cdot\sigma\left(x\right)+\sigma\left(x\right)\left(1-x\cdot\sigma\left(x\right)\right)\\ =f\left(x\right)+\sigma\left(x\right)\left(1-f\left(x\right)\right)\end{aligned}$
- swish 激活函数的一阶和二阶导数的图形如
- 超参数版 swish 激活函数:
$f\left(x\right)=x\cdot\sigma\left(\beta x\right)$
-
长处:
- 当 x>0 时,不存在梯度隐没的状况;当 x<0 时,神经元也不会像 ReLU 一样呈现死亡的状况;
- swish 处处可导,间断润滑;
- swish 并非一个枯燥的函数;
- 晋升了模型的性能;
-
毛病:
- 计算量大;
3.3 hswish
函数定义:
$f\left(x\right)=x\frac{\mathrm{Re}L U6\left(x+3\right)}{6}\quad$
- 长处:与 swish 相比 hard swish 缩小了计算量,具备和 swish 同样的性质。
- 毛病:与 relu6 相比 hard swish 的计算量依然较大。
4. 激活函数的抉择
- 浅层网络在分类器时,sigmoid 函数及其组合通常成果更好。
- 因为梯度隐没问题,有时要防止应用 sigmoid 和 tanh 函数。
- relu 函数是一个通用的激活函数,目前在大多数状况下应用。
- 如果神经网络中呈现死神经元,那么 prelu 函数就是最好的抉择。
- relu 函数只能在暗藏层中应用。
- 通常,能够从 relu 函数开始,如果 relu 函数没有提供最优后果,再尝试其余激活函数。
5. 激活函数相干问题总结
5.1 为什么 relu 不是全程可微 / 可导也能用于基于梯度的学习?
从数学的角度看 relu 在 0 点不可导,因为它的左导数和右导数不相等;但在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的谬误,从而防止了这个问题。
5.2 为什么 tanh 的收敛速度比 sigmoid 快?
$\begin{array}{c}\tanh^{‘}\left(x\right)=1-\tanh\left(x\right)^{2}\in\left(0,1\right)\\ \\ s^{‘}\left(x\right)=s\left(x\right)\left(1-s\left(x\right)\right)\in\left(0,\dfrac{1}{4}\right]\end{array}$
由下面两个公式可知 tanh 引起的梯度隐没问题没有 sigmoid 重大,所以 tanh 收敛速度比 sigmoid 快。
5.3 sigmoid 和 softmax 有什么区别?
- 二分类问题时 sigmoid 和 softmax 是一样的,都是求 cross entropy loss,而 softmax 能够用于多分类问题。
- softmax 是 sigmoid 的扩大,因为,当类别数 k= 2 时,softmax 回归进化为 logistic 回归。
- softmax 建模应用的散布是多项式散布,而 logistic 则基于伯努利散布。
- 多个 logistic 回归通过叠加也同样能够实现多分类的成果,然而 softmax 回归进行的多分类,类与类之间是互斥的,即一个输出只能被归为一类;多 logistic 回归进行多分类,输入的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。
本文参加了「SegmentFault 思否写作挑战赛」,欢送正在浏览的你也退出