浅谈CNN中的激活函数

1. 引言

通常情况下,激活函数往往返回0到1的数值。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。激活函数通常由各种各样的种类,但是他们一般的特点在于倒数简单,方便计算可以节省求导和网络训练时间。

2. 常见的激活函数

这里推荐一个有意思的图,使用小人描绘了各种各样的激活函数,如下所示:
浅谈CNN中的激活函数_第1张图片
接下来,我们从中挑选重要的激活函数由浅入深地进行讲解。

3. 二元阶跃函数

二元阶跃函数是最简单的激活函数之一,它基于这样一个事实:如果求和的结果大于或等于0,则结果为1,如果小于0,则结果为0。

f(x) = 1, x >= 0
     = 0, x < 0

上述激活函数的图示如下:
浅谈CNN中的激活函数_第2张图片

4. 线性激活函数

线性激活函数是输出与输入成比例的函数。
该函数对输入的加权和不做任何处理,只返回给定的值。
浅谈CNN中的激活函数_第3张图片

5. Sigmoid 激活函数

Sigmoid函数将输入的值转换为(0,1),如果输入是非常小的负数,那么输出就是0;如果输入是非常大的正数,输出就是1。其计算公式如下:

f(x) = 1 / (1 - e^(-x))

该函数图例如下:
浅谈CNN中的激活函数_第4张图片

同时该激活函数的特点如下:

  • 收敛缓慢
  • 边界介于0和1之间
  • 梯度反向传递时可能会导致梯度消失

我们重点观察其导数图像,如下所示:
浅谈CNN中的激活函数_第5张图片
上述图像中,梯度值仅在-3到3范围内有效,而该曲线图在其他区域变得非常平坦。这意味着,对于大于3或小于-3的值,函数将具有非常小的梯度。当梯度值接近零时,网络将停止学习,此时将导致梯度消失问题。

6. Tanh 激活函数

双曲正切激活函数将输入的值转换为(-1,1),如果输入是非常小的负数,那么输出就是-1;如果输入是非常大的正数,输出就是1。其计算公式如下:

f(x) = (e^x - e^(-x)) / (e^x + e^(-x))

该函数图例如下:
浅谈CNN中的激活函数_第6张图片

同时该激活函数的特点如下:

  • 输出均值为0,其收敛速度相比sigmoid更快
  • 边界基于-1和1之间
  • 在循环神经网络中表现良好

我们重点观察其导数图像,如下所示:
浅谈CNN中的激活函数_第7张图片
观察上图,可以发现该函数依旧面临着类似于sigmoid激活函数梯度消失的问题。同时tanh函数的梯度相比sigmoid函数陡峭得多,梯度消失问题相比sigmoid函数有所缓解。

7. ReLU 激活函数

ReLU激活函数为改进后的线性激活函数,通过取消x<0 即只在输入保留正值来转换输入的值,其计算公式如下:

f(x) = max(0, x) = 0 for x < 0
                   x for x >= 0

样例图像如下:
浅谈CNN中的激活函数_第8张图片
同时该激活函数的特点如下:

  • 稀疏激活,仅在x>0时进行激活
  • 没有上边界
  • 梯度值在x<0是为零。由于这个原因,在反向传播过程中,一些神经元的权重和偏差没有更新。该特性对图像表现良好。
  • 在卷积网络中表现良好。
  • 由于只有一定数量的神经元被激活,与sigmoid和tanh函数相比,ReLU函数的计算效率要高得多。

8. SoftMax 激活函数

Softmax函数将输出转换为概率形式的表示,使得输出的所有概率之和为1。

在多类分类的情况下,它最常用作神经网络最后一层的激活函数。
浅谈CNN中的激活函数_第9张图片
SoftMax激活函数的特点如下:

  • 当我们想要以概率的形式输出时,就使用它
  • 边界介于0和1之间
  • 它用于归一化多类类别预测输出值
  • 用于多分类最后一层性能良好

9. 如何选择激活函数

针对不同类型的网络来进行针对性的选择,常用的归纳如下所示:
浅谈CNN中的激活函数_第10张图片
针对需要解决问题本身来针对性的选择,归纳如下:
浅谈CNN中的激活函数_第11张图片

10. 总结

本文重点介绍了几种常见的激活函数,并给出了相应的计算公式和图例说明,同时最后针对不同的网络类型和任务类型进行了相应的归纳。

您学废了吗?

在这里插入图片描述
关注公众号《AI算法之道》,获取更多AI算法资讯。

你可能感兴趣的:(深度学习,cnn,深度学习,神经网络)