《Bag of Tricks for Image Classification with Convolutional Neural Networks》阅读笔记--调参trick

目录

1文章思想:

2 摘要

3 baseline

4 高效的训练

4.1 大批量的训练

4.2 低精度训练

5 模型调整

6 训练过程的改进

6.1 余弦学习率下降

6.2 标签平滑

6.3 知识蒸馏

6.4 混合训练

7 迁移学习的结果证明实验


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 迁移学习的结果证明实验

为了证明这些通过提高训练的结果能够同样的提高迁移学习的结果,文章在目标检测和语义分割上都做了实验。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值