Bag of tricks for Image with Convolutional Neual Networks阅读

该篇文章探讨了训练分类的一些tricks

第二章

介绍了一些常用的数据增强技巧,我准备把它们都实现了
另见

第三章 训练相关

问题1:大的batchsize会导致训练的模型精度低

原因/现象:batchsize大了,每个batch内均值虽然不变,但是方差变小了,导致训练集上(或者这样理解大的batchsize相应的噪声小一点)
解决方案:
1.调大学习率,按照线性调,好比batchsize128,学习率给0.01,那么batchsize256,学习率就给0.02。然后大的学习率可能导致模型训练不稳定,特别是训练初期,所以使用warmup可以缓解,既能调大学习率又能保证稳定
2.初始网络变浅。具体操作是初始时设置BN的超参数γ为0,只保留BN的β参数,这样初期残差块就只保留了short cut连接,容易训,待后面稳定了,再把带有BN的那路打开
3.卷积的beta参数设置不做衰减。正常训练模型,有权重weight,把它做L2正则化可以使得模型验证集表现变好(避免过拟合)

问题2:低精度训练

原因/现象:现在GPU对于float16比float32算的要快得多,我们拿低精度参数训练的话,能训更多的epoch
问题:float16容易溢出,表示范围不大,反正有人解决了这个问题
总结:最后作者做实验发现,用float16训练的模型比float32的精度还高
Bag of tricks for Image with Convolutional Neual Networks阅读
上图的Efficient就是作者在float16下面训的,结果碾压float32

然后作者把上面提到tricks都加了,做了个实验
Bag of tricks for Image with Convolutional Neual Networks阅读

学习率

对应原paper5.1
作者发现不同学习率策略会对结果有影响,它发现使用cos学习率好
Bag of tricks for Image with Convolutional Neual Networks阅读
公式如上,效果没多少提升,我的话还是老老实实用step decay吧

label smothing

这个东西有点用,先说一点感性的理解。首先label smothing这玩意可以理解为一种新的损失函数,过去我们模型预测的值必须和label一样。但是自然世界其实不是这么hard的;举个例子,假如你看到一个很像熊猫的动物,它还有可能是松狮,所以呢,我将原本正样本为1的可能性,拿出个0.01给其它可能性,这样是较为合理的。对这个感兴趣的可以看
https://github.com/seominseok0429/label-smoothing-visualization-pytorch
Bag of tricks for Image with Convolutional Neual Networks阅读

Knowledge Distillation

知识蒸馏,就是把大模型的输出给小模型,感觉这样生成的label其实也是很smoothing的。这个地方的关键我觉得还是loss
Bag of tricks for Image with Convolutional Neual Networks阅读

Mixup训练

这个我觉得比较邪,路子野,我不理解其原理
就是把模型不同输入和label做一个混合
Bag of tricks for Image with Convolutional Neual Networks阅读

第四章 模型调整

4.1残差结构

作者把残差结构剖析的挺好的,让我一下就记住了残差结构
残差模型=input_stem+4_stage+output
其中stage=residual block(stride=2) + n*residual block(stride=1)
Bag of tricks for Image with Convolutional Neual Networks阅读

4.2调整

以下几个调整它们都是觉得残差网络的降采样做的不好,导致信息丢失过多
1.Resnet-B
Bag of tricks for Image with Convolutional Neual Networks阅读
它觉得不能上来就降采样,就把残差里面的降采样移到了第二个卷积
2.Resnet-C
Bag of tricks for Image with Convolutional Neual Networks阅读
他觉得残差的7*7卷积(stride)不好,改成了三个3*3
Resnet-D
Bag of tricks for Image with Convolutional Neual Networks阅读
他觉得残差short cut的降采样也不行,它先做了池化再1*1卷积

总结,感觉都是魔改,最后效果好就完事,但是我觉得这些不是放之四海而皆准的规律,在不同任务可能模型调整有浮动
Bag of tricks for Image with Convolutional Neual Networks阅读