Deep Residual Learning for Image Recognition总结

resnet-34算法实现:https://blog.csdn.net/weixin_43204128/article/details/89016579

第一:我们希望神经网络能够提取出图像上low/mid/high各种level的特征,深层网络能够做到这一点,而且提取出来的特征越是抽象,越能表达出图像的语义信息。

第二:但是一味的追求深层网络,就会出现梯度弥散/梯度爆炸,解决这个问题的方法:归一初始化(normalized initialization)和中间归一化(intermediate normalization),这使得数十层的网络在反向传播的梯度下降算法中得以收敛。

第三:然而深度网络收敛了,另一个问题出现了:退化。这并不是过拟合,因为过拟合应该在训练集上的拟合程度很高,而退化则是在训练集上出现了饱和现象,在训练集上拟合程度反而变低。
如下图:
Deep Residual Learning for Image Recognition总结
退化问题说明了并非所有的系统都是很容易优化的,所以接下来主要解决退化的问题!

第一:假设x是输入,现在通过几层非线性堆叠层来拟合所需的底层映射(desired underlying mapping)H(x),如果这几层非线性堆叠层能以恒等映射来构建,一个更深模型的训练错误率不应该比它对应的浅层模型的更大。退化问题表明了,求解器在通过多个非线性层来估计恒等映射上可能是存在困难的。

第二:论文提出一种“深度残差学习框架”,来明确的让非线性堆叠层学习残差函数“F(x)=H(x)-x”,而不是直接学习H(x),因此原来的映射转化为”F(x)+x“。在极端情况下,恒等映射x是最优的,将残差函数变为0比在非线性堆叠层上学习一个恒等映射容易。在实际情况下,恒等映射不太可能达到最优,如果最优函数更趋近于恒等映射而不是0映射,那么对于求解器来说寻找关于恒等映射的扰动比学习一个新的函数要容易的多。

第三:”F(x)+x“通过shortcut连接,shortcut 连接只是简单的执行恒等映射,再将它们的输出和堆叠层的输出叠加在一起(Fig.2)。恒等的shortcut连接并不增加额外的参数和计算复杂度。

Deep Residual Learning for Image Recognition总结
第四:如果输入和输出的维度相同时,可以直接使用恒等shortcuts。当维度增加时(Fig.3中的虚线部分),考虑两个选项:
(A) shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数; (tf.pad)
(B) (通过1*1的卷积)来使维度保持一致。

Deep Residual Learning for Image Recognition总结
Fig.3 对应于ImageNet的网络框架举例。 左:VGG-19模型 (196亿个FLOPs)作为参考。中:plain网络,含有34个参数层(36 亿个FLOPs)。右:残差网络,含有34个参数层(36亿个FLOPs)。虚线表示的shortcuts增加了维度。

第五:实验的过程中,每一层在**之前使用batch normalization来防止梯度消失/梯度爆炸;残差连接使用了用0填充的办法;没有使用maxout/dropout。

第六:在更深的层次中,由于时间的限制,需要修改残差块的结构:
Deep Residual Learning for Image Recognition总结
对于每一个残差函数F,我们使用了三个叠加层而不是两个(Fig.5)。 这三层分别是1×1、3×3 和1×1 的卷积,1×1 的层主要负责减少然后增加(恢复)通道数,通道数减小,输入到3×3卷积层的参数也会变少。剩下的3×3的层来减少输入和输出的维度。