ResNet论文总结


ResNet论文总结

一、简介

论文全名:《Deep Residual Learning for Image Recognition》
我们都知道一个卷积神经网络的网络深度是很重要的,通常增加网络深度可以提升网络的准确率,但是很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新。同时,随着网络深度的增加,就会出现准确度变得饱和,然后开始下降的退化问题。而ResNet利用残差网络结构解决了深层神经网络出现的梯度消失和网络退化的问题。
在ImageNet数据集上ResNet的作者们评估了深度高达152层的残差网络——比VGG深8倍但仍具有较低的复杂度。这些残差网络的集合在ImageNet测试集上取得了3.57%的错误率。这个结果在ILSVRC 2015分类任务上赢得了第一名。

二、ResNet的特点

  1. 解决了深层神经网络的退化问题
    我们知道在同一个训练集上,深层网络的性能无论如何都不应该比浅层网络差:假设A是一个56层的网络,B是一个20层的网络,我们只需要将A中的20层替换为B,然后将A中剩下的36层全部优化为恒等映射(即输入=输出),那么A就应该和B拥有同样的性能。但是实验证明,无论是在训练集还是在测试集上,多层的网络性能远差于少层的网络,即随着网络深度的增加,准确度变得饱和,然后开始下降,这一问题被称为深度网络的退化问题。


    但是通过分析可以发现,这种退化并不是由过拟合引起的,因为我们发现训练精度和测试精度都在下降,这说明了更深的网络效果不好是因为网络没有被训练好。其原因是后面的多层非线性网络无法通过训练去逼近恒等映射网络。
    ResNet通过引入残差网络结构(residual network),解决了退化问题。其主要思想是将堆叠的非线性层从拟合原来的最优解映射输出H(X)变成去拟合输出和输入的差F(X) = H(X) - X,X为输入,此时原最优解映射H(X)就可以改写成F(X) + X。



    残差映射跟原映射相比更容易被优化。比如把5映射到5.1,那么引入残差前是F’(5) = 5.1,引入残差后是H(5) = 5.1, H(5) = F(5) + 5, F(5) = 0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。后者输出变化明显对权重的调整作用更大,所以效果更好。
    F(X)+X的公式可以通过在前馈网络中做一个shortcut connections来实现 ,shortcut connections跳过一个或多个层。在我们的用例中,shortcut connections执行简单的恒等映射,它们的输出被添加到叠加层的输出中。 Identity shortcut connections既不会添加额外的参数也不会增加计算复杂度。整个网络依然可以用SGD+反向传播来做端到端的训练。

  2. 解决了深层网络梯度消失的问题

    ResNet最终更新某一个节点的参数时,由于H(x)=F(x)+x,使得链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态,都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

三、网络结构

不同深度的ResNet结构信息:

 

ResNet中的shortcut connections(捷径连接)有实线和虚线两种 


  • 实线的Connection部分:表示通道相同,如上图的第一个灰色矩形和第三个灰色矩形,都是3x3x64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x

  • 虚线的Connection部分:表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的。

不同深度的ResNet用的残差学习单元层数不同

两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),其目的主要就是为了降低参数的数目。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了16.94倍,因此,右图的主要目的就是为了减少参数量,从而减少计算量。 对于常规的ResNet,可以用于34层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减少计算和参数量。作者使用更多的3层残差学习单元来构建101层和152层网络。值的注意的是,ResNet-152深度增加了许多,但其复杂性(113亿FLOPs)仍比VGG-16/19(153/196亿FLOPs)低。

VGG-19, 34-layer plain, 34 layer residual三种网络结构如下:

 

ResNet网络中的细节:

  • 图像水平翻转,减去均值,224x224随机裁剪

  • 对于跳跃结构,当输入与输出的维度一样时,不需要进行任何处理,二者直接相加;当输入与输出维度不同时,输入要进行变换去匹配输出的维度:zero-padding或1x1卷积

  • 设计网络的规则:对于输出特征图大小相同的层,有相同数量的Filters,即channel数相同。当特征图大小减半时(池化),Filters数量翻倍。

  • 每个卷积后和激活前采用BN

  • batchsize =256,lr = 0.1,当误差稳定时更新lr = lr * 0.1,SGD优化函数,weight_decay = 0.0001,momentum = 0.9。

  • 未使用Dropout

  • 网络末端以全局平均池化层结束,后接Softmax输出

经检验,深度残差网络的确解决了退化问题,如下图所示,左图为平原网络(plain network)网络层次越深(34层)比网络层次浅的(18层)的误差率更高;右图为残差网络ResNet的网络层次越深(34层)比网络层次浅的(18层)的误差率更低。 


作者认为这里的优化困难不太可能是由梯度弥散引起的。这里的plain网络采用了BN,它能确保正向传播过程中的信号有非0的方差,同时确保了反向传播过程中梯度的有效传递。事实上,34层深是能够取得相当高的准确率的,这表明在某种程度上来说求解器仍工作。我们推测深度plain网络可能有exponentially low收敛速度,这影响了训练误差的降低。

四、参考资料

ResNet相关:
https://my.oschina.net/u/876354/blog/1622896
https://www.cnblogs.com/gczr/p/10127723.html
https://blog.csdn.net/qq_35031375/article/details/81586616
https://blog.csdn.net/u014061630/article/details/80408056

梯度消失、爆炸:
https://blog.csdn.net/qq_25737169/article/details/78847691


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM