何凯明大神在CVPR 2016上发表的《Deep Residual Learning for Image Recognition 图像识别中的深度残差学习网络》深受工业界的欢迎,自提出以来已经成为工业界最受欢迎的卷积神经网络结构。在coco目标检测任务中提升28%的精度,并基于ResNet夺得ILSVRC的检测、定位,COCO 的检测和分割四大任务的冠军。接下来就一起来看这个广受好评的Resnet
摘要原文:
Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used previously. We explicitly reformulate the layers as learning residual functions with reference to the layer inputs, instead of learning unreferenced functions. We provide comprehensive empirical evidence showing that these residual networks are easier to optimize, and can gain accuracy from considerably increased depth. On the ImageNet dataset we evaluate residual nets with a depth of up to 152 layers—8× deeper than VGG nets [41] but still having lower complexity. An ensemble of these residual nets achieves 3.57% error on the ImageNet test set. This result won the 1st place on the ILSVRC 2015 classification task. We also present analysis on CIFAR-10 with 100 and 1000 layers. The depth of representations is of central importance for many visual recognition tasks. Solely due to our extremely deep representations, we obtain a 28% relative improvement on the COCO object detection dataset. Deep residual nets are foundations of our submissions to ILSVRC & COCO 2015 competitions1 , where we also won the 1st places on the tasks of ImageNet detection, ImageNet localization, COCO detection, and COCO segmentation.
摘要核心:
为什么要使用这样一种残差结构呢?
我们往往认为越深的网络拟合能力越强,因此越深的网络训练误差应该越低,但实际相反。如下图所示。实际上的原因并非是因为过拟合导致的,而是网络优化困难。
因为提出一种残差结构来解决网络退化的能力,于此同时也解决了由于网络的加深从而带来的一些梯度问题。
如上图所示,当输入为x时,其学习到的特征记为H(x),现在我们希望其可以学习到残差F(x)=H(x)-x,这样其实原始的学习特征是F(x)+x 。当残差为0时,此时堆积层仅仅做了恒等映射,至少网络性能不会下降,实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。因此Residual learning:让网络层拟合H(x)-x, 而非H(x)
整个building block仍旧拟合H(x) ,注意区分building block与网络层的差异,两者不一定等价
为什么要网络层拟合H(x)-x?
答:提供building block更容易学到恒等映射(identity mapping)的可能
为什么要恒等映射?
答:让深度网络不至于比浅层网络差
左图代表一个浅层网络-18层 ,右图代表一个深层网络-34层,蓝色框我们可认为是额外增加层
思考一下,如果蓝色框里的网络层能学习到恒等映射,34层网络至少能与18层网络有相同性能 那么我们如何让额外的网络层更容易的学习到恒等映射?
答:skip connection == residual learning == shortcut connection
上图所示,若F(x)=0 , 那么H(X) = X,网络实现恒等映射。
我们求解H(x)梯度,梯度为xxx + 1。恒等映射使得梯度畅通无阻的从后向前传播,这使得ResNet结构可达到上千层。
因为我们最后有一个相加的操作,x输入到卷积层后通道数有可能会发生改变,那么在相加的时候,原始x和经过layer后的x通道数不一致是无法完成相加,针对这种问题,作者提出了三种解决方案
根据文章给出的实验数据结果,我们可以发现三种方案A
五、ResNet结构
ResNet结构 划分为6个stage ,其中中间4个阶段为残差结构堆叠 ,对于残差结构堆叠方式有两种
右边 Bottleneck: 第一个1*1下降1/4通道数 第二个1*1提升4倍通道数
引入shortcut connection,让网络信息有效传播,梯度反传顺畅,使得数千层卷积神经网络都可以收敛 。注意是引入了而不是原创。在本文中:shortcut connection == skip connection == identity mapping
启发点:
!!我们根据文章提供的超参数设置和训练tricks很容易就能达到文章中的实验结果,不像其他网络,我们的训练结果和论文中的实验结果达到相似十分困难。