1. 引言
通常情况下,激活函数往往返回0到1的数值。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。激活函数通常由各种各样的种类,但是他们一般的特点在于倒数简单,方便计算可以节省求导和网络训练时间。
2. 常见的激活函数
这里推荐一个有意思的图,使用小人描绘了各种各样的激活函数,如下所示:
接下来,我们从中挑选重要的激活函数由浅入深地进行讲解。
3. 二元阶跃函数
二元阶跃函数是最简单的激活函数之一,它基于这样一个事实:如果求和的结果大于或等于0,则结果为1,如果小于0,则结果为0。
f(x) = 1, x >= 0
= 0, x < 0
上述激活函数的图示如下:
4. 线性激活函数
线性激活函数是输出与输入成比例的函数。
该函数对输入的加权和不做任何处理,只返回给定的值。
5. Sigmoid 激活函数
Sigmoid
函数将输入的值转换为(0,1),如果输入是非常小的负数,那么输出就是0;如果输入是非常大的正数,输出就是1。其计算公式如下:
f(x) = 1 / (1 - e^(-x))
该函数图例如下:
同时该激活函数的特点如下:
- 收敛缓慢
- 边界介于0和1之间
- 梯度反向传递时可能会导致梯度消失
我们重点观察其导数图像,如下所示:
上述图像中,梯度值仅在-3到3范围内有效,而该曲线图在其他区域变得非常平坦。这意味着,对于大于3或小于-3的值,函数将具有非常小的梯度。当梯度值接近零时,网络将停止学习,此时将导致梯度消失问题。
6. Tanh 激活函数
双曲正切激活函数将输入的值转换为(-1,1),如果输入是非常小的负数,那么输出就是-1;如果输入是非常大的正数,输出就是1。其计算公式如下:
f(x) = (e^x - e^(-x)) / (e^x + e^(-x))
该函数图例如下:
同时该激活函数的特点如下:
- 输出均值为0,其收敛速度相比sigmoid更快
- 边界基于-1和1之间
- 在循环神经网络中表现良好
我们重点观察其导数图像,如下所示:
观察上图,可以发现该函数依旧面临着类似于sigmoid激活函数梯度消失的问题。同时tanh函数的梯度相比sigmoid函数陡峭得多,梯度消失问题相比sigmoid函数有所缓解。
7. ReLU 激活函数
ReLU激活函数为改进后的线性激活函数,通过取消x<0 即只在输入保留正值来转换输入的值,其计算公式如下:
f(x) = max(0, x) = 0 for x < 0
x for x >= 0
样例图像如下:
同时该激活函数的特点如下:
- 稀疏激活,仅在x>0时进行激活
- 没有上边界
- 梯度值在x<0是为零。由于这个原因,在反向传播过程中,一些神经元的权重和偏差没有更新。该特性对图像表现良好。
- 在卷积网络中表现良好。
- 由于只有一定数量的神经元被激活,与sigmoid和tanh函数相比,ReLU函数的计算效率要高得多。
8. SoftMax 激活函数
Softmax
函数将输出转换为概率形式的表示,使得输出的所有概率之和为1。
在多类分类的情况下,它最常用作神经网络最后一层的激活函数。
SoftMax
激活函数的特点如下:
- 当我们想要以概率的形式输出时,就使用它
- 边界介于0和1之间
- 它用于归一化多类类别预测输出值
- 用于多分类最后一层性能良好
9. 如何选择激活函数
针对不同类型的网络来进行针对性的选择,常用的归纳如下所示:
针对需要解决问题本身来针对性的选择,归纳如下:
10. 总结
本文重点介绍了几种常见的激活函数,并给出了相应的计算公式和图例说明,同时最后针对不同的网络类型和任务类型进行了相应的归纳。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。