深度学习小白笔记:ResNet

ResNet是在2015年被提出的 ,并在ImageNet比赛classification任务上拔得头筹。
在我们熟悉ResNet网络之前,先看看ResNet究竟解决了什么问题吧~
我们的一般印象当中,深度学习愈是深(复杂,参数多)愈是有着更强的表达能力。凭着这一基本准则CNN分类网络自Alexnet的7层发展到了VGG的16乃至19层,后来更有了Googlenet的22层。可后来我们发现深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,test dataset的分类准确率也变得更差。排除数据集过小带来的模型过拟合等问题后,我们发现过深的网络仍然还会使分类准确度下降(相对于较浅些的网络而言)。
在这个矛盾下,ResNet的作者提出了一种全新的网络,叫深度残差网络(Deep Residual Learning)。
它能解决网络尽可能的加深的情况下仍然保证准确率不下降甚至能提升的问题。

先来欣赏一下网络构架图吧!~
深度学习小白笔记:ResNet_第1张图片

网络框架:

ResNet一共提出了五种深度的结构:分别为18,34,50,101,152
每种网络都由5部分组成:conv1,conv2_x,conv3_x,conv4_x,conv5_x。
层数运算:用101-layer举例
分别经过:conv1(7 * 7 * 64的卷积层),building block(3+4+23+3=33,每个block3层,3 * 33=99),fc层(分类)
===》1+99+1=101层(这里要强调一波:101层网络单单包括卷积层和全连接层,激活函数和pooling不算在内 。╮(╯▽╰)╭ )
然后我们可以发现,单从网络层数来看,50-layer和101-layer唯一的区别只有conv4_x相差(23-6) * 3=51层。

Deep Residual Learning:
在Residual Learning,作者提出了shortcut connection,“shortcut”说白了就是抄近道。看看下图就能理解了。
深度学习小白笔记:ResNet_第2张图片
这张图可以很好地概括和描述Residual Learning的思想:
若将输入设为X,将某一有参网络层设为H,那么以X为输入的此层的输出将为H(X)。
一般的CNN网络是直接通过训练学习出参数函数H的表达,从而直接学习X -> H(X)。
Residual Learning则是致力于使用多个有参网络层来学习输入、输出之间的参差即H(X) - X。
即学习:X -> (H(X) - X) + X。
其中X这一部分为直接的identity mapping,而H(X) - X则为有参网络层要学习的输入输出间残差。

然后我们来看看Residual Learning实验吧
下图是作者做的一个传统VGG网络与ResNet的对比:
深度学习小白笔记:ResNet_第3张图片
为了验证Residual Learning的有效性,作者进行了三组实验进行论证:
最左边的是VGG19(这个是VGG中最深最稳的网络结构)
中间的是根据VGG的思路,加深成32层的VGG plain network
右边的是32层VGG plain network相对应的ResNet网络。(它对每层的输入做一个reference, 学习形成残差函数, 而不是学习一些没有reference的函数。这种残差函数更容易优化,能使网络层数大大加深。)
bottleneck构建模块:
文中提到identity mapping,也就是上文提到的shortcut connection,文章中就提出了两种构建方式,(如下图)

深度学习小白笔记:ResNet_第4张图片
这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个”building block“。
其中右图又称为”bottleneck design”,目的是为了降低参数的数目。
它像Inception网络那样通过使用1x1 conv来巧妙地缩减或扩张feature map维度从而使得我们的3x3 conv的filters数目不受外界即上一层输入的影响,所以输出也不会影响到下一层的module。
第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复。
整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量(实用目的)。
该结构的设计单纯为了节省计算时间进而缩小模型训练时间,对最终规模精度无影响。

实验结果:

深度学习小白笔记:ResNet_第5张图片
深度学习小白笔记:ResNet_第6张图片
残差网络能够在深度增加的情况下维持强劲的准确率增长,有效的避免了VGG网络层数增加到一定层数时模型准确率不升反降的问题。

下面的表格对比可以很直观的看出ResNet的网络的优越性:
深度学习小白笔记:ResNet_第7张图片
深度学习小白笔记:ResNet_第8张图片

总结:

提出了Deep Residual Learning网络结构,能有效解决“随着网络加深,准确率不下降”的问题,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的。同时很多检测,分割,识别等领域都纷纷使用ResNet解决问题。

参考文献:

  • 《DeepResidualLearningforImageRecognition》
  • https://www.jianshu.com/p/93990a641066
  • https://www.cnblogs.com/alanma/p/6877166.html

你可能感兴趣的:(深度学习小白笔记:ResNet)