专栏名称: 极市平台
极市平台是由深圳极视角推出的专业的视觉算法开发与分发平台,为视觉开发者提供多领域实景训练数据库等开发工具和规模化销售渠道。本公众号将会分享视觉相关的技术资讯,行业动态,在线分享信息,线下活动等。 网站: http://cvmart.net/
目录
相关文章推荐
北京经信局  ·  事关人形机器人关键技术!这项新标准,已立项! ·  6 小时前  
北京经信局  ·  事关人形机器人关键技术!这项新标准,已立项! ·  6 小时前  
调研纪要  ·  机器人破圈 ·  23 小时前  
调研纪要  ·  机器人破圈 ·  23 小时前  
财联社AI daily  ·  宇树人形机器人,下架! ·  昨天  
财联社AI daily  ·  宇树人形机器人,下架! ·  昨天  
ChatAI42技术与产品  ·  估计KL散度的艺术:平衡偏差与方差的实用指南 ·  昨天  
51好读  ›  专栏  ›  极市平台

深度学习刷SOTA的trick大盘点

极市平台  · 公众号  ·  · 2024-06-02 21:24

正文

↑ 点击 蓝字 关注极市平台

作者丨李国趸、昆特Alex、战斗系牧师(已授权)
来源丨https://www.zhihu.com/question/540433389
编辑丨极市平台
二次转载须经作者授权。

极市导读

“对深度学习而言,不论是学术研究还是落地应用都需要尽可能提升模型效果,这往往需要trick进行支撑。 这些trick有的是广泛适用的,有的是任务特定的。 这些trick有的能够提升网络精度,有的能够加速收敛,有的甚至比模型提升更加显著。 “本文总结了三位知乎答主的优质回答,分享了他们所收藏积累的一些搞笑tricks。 >> 加入极市CV技术交流群,走在计算机视觉的最前沿

# 回答一

作者: 李国趸

浙江大学硕士生

来源链接:https://www.zhihu.com/question/540433389/answer/2549775065

抛砖引玉(卑微求一个秋招内推求私信):

  1. R-Drop:两次前向+KL loss约束

  2. MLM: 在领域语料上用mlm进一步预训练 (Post-training)

  3. EFL: 少样本下,把分类问题转为匹配问题,把输入构造为NSP任务形式.

  4. 混合精度fp16: 加快训练速度,提高训练精度

  5. 多卡ddp训练的时候,用到梯度累积时,可以使用no_sync减少不必要的梯度同步,加快速度

  6. 对于验证集或者测试集特别大的情况,可以尝试多卡inference,需要用的就是dist.all_gather,对于非张量的话也可以用all_gather_object

  7. PET: 少样本下,把分类转为mask位置预测,并构造verbalizer,参考EACL2021. PET

  8. ArcFaceLoss:双塔句子匹配的loss把NT-Xent loss改成arccos的形式,参考ACL2022. ArcCSE

  9. 数据增强在zero shot x-lingual transfer:code switch,machine translation..记得最后加一致性loss,参考consistency regularization for cross lingual finetuning

  10. SimCSE:继续在领域语料上做simcse的预训练

  11. Focal loss: 不平衡的处理

  12. 双塔迟交互:maxsim操作:query和doc的每个token表征算相似度,取最大相似度再求和。速度和精度都有一个很好的平衡,参考colbert

  13. 持续学习减轻遗忘:EWC方法+一个很强的预训练模型效果很不错。就是加一个正则让重要参数遗忘不太多,重要性用fisher信息度量。

  14. 对抗训练:FGM,PGD,能提点,就是训练慢,

  15. memory bank增大bsz,虽然我感觉有时候有点鸡肋

  16. PolyLoss: -logpt + eps * (1-pt) 效果存疑,反正我试了没啥效果,有人试过效果不错


# 回答二

作者:昆特Alex

来源链接:https://www.zhihu.com/question/540433389/answer/2576569581

一句话原则:AI performance = data(70%) + model(CNN、RNN、Transformer、Bert、GPT 20%) + trick(loss、warmup、optimizer、attack-training etc 10%) 记住:数据决定了AI的上线,模型和trick只是去逼近这个上线,还是那句老话:garbage in, garbage out。下面具体分享在NLP领域的一些具体trick:

一、Data Augmentation

1、噪音数据删除:(最大熵删除法、cleanlab等)
2、错误标注数据修改:交叉验证训练多个模型,取模型预测结果一致且prob比threshold大的数据(或者topN)。多个模型可以采用不同的seed,不同的训练集测试机,或者不同的模型结果(bert与textcnn等),找出覆盖部分模型预测与标柱数据不一致的标注错误数据进行修改。
3、数据增强
  • 同义词替换(Synonym Replacement):从句子中随机选取n个不属于停用词集的单词,并随机选择其同义词替换它们;
  • 随机插入(Random Insertion):随机的找出句中某个不属于停用词集的词,并求出其随机的同义词,将该同义词插入句子的一个随机位置。重复n次;
  • 随机交换(Random Swap):随机的选择句中两个单词并交换它们的位置。重复n次;
  • 随机删除(Random Deletion):以 ppp 的概率,随机的移除句中的每个单词;
  • 反向翻译(back translation):将源语言翻译成中间语言,再翻译回原语言

二、Model backbone

Transformer已经随着bert而大杀四方了,不同的预训练模型backbone有着不同的应用场景。领域数据充足且条件允许的话可以考虑用行业预料进行预训练,次之进行领域再训练,最后才考虑用公开的模型进行finetune。各个公开的backbone选择小trick如下:
  • robert_wwm_ext: 文本分类、NER等任务单句自然语言理解(NLU)任务上性能较好
  • simbert:句子相似度计算、句子对关系判断等任务上效果较好
  • GPT系列:文本翻译、文本摘要等自然语言生成(NLG)任务上性能效果较好。

三、tricks

  • 样本不均衡问题:除了前面介绍的数据增强,过采样等方法外,还可以试试facalloss、loss加权等方式处理。
  • optimizer、lr、warmup、batch_size等配合的好也能能够神奇提点(比如通常batch_size较大时lr也可以同步提升)。
  • 训练trick:进行对抗训练(FGM、PGD)等
  • 多任务学习:增加auxiliary loss
  • label smoothing: 经过了噪音数据删除、数据增强等数据精度还是差强人意的话可以考虑
  • etc···
last but not least:AI performance = data(70%) + model(20%) +other trick(10%),请把时间花在最能提升模型性能的事情上面,而不是追求各种花式trick叠buff,trick只是用来景上添花,而数据以及选择的模型backbone才是最核心的景色。

# 回答三

作者:战斗系牧师

来源链接:https://www.zhihu.com/question/540433389/answer/2551517886

首先是数据增广的tricks:

0、Flip、RandomFlip(随机翻转)
翻转,是最实在的,最基础的数据增广方法,简单,但是最有效。
1、cutout(裁剪)
随机删除图像中的一个矩形区域,可以得到较好的训练结果,其实类似于dropout的操作
2、mixup (混合提升)
mixup的作用是使得对数据的理解更具有线性化,破除由于数据分布不均匀,带来的误差。
3、mosaic(随机马赛克增强)
极大丰富了检测物体的背景,一张顶几张!
还有类似于cutmix,还有很多tricks,还有代码这些就不细致的展开了,大家可以参考一下,以上方法有的是可以组合使用
这里是mmdet武器库中的一些数据增强方法
这里是mmseg武器库的一些数据增强方法
传送门,如果大家觉得好用,别忘了给个star

然后是使用在模型训练的技巧!

4、Backbone 和 Heads 的不同学习率 (LR)
因为Backbone和Heads在结构上的差异,使用不同的学习率是可以有效的使得网络整理达到更好,更稳定的收敛效果。
5、多loss加权混合
一般会用在分割比较多,常见的有focal loss+Dice loss这类的,主要解决的问题也是类内不平衡叠加上样本数量不平衡等一系列问题。但是要注意的是,loss函数的组合的权重是需要自己去摸索的,目前我还不能找到一种普遍适用的自动化寻参方法,所以我建议大家仔细分析,保证组合后的损失函数下降不平衡导致的损失函数的倾斜化。
6、带权重CEloss,类平衡损失(多类别问题)
对于不同数量的类别,我们会选择对损失函数加权的方法进行处理,让样本数量少的类别也能得到足够的重视。
传送门,如果大家觉得好用,别忘了给个star https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/tutorials/training_tricks.md

训练过程中的优化器调节方法

7、余弦退火算法
经典,有实验结果表明,效果挺好的。
8、SWA
SWA是一种通过随机梯度下降改善深度学习模型泛化能力的方法,而且这种方法不会为训练增加额外的消耗,这种方法可以嵌入到Pytorch中的任何优化器类中。主要还是用于稳定模型的训练。
9、seed(42)
随机种子数42,为啥是42,如同为啥一个星期有7天,而我要上7天班一样,没啥道理,但是就是要这样干。

测试常用技能

10、推理过程中的TTA增强






请到「今天看啥」查看全文


推荐文章
调研纪要  ·  机器人破圈
23 小时前
调研纪要  ·  机器人破圈
23 小时前
财联社AI daily  ·  宇树人形机器人,下架!
昨天
财联社AI daily  ·  宇树人形机器人,下架!
昨天
午夜漫画站  ·  色系漫画:男人的床上功夫
7 年前
煮酒论史  ·  人生:三不斗,三不争,三不等
7 年前
数据化管理  ·  用Excel玩自拍,小功能大用途
7 年前