Deep Residual Learning for Image Recognition arXiv:1512.03385v1, 2015
文章目录
亮点:
- residual module;
- bottleneck。
Abstract
- 网络一旦变深,就很难训练, ResNet 主要解决深层网络难训练的问题。
- 文中定义了一个 layer,参考输入层学习残差,这个操作能让网络变得更好优化,也能更好进行学习。
- 在 ImageNet 数据集上,实现 152 层的网络,是 VGG 深度的 8 倍,但是参数更少。
- 需要说明的是,ResNet 可以广泛提升多种任务上的表现。
Introduction
堆叠起来的卷积网络能够自然地获取多尺度层级特征,而且大致来讲,堆叠得越多拿到的层级特征就会越丰富。(其实就是模型能力更强了,只要能做好正则化不过拟合,理论上来讲,越复杂表达能力越强的模型就越好。)
问题就来了,堆得越多,模型就越好吗?回答这个问题之前,我们得先撇清一个事情就是过拟合,也就是梯度消失和梯度爆炸引起的过拟合现象,在训练集表现很好而在测试集上明显降低性能。解决过拟合问题可以有合理的模型初始化以及中间层初始化等或者其他正则化手段来解决。ok,我们暂且认定层数的堆叠增加过程中不用担心过拟合的问题,那么回到刚刚的问题,越深就越好吗?先上图如下。
很多实验表明,随着网络逐渐变深之后,性能会逐渐趋于饱和,随后发生严重的模型退化,degradation。而且,所提及的这种退化不是过拟合造成的,也就是说模型深度大的反而出错多。这样就导致训练很难,那么能不能解决这个问题呢?我们考虑这么一种极端情况,我使用稍微浅一点的结构(文中叫 shallow 或者 plain),然后我疯狂在最后一层后面复制粘贴哈哈哈就是玩儿。那会有什么结果呢?至少不应该模型越深犯错越多吧,最差的情况也是“不差”对不对,也就是更加坚信,网络层深加大,至少不应该更差劲。
我自己的理解是,虽然这里强调了不是梯度消失或爆炸引起的退化,但是随着模型深度的增加,这个模型更难被“监督”了。一般 loss 肯定放在较为靠后的地方,当然也有将中间结果应用 loss 的情况,我们暂且不表。好比教很小的孩子学画画,他还没有什么太多功底呢,想要达到更好的效果,必然需要老师适当讲解监督的(合适的网络深度);但是如果你搁置他太久了根本没管,让他很长时间内都自由发挥,你指望他自由发挥什么呢?肯定就更容易失误(太深的网络,loss 靠太后,中间空间太大,自由发挥跑偏了)。
文章提出了一种学习残差的方式来构建网络模型。也就是说,比如本来我想学一种映射 H ( x ) \mathcal{H}(x)