深度学习刷SOTA的trick

发布时间 2023-07-28 17:22:49作者: dunimaa

作者:Gordon Lee
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) 效果存疑,反正我试了没啥效果,有人试过效果不错

 

 

数据也是有章法的,不是什么数据都标,基本上的步骤流程都是分析模型bad case的规律,然后找类似的数据来标注。这个过程的最终结果是选了对于当前模型状态来说,最有价值的一批数据来进行标注,本质上其实就是进行人肉的主动学习