Resnet

1.背景介绍

2012开始,从Alexnet开始涌现出一大波神经网络,不断刷新着ImageNet榜单,很多论文揭示了网络深度与性能的关系,理论上,增加神经网络层数后训练的精度不应该会变差,但是没有具体的实验和工程方法可以实现,因为随着网络深度的增加,会伴随着梯度消失或梯度爆炸的问题,本文提出了一种深度残差模型(ResNet),解决了深层模型难训练以及性能退化的问题。何恺明也因此摘得CVPR2016 Best Paper。

2. 动机

想要回答这个问题,逃不过的一个问题就是梯度消失(网络层数过多,求导时得到的梯度近似为围绕0 的高斯分布,无法继续找到最优解,在某个位置徘徊(鞍点)、以及梯度爆炸问题。)论文提到这两个问题已经通过normalized initialization方法和intermediate normalization layers有效缓解。
实际上在网络深度加深时,还有一个问题暴露出来,随着网络深度的加深,精度也开始下降。这不是因为overfitting(train error 低 test error 高)造成的,因为误差都很高,下图可以出56-layer的网络表现比20-layer的还差。
Resnet_第1张图片

因此这是一个优化问题,论文证明了通过改变模型结构可以解决这个问题。

3. 基本模块Building Block

对于一个堆积层结构(几层堆积而成)当输入为x时其学习到的特征记为H(x),现在我们希望其可以学习到残差F(x)=H(x)−x,这样其实原始的学习特征是 F(x)+x。之所以这样是因为残差学习相比原始特征直接学习更容易。当残差为0时,此时堆积层仅仅做了恒等映射,至少网络性能不会下降,实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。残差学习的结构如图所示。这有点类似于电路中的“短路”,所以是一种短路连接(shortcut connection)。
Resnet_第2张图片

公式可以定义为:
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卷积,用于降维和升维,降低计算复杂度,分别对应下图的左右两部分。

Resnet_第3张图片

残差连接的方式也分为有1X1卷积和没有使用1X1卷积,1X1卷积是为了保持前后通道数一致。
Resnet_第4张图片

下图是Resnet的组成结构图,前两个是浅层网络,后边三个为深层网络,类似于Inception网络一样,将网络结构分成几个building blocks,深层和浅层的区别在于block内部的变化,使用三个卷积层代替浅层网络中两个卷积层,使用1x1卷积用来升维和降维 。
Resnet_第5张图片

这里关注一下网络结构中残差的实现,当输入输出是相同维度的时候,Identity shortcut可以直接使用,对应图中实线部分。
当输入输出维度发生变化时,有两种方式:

  1. 仍然采用identity short,同时要以0填充的方式增加维度。这种方法不会引入额外的参数。
  2. 采用1X1卷积匹配维度,也就是公式(2)的projection shortcut.
    上图中由3个网络结构组成,VGG-19是作为对比使用的BaseLine,34-layer plain 是不是用残差结构的纯网络,34-layer resdiual 是使用残差结构的网络。ResNet网络是基于VGG-19修改而来。

5. 其它更复杂的残差网络设计:

Resnet_第6张图片

每一个方格是一个building block。

你可能感兴趣的:(计算机视觉,深度学习,人工智能,神经网络)