1.背景介绍
2012开始,从Alexnet开始涌现出一大波神经网络,不断刷新着ImageNet榜单,很多论文揭示了网络深度与性能的关系,理论上,增加神经网络层数后训练的精度不应该会变差,但是没有具体的实验和工程方法可以实现,因为随着网络深度的增加,会伴随着梯度消失或梯度爆炸的问题,本文提出了一种深度残差模型(ResNet),解决了深层模型难训练以及性能退化的问题。何恺明也因此摘得CVPR2016 Best Paper。
2. 动机
想要回答这个问题,逃不过的一个问题就是梯度消失(网络层数过多,求导时得到的梯度近似为围绕0 的高斯分布,无法继续找到最优解,在某个位置徘徊(鞍点)、以及梯度爆炸问题。)论文提到这两个问题已经通过normalized initialization方法和intermediate normalization layers有效缓解。
实际上在网络深度加深时,还有一个问题暴露出来,随着网络深度的加深,精度也开始下降。这不是因为overfitting(train error 低 test error 高)造成的,因为误差都很高,下图可以出56-layer的网络表现比20-layer的还差。
因此这是一个优化问题,论文证明了通过改变模型结构可以解决这个问题。
3. 基本模块Building Block
对于一个堆积层结构(几层堆积而成)当输入为x时其学习到的特征记为H(x),现在我们希望其可以学习到残差F(x)=H(x)−x,这样其实原始的学习特征是 F(x)+x。之所以这样是因为残差学习相比原始特征直接学习更容易。当残差为0时,此时堆积层仅仅做了恒等映射,至少网络性能不会下降,实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。残差学习的结构如图所示。这有点类似于电路中的“短路”,所以是一种短路连接(shortcut connection)。
公式可以定义为:
Y
=
F
(
x
,
{
W
i
}
)
+
x
Y = \mathcal{F}(x,\{W_i\})+x
Y=F(x,{Wi})+x (1)
x
,
y
x,y
x,y表示输入和输出向量,
F
(
x
,
{
W
i
}
)
\mathcal{F} (x ,\{W_i\})
F(x,{Wi})表示残差块学习到的特征,例如一个两层网络 ,
F
=
W
2
σ
(
W
1
x
)
\mathcal {F} =W_2 \sigma(W_1 x)
F=W2σ(W1x),
σ
\sigma
σ表示Relu函数。
F
+
x
\mathcal{F} +x
F+x表示逐元素相加的残差连接。
在公式(1)中,x和F的尺寸必须相等。如果不是这种情况(例如,当改变输入/输出通道时),我们可以通过快捷连接执行线性投影 W s W_s Ws以匹配尺寸:
F \mathcal{F} F的表示非常灵活,上述公式为了方便,使用全连接的形式,但是也可以表示为多层卷积层。
以上公式(1)也就是下文shortcut连接不采用1X1卷积的block结构,也称为 Identity Mapping。
公式(2)采用了投影矩阵(就是下文使用1X1卷积)来匹配前后feature map的通道数,对应使用了1X1卷积的block结构。
4 .网络实现
主要使用了两种残差Block,一种用于浅层网络(ResNet18/34),一种用于深层网络(ResNet50/101/152),相比于浅层网络Block,深层Block作者称之为“bottleneck”building block,主要增加了1X1卷积,用于降维和升维,降低计算复杂度,分别对应下图的左右两部分。
残差连接的方式也分为有1X1卷积和没有使用1X1卷积,1X1卷积是为了保持前后通道数一致。
下图是Resnet的组成结构图,前两个是浅层网络,后边三个为深层网络,类似于Inception网络一样,将网络结构分成几个building blocks,深层和浅层的区别在于block内部的变化,使用三个卷积层代替浅层网络中两个卷积层,使用1x1卷积用来升维和降维 。
这里关注一下网络结构中残差的实现,当输入输出是相同维度的时候,Identity shortcut可以直接使用,对应图中实线部分。
当输入输出维度发生变化时,有两种方式:
- 仍然采用identity short,同时要以0填充的方式增加维度。这种方法不会引入额外的参数。
- 采用1X1卷积匹配维度,也就是公式(2)的projection shortcut.
上图中由3个网络结构组成,VGG-19是作为对比使用的BaseLine,34-layer plain 是不是用残差结构的纯网络,34-layer resdiual 是使用残差结构的网络。ResNet网络是基于VGG-19修改而来。
5. 其它更复杂的残差网络设计:
每一个方格是一个building block。