目录
1文章思想:
总的来说,这篇文章是一篇实用性极强的文章,也是需要亲自调试才能明白其好处的文章。这篇文章没有干涩的理论研究,只是手把手的告诉你如何通过组合训练过程的trick,来提高模型性能和泛化能力,甚至是迁移学习的性能。
2 摘要
论文中,李沐等研究者研究了一系列的训练过程中的和模型的改进技巧,可以提升模型性能。在以往的论文中,这些技巧作为实验中的次要技巧总是一笔带过甚至不出现的,但是这些技巧的不同使用对于模型的性能是不一样的效果。比如说,在resent-50的实验中,作者就通过这个技巧的组合将验证集准确率从75.3提高到了79.29。
3 baseline
baseline训练过程:
1.随机采样一幅图像,解码为32位浮点数类型,像素值取值为【0,255】
2.随机裁剪图像,裁剪的参数是长宽比【3/4,4/3】,随机采样面积【8%,100%】。然后缩放到【224,224】
3.以0.5的概率随机水平翻转图像
4.缩放色调,饱和度,明亮度,缩放系数从【0.6,1.4】中均匀采样。
5.从正态分布中采样一个系数用于加pca噪声
6.归一化RGB值,分别减去【123.68,116.779,103.939】,除以【58.393,57.12,57.375】
baseline验证过程:
1.保证长宽比的同时将短边缩放到256,
2.从中心部分裁剪224*224的图像
3.归一化RGB值,参数和训练保持一致
其他模型训练参数参见论文原文。
baseline结果:
表1:baseline结果
左边是论文的复现结果,右边是原始论文中的结果。
4 高效的训练
4.1 大批量的训练
首先,在以往的实验中和研究中,已经可以得出一个结论:大的batchsize训练会损坏收敛的速度。也就是说,对于同样的训练epoch,大批量的训练比小批量的训练的验证精度要低。
因此,为了解决这个问题,有很多的工作可以考虑。论文主要考虑了四个方法。
1 学习率线性扩大。
原因:大的batchsize的数据,数据期望不变,方差变小。也就是说大的batchsize的噪声少,因此,为了提高收敛速度应该增大学校率。
实验:对比何凯明的实验中的参数256的batchsize,0.1的初始学习率,本文实验中是以b为batchsize(大于256)同时以0.1*b/256为初始学习率。
2 学习率预热。
原因:初始参数离最终的结果相差甚远,因此大的初始学习率会带来数值不稳定。因此,先使用较小的学习率,等到学习 过程稳定之后再恢复到正常的学习率。
实验:预热m个epoch,初始学习率为,当的时候,其学习率为。
3 zero
原因:使得在初始阶段,所有的网络拥有更少的层,易于训练
实验:初始,置所有残差块的最后一个bn的为0。
4 无偏衰减
仅仅对卷积层和全连接层的权重加衰减。
表 2:关于学习率和batchsize的实验
4.2 低精度训练
由于硬件的能力,可以支持低精度的计算,但是由于低精度的较窄的取值范围,结果超出取值范围的时候容易打乱训练过程。
5 模型调整
本文主要是以resnet为例,微调resnet结构。
resent-50 结构
修改1:修改downsample结构(resnet b)
原因:原始的结构是1*1的kernel,2的步长,这样子相当于忽略了input map的很多数据(接近3/4)。所以改为用3*3的kernel,2的步长结构。
修改2:修改input结构(resnet c)
原因:原始的结构用的7*7的结构计算花费大,所以改我三个3*3的结构。修改之后的结构为:
本文修改结构:修改跳层连接并运用resnet-b(resnet c)
原因:原始跳层连接的1*1,2同样存在缺失信息的缺点。同时,实验表明,在卷积层之前加上一个池化层并修改卷积层的步长,是有效的。修改后的结构为:
修改后的结构为:
6 训练过程的改进
6.1 余弦学习率下降
除了学习率预热的epoch之外,学习率按照余弦学习率下降。
图表表示为:
6.2 标签平滑
将真实的概率改造,目的是减少分类层的过拟合可能性。
实验中,ϵ设置为0.1
6.3 知识蒸馏
用一个效果好的大的预训练模型来辅助提升一个student(小模型)的性能提升。保证了小模型模型复杂度和模型性能。
其中,知识蒸馏中使用蒸馏损失来辅助学习。
损失函数为:
其中,p,z,r分别为真实的样本概率分布,z为student 网络的全连接(最后一层)的输出,r为teacher网络的输出。L为交叉熵损失。T为温度参数。
实验中,T设置为20。同时,实验结果表明,teacher和student网络最好是同一个结构,例如resnet-152和resnet-50,不同的结构带来的分布不一样会给模型带来负的结果。
6.4 混合训练
属于数据增强的一种方法。
在混合训练(mixup)中,每次我们随机抽样两个样本 (x_i,y_i) 和 (x_j,y_j)。然后我们通过这两个样本的加权线性插值构建一个新的样本:
其中,λ是从beta(α,α)中采样的系数,训练过程中仅仅使用这个新样本。
7 迁移学习的结果证明实验
为了证明这些通过提高训练的结果能够同样的提高迁移学习的结果,文章在目标检测和语义分割上都做了实验。