Deep Reidual Learning for Image Recognition

摘要

首先看摘要,大概意思是深度神经网络太难训练啦,但我们的残差学习框架不一样,我们特别好训练,这是因为我们使用了&*%&*¥R……方法。而且我们的网络不仅好训练,精度还特别高,拿了好多比赛的冠军。它之所以这么厉害,是因为它特别的深,有VGGnet的八倍那么深。而为什么能做到这么深还能训练得这么好呢,接下来就要介绍原因了。

结论

看完摘要直奔章尾看结论,但是没找到。不过在引用后面还有一部分内容,看了一下,大概是讲了各种数据集的训练方法、参数和算法设置之类的内容,对我这个初学者来说没啥意义,果断跳过。

介绍

再回到文章开始的地方看介绍,作者先是吹了一波深度卷积神经网络,然后说现在的趋势表明,越深的神经网络就越厉害。那么能不能想办法把网络弄得特别特别深呢?作者说不行,因为这会导致一个臭名昭著的问题:梯度爆炸/消失。不过这个问题已经被初始归一化和中间层归一化解决了。

然而这个问题解决了,另一个问题又冒出来了:degradation。它是说虽然层数是能接着往下加了,但准确度却并没有增加多少,甚至还大幅下降。degradation说明并非所有的系统都同样容易优化。作者接下来举了个例子,假设我们有一个普通的神经网络,然后我们在它上面加了很多个恒等映射层:这些层收到什么就输出什么,最终得到的层的分类能力应当与原来的层几乎一致。理论上来说,这种愚蠢的增加层数的方法都至少和原来的效果差不多,那么,添加经过我们人类精心设计的层,网络的性能应该更强了才对。但实验证明,我们目前还做不到这一点。

为了解决这一问题,作者用每几个堆叠的层直接拟合残差映射,而不是想要的底层映射:他设普通的神经网络想要的映射为H(x),那么他现在做的就是让堆叠的非线性层(不懂这是啥,暂时先放过它)拟合另一个映射F(x) = H(x) - x。这样一来原来的H(x) = F(x) + x 。 作者认为这比优化原来那样未参考(unreferenced,不懂,先跳过去)的映射要容易。举个极端的例子,对之前提到的那种恒等映射,那么残差映射要比使用一堆非线性层来进行拟合恒等映射要容易得多。

作者接着说,公式F(x) + x可以通过前馈神经网络的"快捷连接"来实现。快捷连接是指跳过一到多个层的连接。在本例中,快捷连接只执行恒等映射,它做的是将几个堆叠层的输入添加到它们的输出里,且此时这几个堆叠层拟合的是残差F(x)。如下图:
在这里插入图片描述
接下来作者简单介绍了下resnet在各个数据集及比赛上的优秀表现,可以看出,在那个年代,resnet是压倒性的强大。

相关工作

作者首先简单介绍了两类在图像识别中使用残差向量的方法,并表示这两种方案都比处理原始的数据的方法要好。

接着他又介绍了两种cv领域使用残差的方法:一个是求解偏微分方程的多重网格方法,这种方法把系统分为多个尺度上的子问题,而每个子问题则负责求出更粗糙和更细致两个尺度上(不太懂这是啥)的残差解;另一种方法是分层基预处理(hierarchical basis preconditioning),它依赖于表示上述提到的两种尺度的残差向量的变量。作者说,事实证明这些使用残差的方法要比普通方法收敛得更快,且使优化变得简单。

说完了resnet的思路来源,作者开始解释快捷连接了。他说,快捷连接已经在实践和理论中被研究很久了。早前的一个多层感知器模型(MLPs)就使用线性层连接输入和输出。在某项研究里,一些中间层被直接连接到辅助分类器上来解决梯度爆炸/消失问题。另一篇文章提出,使用快捷连接将层响应(不懂这是啥)、梯度和传播误差集中到一起(有什么好处吗)。还有一项研究使用快捷分支和一些深度分支(不知道这都是啥)来构成inception。

接下来他举了一个同样使用快捷连接的神经网络的例子:高速网络。它将快捷连接和门函数结合到了一起,但它是依赖于数据的(?),而且有参数(是指超参数吗),而resnet的恒等快捷连接并不需要参数。当门快捷连接接近零时,高速网络就变成了无残差函数。然而resnet的快捷连接并没有这些缺点。在深度变得极大时,高速网络并没有表现出精度的提升。

深度残差学习

残差学习

作者首先把H(x)定义为由几个堆叠层组成的一个底层映射,而x则是这些堆叠起来的层的第一层的输入。他认为,如果一些非线性层能够近似地表示一个复杂的函数,比如H(x),那它们肯定也能够表示F(x) = H(x) - x,在这里有一个限定,那就是x要和H(x)维度相同,不然就不能做减法了。虽然近似F(x)和H(x)看上去近似的难度类似,但实际上是不一样的,F(x)要明显高出一截。

为什么要做这种变换呢,这二者看上去并没有太大的区别。为了回答这个问题,作者接着说,该变换是由degradation问题的这种有悖常理的表现所推动的。其有悖常理的表现我们在之前提到了:一个由多个非线性层组成的映射,其效果甚至不如恒定映射。如果不解决这个问题,可以说,深度神经网络的深度永远不能有一个大的增长——而正如前文所说,深度神经网络的性能与其深度是呈一定正相关的。而残差学习框架就解决了这个问题,因为当恒等映射为最优时,它可以使多个堆叠的非线性层组成的底层映射的权重逼向零,这个问题就被解决了.

写到这里我突然觉得残差的这种做法。其实和之前作者提到的中间层归一化有点像。比起经过深深的层后再试图收敛,还是像这样几个层就收敛一次,更容易一些。其实按照这种思想,我们并不需要一定拟合F(x),我们拟合一个Q(x) = H(x) + x 或 D(x) = H(x) - 2 * x ,理论上来说都是可以的。但作者在后面说道,他们经过实验发现,这样使用堆叠的层进行映射时,虽然最后的实验结果往往表明最佳映射并非是恒等映射,但却和恒等映射很接近。在这种情况下,出于归一化的思想,我们选择F(x)就非常有理由了。实际上,我觉得如果有某类问题的实验结果表示,其映射的最佳方式是二倍映射,或负一倍映射,那我们也许可以尝试Q(x)或D(x)。

通过快捷方式进行恒等映射

在这里插入图片描述
上图被称为一个block,它的数学定义为:

在这里插入图片描述
其中x是block的输入,y是这个block计划的输出,
在这里插入图片描述
是计划拟合的残差映射。Figure 2里的例子包含了两层,其以数学的方式表达是这样的:
在这里插入图片描述
这里为了简化式子没有写偏置,但我们应该知道,偏置是存在的。其中的σ表示ReLU函数。

可以看出,输入x首先经过一个非线性层,然后被ReLU,然后再经过另一个非线性层,然后在那里和最初的自己相加,再被ReLU一次,就形成了这个block的结果。

作者接下来提到resnet的另一个优点,那就是它在计算时并没有增加参数和维度,如果不考虑resnet那微不足道的元素级加法,那么我们就可以几乎完全公平地比较二者地性能,进而得到一个相当公允的结果。

有的时候,每个block得到的输出F(x)的维度和x不同,那么,为了让二者得以相加,我们可以通过对x进行线性投影来改变其维度:
在这里插入图片描述
作者没说这个Ws是怎么获得的,我的理解是它应该是一个可学习参数。

当然我们可以在方程1中也加入这个Ws,只不过是把它设置为一个方阵。虽然从理论上来说这样是更好的(熟悉的话语),但作者通过实验证明,恒等映射已经能够很好,且经济地解决degradation问题了,我们没必要再画蛇添足了。

残差函数的形式非常灵活,它不仅可以像Figure 1里那样由两个层组成,也可以像Figure 5右边的block那样,由三个层组成。但是当它由一个层组成时,resnet实际上就约等于线性层了,作者并没有从这种架构中发现有别于普通层的优点。
在这里插入图片描述
之前为了简化描述,Figure 1中采用的都是全连接层,但在实际应用中,也可以采用卷积层。不过要注意的一点是,当采用卷积层时,最后的加法运算是在两个特征映射上(没看懂)逐通道进行相加的。

网络结构

作者测试了各种plain网络和resnet,发现其呈现出的现象都是一致的。而为了提供以供讨论的实例,作者这里用了ImageNet的两个模型。
在这里插入图片描述
plain网络:
作者的plain baselines(Figure3 中间)主要受到VGGnet思想的启发。它的卷积层大都有3 × 3的滤波器,且遵循两个简单的设计规则:

  1. 对输出特征映射的大小相同的那些层,它们的滤波器数量也相同。
  2. 如果特征映射的大小减半,则滤波器的数量就要加倍,以保证时间复杂度不变(不明白为什么要保持不变)。

作者直接以步长为2进行降采样,网络的末尾是一个全局均值池化层和一个1000路的softmax全连接层。该网络的权重层数量为34。

这个网络要比VGGnet(Figure 3左侧)简单得多,作者的网络有36亿FLOPs,只是VGG-19的18%。

残差网络:
基于上述的plain网络,作者通过在它身上插入快捷连接来把它变成相应的残差网络的副本。当输入和输出的尺寸相同时,就正常使用恒等映射快捷连接(Figure 3 右图的实线部分)。而当维度增加时(Figure 3 右图的虚线部分),一般有两种解决方案:

  1. 继续使用shortcut进行恒等映射,在增加的维度上使用0进行填充。
  2. 使用1 × 1的卷积(?)和方程2的Ws来保持维度一致。
发布了74 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JachinMa/article/details/95727732