通过GoogLeNet和VGG我们发现,加深网络的层数对于提升准确度的帮助是非常大的。然而在实践中,添加过多层后训练误差往往不降反升。即使利用Batch Normalization使得数值更加稳定,让训练深层模型更加容易,该问题仍然存在。针对这一问题,何凯明等人提出了残差网络(ResNet)。他在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计
一开始作者也提出了这个问题,越深的神经网络越难训练,然后作者提出了一种残差学习框架来减轻网络训练,说明这些残差网络很容易优化,并可以显著增加深度来提高准确性。比VGG深8倍但仍具有较低的复杂度
1.Introduction
当所有网络都在深度的驱使下,一个问题出现了:学习更好的网络是否像堆更多的层一样简单?回答这个问题的一个障碍是“梯度消失/爆炸。然而,这个问题通过标准初始化和中间标准化层在很大程度上已经解决,这使得具有数十层的网络可以通过SGD的方法开始收敛”
随着网络的深度的增加,准确度会饱和(这可能不足为奇),然后迅速下降。出乎意料的是,这种退化问题不是由于过拟合导致的,并且在适当的深度模型中假如更多的层会导致更高的训练误差
(训练精度的)退化表明不是所有的系统都同样易于优化。让我们考虑一个较浅的架构,以及一个在它上面添加了很多层的深层架构。存在一个构建更深层模型的解决方案:增加的层是恒等映射,而其他层则是从学习到的浅模型的拷贝。这种构造方法表明,一个较深的模型不应产生比浅模型更高的训练误差。但实验表明,我们现有的解决方案无法找到比这个构建方案更好的解决方案(或者在可行的时间内无法做到这一点)
要想理解什么是恒等映射,还要先从思考为什么模型退化不符合常理开始
按理说,当我们堆叠一个模型时,理所当然的会认为效果越堆越好。因为,假设一个比较浅的网络已经可以达到不错的效果,那么即使之后堆上去的网络什么也不做,模型的效果也不会变差。然而事实上,这确实问题所在。什么都不做,恰好是当前神经网络最难做到的事情之一
由于非线性激活函数ReLU的存在,每次输入到输出的过程几乎都是不可逆的,这也使得特征随着层层前向传播得到完整保留(什么也不做)的可能性都微乎其微。这种神经网络丢失的“什么也不做”的品质就叫做恒等映射(Identity Mapping)
因此可以认为,Residual Learning的初衷,其实是让模型的内部结构至少有恒等映射的能力,以保证在堆叠网络的过程中,网络至少不会因为继续堆叠而退化
前面分析得出,如果深层网络后面的层都是是恒等映射,那么模型就可以转化为一个浅层网络。那现在的问题就是如何得到恒等映射了。
本文通过引入一个深层残差学习框架来解决退化问题。我们明确的让这些层拟合残差映射,而不是希望每几个堆叠的层直接拟合期望的基础映射。形式上,将期望的基础映射表示为H(x),我们将堆叠的非线性层拟合另一个映射F(x)=H(x)-x。这时原始的基础映射就被重新定义为F(x)+x。我们假设优化残差映射比优化原始映射更容易。在极端情况下,如果一个标识映射是最优的,那么将残差值推到零将比通过一堆非线性层来匹配一个恒等映射更容易
上面论文翻译的部分可能看的不是很懂,下面我再具体的讲解一下。我们前面知道,目前神经网络很难拟合潜在的恒等映射H(x)=x。但如果把网络设计为H(x)=F(x)+x,即直接把恒等映射作为网络的一部分。就可以把问题转化为学习一个残差函数F(x)=H(x)-x。只要F(x)=0,就构成了一个恒等映射H(x)=x。而且,拟合残差至少比拟合恒等映射容易的多
F(x)+x的表达式可以通过使用"shortcut connections"的前馈神经网络实现。它是那些跳过一层或多层的连接。在我们的例子中,"shortcut connections"简单地执行恒等映射,并将其输出添加到堆叠层的输出。"shortcut connections"既不增加额外的参数,也不增加计算复杂度。整个网络仍然可以由带有反向传播的SGD进行端到端的训练,并且可以在不修改解决方案的情况下使用公共库轻松实现
用数学语言描述,假设Residual Block的输入为$x$,输出$y$等于
$$ y=F(x,\{w_i\})+x $$
其中$F(x,\{w_i\})$是我们学习的目标,即输出与输入的残差$y-x$。以论文中的图为例,残差部分是中间有一个ReLU激活函数的双层权重,即:
$$ F=w_2\sigma(w_1x) $$
顺带一提,这里的一个Block必须至少含有两层,否则就会出现很滑稽的情况
$$ \begin{align*} y &= F(x,\{w_i\})+x \\ &=(w_1x)+x \\ &= (w_1+1)x \end{align*} $$
显然这样加了和没加差不多
后面三段基本上就是讲ResNet的各种成就,没什么好说的,就跳过了
2.Related Work
这一段的内容比较抽象,这里就略过了,感兴趣的可以自行阅读或者在网上找找翻译版本看一下
3.Deep Residual Learning
3.1.Residual Learning
我们令H(x)作为需要多层神经网络去拟合的目标函数。如果假设多个非线性层可以逐渐近似一个复杂的函数,那么等价于假设他们可以逐渐近似残差函数,即H(x)-x。因此,与其期望让这些层近似H(x),我们直接让这些曾近似残差函数F(x)=H(x)-x。原始的函数则变成了H(x)=F(x)+x。尽管这两种形式都应该能够逐渐地近似期望的函数,但学习的轻松程度可能不相同
这个重新制定的动机是由于退化问题的反直觉现象。正如我们在引言中所讨论的,如果添加的层可以被构造为恒等映射,那么一个较深模型的训练误差不应该比较浅模型的训练误差大。退化问题表明,求解器在通过多个非线性层逼近恒等映射时遇到困难。利用残差学习的方法,如果恒等映射是最优的,求解器也许只需要将多个非线性层的权重简单的置为0,以近似恒等映射
上面这段话怎么理解呢,具体推导一下就明白了,先看下面的图
图片来源是吴恩达老师的课件,其中g()
函数就是ReLU函数,$z^{l+2}=w^{l+2}a^{l+1}+b^{l+2}$,这里假设$bias=0$,只要模型能将$w$训练为0,通过这个式子我们就能得到一个输入与输出相等的恒等映射,也即完成了神经网络“什么也不做”的任务。但是如果没有"shortcut connection",此时
$$ \begin{align*} a^{l+2} &= g(w^{l+2}a^{l+1}+b^{l+2}) \\ &= g(w^{l+2}(w^{l+1}a^{l}+b^{l+1})+b^{l+2}) \end{align*} $$
如果还想让$a^{l+2}=a^{l}$,这个训练过程就变得复杂了,而且不要忘了,我们这才一个Residual块,网络越深,Residual块越多,反向传播就越复杂
3.2.Identity Mapping by Shortcuts
我们采取每个堆叠层都用残差学习。在本文中我们考虑building block正式定义为:
$$ y = F(x, \{w_i\})+x $$
$x$和$y$是我们所考虑层的输入和输出,函数$F(x,\{w_i\})$表示要学习的残差映射,对于两层的映射,$F=W_2\sigma(W_1x)$,为了简化写法,忽略bias。$F+x$操作通过将非线性层的输出和shortcut connection的元素相加。加完后,继续做一次非线性映射ReLU
等式(1)中的shortcut connection既没有引入额外的参数,也没有增加计算复杂度。这不仅在实践中很有吸引力,而且在我们对普通网络和残差网络的比较中也很重要。我们可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本(除了可以忽略的相应元素相加操作之外)的普通网络和残差网络
$x$和$F$的维度必须相等,如果不是,我们可以通过对shortcut connection进行一个线性投影,以匹配维度
$$ y=F(x,\{W_i\})+W_sx $$
我们在等式(1)中也可以使用矩阵$W_s$,但实验表明,恒等映射对于解决退化问题是足够的,而且是经济的,因此只有在为了匹配维度的时候才用$W_s$
残差函数$F$的形式是灵活的。本文中的$F$包含2~3层,当然也可以包含更多层。但是,如果$F$只有一层,等式(1)就与线性层$y=W_1x+x$相似了,我们没有研究出它的优势
尽管上面的符号是为了简单起见而使用的全连接层,但它们也适用于卷积层。函数$F(x,\{W_i\})$可以代表多个卷积层。对于卷积来说,元素相加就是每个Channel里的像素相加
3.3.Network Architectures
这一节作者对比了普通网络和残差网络
普通网络。我们的baseline主要收VGG的启发。卷积层主要有3×3的filter,并遵循两个简单的设计规则:(i)对于输出大小相同的feature map,隐藏层里的滤波器数量也相同。(ii)如果feature map尺寸减半,则滤波器数量加倍,以便保持每层的时间复杂度。我们下采样的stride设置为2,网络以avg pooling layer和具有softmax的fc结束。总层数为34
残差网络。在普通网络的基础上,我们增加了shortcut connection,将网络转换为对应的残差版本。当$F$和$x$是相同维度时,可以直接使用。当维度增加(虚线),我们提供两个选择:(A)shortcut connection仍然执行恒等映射,用额外的零填充增加维度,这种做法不引入额外的参数;(B)等式(2)中的维度匹配由1×1卷积完成,不管哪个选项,shortcut connection跨过的卷积核,stride都是2
3.4.Implementation
我们对ImageNet的实现遵循了[21、41]。在[256,480]中,将较短的边随机采样,然后调整大小,以增加比例。从图像或它的水平翻转中随机抽取[224,224],每像素减去平均值。[21]中的标准颜色增强技术被使用。我们每次卷积和激活前都采取Batch Normalization。我们同[13]一样初始化权重,从头开始训练普通网络和残差网络。我们设置SGD的Batch大小为256。learning rate从0.1开始,当误差停滞时,将学习率除以10,模型被训练高达60万次。我们使用0.0001的权重衰减和0.9的momentum。根据[16],我们不使用Dropout
在测试阶段,为了比较研究,我们采用了标准的10折交叉验证。为了得到最好的结果,我们采用如[40,12]中的全卷积形式,并在多尺度上对分数进行平均
4.Experiments
4.1.ImageNet Classification
作者在ImageNet 2012分类数据集上对他们的方法进行了评估
普通网络。作者首先评估了18层和34层的普通网络,下表的结果说明,34层网络比18层网络具有更高的错误率
我们认为这种优化问题不太可能是由梯度消失引起的这个普通网络用BN训练,这确保了前向传播的信号有非零方差。我们还验证了反向传播的梯度,结果显示其符号BN的正常标准。因此既不是前向信号消失也不是反向信号消失。实际上,34层普通网络仍能取得有竞争力的准确率(见下表),这表明在某种程度上来说求解器仍在工作。我们推测深度普通网络可能具有低指数的收敛速度,这影响了训练误差的减少。这个优化困难的原因将来会被研究
残差网络。接着作者评估了18和34层的残差网络。我们对所有shortcut connections都使用恒等映射和零填充以增加维度(选项A),所以与对应的简单网络相比,他们没有额外的参数
作者观察发现,34层的ResNet比18层的ResNet准确率要高,这与普通网络的情况正好相反。并且同样都是18层,ResNet比普通网络收敛的速度更快,见下图
恒等shorcut vs. 投影shortcut
我们已经证明了,不增加参数的恒等shortcut有助于训练。接下来我们研究投影shortcut。在下表中我们比较了三个选项:(A)用零填充shortcut来增加维度,所有的shortcut是没有参数的;(B)投影shortcut用来增加维度,其他shortcut是恒等的;(C)所有的shortcut采用投影
这张表显示了三个选项都比普通网络好得多,B比A稍微好一点,作者认为A的零填充确实没有残差学习。C比B稍微好点,作者认为许多shortcut引入了额外的参数。但A/B/C之间的细微差异表明,shortcut connection对于解决退化问题不是至关重要的。因此,在本文的其余部分,我们不使用C选项,这样额可以减少内存/时间复杂度和模型大小。恒等shortuct不增加复杂度对于下面引入的Bottleneck结构特别重要
更深的瓶颈结构。接下来我们描述ImageNet中我们使用的更深的网络。考虑到我们能承受的训练时间,我们将building block修改为bottleneck。对于每个残差函数$F$,我们使用3层堆叠而不是2层(见下图)。三层是1×1,3×3和1×1卷积,其中1×1层负责减小然后增加(恢复)维度,使3×3层成为具有较小输入/输出维度的bottleneck。这两个设计具有相似的时间复杂度
恒等的shortcut对bottleneck非常重要。如果上图右边恒等的shortcut被投影shortcut代替,时间复杂度和模型大小都将加倍
50层ResNet。作者用3层的bottleneck替换了34层网络中的所有2层块,得到了最终的50层ResNet
101层和152层ResNet。就是在50层ResNet的基础上,继续堆bottleneck,尽管深度显著增加,但152层ResNet仍然比VGG-16/19网络具有更低的复杂度
50/101/152层ResNet比34层ResNet的准确性要高得多。我们没有观察到退化问题,因此可以从显著增加的深度中获得显著的准确性收益
与最先进的方法比较。作者与以前最好的单一模型结果进行比较。作者的baseline——34层的ResNet已经取得了非常有竞争力的准确性,而152层的ResNet更是达到了4.49%的低错误率
这种单一模型的结果胜过以前所有的综合结果(见下表)。我们结合了六种不同深度的模型,形成一个集合,在2015年ILSVRC中荣获第一名
后面还剩一点,讲的是作者在CIFAR-10数据集上的测试结果以及目标检测上的效果,前面已经把这个模型的精髓讲完了,所以后面的部分如果读者有兴趣自行阅读即可