论文题目《Deep Residual Learning for Image Recognition》
摘要
更深的网络往往更难以训练,作者提出了残差学习的框架减轻训练深度网络的难度。作者训练出了152层的神经网络,计算量小于VGG-Net,但网络层数是其8倍。在ILSVRC2015分类任务中,以3.75% top-5 error获得分类第一,同时在ImageNet检测、定位、COCO检测、COCO分割上都取得了第一的成绩。
简介
神经网络的深度很重要,但是不是说简单的堆积更多的网络层就一定可以取得更好的效果?这个问题的回答显而易见,NO,梯度弥散和梯度爆炸现象阻碍了网络的收敛,通过初始权重的初始化和使用BN层可以改善这些问题。
如上图所示,作者观察到了一种称之为“退化”的问题,网络深度增加之后,反倒训练误差和测试误差更大了。发生这种现象的原因并不是因为发生了过拟合,而是因为网络层数更多了之后最优化的难度加大了。
浅层网络学习能力有限,需要增加网络深度,但是增加网络深度之后最优化难度也大,取得的效果也不好。作者针对上述“退化”的问题,提出了深度残差学习的解决方案,如下图所示。
在网络中使用“shortcut connections”,可以跨越一个或多个网络层,好处是:
- 相比于未添加“shortcut connections”的“plain”网络,网络层数增加之后可以取得更小的训练误差,网络也比较容易最优化;
- 因为网络层数增加了,最优化的也很好,因此可以取得更好的准确率。
深度残差网络
残差学习
假设潜在的要学习的映射函数为
H
(
x
)
H(x)
H(x),添加了右侧的直连函数之后,要学习的映射函数就变成了
F
(
x
)
:
=
H
(
x
)
−
x
F(x):=H(x)-x
F(x):=H(x)−x.
如果在浅层网络上添加的层可以近似为恒等变换,那么添加之后得到的深层网络的训练误差不应该大于浅层网络,但是从Figure 1的实验结果说明实际上不是这样的,也就说明了用多个非线性层很难近似恒等变换。
假设对一个Figure 2所示的残差学习的block而言,最佳的映射是近似恒等变换的,那么在添加了"shortcut connection"之后,通过几个非线性变换要学习的映射关系即很小的扰动函数,接近于0,这样学习的难度就大大减小了。
上面两段话的意思是说,既然Figure 1中所示的使用普通的plain网络,56层的网络比20层的网络有了退化,那就说明了多出来的这36层不是简单的恒等变换。因此,作者就想用残差块实现近似恒等变换。那么由于残差块的结构中本身已经包含了“skip connection”,那么如果想使得残差块近似于恒等变换,那么就需要残差块中除“skip connection”之外的其他层只学习到很接近于0的函数。
下图Figure 7表示学习到的残差函数一般响应值都很小,证明学习到的残差函数都很接近于0,说明一个building block学习到的是一个近似恒等变换的假设是成立的。
shortcuts恒等变换
一个building block可以表示成:
y
=
F
(
x
,
W
i
)
+
x
y = F(x,{W_i})+x
y=F(x,Wi)+x 公式1
F
(
x
,
W
i
)
F(x,{W_i})
F(x,Wi)表示要学习的残差,在figure 2所示的building block中,
F
=
W
2
R
e
l
u
(
W
1
x
)
F=W_2Relu(W_1x)
F=W2Relu(W1x),然后进行逐元素的加法
F
+
x
F+x
F+x,最后再使用一个Relu操作得到输出
y
y
y。
加一个“shortcut connection”,没有增加任何的参数和计算复杂度(除了element-wise的加操作之外)。
上面的公式1有一个要求就是需要
F
和
x
F和x
F和x必须是同等大小的,如果不满足这个条件,那么就添加一个线性映射
W
s
W_s
Ws实现维度匹配,具体如下式:
y
=
F
(
x
,
W
i
)
+
W
s
x
y = F(x,{W_i})+W_sx
y=F(x,Wi)+Wsx 公式2
“shortcut connection”跨越1个层的时候,就是实现
y
=
W
1
x
+
x
y=W_1x+x
y=W1x+x,是一个线性变换,没有带来任何的益处,因此需要“shortcut connection”跨越多个层,本文作者的网络中“shortcut connection”都是跨越2或者3个网络层。
网络结构
中间网络是参照VGG Net设计的“plain”网络,设计思想是:
- 卷积层大多使用3*3的卷积;
- 如果输入和输出的feature map的空间尺寸一致,那么就包含相同数目的filters;
- 如果输出的feature map的尺寸为输入的feature map尺寸的一半,那么filters的数目就应该加倍;
- 使用stride为2的卷积实现下采样;
- 使用一个全局平均池化层(GAP)得到1000个输出值送入softmax;
- 34层网络,3.6billion的计算量,是VGG19的18%。
右边是“plain”网络的残差版,具体是:
- 如果“short connection”的输入和输出的depth相同,那么直接使用恒等连接,如图中的实线所示;
- 如果“short connection”的输入和输出的depth不同,输出的depth大于输入,两种解决办法,一种是进行恒等连接,然后进行补零增加维度,这样不带来任何的参数;另一种是使用公式2通过1*1的卷积进行depth匹配。
实验
数据预处理
类似于VGG Net,对训练数据进行尺寸增广;
裁剪224*224的图像块,水平翻转,图像减均值;
使用AlexNet中的颜色增广;
在每一个卷积层的激活函数之前使用BN层;
MSRA初始化,从头训练;
没有用dropout;
测试时候,使用10-crop。
实验结果
ImageNet分类
18层的plain net
plain 34层的网络比18层的网络训练和测试误差更大;
resnet 34层的网络比18层的网络训练和测试误差要小;
resnet优于plain。
由于作者在网络中使用了BN层,出现34层网络的训练和测试误差大于18层网络的原因不是因为发生了梯度弥散。作者猜测可能是因为更深的plain网络收敛的更慢,减慢了训练误差的下降速率,但是也不确定,需要后面继续研究。
网络层数不那么大的时候,现有的SGD最优化算法可以很好的为plain网络找到最优解,只不过相比resnet收敛的速度慢一点。
所以,resnet,网络层数小的时候可以加速训练过程;网络层数大的时候可以避免“退化”,使得网络收敛的更好,取得更好的分类准确率。
比较三种“shortcut connection”方式的影响,A表示zero-padding增加维度,无新参数引入;B表示增加维度时使用
W
s
W_s
Ws不需要增加时使用恒等连接;C表示全部使用
W
s
W_s
Ws进行连接。结果表明,C优于B,B优于A,但差别都很小,但C的方式引入了太多的新的参数,所以下文都没有再用C的方式了。
为ImageNet设计的网络
1*1的卷积用来进行维度的扩充或者减小。
将34层resnet中的Figure5左侧的2层的block换成右侧3层的block,得到了Resnet50;使用更多的block得到了Resnet101和Resnet152.结果表明,层数加深之后,也没有发生退化现象。和其他的state-of-art算法比效果也很好,取得了ILSVRC2015的分类冠军。
CIFAR-10分类
残差函数的std很小,都很接近于0;
网络层数越多,响应的幅值越小。说明网络层数越多,单层对信号的改变量越小。
检测
把Faster-rcnn中的提取特征的模型从VGG-16换成ResNet-101之后取得的效果提升。
推荐一篇不错的理解:
https://blog.csdn.net/nini_coded/article/details/79582902