[重读经典论文]ResNet
1. 前言
ResNet由微软亚洲研究院在论文《Deep Residual Learning for Image Recognition》中提出,获得2015年ImageNet图像分类、定位、检测,MS COCO竞赛检测、分割五条赛道的冠军,通过引入残差连接,有效解决深层网络训练时的退化问题,可以通过加深网络大大提升性能。
ResNet在ILSVRC-2015图像分类竞赛中获得了top-5误差3.57%的冠军成绩,在图像分类任务上首次超过人类能力。ResNet常用于迁移学习和fine-tuning微调的特征提取的基模型。
2. resnet解决了什么问题
我们知道,从Alexnet开始,到VGG,到GooLeNet,网络的层数逐渐加深,性能也逐渐提高,网络越深提取的特征层次也越丰富,但是我们也知道,越深的网络,越容易出现梯度消失或者爆炸,导致难以收敛,但是这些问题可以通过适当的权重初始化(Xarvier,MSRA)加上BN层进行解决。
真正的问题是,随着网络越深,出现了网络退化,深层的网络都和浅层的网络相比,在训练误差和测试误差上都要差,如下图所示:
明显56层的网络也学到了东西,也不是过拟合造成的这个问题。
3. resnet如何解决网络退化问题
作者的思路是这样的,现在我们有一个比较浅的模型,还有在这个基础上加了更多层的深层模型,按理来说存在一种情况,就是增加的层是一个恒等映射,其他的权重从浅层模型照搬,按照这种情况的话,更深的模型实际上是不应该比浅模型还要差的。但是目前实验证明还无法找到方法去训练这样的恒等映射(或者比这个恒等映射更好的东西,也可能暂时无法实现)
那解决办法就显而易见了,让模型能够学到这样的恒等映射就可以了。
如果把网络设计为H(x) = F(x) + x,即直接把恒等映射作为网络的一部分。就可以把问题转化为学习一个残差函数F(x) = H(x) - x.
只要F(x)=0,就构成了一个恒等映射H(x) = x。 而且,拟合残差至少比拟合恒等映射容易得多。
于是作者提出了本作的重点,残差模块(Residual block),如下图所示:
右边的分支叫短路连接(shortcut connection),它是恒等映射,直接把输入x直接连到输出了,左边支线通过两个卷积层,其中第二个卷积层后面不使用激活函数,输出与原输入逐元素相加,然后通过Relu激活函数后,作为本模块的输出。
用数学语言描述,假设Residual Block的输入为x,则输出y等于:
就是我们需要学习的残差,以上图为例,残差部分是中间有一个Relu激活的双层权重,即:
残差部分至少要有两层,不然只有一层的话,就相当于:
就变成了一个线性层了,跟没加差不多。
因为输出是逐元素相加,因此就必须保持输入x与残差模块的输出的形状是需要一致的,论文中说到如果不一致就通过引入一个投影方阵进行转换:
至于这个投影矩阵如何做,在后面有两种方案。
其实这里也提了一嘴,在式子(1)中也可以为x加这么一个方阵,相当于加多一个学习的权重,但是最后他们发现直接恒等映射效果就很好了,而且很经济,这些实验可以参考他们的另外一篇论文《Identity Mappings in Deep Residual Networks》。
4. 网络结构
如上图所示,左边是宣称very deep的Vgg,中间是没有加残差的34层卷积网络,右边是加了残差的34层的resnet,resnet突出的就是一个字:深。
至于短接部分,实线表示短接前后的输入输出维度是一样的,直接相加;虚线表示前后不一样,残差部分进行了下采样,长宽减半,通道翻倍。
面对这种情况,有两种解决的方案:
- 对多出来的通道全部用0进行填充
- 用1*1卷积进行升维
这里说得还是有点模糊的,如果是方案1,则输入的长宽是输出的两倍,他们要怎么相加呢,我估计是在相加的时候按stride=2进行相加,假如原来x的尺寸为w*h,则沿w方向取下标为(0,2,4,…w),h方向取(0,2,4,……h)这样长宽就一致了。
第二种方案是使用1*1卷积进行升维,但是长宽呢,答案是设置stride=2,这个从pytorch的res block的实现得出:
对比普通卷积网络和加入残差的resnet,更深的网络,性能就更好了,如下图所示:
左边为未加残差的网络,出现了网络退化的问题,在测试集和验证集上34层的都比18层的网络差,加了残差后,34层的就比18层的网路要好多了。
总共提出了5种残差网络:
为了减少参数量和计算量,还提出了一种bottleneck的残差模块,以使用到更深的网络中,如下图所示:
左边用在resnet18/24中,右边的bottleneck模块使用子啊resnet50/101/152中。
5. resnet为什么能解决网络退化
理论一:深层梯度回传顺畅
- 恒等映射这一路的梯度是1,把深层梯度注入底层,防止梯度消失。
- 没有中间商层层盘剥。
理论二:类比其它机器学习模型
- 集成学习boosting,每一个弱分类器拟合“前面的模型与GT之差”。
- 长短时记忆神经网络LSTM的遗忘门。
- Relu激活函数。
理论三:传统线性结构网络难以拟合“恒等映射
- 什么都不做有时很重要。
- skip connection可以让模型自行选择要不要更新
- 弥补了高度非线性造成的不可逆的信息损失。(MobileNet V2)
6. 参考
[1] Resnet到底在解决一个什么问题呢?
[2] Resnet是否只是一个深度学习的trick?
[3] 为什么resnet效果会那么好?
(完)