ResNet-2015

ResNet

Introduction

深度卷积神经网络引领了一系列对于图像识别任务的突破。深度网络可以很自然地将 低/中/高 级的特征和分类器整合为一个端对端(end-to-end)的模式,特征的"level"会随着网络层数的增加而更加丰富。最近的研究发现网络的深度尤为重要,对于在ImageNet数据集上取得突破性成果的网络都在探索和开发“非常深”的网络。
受深度重要性的驱使,我们不禁提出一个问题:学习一个更好的网络是不是就是简单地堆叠更多层?回答这个问题的一个阻碍就来自于梯度弥散/梯度爆炸问题,这个问题从一开始就会阻碍我们的模型收敛。然而这个问题已经很大程度上被归一化解决(初始值归一化以及中间层归一化,batch normalization),使用归一化可以使得几十层的网络开始收敛。
当更深的网络能够开始收敛时,一个新的问题出现了 degradation:随着网络深度增加,当accuracy达到饱和后会迅速出现退化的情况。出乎意料的是,这个问题并不是由 overfitting 造成的,增加更多的层数反而会导致更高的training error。如下图:
这里写图片描述
图一,左图为training error,右图为test error,数据集为CIFAR-10,两种网络结构,20层和56层。
这个退化(training accuracy)问题说明了并不是所有的系统都能够轻松的优化的。现在我们考虑两个模型,一个是较浅的网络,一个是根据这个较浅网络加入更多层得到的一个较深网络。一种构建这个较深的网络方式是:增加的层进行恒等map,其他层就直接从较浅网络复制过来。这个构建从以往的经验看来,更深的网络应该得到比较低的网络更低的training error,然而上面的实验显示这种构建网络的方式,不能取得一个更好的效果。
那么在本篇论文中,我们提出一种deep residual learning框架来解决退化问题。不再寄希望于每个堆叠的网络层能够直接匹配学习一个理想的潜在映射,而是让网络来学习一个残差映射。一般,将理想潜在映射标记为 H ( x ) \mathcal H(\mathbf x) ,让堆叠的非线性层去拟合另一个映射 F ( x ) : = H ( x ) x \mathcal F(\mathbf x):=\mathcal H(\mathbf x)-\mathbf x 。那么原始的映射就应该修正为 F ( x ) + x \mathcal F(\mathbf x) + \mathbf x 。我们假设相比于原始的映射,残差映射更加容易优化。考虑极端情况,如果一个恒等map是最优的,那么推动残差等于0将比使用非线性的堆叠去匹配一个恒等map还要容易。
F ( x ) + x \mathcal F(\mathbf x) + \mathbf x 的构成可以通过带有 “shortcut connections” 的前向网络来实现。如下图。
这里写图片描述
图二,捷径连接
所谓 shortcut connections 就是跳过一层或多层的一种连接。在我们的结构中,捷径连接简单地进行恒等映射,它们的输出与堆叠层的输出进行叠加。恒等捷径连接并没有增加额外的参数和计算量。整个网络依然可以使用通过SGD的反向传播算法进行端对端的训练。
我们在ImageNet上进行综合的实验,发现(1)我们的非常深的残差网络能够很容易的进行优化,但是对应的“plain”网络(简单的网络堆叠)随着深度增加training error也随着增加。(2)深度残差网络随着网络增加,accuracy会增加,稳定地得到比之前网络都要好的结果。
对CIFAR-10数据集进行测试也得到同样的结果,这说明优化难度和我们方法的效果并不只适用于特定数据集。
在ImageNet分类数据集上,我们的152层残差网络是应用于ImageNet上最深的网络,尽管层数如此之多,其复杂度却低于VGG网络。

Related Work

Residual Representations
在图像识别中,VLAD (vector of locally aggregated descriptors,局部特征聚合描述符)是一种通过关于字典的残差向量来编码的特征表达,Fisher Vector可以被理解为VLAD的概率学模型。对于图像检索和分类来说,它们都是有力的浅层特征表达。对于矢量量化,编码残差向量会比编码原始向量更加有效。
对于低层次的视觉和计算机图像,求解偏微分方程,一般都是使用Multigrid method将系统重新表示为多尺度的子问题,每个子问题分别负责求解粗糙到精细尺度的残差结果。一种代替多重网格的方法是级联基预处理,它是依赖于表示两个尺度间的残差的参数。文献表明这样的方法将比不考虑的残差的标准方法收敛的更快。这样的方法表明一个好的模型重构或者预处理能够有利于模型的优化。
Shortcut Connections
关于捷径连接的理论和实践的研究已经进行了很长一段时间。一个早期的训练多层感知机的尝试是增加一个线性层直接连接网络的输入和输出。在GoogLeNet中,还有直接在中间层连接辅助分类器来处理梯度弥散/爆炸问题。还有文献提出运用捷径连接来置中层响应,梯度和传播的误差。在GoogLeNet中,"Inception"层也是有一个捷径分支也一些较深的分支组成。

Deep Residual Learning

Residual Learning

考虑使用 H ( x ) \mathcal H(\mathbf x) 表征一个通过一些网络层(不需要是整个网络)学习到的一个潜在映射, x \mathbf x 表示这些层的最初的输入。如果我们假设多个非线性层可以渐近地逼近复杂的方程,那么就等价于假设多层非线性可以渐近地逼近残差方程,如 H ( x ) x \mathcal H(\mathbf x) -\mathbf x (假设输入输出维度相同)。那么与其期待多层非线性去逼近 H ( x ) \mathcal H(\mathbf x) ,不如让多层非线性去逼近残差方程 F ( x ) : = H ( x ) x \mathcal F(\mathbf x):=\mathcal H(\mathbf x)-\mathbf x 。那么原始映射就变为 F ( x ) + x \mathcal F(\mathbf x)+\mathbf x 。尽管这两种形式都能够渐近地逼近我们的理想函数,但是这两种情况的学习却可能大有不同。
这样的网络重构是为了解决违反直觉的网络退化问题。在introduction部分我们讨论过,如果通过恒等映射增加网络层,那么一个更深的网络的training error应该比其对应的较浅网络的training error要低。退化问题指出通过多层非线性来逼近恒等映射是存在上述退化问题的。而通过残差学习重构,当恒等映射是最优的,那么求解则可能仅仅是驱使多层非线性的权重等于0来逼近恒等映射。
在实际情况中,恒等映射往往不会是最优解,但是我们的重构网络可以帮助我们预处理这个问题。如果最优函数相比于0映射更加接近于恒等映射,那么对于求解来说根据一个恒等映射来确定扰动比学习一个新的函数要更加轻松。通过下面的实验,如图三,我们发现学习的残差函数往往具有更小的响应,这说明恒等映射提供了合理的预处理。
这里写图片描述
图三,上图为在CIFAR-10数据集上的层响应的标准差。这些相应是每层3x3的输出,经过BN没有经过非线性的结果。Top:为原始顺序,Bottom:为响应降序排列。

Identity Mapping by Shortcuts

我们对每几个堆叠层采用残差学习。构建模块如图二。我们定义构建模块如下: y = F ( x , { W i } ) + x           ( 1 ) y=\mathcal F(\mathbf x, \{W_i\}) + \mathbf x \ \ \ \ \ \ \ \ \ (1) 这里 x \mathbf x y \mathbf y 是对应层的输入和输出。函数 F ( x , { W i } ) \mathcal F(\mathbf x, \{W_i\}) 表征学习到的残差映射。比如图二有两层, F = W 2 σ ( W 1 x ) \mathcal F = W_2\sigma(W_1\mathbf x) ,其中 σ \sigma 表征的是ReLU函数,然后为了简化标注我们将bias项舍去。 F + x \mathcal F + \mathbf x 由捷径连接和按位相加来完成。然后加完之后再进行非线性。
方程(1)中的捷径连接并没有引入额外的参数和计算复杂度。这一点不仅仅在实际中很重要,而且在普通和残差网络的比较中也非常重要。我们可以同时公平地对普通/残差网络进行比较,让它们拥有相同的参数个数,同样的网络深度,宽度和计算开销(除了可以忽略的那个按位加法操作)。
方程(1)中 x \mathbf x F \mathcal F 必须维度相同(不然没法加)。如果维度不同(改变了输入或输出的通道数),我们可以通过在捷径连接上叠加一个线性映射 W s W_s 来进行维度匹配: y = F ( x , { W i } ) + W s x           ( 2 ) y=\mathcal F(\mathbf x, \{W_i\}) + W_s\mathbf x \ \ \ \ \ \ \ \ \ (2) 在方程(1)中我们也是可以使用矩阵 W s W_s 的,但是在实验中我们发现恒等映射已经足够解决退化问题并且非常经济,因此 W s W_s 只有在维度匹配时才使用。
残差函数 F \mathcal F 的形式是很灵活的。在我们的实验中使用到了下图中的构建单元,2层或者3层,当然更多层也是可能的。但是如果只有一层的话,就没有太大意义。
这里写图片描述
图四,残差函数 F \mathcal F ,ImageNet数据集。Left:ResNet-34中的构建单元(应用于56x56的特征图上)。Right:ResNet-50/101/152中一个“瓶颈”构建单元。
我们注意到尽管上面方程的标记为了简化使用的是FC层,但是它们同样都适用于卷积层。函数 F ( x , { W i } ) \mathcal F(\mathbf x, \{W_i\}) 可以表示多个卷积层。

Network Architectures

我们测试了多种普通/残差网络结构,发现了一致的现象。为了提供讨论实例,我们接下来描述在ImageNet上的两种模型。
Plain Network
我们的普通网络的基本构成主要受到VGG网络的启发。卷积层都采用3x3的卷积核并且遵循两个原则:(1)对于同样的输出特征图大小,对应层的卷积核数相同;(2)如果特征图大小减半,那么卷积核数翻倍来保留每一层的复杂度。我们直接使用带有2步长的卷积层进行降采样。网络最后由平均值池化和带有1000分类softmax的fc层构成。带权值的层数总共是34层。
值得注意的是,我们的模型跟VGG网络相比有更少的卷积核和更低的计算复杂度。我们的34层网络有3.6B的FLOPs(乘加运算),仅仅是VGG-19的18%(VGG-19有19.6的FLOPs)。
这里写图片描述
图五,网络结构
Residual Network
基于上面的普通网络,我们插入捷径连接如上图右,就将普通网络转变为了对应的残差网络形式。这个恒等映射当输入输出具有相同维度的时候,可以直接使用(图中的实线)。当维度增加也就是经过了步长2的卷积(图中的虚线),我们考虑两种办法:(1)捷径连接仍然采用恒等映射,对于多余的维度进行补0,这种方式不引入新的参数;(2)使用方程2的映射来满足维度匹配(通过1x1卷积)。

Implementation

我们的对于ImageNet数据集的操作,采用AlexNet和GoogLeNet的做法。为了多尺度,将图片进行resize使得最短边随机取值在[256,480]之间。然后进行图片归一化(也就是每个像素减去均值),再随机从多尺度的图片或者其水平翻转中裁取224x224大小的图片。同时还使用颜色增广,也就是改变图片RGB通道的强度。我们对于每个卷积层的在激活函数之前的结果都采用BN。采用下面链接论文中的初始化方式来初始化权重然后所有的网络都从头开始学习(也就是不使用预学习)。
https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdf
使用mini_batch大小为256的SGD算法。学习率从0.1,每到达一个error 平台就除以10,模型一共训练了60W个周期。我们使用momentum为0.9的0.0001的权重衰减,然后不使用dropout。
在测试时,为了比较,采用标准的10-crop进行测试(10-crop也就是从图片的四个角以及中间裁取,再加上水平翻转,一共是10种裁取)。对于最好的实验结果,我们使用全连接卷积的形式,对多尺度得到的scores进行平均(图片resize的大小是{224,256,384,480,640})

Experiments

ImageNet Classification

我们采用ImageNet2012 带有1000分类的数据集对我们的网络进行评估。一共1.28M张训练图片,50K的验证集以及100K的测试集。我们评估top-1和top-5。
Plain Networks
首先评估18层和34层普通网络。表一中有具体的网络结构。
从结果上来看,较深的34层网络比18层有更高的validation Top-1 error(18层:27.94%,34层:28.54%)。从下图左的训练数据来看,我们发现了网络退化问题,34层在整个训练过程中,都有更高的training error,尽管18层网络的解空间是34层解空间的子空间。
我们认为这个优化难度不可能是由梯度弥散导致的。这些普通网络都是经过了BN的,这就保证了在前向传播过程中,激活值是具有非零方差的。同时,我们也验证了反向传播的梯度是符合BN的正常标准的。所以不管前向还是后向都没有出现弥散问题。虽然34层网络有退化问题,但是其结果仍然具有一定的竞争力,这就说明求解器是在工作的。我们猜想深度普通网络可能具有指数低收敛特性,这会影响到training error的减小。这种情况优化难度的原因将在以后进行研究。
这里写图片描述
图六,在ImageNet上的训练,细线为training error,粗线为center crops的validation error。左图:普通网络,右图:残差网络

Residual Networks
接下来评估18层和34层残差网络。基础结构与上述普通网络相同,只是在每组3x3卷积中加入了捷径连接,具体如图五右所示。在第一次比较中(图六右,18层:27.88%,34层:25.03%),我们对所有捷径使用恒等映射,并且采用补0(方法一),这样没有引入多余参数。
从数值对比我们有三个发现:
(1)在残差学习中,情况发生了反转,34层网络的validation error要低于18层(低了2.8%)。更重要的是,34层残差网络显示了较低的training error,并且可以泛化到validation数据中。这就意味着,退化问题在这个设定中被很好的解决并且随着网络深度增加有望得到更好的accuracy。
(2)跟对应的34层普通网络相比,残差网络在top-1 error上减低了3.5%。这个结果证实了残差学习在相当深的系统中的有效性。
(3)18层图普通/残差网络都同样的准确,但是18层残差网络要收敛的更快一些。在网络没有过于深的时候,现在的SGD求解器仍然可以在普通网络中找到一个好的解。在这个情况下,残差网络通过早期更快的收敛来简便优化。
这里写图片描述
表一,应用于ImageNet数据集的网络结构(网络模块请参考图四),conv3_1,conv4_1和conv5_1都是带步长2的降采样卷积

Identity vs. Projection Shortcuts
我们看到了没有参数的恒等捷径连接帮助了训练。接下来我们探索一下映射捷径连接(方法二)。表二,我们进行了三种方案的比较:(A)0-padding 捷径连接来升维,没有参数;(B)在升维时采用映射捷径,其他时候及进行恒等;(C)全部采用映射捷径。
从表二我们看出,所有的方法均明显优于普通网络。方案B略好于方案A。我们认为这个原因是A方案中补0的维度并没有进行残差学习。C又略优于B,我们认为这是因为额外引入的参数引起的。但是A/B/C方案的不同对于解决退化问题来说不是很必要的。所以我们在余下部分不采用方案C,为了减小存储/计算的复杂度,以及模型大小。恒等捷径对于不给瓶颈模块增加复杂度尤为重要。
这里写图片描述
表二,error rate(10-crop),利用ImageNet validation,ResNet-50/101/152都采用方案B来进行升维

Deeper Bottleneck Architectures
接下来我们介绍我们的深度网络。考虑到训练时间的问题,如图四,我们对构建单元进行了修改,使用新的瓶颈设计。对于每个残差函数 F \mathcal F ,我们使用了三层并非两层的一个结构。这个三层分别由1x1,3x3,1x1的卷积组成,1x1层负责升维和降维,使得3x3层成为一个具有更小输入输出维度的瓶颈。图四展示了一个例子,在这个例子中两种设计具有相似的时间复杂度。
不带参数的恒等捷径对于瓶颈结构来说尤为重要。如果想图五右中的恒等捷径换成映射,那么我们就会发现时间复杂度和模型大小都会翻倍,所以恒等映射让瓶颈结构更为高效。
50-layer ResNet
我们将34层残差网络中的2层构建单元改为3层的瓶颈结构,得到表一中的50层残差网络。我们使用方案B进行升维,最终该模型具有3.8B的FLOPs。
101-layer and 152-layer ResNets
我们通过使用更多的3层瓶颈单元构造出了101层和152层残差网络,如表一。明显的是,尽管网络深度大大增加,但是152层残差网络(11.3B FLOPs)仍然比VGG-16/19网络(15.3/19.6B FLOPs)具有更低的复杂度。
50/101/152层残差网络比34层残差网络更加准确。我们并没有发现退化问题,因此accuracy随着网络深度增加而增加。

CIFAR-10 and Analysis

对于CIFAR-10数据集,我们进行更多的研究。我们的目标在于观察非常深的网络的行为,而不在于去推进state-of-the-art。
同样普通/残差网络结构如图五。网络输入为32x32图像,经过了均值归一化。第一层为3x3卷积。然后使用分别对特征图大小为{32,16,8}的特征图进行6n层的3x3卷积,每种特征图大小进行2n层卷积。卷积核数分别为{16,32,64}。降采样由带2步长的卷积完成。网络最后由全局平均池化,10输出的FC层和softmax构成。一共有6n+2个带权重的层。下表总结了网络结构:
这里写图片描述
当使用捷径连接,它们用来连接一对对的3x3卷积层(一共3n个捷径连接)。在这个数据集上我们全部使用恒等映射。所以我们的残差网络跟对应的普通网络有相同的网络深度,宽度和参数个数。
我们使用带有0.9momentum和0.0001的权值衰减,同时还采用和ImageNet实验中同样的权重初始化方法和BN。初始学习率为0.1,分别在32K,48K,64K迭代次数时,进行学习率衰减,除以10。我们遵循简单的数据集增广方式:在每个边进行4个像素的padding,然后随机对图片和其水平反转进行32x32的裁剪。在测试时,我们仅仅对原始的32x32的图片进行评估。
我们比较n={3,5,7,9}(网络层数分别20,32,44和56)。图七左展示普通网络的训练行为。深度网络随着网络深度增加显示出更高的training error。这种行为和ImageNet上的现象相同,说明这种优化难度是一个很基本的问题。
图七中展示了残差网络的行为。类似于ImageNet上的情况,残差网络克服了这个优化难度,并且随着网络增加展示出更高的准确率。
我们进一步探索n=18,也就是110层的残差网络。在这种情况下,我们发现初始0.1的学习率略大导致不能开始收敛。所以用0.01开始来让预热训练直到training error降到80%以下(大约400周期),然后使用0.1继续进行训练。余下的学习跟之前相同。110层残差网络能够很好的收敛。比起其他深且窄的网络如FitNet和Highway,110层残差网络有更少的参数。结果如表三。
这里写图片描述
图七,在CIFAR-10数据集上训练情况,虚线为training error,粗线为testing error。左:普通网络。110层的error高于60%所以没有展示。中:残差网络。右:110和1202层残差网络

这里写图片描述
表三,在CIFAR-10测试集上的分类error,所有方案均采用数据集增广。对于ResNet-110,我们一共跑了5次

Analysis of Layer Responses
图三展示了层响应的标准差。响应是每个3x3卷积层的输出经过BN并未经过非线性的结果。对于残差网络,这个分析揭示了残差网络的响应强度。图三显示残差网络比起对应的普通网络一般有更小的响应,这个结果支持了我们在残差学习中初衷,也就是残差函数比起非残差函数会更接近于0。同时,我们也意识到更深残差网络有更小的响应,从图三中可以看出。随着网络层数越多,残差网络的单一层改变信号响应就越少。
Exploring Over 1000 layers
我们探索了超级深的超过1000层的深度网络。我们将n设为200,这使得网络有1202层。我们的方法没有优化难度,1000层网络依然能够取得小于0.1%的training error,test error依然也是不错的(7.93%)。
但是这个超级深网络依然有一些开放问题。testing error比110层的要高,尽管都有相似的training error。我们认为这是overfitting造成的。这个1202层网络可能对于这个小数据集有点太大了,有19.4M参数。强力的正则化手段例如maxout或者dropout均在这个数据上取得了不错的结果。本篇论文中,我们并未采用maxout/dropout而是简单地通过深且窄的网络结构施加正则化,重心主要放在解决优化难度的问题。通过结合强力的正则化手段可能会有更好的结果,这个会在未来进行研究。

总结

由于网络深度的重要性,以及其带来的在视觉任务上的突破性成果,让人们进一步探索更深的网络,网络深度的增加,带来了梯度弥散和梯度爆炸的问题,BN很大程度上解决了这个问题,让深度网络可以开始收敛。但是在构造更深网络的时候,出现了并非由梯度和overfitting引起的网络退化问题,使得网络层数越多,error越高。为了解决退化问题,本篇提出一种深度残差学习的框架,它旨在不再寄希望于每个堆叠的网络层能够直接匹配学习一个理想的潜在映射,而是让网络来学习一个残差映射。利用恒等映射带来的预处理,让网络去学习残差函数,这将比直接学习一个完整的新的函数来得有效。利用捷径连接引入恒等映射来构建出残差网络的基本单元,实际实验的结果表示,通过这样的一个框架,确确实实解决了网络的退化问题。本文还提出了三种捷径连接的方案以及两种残差单元的结构。这都是为了去探索更深的网络。


小广告

淘宝choker、耳饰小店 物理禁止
女程序员编码时和编码之余 都需要一些美美的choker、耳饰来装扮自己
男程序员更是需要常备一些来送给自己心仪的人
淘宝小店开店不易 希望有缘人多多支持 (O ^ ~ ^ O)
本号是本人 只是发则小广告 没有被盗 会持续更新深度学习相关博文和一些翻译
感谢大家 不要拉黑我 ⊙﹏⊙|||°
这里写图片描述

猜你喜欢

转载自blog.csdn.net/mike112223/article/details/78823318