论文精读|ResNet网络详解

Resnet通过残差学习解决了深度神经网络的退化问题,其核心在于通过短路连接实现恒等映射,确保网络至少不会因深度增加而性能下降。Resnet结构包括BasicBlock和Bottleneck,适用于不同深度的网络,通过1x1和3x3卷积进行特征学习,并用批量归一化缓解梯度问题。
摘要由CSDN通过智能技术生成

Resnet概述

Resnet(深度残差网络)是由何凯明等学者于2015年提出的网络,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名,获得COCO数据集中目标检测第一名,图像分割第一名。《Deep Residual Learning for Image Recognition》作为2016年CVPR最佳论文,当前被引次数已高达16w。

问题的发现

Is learning better networks as easy as stacking more layers?(学习更好的网络就像堆叠更多的层一样简单吗?)

网络深度是至关重要,提取层级丰富的图像特征可以通过增加网络深度来实现,在具有挑战性的ImageNet数据集上的领先结果都用到了“非常深”的网络模型。以往人们认为,通过不断堆叠卷积、池化层加深网络,一定会带来精度的提升,然而并非如此:

1.梯度消失和梯度爆炸问题(vanishing/exploding gradients)

梯度消失:如果每一层的误差梯度小于1,反向传播时,网络越深,梯度过小甚至趋近零
梯度爆炸:如果每一层的误差梯度大于1,反向传播时,网络越深,梯度过大以至无穷大

梯度消失/爆炸从一开始就阻止了网络收敛,这个问题可以通过normalized initialization(初始归一化,保证输入层数据分布是一样的)以及intermediate normalization layers(中间归一化层,保证每层网络输入数据分布是一样的)缓解。

2.网络退化问题(degradation)

随着更深的网络能够开始收敛,网络退化问题就暴露出来了——在论文的实验中,随着网络深度的增加,精度趋于饱和然后迅速下降(图 1)

而这并不是由过拟合引起的(过拟合是训练误差下降,测试误差升高,而从论文中的实验看出,随着网络层数加深,训练/测试误差均在升高),作者认为这也不太可能是梯度爆炸/消失导致的(刚刚提到,这个问题在实验中很大程度上可以被归一化操作缓解)。

图1 网络越深,训练误差越大,测试误差也越大

残差结构的提出

Resnet解决了什么问题:

总的来说,Resnet网络通过残差学习的思想解决了深度神经网络的退化问题(degradation),对于残差学习提出的思路及其详细的介绍我们在后文会讲到。

残差结构提出的思路:

假设在一个浅层网络中增加许多层,将其堆积成深层网络,一个极端情况是增加的这些层什么也不学习,仅仅复制浅层网络的特征,即实现恒等映射(identity mapping)

从理论上讲,这种情况并不会让网络产生性能上的损失,假设这里输入的是 x ,而 x 已经是最优,那我们期望通过网络的许多层后最终网络输出的这个映射也为 x 。

然而实际上,作者发现深层网络难以拟合(或者说实现)这个恒等映射关系,随着堆叠层数的不断加深,求解器不能找到一种有效的解决途径。文中的实验也表明较深的网络模型产生了比较浅模型更高的训练误差。至于为什么深层神经网络难以实现恒等变换可以参考:深层网络为什么没有学会恒等映射函数

论文思想——Resnet模块

也就是说,需要找到一种方式实现这样的恒等映射,这样至少能保证网络不会变得更差

在Resnet中,作者提出利用残差学习(residual learning)来解决网络退化问题。

"We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping.To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers."

我们假设优化残差映射比优化原始的、未引用的映射更容易。在极端情况下,如果一个恒等映射是最优的,将残差推至为零要比用一堆非线性层拟合一个恒等映射容易得多

残差结构的理解:

文中提到两种映射方式(图 2):

1.identity mapping(恒等映射),指的是右侧标有x的曲线

2.residual mapping(残差映射),残差指的是F(x)部分

图2 残差学习模块 

我们把输入为 x 时网络学习到的特征记为 H(x) ,则残差可以表示为 F(x)= H(x) - x ,而要去学习的原始映射 H(x) 则变成 F(x) + x(逐元素相加)。

作者提出的这个修正方法不再学习 x 到 H(x) 的基本映射关系,而是学习两者之间的差异(残差)。把网络设计为F(x) + x ,则是将恒等映射作为网络学习的一部分,当残差为0时,相当于只做了恒等映射,这样的操作至少不会使网络的性能下降,而实际上残差大概率不为0,这会使网络在输入特征基础上学习到新的特征,进而拥有更好的性能。

之所以这样操作是因为残差学习比直接学习原始特征要容易得多,残差结构是去拟合逼近 0,类比于使用各种非线性网络逼近恒等映射,前者无疑会更加简单。这一点作者在原文中也有提到,数学角度的分析和解释可以参考——你必须要知道CNN模型:ResNet

残差结构的设计:

在Resnet原文中,残差结构有两种不同的设计方式,左图"Basicblock"针对较浅的网络,如ResNet-18/34,右图“Bottleneck”针对较深的网络,如ResNet-50/101/152(图 3)。

Basicblock(左)主要由两个 3x3 卷积组成。

Bottleneck(右)在 3x3 卷积层前后引入分别接 1x1 卷积,主要目的是改变维度,减少参数量。第一个1x1卷积先将通道数从256压缩至64,经过 3x3 卷积后再使用一个1x1卷积扩增通道数至256,这样可以大大减少网络参数量。

图 3 两种残差结构 

残差结构的实现:

F(x) + x 可以通过具有“短路连接”shortcut connections的前馈神经网络来实现。在Resnet中,短路连接只用于执行/实现恒等映射(直接将x传到了后面,与这两层网络拟合出的结果相加)。

刚刚我们提到,短路连接 H(x) = F(x) + x 这里需要逐元素加和,如果 F(x) 与 x 的通道数相同,则可以直接相加(对应实线),如果 F(x) 与 x 的通道数不同,则需要进行维度匹配,Resent论文中提到以下几种shortcut的实现方式:

(A)“zero-padding shortcuts are used for increasing dimensions, and all shortcuts are parameterfree”

两者维度(通道数)不同,可对增加的维度使用零填充(使用全0填充缺少的维度, 然后concat低维数据从而升到高维)。

(B)“projection shortcuts are used for increasing dimensions, and other shortcuts are identity”

两者维度(通道数)不同,可采用论文中提到的公式H(x) = F(x) + Wx来匹配维度,其中 W 代表线性投影(使用 1x1 卷积),其他shortcuts则为恒等映射(维度相同时)。

(C)“all shortcuts are projections”

无论维度是否相同,对于所有的shortcuts,都使用 1x1 卷积来匹配维度。

注意:

(1)当两者尺寸不同时,执行以上操作时需要让 strides=2(相当于下采样匹配特征图尺寸)

(2)A是无参数的shortcut连接,B、C均会引入参数

文章做实验对比了以上三种方式,结果表明:

B略好于A,因为A中的零填充的维度没有残差学习

C略好于B,作者归因于C中更多的projection shortcuts引入了额外的参数

A\B\C三种方式的shortcut connection相对于plain counterpart来说精度都有显著改善,然而A\B\C之间差异微小,说明投影捷径对于解决退化问题并非必不可少。所以相对于选项C来说,采取B这种处理方式可以减少内存/时间和模型大小。

Resnet网络结构

不同深度的ResNet

论文里面给出了5种不同深度的ResNet网络(图 4),网络中都是用的 1 x 1 和 3 x 3 大小的卷积核。ResNet-18/34进行两层卷积间的残差学习,ResNet-50/101/152进行三层卷积间的残差学习,分别对应上图中两种不同方式的残差结构。

不同深度Resnet网络的公共部分conv1用到的是7 x 7的卷积,至于为什么这样操作知乎上有对此问题的探讨:为什么resnet不在一开始就使用residual block,而是使用一个7×7的卷积,然后接了max pooling层。

conv2_x、conv3_x、conv4_x、conv5_x即由上文提到的两种残差模块堆叠而成

最后是average pooling和全连接层,softmax输出

注意:“We adopt batch normalization (BN) right after each convolution and before activation”,在Resnet原文中作者将BN层放在卷积层(Conv)和激活层(Relu)之间,BN层的原理可以参考:Batch Normalization详解以及pytorch实验

图 4 不同深度的Resnet网络结构 

Resnet-34网络结构图

Resnet的设计参考了VGG-19网络(图5 左),并加入了短路连接形成残差学习(图5 右)。

注意短路连接有实线与虚线之分,实线代表的是维度匹配的shortcut连接,虚线代表维度不匹配。

图 5 Resnet-34 

  • 34
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ResNet是一种深度学习模型,是由Kaiming He等人在2015年提出的。它是深度残差神经网络的缩写,是一种非常有名的卷积神经网络,其结构被广泛应用于计算机视觉领域,尤其是图像分类任务。 ResNet采用残差学习来解决深度神经网络的梯度消失问题,即随着模型深度的增加,模型的准确率不再提高,甚至有所下降。残差学习的核心思想是通过跳跃连接(shortcut connection)将输入和输出连接起来,构建“重定向”式的网络结构。这使得深度神经网络训练的过程中可以直接传递梯度,避免了梯度消失或爆炸的问题,同时减轻了梯度的信息传递过程中的降噪效应。 ResNet的架构可以归纳为不同的块,即ResNet18、ResNet34、ResNet50、ResNet101和ResNet152,它们的网络结构都基于ResNet的残差块,但不同之处在于层数不同。例如,ResNet50有50层,ResNet101有101层,层数越多,网络的深度就越深,性能也就越好。ResNet中的主要组成部分是卷积层,批量归一化层和激活函数等,因此局部区域处理能力更强,可以提取更多和更细节的特征信息。 相比于传统的卷积神经网络ResNet有很多优点。首先,ResNet具有非常强的深度表达能力,可以在不增加模型参数数量的前提下增加网络深度。其次,ResNet可以防止梯度消失,避免在训练中出现训练无法收敛的情况。同时,ResNet的训练速度快,效果稳定,可以实现更好的图像分类效果。 总之,ResNet是一种非常优秀的卷积神经网络,它的创新思想和经典结构对深度学习的发展产生了巨大的影响,未来也将成为计算机视觉领域的重要研究方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值