Paper Reading Note
URL: https://arxiv.org/abs/1812.01187
TL;DR
很多基于CNN的图像分类上的进步实际源于一些训练的“tricks”,本文总结了一些有用的涨点tricks,可以认为是分类问题的cookbook。
Dataset/Algorithm/Model/Experiment Detail
Introduction
作者认为,基于CNN的图像分类问题,分类准确率的提升主要来源于两个部分:
(1)网络结构的改善;
(2)训练过程的调优,即我们常说的各种tricks的使用。
对于这些tricks,大多数论文中只简单介绍一下,很少介绍相关细节,本文详细介绍了分类问题中可以使用的多种tricks,并通过实验系统评估了他们对分类性能提升的贡献。
另外,作者还通过实验说明了文章中介绍的trick具有可迁移性,即不只针对某一数据集或某一网络有效。
高效训练中的tricks
- Large-batch training
一般而言,用大batch训练会使的训练过程变慢,而且经验表明,在相同epoch下,使用大batch训练得到的模型性能可能不如小batch训练。以下trick可以改善这个现象:
-
Linear scaling learning rate: 增大batchsize的同时线性增大学习率。
-
Learning rate warmup: 训练开始阶段使用较小学习率,待训练稳定后再使用较大初始学习率训练。一种方法是训练初期,学习率从0线性增大到初始学习率。
-
Zero : 对于残差网络,每个residual block最后一层BN的 参数初始化为0,这样每个residual block就是一个Identity map,网络就相当于一个有较少层的网络,所以会在初始训练阶段好学一点。
-
No bias decay: 只对convolution和FC层的W参数进行weight decay,对bias和BN层的 和 参数不进行weight decay。
- Low-precisiontraining
- 使用FP16替换FP32(这个需要硬件支持),可以加速训练。
结果对比如下:
image.png可以看出,相比于baseline(BatchSize=256 FP32),使用大batch(1024)FP16,并使用所有提到的大batch下训练的技巧,不管是Resnet,Inception还是MobIeNet都可以涨点。
image.png以上是针对这部分提到的各种trick的ablation study。值得注意的是:在增大batch size时只线性增大学习率并不会涨点,还需要结合其他几种trick才可以涨点。
模型结构微调
相比于原始的Resnet结构,作者介绍了几种对网络结构的改良:
image.png- ResNet-B:针对Residual block中进行down sampling时使用1*1,strid=2
的卷积,导致只有1/4的信息被利用的问题,将strid=2放在第2层卷积,实现downsampling。
-
ResNet-C:原始ResNet开始的77卷积换做3个33卷积,减小计算量。
-
ResNet-D: ResNet-B的short cut连接部分也存在忽略3/4信息的问题,替换为average pooling加1*1 conv,
实验结果:
image.png调整后的ResNet-D涨近0.9个点(Top-1 acc)
Traing Refinements
- Cosine Learning Rate Decay
- Label Smoothing
将原来的one-hot形式的label转为以下形式,其中 表示label向量的第 维, 为真实类别。实际上是修改了loss,这样可以使其他类别也对真实类别有loss贡献。
image.png- Knowledge Distillation
蒸馏,使得student模型的最后输出和teacher模型尽可能相近。
- Mixup Training
,然后将他们线性加权求和,使用得到的新的样本训练。
实验结果:
image.png其中,在ResNet-50上蒸馏work,而Inception和MobileNet上蒸馏并不work,作者给出的解释是teacher模型是ResNet结构,可能和后两种网络输出分布不同。
trick的transferable验证
作者给出了这些trick在其他数据集上的效果如下,说明了这些trick的普遍适用性:
image.png image.png另外,作者还给出了将使用这些trick训练得到的base model作为detection和segmention问题的pre-train网络后的对比结果,说明了trick的任务迁移能力。
Thoughts
很多所谓的涨点其实都源于一些trick,本文提到的一些trick可以在之后的分类模型训练中加以尝试。
网友评论