线性修正单元(ReLU)


论文笔记

论文:Deep Sparse Rectifier Neural Networks.Xavier Glorot.2010

1.解决了什么

解决了部分梯度消失的问题。

2.使用的方法

提出ReLU (Rectified Linear Unit)激活函数。

3.实验结果

网络无需预训练即可达到或超越使用AE或DBN预训练的模型,性能大幅提升,是深度学习里程碑式的突破。

4.待解决的问题

梯度消失并未全解决,而且ReLU会导致出现神经元死亡的现象。


    2010年之前,神经网络通常使用sigmoid或tanh作为激活函数。尽管sigmoid更加符合生物学原理,但是实际表现上看tanh要更好。 本文提出的激活函数的形式是:

y=max(x,0)

    这个函数看起来很简单,但是实际效果确非常好,超越了之前所有的激活函数。论文里作者把它叫做rectifier activation function,现在也称为Rectified Linear Unit,简称ReLU,中文叫线性整流器或线性修正单元。曲线表示如下:

timg.gif 

    在本文提出之前,训练深层的神经网络往往需要先将权重预训练,通常使用的是自编码器或深度信念网路。这是因为sigmoid和tanh存在严重的梯度消失问题,无法对网络的前几层进行有效训练。ReLU部分的解决了这一问题,使得网络无需预训练权重。此外神经网络中使用ReLU还可以得到稀疏表示,这更符合生物学原理。


生物学激活函数对比

    对于生物神经元来说,激活函数是由突触接受到的信号作为输入,firing rate作为输出的函数。当激活函数对一个强兴奋性输入模式(strongly excitatory input pattern)的负输入的输出(响应)是一个强抑制(strongly inhibitory)时,被称为反对称激活函数(antisymmetric);输出是强兴奋(strongly excitatory)时被称为对称激活函数(symmetric)。当激活函数输入为负,输出为零时称为单侧激活函数。目前计算神经科学和机器学习存在的差异如下:

  1. 对大脑能量消耗的研究表明,神经元对信息的编码是稀疏分布的,估计同时活动的神经元比例在1%到4%之间。这是表示的丰富性(richness of representation)和能量消耗之间的权衡。对于人工神经网络来说,如果没有正则化,比如L1正则,普通的前馈神经网络没有稀疏的特性。

  2. 一般的生物神经元激活模型,称为leaky integrate-and-fire,输入电流和firing rate之间的函数关系如下:

2.png

    其中t_ref是不应期(两次放电之间的时间间隔),I是输入电流,V_r是the resting potential,V_th是threshold potential,V_th>V_r,R、E、tau是膜电阻、电位和时间常数。

    而深度神经网络使用的激活函数sigmoid和tanh,都等价于一个线性变换。tanh的均值为0,但它关于0反对称,这在生物学上是不存在的。生物神经元激活函数和人工神经网络的激活函数曲线如下:

3.png


 稀疏表示

    稀疏的概念首先由计算神经科学引入,现在广泛在各个领域被应用。使用传统的激活函数,神经网络的稀疏表示并不是完全的稀疏,只是权值较小达不到真正的0。使用单侧激活函数ReLU,可以得到真正的稀疏表示。稀疏性表示的优点:

1.信息解离

    稠密的表示是高度纠缠的(entangled),输入的改变都会影响表示变量中的大多数元素。相反,如果表示是稀疏和鲁棒的,那么输入微小的改变几乎不会影响非零特征。

2.高效可变尺寸的表示

    不同的输入可能包含不同数量的信息,使用可变大小的数据结构更方便地表示这些信息。通过改变被激活的神经元的数量,模型可以控制给定输入的有效维数和所需的精度。

3.线性可分

    稀疏表示是线性可分的,或更容易与较少的非线性机制可分,因为信息是在一个高维空间中表示。此外,这可以反应原始的数据格式,在与文本相关的应用示例中,原始输入已经非常稀疏了。

4.稀疏分布

    密集表示是最丰富的表示,其效率可能比纯粹的局部表示要高得多(Bengio, 2009)。稀疏表示的效率仍然是指数级的,指数的幂是非零特征的数量。

    虽然,在同样多的神经元的情况下强制太多的稀疏性也许不利于推断性能,因为稀疏表示减小模型的容量。


ReLU的优缺点

    有文献指出视觉皮层的神经元很少处于饱和状态,这表明视觉皮层的激活函数可以用ReLU来近似。ReLU的函数形式是rectified(x)=max(0,x),是一个单侧函数,对负输入的响应是0(即无响应)。可以通过联合两个参数共享的ReLU获得对称或无对称的激活函数。

优点

    ReLU激活函数会使网络稀疏。比如对网络的参数随机初始化之后,大约50%的隐层神经元输出的值是0,加入正则化之后,0的比例会更大。这不仅更符合生物学特征,而且计算效率要更高。稀疏的神经网络和ReLU曲线图如下:

4.png

    对于给定的输入,只有一部分神经元是激活的,在激活神经元上的计算是线性的。可以把模型看做指数数量的共享参数的线性模型(exponential number of linear models that share parameters)。对于激活的神经元,由于是线性激活,不会存在梯度消失的现象,计算量也小。


神经元死亡

    使用ReLU使得模型训练的时候很脆弱,容易出现神经元死亡的现象。比如一个很大的梯度经过 ReLU激活函数,更新参数之后,会使得这个神经元不会对任何数据有激活现象 。 

    如果发生这种情况之后,经过 ReLU 的梯度永远都会是 0 ,也就意味着参数无法再更新了,因为 ReLU 激活函数本质上是一个不可逆的过程,因为它会直接去掉输入小于0的部分。在实际操作中可以通过设置比较小的学习率来避免这个小问题。


其它问题

    一个可能的问题是当输入为负时ReLU的输出为0,这阻碍反向传播。作者使用softplus激活函数进行训练对比。softplus是平滑版本的修正线性单元,只是这样没办法实现真正的稀疏,softplus函数形式:

5.png

    测试结果显示ReLU的效果要优于softplus,这表明ReLU有利于训练。因为还存在一些非零的神经元。作者假设只要梯度沿着某些路径传播,就不会太影响权重的更新。此外,With the credit and blame assigned to these ON units rather than distributed more evenly, we hypothesize that optimization is easier.

    另一个问题是因为ReLU的单侧线性的,也就是无界函数,可能会导致某些问题。加上L1正则化可以避免这个问题,还可以增加稀疏性。

    此外,为了有效地表示数据中的对称/反对称特性,整流网络需要的隐藏单元是对称/反对称激活函数网络的两倍。

    最后一段没怎么看懂:

6.png


图像分类实验

    使用MNIST CIFAR10 NISTP NORB等数据集进行测试。对于除NORB数据外的所有实验,使用的模型是Stack Denoising Auto-Encoder(堆栈去噪自编码器),有三个隐藏层,每层1000个神经元。当使用tanh时损失函数为交叉熵,当使用softplus和ReLU时损失函数为平方误差。使用SGD训练,batch_size=10。增加系数为0.001的L1正则化。

    考虑到激活函数不对称的问题,作者将其中一半神经元的输出值乘以-1, 这可以抵消每一层的平均激活值,可解释为抑制性神经元,也可以简单地解释为在数值上平衡激活的一种方法。

    自编码器的输入噪声数据产生过程:每个像素有0.25的概率被设为0。学习率使用0.1 0.01 0.001 0.0001四种。结果如下:

7.png

    从上图中,我们可以发现:ReLU在多数情况下优于其它的激活函数。此外,作者还比较了平均稀疏度和测试误差之间的关系:

8.png

    There is an average exact sparsity (fraction of zeros) of the hidden layers of 83:4% on MNIST,72:0% on CIFAR10, 68:0% on NISTP and 73:8%on NORB。Figure3中的零比例是通过改变L1正则系数实现的,MNIST数据集上大约80%稀疏度能获得最佳效果。

    在深度信念网络中使用ReLU提高性能,使用stacked denoising auto-encoder在NORB数据集上训练能到测试误差16%以下。

    作者还比较了无监督测试效果:

9.png

    证实了Erhan等人(2010)的结论,即双曲正切激活的网络在任何大小的标记数据集的无监督预训练下都得到了改善(即使所有训练集都标记了)。但是对ReLU来说,当无监督数据很多时,半监督学习可以提高性能;但当所有的数据都有标签时,预训练是多余的。对比tanh,ReLU可以最大化的利用标记和未标记的数据。


文字情感识别实验

    略。。


结论

    ReLU很好用。


首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于