激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)

sigmoid函数

公式:

图像:

激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)_第1张图片

sigmoid可以将数据压缩到[0,1]范围内,可看作神经元的饱和放电率。在历史上,sigmoid函数非常有用,这是因为它对神经元的激活频率有很好的解释:从完全不激活(0)到求和后的最大频率处的完全饱和(saturated)的激活(1)。然而现在sigmoid激活函数使用较少,主要原因为两点:

  • 梯度消失。当神经元的激活在接近0或1时会饱和,导致其导数为0,则梯度为0。在反向传播时,这个(局部)梯度将会与整个损失函数关于该门单元输出的梯度相乘。因此,如果局部梯度非常小,那么相乘的结果也会接近0。这会导致几乎没有信号通过神经元传到权重再到数据。为了防止饱和现象出现,必须对权重矩阵初始化化特别留意。例,如果初始化权重过大,那么大多数神经元将会饱和,将导致网络不学习。
  • 梯度下降缓慢。由于sigmoid函数不是以0为中心的,因此不会改变输入值的正负。这意味着梯度下降将会进行的十分缓慢(这也是使用均值为0的数据的原因)。如果输入神经元的数据总是正数(比如f = w^T+bf=w^T+b中每个元素都大于零),那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数(具体依整个表达式f而定)。这将会大事梯度下降权重更新时出现z字型的下降。

Tanh激活函数

公式:

图像:

激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)_第2张图片

 Tanh函数将数值压缩到[-1,1]之间,以0为中心。但当输入饱和时仍会出现梯度消失。在使用激活函数时,Tanh激活函数相较于sigmoid函数使用更频繁一些。

ReLU(Rectified Linear Activation Function)激活函数

公式:f(x)=max{0,x}

图像:

激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)_第3张图片

优点:没有饱和区,不存在梯度消失问题,防止梯度弥散;稀疏性;没有复杂的指数运算,计算简单,效率提高;收敛速度较快,比sigmoid、tanh快很多,比sigmoid更符合生物学神经激活机制。

缺点:当输入的x<0时,仍会出现饱和现象,导致梯度消失,此现象被称为dead ReLU。因此使用时一般选用较小的正偏置进行初始化。例如:一个非常大的梯度流过一个ReLU神经元,更新过参数后,这个神经元再也不会对任何数据有激活现象。如果发生此情况,那么这个神经元的梯度就永远是0。在实际应用哄,如果learning rate很大,那么很有可能网络中40%的神经元都“dead”了。相反,如果learning rate较小,则此问题出现的不是很频繁。

Leaky ReLU激活函数

公式:f(x) = max(0.01x, x)

图像:

激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)_第4张图片

 为了改善ReLU的缺点,提出Leaky ReLU函数,其负区域有很小的斜率。

优点:计算速度较快,不会出现饱和现象。

ELU(Exponential Linear Units)激活函数

公式:

 图像:

激活函数(sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout)_第5张图片

 ELU激活函数具有ReLU的优点,其输出的均值接近于0。

缺点:其负区域容易出现饱和现象。

Maxout激活函数

公式:

 可以将Maxout激活函数看作是ReLU和Leaky ReLU激活函数的泛化。

优点:不会出现梯度饱和也不会出现梯度消失现象。

总结

ReLU较为通用的方法,Leaky ReLU/Maxout/ELU可以尝试使用,但它们更偏向于实验性.tanh也可以尝试。最好不要使用sigmoid。

参考:

http://t.zoukankan.com/limitlessun-p-9455015.html

https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit

你可能感兴趣的:(cs231n课程笔记,计算机视觉)