Redian新闻
>
深度学习刷SOTA的trick盘点

深度学习刷SOTA的trick盘点

公众号新闻


MLNLP社区是国内外知名的机器学习与自然语言处理社区,受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。
社区的愿景是促进国内外自然语言处理,机器学习学术界、产业界和广大爱好者之间的交流和进步,特别是初学者同学们的进步。
转载自 | 极市平台
作者丨战斗系牧师、李国趸、OpenMMLab
来源丨https://www.zhihu.com/question/540433389

回答一-作者:战斗系牧师

来源链接: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
https://github.com/open-mmlab/mmdetection/blob/ca11860f4f3c3ca2ce8340e2686eeaec05b29111/mmdet/datasets/pipelines/transforms.py

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

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增强
TTA主要在测试时,对于测试数据集进行不同方向的预测后将预测的模型进行组合,在不改变模型内部参数的情况下,对效果进行提升,有点费推理时间,但是好用。

总结

我记得在kaggle上有种方法是叫call back,也就是自己给自己的测试集打个label放进训练,非常不讲武德。我还记得有一次有人用这种方法在一个分类比赛中,别人ACC:94,他们直接干上了98,非常离谱。其实还有个比较常用的一个技巧是多模融合,通常会跑几个模型,然后加在一起融合,在不计算和要求推理时间的条件下。他要模型多大,就做大概多少个模型,你就会发现,你们在单模,我多模,完全就是三个臭皮匠顶一个诸葛亮。大家对于tricks其实可以用,但是论文里面,如果是用tricks,work的话,是不能发的,所以大家多回到模型研究,tricks只是点缀的一些技巧罢了。

回答二-作者:李国趸-浙江大学硕士生

来源链接: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) 效果存疑,反正我试了没啥效果,有人试过效果不错

回答三-作者:OpenMMLab

来源链接:https://www.zhihu.com/question/540433389/answer/2629056736
对于图像分类任务,让我们以 Swin-Transformer 中使用到的 trick 为例,简单梳理一下目前深度学习中常用的一些 trick:

1. Stochastic Depth

这一方法最早在 Deep Networks with Stochastic Depth 一文中被提出,原文中被称为 stochastic depth。在 EfficientNet 的实现中被 Google 称为 drop connect。因为和 DropConnect 撞名,在 timm 的实现中又被改名为 drop path(但是这个名字也和 DropPath 撞名了,尴尬)。因此大家听到这几个名词的时候最好注意区分一下到底是哪个。
stochastic depth 类似于 dropout,但又有所不同。简单来说 dropout 在训练时随机地抛弃了一部分激活值,而 stochastic depth 则直接抛弃了一部分样本,即将这些样本的值设为零。因此这一方法一般只能放在残差结构中,将网络输出中的一部分样本直接抛弃,再与 shortcut 相加,从而实现部分样本 “跳过” 这一残差结构的效果。
通过跳过部分残差结构,实际上起到了多种深度网络组合的效果,类似集成学习,从而提高网络的性能。

2. Mixup & CutMix

二者都是图像混合增强手段,即在训练时,我们将两个样本按照某种方式进行混合,并相应地混合它们的标签。其中 Mixup 和 CutMix 的区别就在于按照什么方式对图像进行混合。
这种图像混合增强的目的是使图像经过神经网络映射后嵌入的低维流形变得平滑,从而提高网络的泛化能力。关于图像混合增强手段的详细介绍参见 https://zhuanlan.zhihu.com/p/436238223

3.RandAugment

这是一种组合数据增强手段,相比传统数据增强的随机裁剪、随机翻转,这种方法设置了一个包含各种数据增强变换的集合,并对每个样本随机应用其中若干个增强,大大扩展了增强后的图像空间。
关于 RandAugment 的详细介绍参见 https://zhuanlan.zhihu.com/p/436238223

4. RandomErasing

这一方法出自 Random Erasing Data Augmentation,其核心思想十分简单,随机选择并填充图像中的一块区域。它模拟了实际任务中需要识别的目标可能被物体遮挡的情况,从而提高模型的泛化能力。

5. CosineAnnealingLR

Cosine 学习率衰减,在近期的图像分类任务中是最主流的学习率衰减方法。大家都知道衰减学习率可能让网络在前期以较高的学习率帮助网络找到最优解,在后期以较低的学习率使网络最终收敛于最优解。虽然现在的优化器,如 Adam 拥有参数自适应学习率的能力,但通过衰减学习率限制优化器的优化步幅往往仍然是必要的。
而 cosine 学习率衰减提供了一种平滑的学习率衰减曲线,其公式如下:

6. Weight decay

Weight decay 是一种正则化方法,它通过将网络参数的 L2 范数加入 loss 的一部分,限制了网络中部分参数的范围。过大的个别参数可能会导致网络仅依赖这些参数,从而使网络 “变窄”,影响其泛化能力。

技术交流群邀请函

△长按添加小助手

扫描二维码添加小助手微信

请备注:姓名-学校/公司-研究方向
(如:小张-哈工大-对话系统)
即可申请加入自然语言处理/Pytorch等技术交流群

关于我们

MLNLP 社区是由国内外机器学习与自然语言处理学者联合构建的民间学术社区,目前已经发展为国内外知名的机器学习与自然语言处理社区,旨在促进机器学习,自然语言处理学术界、产业界和广大爱好者之间的进步。
社区可以为相关从业者的深造、就业及研究等方面提供开放交流平台。欢迎大家关注和加入我们。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
谷歌推出深度学习调优手册,不到一天狂揽1200星,Hinton转发|GitHub西域幻术治国 信仰的颠覆(六十九)AI终极问题最后一公里——机器意识,UCL汪军教授谈克服深度学习根本性问题重磅!谷歌发布《深度学习调优手册》!Hinton转发点赞!深度学习GPU选购指南《山居续忆》:第二十六章:我们的音乐沙龙 —— 兼谈我的音乐观 (六) 余意未尽LSTM之父最新长文:现代AI和深度学习发展史深度学习GPU选购指南:哪款显卡配得上我的炼丹炉?应用于激流检测和定位的可解释深度学习谷歌大脑深度学习调参(炼丹)指南出炉,Hinton点赞,一天收获1500星白菜价刷Star ,开源项目随便破万星?深度学习设计的衍射处理器并行计算数百个变换FastTrack Universität 2023莱比锡大学公立语言项目招生简章今日晚餐自产多:清蒸螃蟹腿 酱鸭腿和鸭胃 西红柿炒鸡蛋超参数科技招聘:强化学习研究员、深度学习工程师、后台开发工程师等「深度学习+」阶段来了!百度王海峰:深度学习多维度逐渐成熟,创新创造大有可为CV发论文的机会来了!南洋理工项目招生(仅限深度学习,AI,机器学习,迁移学习方向)人工智能300年!LSTM之父万字长文:详解现代AI和深度学习发展史梳理机器学习常用算法(含深度学习)齋明寺古道RTX 40时代,给深度学习买的显卡居然能保值9年?仔细一算绷不住了极大提高效率:深度学习论文写作工具杂谈DLC邀请函:2023美国(HTH)深度学习年会18篇基于深度学习的遥感领域经典综述上海人工智能实验室招收深度学习方向实习生《更多的诗歌》:12: 我什么都没许诺: 朋友将要分离一文详解缺陷检测的传统算法与深度学习算法(内附16篇前沿论文)深度学习先驱者 Geoffrey Hinton 发布新深度学习算法厦门大学夏宁邵教授团队设计基于深度学习的新型冷冻电镜图像降噪与聚类模型国科大和温医大团队通过拉曼光谱结合深度学习,用于快速、无标签肝癌组织病理诊断Conagen和Natáur达成合作,生产可持续天然牛磺酸深度学习工具的「计算显微镜」预测蛋白质相互作用,以及新抗生素的潜在途径强化学习中的Transformer发展到哪一步了?清北联合发布TransformRL综述ChatGPT 幕后:深度学习崛起的这十年 | 文末赠书细数NLP与CV的融合创新:盘点多模态深度学习这几年
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。