(1)sigmoid函数
- Sigmoid函数饱和使梯度消失。当神经元的激活在接近0或1处时会饱和,在这些区域梯度几乎为0,这就会导致梯度消失,几乎就有没有信号通过神经传回上一层。
- Sigmoid函数的输出不是零中心的。因为如果输入神经元的数据总是正数,那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这将会导致梯度下降权重更新时出现z字型的下降。
(2)Tanh函数
- Tanh解决了Sigmoid的输出是不是零中心的问题,但仍然存在饱和问题。为了防止饱和,现在主流的做法会在激活函数前多做一步batch normalization,尽可能保证每一层网络的输入具有均值较小的、零中心的分布。
(3)ReLU函数
- ReLU非线性函数图像如下图所示。相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用;sigmoid和tanh在求导时含有指数运算,而ReLU求导几乎不存在任何计算量。对比sigmoid类函数主要变化是:1)单侧抑制;2)相对宽阔的兴奋边界;3)稀疏激活性。
- 存在问题:ReLU单元比较脆弱并且可能“死掉”,而且是不可逆的,因此导致了数据多样化的丢失。通过合理设置学习率,会降低神经元“死掉”的概率。
(4)Leaky ReLU
- 函数公式是
其中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gy19WaYH-1592373215766)(en-resource://database/517:2)] 是很小的负数梯度值,比如0.01,Leaky ReLU非线性函数图像如下图所示。这样做目的是使负轴信息不会全部丢失,解决了ReLU神经元“死掉”的问题。更进一步的方法是PReLU,即把 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3sMOXdh-1592373215767)(en-resource://database/517:2)] 当做每个神经元中的一个参数,是可以通过梯度下降求解的。
(5)Maxout
- Maxout是对ReLU和leaky ReLU的一般化归纳,函数公式是[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t44BSbap-1592373215768)(en-resource://database/519:1)]
Maxout非线性函数图像如下图所示。Maxout具有ReLU的优点,如计算简单,不会 saturation,同时又没有ReLU的一些缺点,如容易go die。