Deep Sparse Rectifier Neural Networks
ReLU.pdf
https://blog.csdn.net/dhaiuda/article/details/100079475

使用relu的最终目的就是为了让神经网络更接近于生物神经网络。

主要工作

提出在深度神经网络中使用ReLU激活函数,ReLU激活函数的表现能力比tanh激活函数的更加好,训练完毕的神经网络具有一定的稀疏性

激活函数的表现能力是指什么? 神经网络的稀疏性又是指什么?

人工神经网络与生物神经网络有一定的相似性,例如CNN与生物视觉神经处理数据的形式往往相似

生物神经网络与人工神经网络的区别是什么?

一、大脑神经元通过稀疏且分布的方式编辑信息。什么是稀疏与分布?我的理解是,只有少部分神经元(研究显示只有1%到4%的神经元参与信息编辑)会参与信息的编辑,并且这些神经元的层级往往不一致,例如A神经元将B神经元的输出作为输入。在没有L1范式的情况下,使用sigmoid与tanh的人工神经网络往往不具有稀疏性。

二、生物神经网络与人工神经网络的激活函数形式差异较大,如下图:

image.png
基于上述两点,我们有了ReLU激活函数,如下图:

image.png
可以看到,ReLU激活函数在形式上更加接近生物神经网络。当神经元的输入大于0时,神经元才有输出,否则,神经元输出为0,即神经元死亡,通过ReLU训练的神经网络往往具有很好的稀疏性,只有一部分神经元会参与计算,从而更好的模拟了生物神经网络

稀疏性带来的优势

一、如果神经网络是稠密的,即神经元的输出都大于0,那么输入的一个微小改变,都可能在一次又一次的前向传播中被放大,导致神经网络的输出发生很大变化,这就会导致整个神经网络不够健壮,若一个神经网络是稀疏的,即部分神经元的输出为0,输入的微小改变也许就不会在一次又一次的前向传播中被放大,导致神经网络输出发生大的变化。【如果网络是稠密的,这样网络会变得比较敏感,不太合适】

二、不同的输入蕴含的信息不同,如果我们想用一个数据结构去表示信息,则这种数据结构的大小应该是可变的,否则对于某些输入就无法进行表示,如果一个神经网络是稀疏的,我们就可以通过激活的神经元数量来表示不同大小的信息

三、线性可分,如果数据是稀疏的,则可能是线性可分的【有个超平面可以分割多面体】

四、对于神经网络而言,不论是稀疏亦或是稠密,模型都具有一定的复杂度,仍然可以拟合复杂的数据,但过分稀疏会导致模型的复杂度下降,模型的拟合能力大大下降

插句题外话,一般来说,为了提高模型的复杂度,CNN神经网络采用的是加宽与加深网络,但是网络的加深也会带来一些问题,例如难以收敛、梯度消失等,但是已经有相应的解决方案了,例如BN算法、残差结构、一系列的初始化方法

ReLU神经元的优势

一、带来的神经网络稀疏性不仅与生物神经元更加相似,而且在数学上具有一定优势(见上一节)
二、虽然每个神经元都是线性输出,但对于给定输入,神经网络的非线性可通过是否激活某个神经元体现
三、若神经元被激活,则激活函数的导数为1,梯度在激活的神经元之间传输不会出现梯度消失的情况,但是总体仍然可能出现梯度消失,此时大量神经元死亡,网络无法更新,loss函数无法进一步下降,可以考虑使用MSRA初始化
四、由于不需要进行指数等费时的运算,计算速度快

ReLU神经元的劣势


一、有些学者可能假设ReLU在x<0处取0不利于优化,但是通过实验,发现ReLU有利于有监督网络的优化
二、由于激活函数是没有上界的,有可能出现神经网络输出为NaN的情况