算法基础---ReLU激活函数及其变种

1 ReLU激活函数提出的背景

1)降低计算量。

早期使用的sigmoid函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多;

2)解决梯度消失的问题

对于深层网络,sigmoid函数反向传播时,很容易就会出现 梯度消失 的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练;

3)缓解过拟合

因为ReLU会使一部分神经元的输出为0,这样就照成了网络的稀疏性,并且减少了参数的相互依存关系,可以缓解过拟合问题的发生。

2 ReLU基本概念

那么什么是ReLU呢?ReLU(rectified linear unit)修正线性单元,ReLU起源于神经科学的研究:2001年,Dayan,Abott从生物学角度模拟出脑神经元接受信号更精准的激活模型,如下图:

fig1

为此,抽象出来了ReLU激活函数的形式,表现如下:

è¿éåå¾çæè¿°

ReLU函数具有如下的特点:

1)分段线性函数,所有的负数为0,正值不变。这种成为单侧抑制的操作,使神经网络中的神经元具备了稀疏激活性。在CNN中,当模型增加N层之后,理论上ReLU神经元的激活率会下降2的N次方倍;正是因为稀疏性,可以有效缓解过拟合问题的产生;

2)ReLU的非线性体现在“转折点”的位置,其表达能力更强。ReLu由于非负区间的梯度为常数,依次不存在梯度消失的问题,使得模型的收敛速度维持在一个稳定的状态。

sigmoid和tanh的梯度在饱和区域变大非常平缓,接近于0,这就容易造成梯度消失,减缓收敛速度。而ReLU的梯度是一个常数,有助于解决深度网络的收敛问题。

3 ReLU激活函数的变种

3.1 变种的原因:

ReLU虽然有上面提到的“降低计算量”,“解决梯度消失问题”,“缓解过拟合问题”这三个重要的特点,但是,在实际使用过程中,会有如下的一些问题:

1)输出不是zero-centered

2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。

有两个主要原因可能导致这种情况产生:

    (1) 非常不幸的参数初始化,这种情况比较少见

    (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。

解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
 

为了解决ReLU函数的这些问题,有些人对ReLU函数做了一些变种。

3.2 Leaky ReLU函数

Leaky Relu函数的提出是为了解决Dead ReLU problem,是将前半段设成\small \alpha x,而不是0,通常a = 0.01。这样,Leaky Relu的图像如下:

\small LeakyRelu(x) = \left\{\begin{matrix} x (x\geq 0) & \\ \alpha x (x<0))& \end{matrix}\right.

3.3 PReLU

Parameter-ReLU,简称PReLU,是对LReLU的改进,PReLU的出发点是不将a = 0.01,而是根据数据来定,可以自适应地从数据中学习参数。PReLU具有收敛速度快,错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。

3.4 RReLU

Randomized ReLU,简称RReLU,是对LReLU的另一种改进。在训练的时候a保持在给定范围内取样的随机变量,而在之后测试中就变成了固定值。PReLU在一定程度上能起到正则效果。

3.5 LReLU,PReLU和RReLU对比

在论文Empirical Evaluation of Rectified Activations in Convolution Network中,作者对比了RReLU、LReLU、PReLU、ReLU 在CIFAR-10、CIFAR-100、NDSB网络中的效果。

3.6 Bounded ReLU

这个是我在阅读armnn的文档中,知道支持了Bounded ReLU。这个概念出现的论文是:Convolutional Deep Belief Networks on CIFAR-10。http://www.cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf

先看看激活函数体:

\small BReLU(x)=\left\{\begin{matrix} 0 & & x<0 \\ x & & 0\leq x \leq n\\ n & & x > n \end{matrix}\right.

n值是可以调整的,比如上面这个我们就称为Bounded ReLU-N。在TensorFlow中提供了BReLU-6,或是直接写成了ReLU6。https://www.tensorflow.org/api_docs/python/tf/nn/relu6

为什么是6呢,论文中提到:

1)最多取3位(最多8位),为.f保留4/5位

2)鼓励模型更早地学习稀疏特性。

3)相当于想象每个ReLU单位只由6个复制的偏置伯努利单位组成,而不是含影射量。

4)使网络为定点推理做好准备是很有用的。如果你解开上限,你会丢失太多的位到Q和Q.f数。

From Paper:

 First, we cap the units at 6, so our ReLU activation function is y = min(max(x, 0), 6). In our tests, this encourages the model to learn sparse features earlier. In the formulation of [8], this is equivalent to imagining that each ReLU unit consists of only 6 replicated bias-shifted Bernoulli units, rather than an infinute amount. We will refer to ReLU units capped at n as ReLU-n units.

4 ReLU函数的用法

现在主流的做法,会在做完relu之后,加一步batch normalization,尽可能保证每一层网络的输入具有相同的分布[1]。而最新的paper[2],他们在加入bypass connection之后,发现改变batch normalization的位置会有更好的效果。大家有兴趣可以看下。

 

 

 

参考文献

【1】各种激活函数的比较https://blog.csdn.net/piaodexin/article/details/77162766

【2】https://blog.csdn.net/cherrylvlei/article/details/53149381

【3】https://blog.csdn.net/tyhj_sf/article/details/79932893 

【4】https://www.cnblogs.com/bmsl/p/9005431.html

觉得文章不错,欢迎按赞。

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值