故事会环节
在做深度学习的时候,会发现一个事儿,就是如果训练数据和测试数据是一致的,那么效果一般都不错,但是如果不一致的时候(这个确实,在实际工业应用中,很少能有一致的情况发生,谁知道用户是用来测啥的)性能就会掉很多,这种情况就被叫做域偏移。常见的解决办法就是做域适应(DA),域泛化(DG)。作者表示DA需要目标域的访问权限,但是DG不用,所以DG被关注的很多,然后就开始说DG。(TIPS:我自己做域相关的比较少,但是就我自己接触的时候,我印象里是DA也很多,特别是UDA,在医学上好像被用的很广泛)DG方案分为3类,数据增强,域不变表示学习,学习策略优化。(这么看确实DG比较多,毕竟基本已经是深度学习默认使用的方案了)
作者在通过观察后发现,如果训练集和测试集的每个域之间没有什么差异,那么域不变学习不但没用,而且会变差,数据增强和学习策略优化效果很好,然后说这些都可以从landscape的角度解释,帮助模型收敛到平坦最优,取得更好的泛化性。
然后一堆方法表明平坦的最小值会让泛化性更好。作者于是提出了一系列基于损失的学习策略,来让模型收敛到平坦值。其中包括了:(i)提出一种蒸馏微调范式(ii)用大学习率,然后用一种新的学习率调度器,ALRS来帮助收敛。(iii)把模型加宽得到改进模型(这里其实我有一些,小疑问的,我其实很少看这种方法很多的论文,因为很清楚的知道,一般来说,有好几个改进的原因,都是怕审稿人觉得方法太简单,不够novelty,所以往往会有一两个凑数的方案,不知道本文有没有这种内容)
创新点
- 论文从loss landscape的角度解释了DG方法work的原因
- 提出了一系列方法
Method
本文所谓的蒸馏微调范式,总共4步:1-正常训练一个分类模型。2-使用自蒸馏蒸一下。3-把分辨率调大再训一个分类模型。4-再自蒸馏蒸一下。每次训练都是从头开始训,学习率重置.(在22年的时候不清楚,现在的话,学习率慢慢方法其实是一个通用trick,关注挑战赛的应该能发现,十几个工作有大半都会用这个方式,同时经常用的还有例如,多teacher教学之类的方式)
自蒸馏没什么好说的,用下面的公式计算loss,然后更新就行了,借鉴MESA的方法。本文同时还用了EMA更新teacher

这里主要想提的是这个优化器,前面优化器为SGD,后面阶段是AdamW,看回答下面的大佬有提到,这个优化方案在SGD中会比较有效,AdamW效果貌似不佳。其更新方法如下所示,来自大佬在深度学习中,loss下降的快慢或者曲率(但最后收敛在同一水平)会对下游任务的性能有什么影响吗?回答下面的code
总结:
论文中的不少方式现在都已经属于训练的通用设置了,我就不怎么提了,刚好因为自己现在在做low-level,训练集和测试集只能说毫不相关,正好看见这个优化器,有种耳目一新的感觉,下午来尝试一下效果。我个人还是比较喜欢这种,简单有效的工作。相比许多理论一大堆,复现困难不说,还很难拓展应用到自己工作的论文,好上太多了
尝试了一下ALRS算法,由于我是在low-level上使用的,会遇到一个问题就是SGD基本不收敛,可以看到蓝色的是使用了SGDM优化的模型,而其他是正常AdamW的模型,loss上有着巨大的差距。无奈放弃。
