Abstract

重定义了学习函数,改为学习残差函数并构建了深层网络,击败VGG等一众模型

Motivation

深度模型训练很难:

  • 梯度消失问题
    • 正则化方法可以有效缓解
  • 模型退化问题
    • 目前训练中发现增加网络的深度反而精度有所下降,出现模型的退化现象,按理说更深的网络在理想情况下,可以在浅层保持一致的参数,在深层完全不学习,保持恒等映射,而不至于弱于浅层的网络,但实际上却是退化了
    • 这说明深层模型在优化上存在问题,产生了训练误差

残差训练的思路:

  • 残差学习并非突发奇想,在向量量化技术中,高维的向量的压缩,就需要很大的码本来保证较高的压缩精度,因此残差向量量化被提出,可以先用较小码本来压缩原始向量,然后将原始向量-近似向量,得到残差,这个残差有较小的范数(magnitude),更好被表示(方向上有更好的可预测性)
  • 其余例如偏微分求解等也存在类似的思路
  • 从残差角度上看,学习残差比学习一个完整的方程似乎更加简单,其往往更好表示,有更简单的结构或方向上有更强的预测性

Note

什么是向量量化?

这是一种数据压缩技术。

预先定义码本,其中有一组向量,对于一个输入的向量,在码本中找到最接近的向量来代替它,实现数据压缩

那不如让模型学习残差,而通过短接(shortcut)来保证模型可以保持之前的最优结果,但是之前的最优往往不是模型的最优,所以残差可以学习到一些扰动,来达到更优的结果

Method

Residual Learning

残差学习其实就是学习以下方程:

其中x是之前的输出,F代表层学习,之前的输出以直接逐元素相加的方式添加到当前层之中,维度不同用0填充,添加之后再进行激活,例如上图的学习为

文中还提到另一种残差连接:

其中,Ws是投影矩阵,通过1卷积实现,有两种作用:

  • 保持维度相同
  • 提供非线性的学习

论文中大量实验验证,实际上使用1卷积来实现维度对齐即可,其提供的非线性学习的增益和代价不成正比

Model

文中参考VGG,提出基础模型:

先用7卷积降维和学习,再用3卷积,逐步扩大通道数,最后平均池化后预测,文中提到没有使用Dropout等,有使用BN等其他技术,训练和测试方法参考AlexNet

同时,文中使用了两种卷积块

其中,左边是普通的卷积,用于浅层模型(18-34),右边是瓶颈层,使用1卷积来降低计算量,用于深层模型(50以上)

Experiments

训练细节:

  • 随机放缩
  • 随机翻转
  • 填充并裁剪
  • 像素归一化和颜色增强等

优化配置:

  • batch szie 为256
  • 学习率0.1,每次停止除以10
  • weight decay 为1e-5,momentum为0.9
  • 没有dropout

论文中做了大量的论证实验:

  • 有无残差
  • 如何残差
  • 残差模型的泛化性(CIFAR-10)
  • 模型深度
  • 残差的响应(response)
  • 等等

其中,得到一些较为关键的结论

  • 模型精度随深度提升,但是对比了1000层模型和100层模型后,发现精度下降,论文认为是因为复杂模型对小数据集存在过拟合,如果使用强正则化技术可能可以改善,但是也说明残差无法完美解决梯度问题
  • 残差响应小,论文希望残差的学习是学习一些小的扰动,并做了一个测量response的实验,计算其标准差,发现确实response比较小,更靠近0,且越深越小,倾向于对每一层的信号进行更少的更改

Conclusion

ResNet提出的残差学习十分有效,确实是里程碑式的论文,论文分析模型深度退化的原因,并提出一个看似理所当然的点进行优化,十分简单但精妙的创新了网络学习的方式,经久不衰

尽管残差机制十分有效,但是实际上存在一些问题:

  • 恒等映射保证了学习不退化,却无法保证得到最优解
  • 特征也可能随映射而积累冗余,存在性能上的瓶颈
  • 无法完全解决梯度问题

Refer

【笔记参考】ResNet 论文概览与精读 | 周弈帆的博客

【代码实现】

Implementing ResNet from Scratch. ResNets were introduced in 2015 and… | by Anirudh Gokulaprasad | Medium

ResNet4CIFAR100