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的精度还高
在这里插入图片描述
上图的Efficient就是作者在float16下面训的,结果碾压float32

然后作者把上面提到tricks都加了,做了个实验
在这里插入图片描述

学习率

对应原paper5.1
作者发现不同学习率策略会对结果有影响,它发现使用cos学习率好
在这里插入图片描述
公式如上,效果没多少提升,我的话还是老老实实用step decay吧

label smothing

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

Knowledge Distillation

知识蒸馏,就是把大模型的输出给小模型,感觉这样生成的label其实也是很smoothing的。这个地方的关键我觉得还是loss
在这里插入图片描述

Mixup训练

这个我觉得比较邪,路子野,我不理解其原理
就是把模型不同输入和label做一个混合
在这里插入图片描述

第四章 模型调整

4.1残差结构

作者把残差结构剖析的挺好的,让我一下就记住了残差结构
残差模型=input_stem+4_stage+output
其中stage=residual block(stride=2) + n*residual block(stride=1)
在这里插入图片描述

4.2调整

以下几个调整它们都是觉得残差网络的降采样做的不好,导致信息丢失过多
1.Resnet-B
在这里插入图片描述
它觉得不能上来就降采样,就把残差里面的降采样移到了第二个卷积
2.Resnet-C
在这里插入图片描述
他觉得残差的7*7卷积(stride)不好,改成了三个3*3
Resnet-D
在这里插入图片描述
他觉得残差short cut的降采样也不行,它先做了池化再1*1卷积

总结,感觉都是魔改,最后效果好就完事,但是我觉得这些不是放之四海而皆准的规律,在不同任务可能模型调整有浮动
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值