天天看点

深度学习之基础模型—resNet

The depth of representation is of central importance for many visual recognition tasks

继VGG和GoogLeNet在网络深度上进行了进一步的尝试,取得了比较大的进展-网络越深效果也越好-,但也遇到了问题:

网络越深,越容易出现梯度消失,导致模型训练难度变大,出现“退化”现象
           

注:从VGG的结果也能感觉到,当网络深度达到一定深度的时候,模型的效果很难再提升

深度学习之基础模型—resNet

作者也进一步通过实验指出了网络深度的增加,会出现“退化”现象,

退化:当模型的深度增加时,输出的错误率反而提高了
           
深度学习之基础模型—resNet

Q:如何有效的解决网络深度的增加,带来的“退化”问题?

A:出现退化的问题,主要是由于网络深度的增加,带来的在网络训练的时候,梯度无法有效的传递到浅层网络,导致出现梯度弥散(vanishing)。BN(BatchNormalization)通过规范化输出数据来改变数据分布,是一个向前的过程来解决梯度弥散问题,而resNet网络通过增加skip connection(Identity Map)来直接连接浅层网络与深层网络,从而使得梯度能够很好的传递到浅层。[作者在后面又提出了质疑]

残差网络

针对出现的“退化”问题,作者提出了残差网络的概念:

假设:如果多层非线性层叠加可以渐进逼近复杂的函数,那么也能渐进逼近残差函数:H(X)-X
           

这样,可以用多层网络来逼近残差函数

F(X):=H(X)−X

从而原来的网络结构就变成了

F(X)+X

其中一个残差结构如下:

深度学习之基础模型—resNet

说明:

  • 如果添加了identity mapings,则结构更深的网络不会比浅的网络效果差
  • 多层非线性层叠加在一起构成的网络结构,很难学习到identify mapings
  • 如果identity mapings是最优的链接方式,那么 F(X) 方面的权重参数则会趋于0
  • 如果最优的映射接近identity mapings,则优化的时候,找到相对于identity mapings的 F(x) (初始参数在0附近),要比逼近一个全新的函数要简单的多

Identity Mapping

关于shortcut connection提出了两种连接方式

方式一:

y=F(X,Wi) +   X

其中 F(X,Wi)=W2σ(W1X) ,如上图上描述的,表示多个非线性卷积层的叠加, σ 表示非线性激活函数ReLU, F+X 表示shortcut connection,对应每一个像素相加。

说明:该网络结构相对于plain Net没有增加任何参数

深度学习之基础模型—resNet

方式二:

y=F(X,Wi) +WsX

其中,如果想要改变输入输出的channels个数,则可以通过线性变换 Ws 来实现shortcut connection。

关于 F(X,Wi) 论文中也提到,也不要局限于上面提到了2层卷积的连接,可以更加变化丰富多样些,如下

深度学习之基础模型—resNet

注:其中一个这样的小单元,称之为一个block。在构建深层的网络结构时,作者将第二种结构称之为bottleneck

网络结构

作者在此部分重点对比了plain Network 与resNet两种结构,从而来说明resNet的优越性。

深度学习之基础模型—resNet

注:左侧:VGG-19(19.6 billion FLOPS),中间:PlainNet-34(3.6 billion FLOPS),右侧:ResNet-34(3.6 billion FLOPS)

说明:

  • plain Net根据VGG网络的设计思路,简单的堆积卷积层,构架了一个18层和34层
  • resNet与对应的PlainNet的参数个数相同
  • resNet网络结构中,
    • 实线:代表的是上述提到的方程1,输入输出的维度没有改变,
    • 虚线:代表的是上书提到的方程2,输入输出的维度发生了改变,具体的实现是卷积的步长设置为2

Implemenation

训练说明:

  • 随机resize 到256,480
  • 随机裁剪224x224
  • 随机水平镜像
  • 减去均值
  • 卷积操作之后,非线性激励函数之前,使用BN(BatchNormalization)操作
  • 使用SGD优化,mini-batch=256
  • 学习率=0.1,然后当误差不下降后,降低10倍
  • 迭代次数 60 x 104
  • 没有使用dropout操作

测试说明:

  • 对比了标准的10-crop测试(4个角落,中间位置,乘以水平镜像)
  • 采用fully convolutional 的形式,对最后的结果取平均(将图像的短边缩放到{224, 256, 384, 480, 640} 之一)

实验

实验一:ImageNet Classification

深度学习之基础模型—resNet
深度学习之基础模型—resNet

Q:作者指出优化难度好像并不是由于梯度消失引起的?

A:支持这种观点可以通过上述对比实验可以看出:

These plain neworks are trained with BN, which ensures forward propagated signals to have non-zero variances.

We also verify that the backward propagated gradients exhibit healthy norms with BN.

So neither forward nor backward signals varnish.

实际上,plainNet-34 仍然可以达到具有竞争力的结果,也可以指出优化过程仍然起到了作用。 因此,作者得出,这种深度的plainNets的收敛可能是指数级别的(非常慢)速率,导致训练误差偏高【作者也进一步证明了通过更多的迭代次数(3x),仍然观察到了退化现象】

residual Networks

实验一:

作者对比了18-layer和34-layer的plainNet和ResNets。

深度学习之基础模型—resNet

说明:

  • 两折的基础网络是相同的,resNet同plainNet
  • 不同的是ResNet使用了shortcut connection:使得每两个卷积增加了一个shortcut connnection
  • 所有的shortcut 采用Identity Mapping,如果维度增加了,则采用0补足,从而相对于plainNet不会带来任何额外参数
  • 结果ResNet效果都要比plainNet要好。
    • 通过table2,可以看出resNet可以比较好的控制“退化”问题,
    • top-1 error的对比,更能体现残差在提高网络深度方面更加有效
    • 收敛速度:通过对比18-layer发现resNet和plainNet的最终精度差不多,说明网络深度不是特别深的时候,SGD能然可以对plainNet找到一个不错的最优解,但是Resnet提供了一种收敛速度更快的结构

实验二:

对比Identity和projection两种shortcuts connection

深度学习之基础模型—resNet

说明:

  • 作者对比了3种short connections
    • A:zero-padding shortcuts for increasing dimensions, identity shortcuts for others
    • B:projection shortcuts for increasing dimensions, identity shortcuts for others
    • C:projection shortcuts for all shortcut
  • 通过Table 3可以看出B略微好于A,C好于B。
    • B>A:A中的zero-padding没有进行残差学习
    • C>B:C好于B得益于更多的参数(13个projection shortcuts)
  • 作者指出:这种结构的细微差别并不是解决“退化”问题的本质因素。为了考虑到模型的参数大小,内存和时间复杂度的问题,在后续的实验中,作者没有考虑C方法

Deeper Bottleneck Architectures

在进行ImageNet挑战的时候,考虑到训练时间问题,作者修改了block结构,由于在3x3卷积前后都采用了1x1的卷积操作,因此称之为bottlenet。

注:1x1卷积主要用来降维和扩维用,使得3x3的卷积输入输出的维度更低。

深度学习之基础模型—resNet

说明:

  • parameter-free:改为bottleneck之后,仍然采用identity mapping进行shortcut connection,没有增加参数个数
  • Identity mapping更加适合bottleneck结构:如果将Identity mapping替换为Projection Mapping,由于Projection的输入输出纬度都很高,从而模型的大小和时间负责度都扩大了1倍。因此
  • -

50-layer-ResNet

在resNet-34的基础上,将block结构中的2层3x3的卷积换成上述的bottleneck结构,并采用B(projection shortcuts for increasing dimensions, identity shortcuts for others)结构来增加维度

101-layer and 152-layer ResNets

利用更多的3-layer结构(bottleneck)来生成更加深的网络结构。但是尽管152的网络结构非常深,但是相比于VGG-16(19)的模型复杂度还是小很多

model complexity
resNet-152 11.3 billion FLOPS
VGG-16 15.3 billion FLOPS
VGG-19 19.6 billion FLOPS

注:50/101/152-layer的resNets要比34层的结构有更高的精度,并没有观察到“退化”问题。

结果:

深度学习之基础模型—resNet
深度学习之基础模型—resNet

参考文献

https://arxiv.org/pdf/1512.03385v1.pdf

http://blog.csdn.net/wspba/article/details/56019373

http://news.ifeng.com/a/20170825/51759378_0.shtml

http://blog.csdn.net/u010789558/article/details/52932427

继续阅读