摘要:

提出了什么问题?
更深的神经网络是更加难以去训练的
Deeper neural networks are more difficult to train.
我们干了什么?
我们提出了一个把这个层作为学习残差函数相对于层输入的一个方法来代替之前无关的学习函数
We explicitly reformulate the layers as learning residual functions with reference to the layer inputs instead of learning unreferenced functions.
网络效果如何?
非常容易训练,而且可以获得更好的精度
We provide comprehensiveempirical evidence showing that these residual networks are easier to optimize, and can gain accuracy fromconsiderably increased depth.
网络的形状?
152层的深度,比vgg还深8倍,但是复杂度更低
On the ImageNet dataset we evaluate residual nets with a depth of up to 152 layers——8*deeper than VGG nets but stiall having lower complexity.

介绍:

深度神经网络能通过增加层数而变得更好。
于是提出问题:
一个学习更好的网络是否就是把更多的层堆在一起?
显然,网络太深会导致梯度爆炸或者消失。
提出解决方案:用一个deep residual learning framework使其不会因为层数变高而导致精确性变差。
而且如果浅的层做的很好,理论上更深的网络不会做的更差。因为最差也就是什么都没有学到,将上一层的输出作为更深一层的输入就够了
这里作者举了一个例子,假设当前A层的下一层是B层,假设A层的输入是X,A的输出为F(X),那么B就应该将F(X)-X作为输入,而B的输出则应该是F(X)+X。
具体过程入下图。
image.png

实现:

他将图片的短边在256-480之间随机采样,这样将图片裁剪为224*224的时候随机性更强,而且还使用了颜色增强的方式。
他也使用了256大小作为SGD的batch。学习率初始化为0.1并且当错误率稳定的时候会将学习率/10。
主要架构如下:

layer name output size 18-layer 34-layer 50-layer
conv1 112*112 7*7,64,stride 2
conv2_x 56*56 3*3 max pool,stride 2
[33,64
3
3,64] *2
[33,64
3
3,64] *3
[11,64
3
3,64
11,256] 3
conv3_x 28*28 [33,128
3
3,128] *2
[33,128
3
3,128] *4
[11,128
3
3,128
11,512] 4
conv4_x 14*14 [33,256
3
3,256] *2
[33,256
3
3,256] *6
[11,256
3
3,256
11,1024] 6
conv5_x 7*7 [33,512
3
3,512] *2
[33,512
3
3,512] *3
[11,512
3
3,512
11,2048] 3
1*1 average pool,1000-d fc,softmax
FLOPs 1.8*10^9 3.6*10^9 3.8*10^9

具体网络每个conv到底有多少层,作为超参数都是可以通过调参来调整的。
那么为什么50层深的模型需要经过11的卷积层呢?这就需要解答以下的问题
怎么做到更深的模型深度?
可以通过先降维最后再升维的方式对计算进行优化。例如256个通道,先通过1
1,64维的卷积,然后进行正常卷积运算之后,再通过1*1,256维的卷积还原为256维。