深度学习刷新SOTA的tricks大盘点
源自知乎整理
- 回答一:李国趸
- 回答二:昆特Alex
- 一、Data Augmentation
- 二、Model backbone
- 三、tricks
- 回答三:战斗系牧师
- 首先是数据增广的tricks:
- 0、Flip、RandomFlip(随机翻转)
- 1、cutout(裁剪)
- 2、mixup (混合提升)
- 3、mosaic(随机马赛克增强)
- 然后是使用在模型训练的技巧!
- 4、Backbone 和 Heads 的不同学习率 (LR)
- 5、多loss加权混合
- 6、带权重CEloss,类平衡损失(多类别问题)
- 训练过程中的优化器调节方法
- 7、余弦退火算法
- 8、SWA
- 9、seed(42)
- 测试常用技能
- 10、推理过程中的TTA增强
- 总结
回答一:李国趸
https://www.zhihu.com/question/540433389/answer/2549775065
R-Drop:两次前向+KL loss约束
MLM: 在领域语料上用mlm进一步预训练 (Post-training)
EFL: 少样本下,把分类问题转为匹配问题,把输入构造为NSP任务形式.
混合精度fp16: 加快训练速度,提高训练精度
多卡ddp训练的时候,用到梯度累积时,可以使用no_sync减少不必要的梯度同步,加快速度
对于验证集或者测试集特别大的情况,可以尝试多卡inference,需要用的就是dist.all_gather,对于非张量的话也可以用all_gather_object
PET: 少样本下,把分类转为mask位置预测,并构造verbalizer,参考EACL2021. PET
ArcFaceLoss:双塔句子匹配的loss把NT-Xent loss改成arccos的形式,参考ACL2022. ArcCSE
数据增强在zero shot x-lingual transfer:code switch,machine translation…记得最后加一致性loss,参考consistency regularization for cross lingual finetuning
SimCSE:继续在领域语料上做simcse的预训练
Focal loss: 不平衡的处理
双塔迟交互:maxsim操作:query和doc的每个token表征算相似度,取最大相似度再求和。速度和精度都有一个很好的平衡,参考colbert
持续学习减轻遗忘:EWC方法+一个很强的预训练模型效果很不错。就是加一个正则让重要参数遗忘不太多,重要性用fisher信息度量。
对抗训练:FGM,PGD,能提点,就是训练慢,
memory bank增大bsz,虽然我感觉有时候有点鸡肋
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: 经过了噪音数据删除、数据增强等数据精度还是差强人意的话可以考虑
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武器库的一些数据增强方法
然后是使用在模型训练的技巧!
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只是点缀的一些技巧罢了。
深度学习刷新SOTA的tricks大盘点相关推荐
- Dataset:数据集集合(综合性)——机器学习、深度学习算法中常用数据集大集合(建议收藏,持续更新)
Dataset:数据集集合(综合性)--机器学习.深度学习算法中常用数据集大集合(建议收藏,持续更新) 目录 常规数据集 各大方向分类数据集汇总 具体数据集分类 相关文章 DL:关于深度学习常用数据集 ...
- 【资源放送】机器学习/深度学习最全公开视频大放送!
文章首发于微信公众号<有三AI> [资源放送]机器学习/深度学习最全公开视频大放送! 该篇小记一下机器学习与深度学习的一些好的基础视频资源. 如果你是刚入门的小白,建议细细阅读一下下面将要 ...
- 深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私
深度学习数据集中数据差异大 The modern world runs on "big data," the massive data sets used by governmen ...
- 过拟合和欠拟合_现代深度学习解决方案中的两大挑战:拟合和欠拟合
全文共2306字,预计学习时长5分钟 对机器学习模型而言,最糟糕的两种情况无非是构建无用的知识体系,或是从训练数据集中一无所获.在机器学习理论中,这两种现象分别被称为过拟合和欠拟合,是现代深度学习解决 ...
- 【NLP年度重磅盘点】12项重大行业突破!详解2017年深度学习加持下的NLP大事件
翻译 | 林椿眄.刘畅.彭硕 编辑 | Donna Suisui 过去几年,深度学习架构和算法在图像识别和语音处理等领域取得了重大的进步.而在NLP(自然语言处理)领域,起初并没有太大的进展.不过现在 ...
- 【深度学习】真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件...
作者丨皮特潘 编辑丨极市平台 导读 所谓"插件",就是要能锦上添花,又容易植入.落地,即真正的即插即用.本文盘点的"插件"能够提升CNN平移.旋转.scale等 ...
- 怼完Sophia怼深度学习!细数完大神Yann LeCun 这些年怼过的N件事,原来顶级高手是这样怼人的...
图片来源:PCmag.com 十多个小时前,深度学习大神Yann LeCun语出惊人,他宣布放弃"深度学习"这个词.因为媒体对这个词的炒作言过其实,混淆了大家真正的工作,而&quo ...
- 深度学习刷SOTA有哪些trick?
对深度学习而言,不论是学术研究还是落地应用都需要尽可能提升模型效果,这往往需要trick进行支撑.这些trick有的是广泛适用的(如循环学习率.BN等等),有的是任务特定的(比如cv里的数据增强,nl ...
- 2019年深度学习自然语言处理最新十大发展趋势(附下载报告)
来源:专知 本文约5100字,建议阅读10分钟. 本文介绍了近日FloydHub 博客上Cathal Horan中自然语言处理的10大发展趋势. [ 导读 ]自然语言处理在深度学习浪潮下取得了巨大的发 ...
最新文章
- (剑指Offer)面试题18:树的子结构
- Count on a tree
- 推荐一个女画家的系列画:《公主的妄想症》之《喜欢就是要全部》
- 欢乐ssl暑假赛【2019.8.6】
- xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
- Ubuntu 16.04 使用 Libcoap
- Web前端 HTTP1.0、 HTTP 1.1 、 HTTP2.0 区别与联系
- idea代码格式化详细总结(快捷键、格式化规则、格式化模板)
- java的代码大全_java代码大全
- icem合并面网格_ICEM CFD混合网格
- #Android Studio# 模拟器开发者模式
- ADC采样频率的计算
- 【历年IJCAI论文下载(含IJCAI2022)】图神经网络(GNN)(多行为推荐、多模态食谱表示学习、同质图表示学习)
- java斜线_Java中的 \ (反斜线)和正则表达式
- 新百家姓出来了,看你排第几位?
- 欺骗的艺术——第二部分(4)
- UNIX环境高级编程---进程间通信总结
- python_faker使用
- freertos stm32c8t6
- 去掉Bluetooth.apk后,如何对接A2DP、AVRCP及播放器CarMediaApp.apk