ResNet

简介

ResNet(Residual Neural Network) 由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常突出。ResNet的结构可以极快的加速神经网络的训练,模型的准确率也有比较大的提升。之后许多目标检测、图像分类任务都是建立在ResNet的基础上完成的,成为计算机视觉领域重要的基石结构。

ResNet要解决什么问题 ?

直觉上:增加网络深度后,网络可以进行更加复杂的特征提取,因此更深的模型可以取得更好的结果。但事实并非如此,人们发现随着网络深度的增加,模型精度并不总是提升,并且这个问题显然不是由过拟合(overfitting)造成的,因为网络加深后不仅测试误差变高了,它的训练误差竟然也变高了。作者提出,这可能是因为更深的网络会伴随梯度消失/爆炸问题,从而阻碍网络的收敛。作者将这种加深网络深度但网络性能却下降的现象称为退化问题

文中给出的实验结果进一步描述了这种退化问题:当传统神经网络的层数从20增加为56时,网络的训练误差和测试误差均出现了明显的增长,也就是说,网络的性能随着深度的增加出现了明显的退化。ResNet就是为了解决这种退化问题而诞生的。

ResNet 模块

随着网络层数的增加,梯度爆炸和梯度消失问题严重制约了神经网络的性能,研究人员通过提出包括Batch normalization在内的方法,已经一定程度上缓解了这个问题,但依然不足以满足需求。

作者想到了构建恒等映射(Identity mapping)来解决这个问题,问题解决的标志是:增加网络层数,但训练误差不增加。为什么是恒等映射呢,我是这样子想的:20层的网络是56层网络的一个子集,如果我们将56层网络的最后36层全部短接,这些层进来是什么出来也是什么(也就是做一个恒等映射),那这个56层网络不就等效于20层网络了吗,至少效果不会相比原先的20层网络差吧。那不引入恒等映射的56层网络为什么不行呢?因为梯度消失现象使得网络难以训练,虽然网络的深度加深了,但是实际上无法有效训练网络,训练不充分的网络不但无法提升性能,甚至降低了性能。

若将输入设为 \(x\),希望输出 \(\mathcal{H}(\mathbf{x})\)。现在我们改一改,我们令 \(\mathcal{H}(\mathbf{x}) = \mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right) + x\),那么我们的网络就只需要学习输出一个残差 \(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right) = \mathcal{H}(\mathbf{x}) - x\) 。作者提出,学习残差 \(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right) = \mathcal{H}(\mathbf{x}) - x\) 会比直接学习原始特征 \(\mathcal{H}(\mathbf{x})\) 简单的多。

\(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right) + x\) 可以通过shortcut connections 来实现,如下图所示:

说明:

  • 如果添加了identity mapings,则结构更深的网络不会比浅的网络效果差
  • 多层非线性层叠加在一起构成的网络结构,很难学习到identify mapings
  • 如果identity mapings是最优的链接方式,那么 \(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right)\) 方面的权重参数则会趋于0
  • 如果最优的映射接近identity mapings,则优化的时候,找到相对于identity mapings的 \(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right)\) (初始参数在0附近),要比逼近一个全新的函数要简单的多

Identity Mapping

关于shortcut connection提出了两种连接方式 :

方式一

其中,\(\mathbf{y}=\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right)+\mathbf{x}\),正如上图上描述的,表示多个非线性卷积层的叠加,\(\sigma\) 表示非线性激活函数ReLU,\(\mathcal{F}+X\) 表示shortcut connection,对应每一个像素相加。

方式二

其中,如果想要改变输入输出的channels个数,则可以通过线性变换 \(W_{s}\) 来实现shortcut connection。
关于 \(\mathcal{F}\left(\mathbf{x},\left\{W_{i}\right\}\right)\) 论文中也提到,也不要局限于上面提到了2层卷积的连接,可以更加变化丰富多样些,如下:

其中一个这样的小单元,称之为一个block。在构建深层的网络结构时,作者将第二种结构称之为bottleneck

网络结构

作者在此部分重点对比了plain Network 与resNet两种结构,从而来说明resNet的优越性。

说明:
1)对于相同输出特征图尺寸,卷积层有相同个数的滤波器,2)如果特征图尺寸缩小一半,滤波器个数加倍以保持每个层的计算复杂度。通过步长为2的卷积来进行降采样。一共34个权重层。
需要指出,我们这个网络与VGG相比,滤波器要少,复杂度要小。

Residual Network 主要是在 上述的 plain network上加入 shortcut connections

  • Plain Network 主要是受 VGG 网络启发,主要采用3x3滤波器,通过步长为2的卷积来进行降采样。一共34个权重层。遵循两个设计原则:
    • 对于相同输出特征图尺寸,卷积层有相同个数的滤波器
    • 如果特征图尺寸缩小一半,滤波器个数加倍以保持每个层的计算复杂度
  • resNet与对应的PlainNet的参数个数相同
  • resNet网络结构中,
    • 实线:代表的是上述方式一,输入输出的维度没有改变
    • 虚线:代表的是上述方式二,输入输出的维度发生了改变,具体的实现是卷积的步长设置为2

Implemenation

训练说明:

  • 随机resize 到256,480
  • 随机裁剪224x224
  • 随机水平镜像
  • 减去均值
  • 卷积操作之后,非线性激励函数之前,使用BN(BatchNormalization)操作
  • 使用SGD优化,mini-batch=256
  • 学习率=0.1,然后当误差不下降后,降低10倍
  • 迭代次数 \(60 \times 10^{4}\)
  • 没有使用dropout操作
posted @ 2019-04-29 23:18  youngliu91  阅读(588)  评论(0)    收藏  举报