当前位置: 代码迷 >> 综合 >> [论文笔记] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
  详细解决方案

[论文笔记] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

热度:103   发布时间:2023-11-18 04:28:55.0

这篇是 Kaiming 大神在 ICCV15 上的工作,其主要工作是提出了 Parametric Rectified Linear Unit(PReLU)和一种新的参数初始化方式(在PyTorch等框架中称为 Kaiming 初始化)。

Approach

Parametric Rectifiers

在 PReLU 之前就存在着一些尝试去改进 ReLU 的工作。比如 LReLU [1] 就将 ReLU 左侧的常数 0 改为斜率非常小的线性区域,而它的 motivation 是试图去避免 zero gradients,它给模型的性能并没有带来什么提升,而且还是牺牲了 hard-zero sparsity,但使得优化的效率得到了提高(加快收敛)。

鉴于这点,PReLU 另外引入参数,即通过 end-to-end 学习的方式来得到有效的激活函数,定义如下:
f(yi)={yi,ifyi>0aiyi,ifyi≤0f(y_i) = \begin{cases} y_i, & \text{if} \; y_i > 0 \\ a_iy_i, & \text{if} \; y_i \leq0 \end{cases} f(yi?)={ yi?,ai?yi?,?ifyi?>0ifyi?0?
有趣的是,在这篇论文发表的同时,在ICLR15上有一篇论文也提出了一种 learning activation functions 的工作 [2]。

在相同模型结构的情况下,采用 ReLU 的模型(baseline)的 top-1/top-5 error 为 33.82%/13.34%(在 ImageNet 2012上),而采用 PReLU 的 top-1/top-5 erro 为 32.64%/12.75%,有 1.2% 的提升。在实验中,存在着两个有趣的现象,一个是 PReLU 在 conv1 层学出的系数(斜率)为 0.681,这个是远大于原本 ReLU 的常数 0 的。这里作者给的解释是 this is a more economical way of exploiting low-level information。第二个现象是越深的 conv layer,其对应的系数越小(越接近0)。

这里的理解是在 low-layers 上的正负 reponses 都带有比较多的信息,都是被需要的,如果直接采用 hard-zero,就丢弃了负值的 reponses,这里就存在信息损失;但在 deep layers(high-layers)上提取的特征是越来越抽象,并且希望提取的特征是更 discriminative 的(另外一种考虑是能得到 sparse representations [3]),那么就需要激活函数是 more nonlinear 并且存在 hard-zero 的区域(或者是接近 zero)。

Initialization of Filter Weights for Rectifiers

模型权值初始化是一个很重要的问题。在这篇论文之前的一些工作,绝大多数的 CNN 模型的参数随机初始化都是服从高斯分布(标准差固定为 0.01),但这样存在深层网络难以收敛的问题。在后来一些工作中会采用 pre-training 的方式来初始化参数(VGG等),或者是引入辅助分类器(deep supervision等)来帮助模型收敛。

还有一项值得关注的工作是 10年 Glorot 和 Bengio [4] 提出的一种采用 scaled uniform distribution(在 PyTorch框架中称为Xavier初始化)来随机初始化参数,这是区别于之前一些 pre-training 工作的。但它基于的一个假设是激活函数是线性的(在sigmoid, tanh等激活函数中间那段非饱和且近似线性的部分 ),而这样的假设对于 ReLU 和 PReLU 是不成立的。

于是有了这篇论文中的初始化方式,对上面的思路做了一个推广。它的推导过程和 [4] 中差不多的,可以推导出两个比较重要的公式:
Var[yL]=Var[y1](∏l=2L12nlVar[wl])Var[Δx2]=Var[ΔxL+1](∏l=2L12n~lVar[wl])Var[y_L] = Var[y_1] \left( \prod_{l=2}^L{\frac{1}{2}n_lVar[w_l]}\right) \\ Var[\Delta x_2] = Var[\Delta x_{L+1}] \left( \prod_{l=2}^L{\frac{1}{2} \tilde{n}_l Var[w_l]}\right) Var[yL?]=Var[y1?](l=2L?21?nl?Var[wl?])Var[Δx2?]=Var[ΔxL+1?](l=2L?21?n~l?Var[wl?])

上式推导得到的是第 LLL 层前向传播值的方差 Var[yL]Var[y_L]Var[yL?] 和反向传播激活值的梯度的方差 Var[Δx2]Var[\Delta x_2]Var[Δx2?]。在 [4] 提到为了保持网络信息流动,网络中逐层的 activation values 和反向传播梯度的方差都应该尽可能的相等,而上式中的乘积部分则成为了设计初始化的关键,我们希望是乘积部分是一个合适的标量(比如为 1),那么则有了两个充分条件,即初始化方法需要满足的:
12nlVar[wl]=1,?l,12n~lVar[wl]=1,?l.\frac{1}{2} n_l Var[w_l] = 1, \; \forall l, \\ \frac{1}{2} \tilde{n}_l Var[w_l] = 1, \forall l. 21?nl?Var[wl?]=1,?l,21?n~l?Var[wl?]=1,?l.

这就有了初始化方式可以采用随机初始化服从 0 均值的高斯分布,其标准差可以为 2/nl\sqrt{2/n_l}2/nl? ? 或者 2/n~l\sqrt{2/\tilde{n}_l}2/n~l? ?。这两个效果其实是差不多的,假设采用后者,则有 ∏l=2L12n~lVar[wl]=1\prod_{l=2}^L \frac{1}{2} \tilde{n}_l Var[w_l] = 1l=2L?21?n~l?Var[wl?]=1∏l=2L12nlVar[wl]=∏l=2Lnl/n~l=c2/dL\prod_{l=2}^L \frac{1}{2}n_l Var[w_l] = \prod_{l=2}^L n_l / \tilde{n}_l = c_2 / d_Ll=2L?21?nl?Var[wl?]=l=2L?nl?/n~l?=c2?/dL?,而后者得到的并不是一个 disminishing number。

作者有两组实验值得关注。一组是22层的模型分别采用 Kaiming 初始化和 Xavier 初始化,这两者的效果相差无几,但采用 Kaiming 初始化会比 Xavier 初始化收敛地更快。另外一组实验是30层的模型分别采用上面两种初始化方式,其训练过程如下。可以看到采用 Xavier 初始化模型无法收敛了,这也就意味着采用 Kaiming 初始化的方式可以使得深层网络收敛。当然,在实验中30层的网络效果是没有22层网络好的,这就值得去思考,是这种直接堆叠来加深网络的方式不合适还是任务不够复杂?这也就有了 Kaiming 大神后续的工作 ResNet。

在这里插入图片描述

Architecture

在这篇论文中模型的设计上,有两个模型设计的点值得关注。一个是较之VGG模型,作者在第一层是用 7×7 的卷积核取代了原本VGG中两层 3×3 的卷积核和Maxpooling。虽然在 VGG 的论文中提到采用三层 3×3 的卷积核可以减少参数,并且拥有和一层 7×7 一样的感受野,但是采用 7×7 的主要目的是能加速模型的运行,在这篇论文中有提到,“The actual running time of the conv layers on larger feature maps is slower than those on smaller feature maps, when their time complexity is the same.”。

另外一点是作者设计了一个比 model B 更宽的模型 model C,这个模型是能有最好的效果。因为在那时再加深网络效果并没有得到提高,而那时的一个研究发现 “accuracy should improve from the increased number of parameters in conv layer”,那就选择加宽模型,有更多的参数,来提升效果。

总结

这篇论文中的两项主要工作 PReLU 和 Kaiming 初始化都是比较重要且有效的。另外,从这篇论文中还感受到在模型设计上是有很多 trade-off 问题的,比如在激活函数的选择上,PReLU 较之 ReLU会引入参数,并且在一些任务上效果是相差无几的,但模型收敛的可能会快些;比如上面提到的模型结构设计的思路,是需要 faster speed 还是 higher capacity?这就是要具体问题具体分析,来做好 trade-off。

参考文献

[1] Maas, Andrew L., Awni Y. Hannun, and Andrew Y. Ng. Rectifier nonlinearities improve neural network acoustic models. ICML. 2013.
[2] Agostinelli, Forest, et al. Learning activation functions to improve deep neural networks. arXiv preprint arXiv:1412.6830. 2014.
[3] Glorot, Xavier, Antoine Bordes, and Yoshua Bengio. Deep sparse rectifier neural networks. Proceedings of the fourteenth international conference on artificial intelligence and statistics. 2011.
[4] Glorot, Xavier, and Yoshua Bengio. Understanding the difficulty of training deep feedforward neural networks. Proceedings of the thirteenth international conference on artificial intelligence and statistics. 2010.

  相关解决方案