激活函数

一、常用激活函数

Sigmoid 函数

每个激活函数(或非线性函数)的输入都是一个数字,然后对其进行某种固定的数学操作。Sigmoid 函数的曲线如下图所示:

数学公式如下所示:

它对于神经元的激活频率有良好的解释:从完全不激活(0)到在求和后的最大频率处的完全饱和(saturated)的激活(1)。不过它也有主要缺点:

  1. Sigmoid 函数饱和使梯度消失。Sigmoid 神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。在反向传播的时候,如果局部梯度太小,那么相乘的结果会接近 0。
  2. 函数的输出不是零中心的。
Tanh 函数

和 Sigmoid 函数一样,也存在饱和问题,但是它的输出是零中心的,所以 tanh 比 Sigmoid 函数更常用。注意 tanh 神经元是一个简单放大的 sigmoid 神经元,具体说来就是:

公式如下:

ReLU 函数

函数公式为 图像如下:

优点:

  1. 相较于 sigmoid 和 tanh 函数,ReLU 对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的。
  2. sigmoid 和 tanh 神经元含有指数运算等耗费计算资源的操作,而 ReLU 可以简单地通过对一个矩阵进行阈值计算得到。

缺点:

  1. 在训练的时候,ReLU单元比较脆弱并且可能“死掉”。Leaky ReLU 是为解决“ReLU死亡”问题的尝试。ReLU中当x<0时,函数值为0。而Leaky ReLU则是给出一个很小的负数梯度值,比如0.01。
Maxout 函数

Maxout 是对 ReLU 和 leaky ReLU 的一般化归纳,它的函数是:。ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当时候)。这样 Maxout 神经元就拥有 ReLU 单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的 ReLU 单元)。然而和 ReLU 对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。

二、总结

  1. 在同一个网络中混合使用不同类型的神经元是非常少见的,虽然没有什么根本性问题来禁止这样做。
  2. 用 ReLU 非线性函数。注意设置好学习率,或许可以监控你的网络中死亡的神经元占的比例。如果单元死亡问题困扰你,就试试 Leaky ReLU 或者 Maxout,不要再用 sigmoid 了。也可以试试 tanh,但是其效果应该不如 ReLU 或者 Maxout。

三、参考文章

  1. CS231n课程笔记翻译:神经网络笔记1(上)

你可能感兴趣的:(激活函数)