Loading...
墨滴

满眼李小花

2021/06/01  阅读:39  主题:全栈蓝

ResNet详细介绍

文章目录

ResNet的发明者是何恺明Kaiming He)、张翔宇Xiangyu Zhang)、任少卿Shaoqing Ren)和孙剑Jiangxi Sun),取得了2015年ILSVRC 和 COCO比赛 ImageNet classification、ImageNet detection、ImageNet localization、COCO detection、COCO segmentation 的第一名。网络发表在论文《Deep Residual Learning for Image Recognition》,该论文是CVPR2016的最佳论文。

1. 退化问题


深度卷积网络在图像分类领域取得了很大的成功,VGGnet和GoogLeNet都通过增加网络深度,获得了很好的性能。

那我们能否简单的通过堆叠网络深度来学习更好的模型呢?

首先,增加网络深度会带来梯度消失和梯度爆炸的问题,但这可以通过归一化初始化和Batch Normalization得到很大程度的解决。

其次,增加网络深度,可能出现退化(degradation)问题,即随着网络深度增加,精度达到饱和,继续增加深度,导致精度快速下降。如下图实验结果

层网络的训练结果和测试结果都要比 层的网络差很多,因此也不是过拟合造成的退化。

2. 分析并设计残差块尝试处理退化问题


退化问题表明并不是所有的网络模型都能被很简单的优化。作者认为,至少深层的网络不应该比浅层网络表现更差,原因是我们可以设置这样一个网络:在浅层网络中堆叠恒等映射层(identity mapping)来增加网络深度,这些恒等映射层保持输入和输出一致即可。如下图所示:

基于这种方式构建的深层网络,起码能保持浅层网络的训练精度,而不应该得到比浅层网络更高的训练错误率。但是实验结果却出现了退化问题,说明当前的优化方案很难学习这种(带有恒等映射)模型或其他更好的模型。

引发思考,如果让神经网络能够学习恒等映射,也许就能帮助我们解决退化问题,至少能保证深层网络不会比浅层网络的表现更差。

于是作者设计了残差学习模块,假设数据期望的基础映射为 ,让堆叠的非线性层去拟合残差映射 ,而不是直接拟合 (前面的分析已经知道,当前的优化方案很难学习恒等映射). 此时基础映射 可表示为 。作者假设优化残差映射比优化原始的基础映射简单,而且如果恒等映射是最优解,将残差映射 置为 比通过堆叠一些非线性层来拟合恒等映射更简单。

作者使用下面的网络块来表示

其中,恒等映射通过“shortcut connections” (上图的弯线连接,指跳过一个或者多个层的连接,后续用跳跃连接表示)实现,如果恒等映射为最优模型,只需要将上图权重层的权重置为 即可。 另外,跳跃连接既没有增加参数,也没有增加计算量,且该模型可以使用当前的深度学习工具快速搭建。

其数学表达式为

其中 分别表示该残差块的输入和输出向量, 是待学习的残差映射,在上图中

,其中 为激活函数(Relu),为了方便表示,这里省略了偏置

由公式 可知,虽然加入了跳跃连接,但是并没有参数和计算复杂度,这点在实验中非常具有吸引力,且我们可以很公平的比较具有相同参数量,深度、宽度和计算成本的普通网络与残差网络。

另外,要求 的维度必须一致,如果不一致(如输入和输出的通道数发生变化),需要使用线性投影 来调整 的维度,确保能执行

也可以对公式 使用投影矩阵 (即对所有的恒等映射都使用线性投影),但是通过实验对比发现,恒等映射已经足够解决退化问题了,因此只在维度变化时才使用 .

另外,残差映射 的形式是很灵活的,论文中的 包含两层或者三层权重层,更多层也是可以的 ,但是如果只有一层权重层,此时有 ,跟不使用残差连接没差别。

3. 通过对比试验,研究残差网络性能


作者在 数据集上进行了全面的对比实验,发现

  1. 深度残差网络相比普通网络更容易优化
  2. 随着网络深度增加,残差网络的性能也会随着提高,并获得了比以前网络好得多的结果

先介绍下普通网络,残差网络以及更深层残差网络的基本结构,如下图所示

  • 普通网络(Plain Network)

    普通网络的结构主要受VGG启发,网络结构如上图中"34-layers plain"所对应的网络,有以下特点

    • 卷积主要使用大小为 的卷积核,如果特征图大小(长和宽)不发生变化,则使用相同数量的卷积核,如果特征图的大小(长和宽)减半,则使用的卷积核数量翻倍,这样能够保持相同的时间复杂度

    • 通过卷积中设置步长为 实现下采样

    • 网络最后使用全局平均池化,以及一个具有1000个神经元且使用softmax激活函数的全连接层

  • 残差网络(Residual Network)

    基于上图中的普通网络,加入跳跃连接,就构成了残差网络。残差块的配置如下

    • 当残差块的输入和输出维度相同时,使用恒等映射(上图的实线表示的跳跃连接)

    • 如果输出的特征图维度增加(上图虚线表示的跳跃连接)时,则跳跃连接使用两种方式调整输入的特征图通道数

      1. 使用恒等映射,缺少的维度用 补齐,这种方式不增加额外的参数

        按照上图的网络结构,特征图通道数发生变化时,其输出的特征图大小(长和宽)也发生了改变(减半),此时恒等映射如何理解,猜测是将输入特征图沿通道方向以设定步长(论文中是 )直接取特征值,作为输出特征图对应通道的特征值,缺少的通道则用全 补充(这个不理解也无所谓,后续搭建将使用 卷积实现跳跃连接的维度调整),如下图所示

      2. 使用 的卷积调整维度

  • 更深层的网络

    除了 层的普通和残差网络,还设计了 层, 层和 层的残差网络。对于更深层的网络,为了节约训练时间,在残差块中加入了瓶颈(Bottleneck)设计,如下图右侧图形所示

    即在残差映射 中,包含的权重层由两层变为三层。三层权重层分别为 的卷积层,其中 的卷积用来负责降维和升维, 的卷积作为低维输入和高维输出的瓶颈

    说一下很无聊的点,为啥 的卷积叫做瓶颈层,如下图所示, 卷积核个数决定这个瓶子最细的地方有多细,因此叫做瓶颈层。(图里的维度,表示通道数或卷积核个数)

最终,共设计和训练了以下几种网络

  • 表示将两层卷积作为一个分组(分组是方便将其转为残差块即 将包含这个分组内的层),其中第一层卷积使用 个大小为 的卷积核,第二层卷积使用 个大小为 的卷积核, 表示具有三个这样的卷积分组。
  • FLOPs 表示网络的浮点计算量,观察图表不难发现,当网络加深至 层时计算量为 ,约为VGG19计算量
  • 每次卷积之后,激活之前使用Batch Normalization

4. 实验结果分析


层和 层网络的定量结果表如下

训练过程的训练误差和验证集错误率统计图如下

其中粗线条表示验证集错误率,细线表示训练集错误率,通过分析图标,有以下发现:

  • 普通网络

    对比了 层和 层的普通网络(网络结构见上图Table1),发现 层网络的训练和验证集错误率均高于 层网络,出现了退化问题,作者认为网络使用了Batch Normalization,并且验证了后向传播时的梯度也处在合理范围,因此排除了梯度消失引起退化的可能性。猜测可能随着网络的加深,网络的收敛速度呈指数下降。

  • 残差网络

    对比了 层和 层的残差网络,网络中的跳跃连接均使用恒等映射,需要增加维度时,使用零填充(zero-padding),因此和对应的普通网络相比,残差网络没有新增额外的参数

    实验结果发现

    1. 层残差网络的训练错误率比 层的低,且性能在验证集上得到了很好的泛化, 层网络的验证集误差比 层的低 ,说明残差网络很好了解决了退化问题
    2. 层残差网络的top-1错误率比 层普通网络的错误率低了 ,精度有很大提升,这表明残差学习对深度网络来说十分有效
    3. 层普通网络和残差网络虽然验证集错误率相差无几,但是残差网络收敛更快

    作者还做了实验,用于研究跳跃连接使用恒等映射和投影映射( 卷积调整维度)的差别,首先做了三种跳跃连接的配置

    使用恒映射, 需要增加维度时,使用零填充(zero-padding),所有的跳跃连接均不增加参数

    需要增加维度时,使用投影映射,其他的跳跃连接则使用恒等映射

    所有的跳跃连接均使用投影映射

    实验结果如下图

    对比发现, 好,原因是使用全零填充的维度学不到东西, 好,认为是引入了更多的参数。但是从整体看 三种配置的错误率差别不大,认为投影映射并不是处理退化问题必须的操作,因此在测试 层残差网络时,跳跃连接使用配置

    另外,该图表也展示了 层残差网络的结果,发现错误率随着网路加深仍在减小,未发现退化问题。

满眼李小花

2021/06/01  阅读:39  主题:全栈蓝

作者介绍

满眼李小花