论文阅读-PReLU和深度网络初始化方法

来源:互联网 发布:ae cc2018 for mac 编辑:程序博客网 时间:2024/06/06 01:07

论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification (http://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdf)

该论文提出一种新的非线性修正激活函数PReLU,并且提出了一种初始化深度网络的方法。论文自2015年至现在(2017-07)已经被引用1200次左右——说明该激活函数及初始化方法的有效性。

首先,本文提出了一种Parametric Rectified LinearUnit (PReLU),提高了零值附近的模型拟合能力,但增加了一点额外的计算量和过拟合的风险。其次,针对ReLUs提出了更鲁棒的初始化方法。

最近在模式识别方面的成就主要有两个方向:1)更加复杂的模型提高模型的拟合能力,如增加网络的深度、扩展网络的宽度、更小的卷积核、各种非线性的激活函数、更复杂的层的设计等。2)设计高效的策略以克服过拟合问题,如采用有效的正则化技术、各种数据增强方法、大规模数据集等。

这些技术中,尤其以ReLU激活函数的应用最为广泛、有效。ReLU函数是非对称函数。也就意味着无论输入是否是零均值的或者对称分布的,经过ReLU的均值都不会小于零。本文主要对ReLU进行了理论分析,以考察对于收敛性和性能的影响。首先提出了PReLU——带有可学习参数的非线性激活函数——以提高准确率,其次,研究了训练极深模型的困难点,并提出了一种初始化方法,以改善训练深度网络时的收敛性。


左图是ReLU,右图是PReLU——其中负半轴的函数的参数a是可学习的,其中i为第i个通道,也就是每个通道(channel)都有一个可学习的PReLU激活函数————也可以是同一层的所有通道采用相同的a。当a很小时,如a=0.01时,PReLU变为Leaky ReLU,实验(原文中有参考文献)证实了LReLU对准确率的影响很小。a可以通过BP算法学习,同样是采用链式法则:


采用带有动量的方法更新a,其中μ为动量,ε为学习率,但不能使用权重衰减(weight decay,也就是L2正则化),weight decay会使a趋于零,从而蜕化为ReLU。实验中发现,a很少会大于1,a一般初始化为0.25。文中给出了一张表格,经过75个epoch的ImageNet 2012数据集,a的参数大多集中于0.1~0.5之间。

实验中的网络采用conv - pool - 4*conv - pool - 6*conv - pool - spp - 2*fc,并观察两个现象:1)第一层的a值比较大(0.681、0.596),说明在第一层正、负值基本上都能激活非线性单元。2)更深的层上的a值更小,说明PReLU变得更加“非线性”了。也就是说,在最初的层上,模型倾向于保留更多信息,而在更深的层中,模型倾向于将特征变得更加具有可分辨性。正如VGGnet强调的模型深度的重要性。

然后接下来就是用了Fisher信息矩阵进行理论分析(看不懂,然并卵)。研究Fisher信息矩阵的目的是为了将非线性激活函数的响应尽量的中心对称,让训练更加容易。如tanh函数是中心对称的,而sigmoid函数是非中心对称的。ReLu也是非对称的函数,均值必然为正数。而PReLU的负半轴的倾斜正式为了抵消一部分正均值的影响,也就是让均值尽量位于零均值附近。


正如上图,PReLU的均值略小于ReLU的均值。

本文的第二部分,是提出一种新的初始化权重的方法。虽然ReLU的网络相对容易训练,但是从正态分布中采样初始化权重的方式仍然存在一些问题—— 很难收敛。而之前提出的Xavier初始化方法是从均匀分布中采样初始化,但该方法是基于“激活函数是线性”的假设。该假设对于ReLU类激活函数是无效的。

通过一系列的推导,得出了针对ReLUs的初始化方法:假设卷积核的大小为k*k,在第L层有c个filter(或者channels),L层的filter_out size(或者L+1层的卷积核个数)为d(c L=d L-1)。那么L层weight的大小为k*k*c*d。

对于第L层的初始化方法为:将该层的权重从高斯分布中采样进行初始化,高斯分布的均值为0,标准差(std)为

。其中nL=k*k*c。对于所有层采用相同的初始化方法。


左图为22层网络的网络分别采用本文的初始化方法(红色)和Xavier初始化方法(蓝色),红色更快开始收敛。

右图为30层网络的网络,显示Xavier方法无法收敛。所有的网络都采用ReLU激活函数。

而采用PReLU时,采用如下初始化方法:

如果a=0就是ReLU的情况,如果a=1,也就是Xavier的初始化方法。

虽然该初始化方法对提高准确率没有帮助,但是本文中也提到了Degradation问题——随着模型深度的增加,准确率趋于饱和。随着研究该问题的深入,微软亚研院提出了ResNet。

本文最后对PReLU和ReLU做了实验对比,感兴趣的可以阅读原文。



原创粉丝点击