神经网络中的各种激活函数

来源:互联网 发布:excel数据抽样 编辑:程序博客网 时间:2024/05/21 22:31


一、激活函数简介

1.激活函数的作用

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。不一定是step function,可以是其他形式的非线性函数。

使用激活函数的目的是给神经元引入非线性因素,从而使神经网络能够解决线性不可分的问题,比如最简单的异或。Hornik证明,只需一个包含足够多的神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。因此使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。则多层网络退化为单层网络。

2. 软饱和与硬饱和

在ICML2016的一篇论文Noisy Activation Functions中,作者将激活函数定义为一个几乎处处可微的 h : R → R 。

在实际应用中,我们还会涉及到以下的一些概念:
a.饱和

当一个激活函数h(x)满足
这里写图片描述
时我们称之为右饱和
当一个激活函数h(x)满足
这里写图片描述
时我们称之为左饱和
Bengio 教授等[1]将只有在极限状态下偏导数等于0的函数定义为软饱和激活函数。软饱和激活函数既满足左饱和又满足右饱和
这里写图片描述

相对应的,对任意的x,如果存在常数c,当x>c时恒有 h′(x)=0则称其为右硬饱和,当x比c小时恒 有h′(x)=0则称其为左硬饱和。若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为硬饱和


二、常用的激活函数

1. Sigmoid函数

公式:


曲线:

也叫 Logistic 函数,用于隐层神经元输出,在特征相差比较复杂或是相差不是特别大时效果比较好。

优点:
1.Sigmoid函数的输出映射在(0,1)之间,可以用来做二分类,单调连续,输出范围有限,优化稳定,可以用作输出层。
2.求导容易。
缺点:
1.由于其软饱和性,反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练,导致训练出现问题。
2.激活函数计算量大,反向传播求误差梯度时,求导涉及除法。
3.其输出并不是以0为中心的。这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。

因为如果输入都是正数的话(如f=wx+b中每个元素都>0),那么关于w的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式 f而定),这将会导致梯度下降权重更新时出现 z 字型的下降。当然,如果是按 batch 去训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。因此,该问题相对于上面的神经元饱和问题来说只是个小麻烦,没有那么严重。

Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,要对激活函数求导,sigmoid向下传导的梯度包含了一个f’(x) 因子(sigmoid关于输入的导数, ),由sigmoid 原函数及导数的图形:

可知,导数从 0 开始很快就又趋近于 0 了,一旦输入落入饱和区,f’(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失
一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。梯度消失问题至今仍然存在,但被新的优化方法有效缓解了,例如DBN中的分层预训练,Batch Normalization的逐层归一化,Xavier和MSRA权重初始化等代表性技术。
Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。 (0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数(详见下一篇博文)。

2. tanh函数

双曲正切函数公式:



曲线:



取值范围为[-1,1]。
tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。

优点:
1.比Sigmoid函数收敛速度更快。
2.相比Sigmoid函数,其输出以0为中心,因此实际应用中 tanh 会比 sigmoid 更好,因为 tanh 的输出均值比 sigmoid 更接近 0,SGD会更接近 natural gradient[4](一种二次优化技术),从而降低所需的迭代次数[1]。
缺点:
还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失[2]。

3. ReLU函数

Rectified Linear Unit(ReLU) - 用于隐层神经元输出

线性整流函数公式:


曲线:


输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入,为左侧硬饱和激活函数。

由于 x>0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。

优点:
1.Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多。


2.提供了神经网络的稀疏表达能力。(relu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,也就是说这个神经元不会经历训练,即所谓的稀疏性,与梯度消失的区别是梯度消失即弥散是指梯度很小网络训练不动,这个是直接不训练使得网络稀疏)在Bengio教授的Deep Sparse Rectifier Neural Network[3]一文中被认为是ReLU带来网络性能提升的原因之一。但后来的研究发现稀疏性并非性能提升的必要条件,文献 RReLU [4]也指明了这一点。

缺点:
1.训练的时候很”脆弱”,随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0,也就是说,ReLU神经元在训练中不可逆地死亡了。如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

2.ReLU的输出具有偏移现象[5],即输出均值恒大于零。偏移现象和神经元死亡会共同影响网络的收敛性。

ReLU的改进
常见的改进的激活函数有LReLU、PReLU和ELU等。

LReLU
如图,当ai比较小而且固定的时候,我们称之为LReLU。LReLU最初的目的是为了避免梯度消失。但在一些实验中,我们发现LReLU对准确率并没有太大的影响。很多时候,当我们想要应用LReLU时,我们必须要非常小心谨慎地重复训练,选取出合适的a,LReLU的表现出的结果才比ReLU好。因此有人提出了一种自适应地从数据中学习参数的PReLU。
PReLU
PReLU[6]是ReLU 和 LReLU的改进版本,具有非饱和性,负半轴斜率a可学习而非固定。可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。:

ELU

ELU[7]融合了sigmoid和ReLU,具有左侧软饱性。其正式定义为:

右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU减少了正常梯度与单位自然梯度之间的差距,它的输出均值接近于零,所以收敛速度更快。
Maxout
Maxout是ReLU的推广,其发生饱和是一个零测集事件(measure zero event)。正式定义为:

Maxout网络能够近似任意连续函数,且当w2,b2,…,wn,bn为0时,退化为ReLU。 其实,Maxout的思想在视觉领域存在已久。例如,在HOG特征里有这么一个过程:计算三个通道的梯度强度,然后在每一个像素位置上,仅取三个通道中梯度强度最大的数值,最终形成一个通道。这其实就是Maxout的一种特例。

Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。

4. Softmax函数

Softmax - 用于多分类神经网络输出

公式


举个例子来看公式的意思:


就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。

为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。


三、不同激活函数的比较

1. sigmoid和ReLU的比较

sigmoid 的梯度消失问题,ReLU 的导数就不存在这样的问题,它的导数表达式如下:


曲线如图


对比sigmoid类函数主要变化是:
1)单侧抑制
2)相对宽阔的兴奋边界
3)稀疏激活性。

2. sigmoid和softmax的比较

softmax is a generalization of logistic function that “squashes”(maps) a K-dimensional vector z of arbitrary real values to a K-dimensional vector σ(z) of real values in the range (0, 1) that add up to 1.

sigmoid将一个real value映射到(0,1)的区间,用来做二分类。

而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。

二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题

softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:


利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:


最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为


另一个类别概率的为


这与 logistic回归是一致的。

softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
  
多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。


四、如何选择

选择的时候,就是根据各个函数的优缺点来配置,例如:
如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout。
通常来说,很少会把各种激活函数串起来在一个网络中使用的。
最好不要用 sigmoid,可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
不同的激活函数和损失函数之间注意搭配,详见下一篇博文。

参考文献:
1. LeCun, Y., et al., Backpropagation applied to handwritten zip code recognition. Neural computation, 1989. 1(4): p. 541-551.
2. Glorot, X. and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. AISTATS 2010.
3. Glorot, X., A. Bordes, and Y. Bengio. Deep Sparse Rectifier Neural Networks.AISTATS 2011.
4. Xu, B., et al. Empirical Evaluation of Rectified Activations in Convolutional Network. ICML Deep Learning Workshop 2015.
5. Djork-Arné Clevert, T.U., Sepp Hochreiter. Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). ICLR 2016.
6. He, K., et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. ICCV 2015.

参考网址:
常用激活函数比较
浅谈深度学习中的激活函数
深度学习中的激活函数导引
常用激活函数的总结与比较

原创粉丝点击