论文链接:https://arxiv.org/pdf/2203.05482v1.pdf

 

摘要

随着Transformer模型的广泛研究,sequence-to-sequence这一学习方式在图像、视频等多维数据上同样得到了广泛的应用。目前无论是图像还是文本任务,大家往往会采用pretrain+finetune的范式来将预训练的Transformer等主干(backbone)模型迁移到下游任务上,比如我们一般会采用ImageNe数据集上预训练的ResNet在其它图像分类任务上进行微调,即选择不同的超参数来微调模型,然后选择在验证集上效果最好的模型。近日,以谷歌为首的诸多研究机构在本文中提出了一种提升微调模型准确度的方法Model Soups:用不同的超参数来对预训练模型进行finetune得到多个模型权重然后求平均。通过将model soups方法应用于JFT-3B预训练的ViTG/14模型,该模型在ImageNet1K数据集上达到了SOTA:90.94% top-1 acc,超过之前的CoAtNet-7(90.88%)。

 

动机

假设存在n个通过不同超参数微调得到的模型,其模型参数由Θi表示。如下表所示,已有研究大多直接将Θi在验证集上进行多次验证,最终选择其最优参数Θ*。同样地,也存在模型集成这一思路,即下表中第二行所表示的操作,但这一操作会显著地增加推理时间。

 

方法

本文列举了3种model soup的实现方法,其中最简单的是统一形式(uniform soup),即直接对全部的模型权重求平均,第2种方法是贪心形式(greedy soup),首先按照验证集的准确度降序排列,然后逐个增加模型来进行权重平均,只有当得到的平均模型效果有提升时才考虑将当前的模型加入进来。第3种方法学习形式(learned soup)是要通过学习来得到不同模型的混合权重系数。实验结果表明,greedy soup往往要比uniform soup效果要好,也是论文最后采用的策略。

本文的核心思想是对模型参数进行权重融合,但实际上这一思路早已得到了广泛研究。例如文中提到的SWA(Stochastic Weight Averaging)方法:通过对某个模型训练过程的不同step或者epochs下产生的权重进行平均来提升模型泛化性。model soup与它的区别是前者用不同超参数独立训练的模型权重(用同一个预训练参数初始化)进行平均。这种思路来自对误差 landscape的分析结果(见下图):对于一个预训练权重Θ0,通过不同的超参数(不同的随机seed和lr)进行finetune得到两个新的模型:Θ1和Θ2,然后画出它们的训练损失和测试误差的2D landscape:

可以看到无论是域内还是域外测试误差,SWA的2D landscape的轮廓都呈盆状,这意味着Θ1和Θ2都不是最优的,而是在两者之间,表明实际上可以通过对两个模型的权重插值来获得更好的模型。为了验证这个猜想,作者训练了一系列的模型,它们采用不同的超参数进行微调,如随机种子,学习速率和数据增强,对于每两个模型,计算用权重平均得到模型准确度和两个模型平均准确度的差值:

可以看到用权重平均得到的模型准确度要超过两个模型准确度平均值,而且两个模型越正交(角度越接近90度),带来的提升越大。

 

实验

论文基于CLIP ViT-B/32和ALIGN EfficientNet-L2模型分别进行实验。CLIP模型采用不同的学习速率,权重衰减,训练时长,标签平滑和数据增强,共产生72个finetune后的模型。ALIGN模型采用不同的学习速率,数据增强和mix-up产生12个模型。对于greedy soup,通过贪心算法只选择5个模型。下图为model soup和原始预训练以及单个最好模型的对比图,可以看到greedy soup可以比单个最好模型提升0.7和0.5。

本文还研究了不同模型数量下greedy soup和其它方法的结果对比,可以看到在域内测试上效果虽然不如模型集成,但是要超过单个模型和uniform soup,而在域外测试上greedy soup效果最好。这其实也说明greedy soup相比单个最好模型达到相同的效果所需要训练的模型量要少。

如果将greedy soup应用在JFT-3B预训练的ViT-G/14模型上,可以将ImageNet1K上的top1-acc由原来的90.47提升至90.94。

model soup不仅在图像分类任务上有效,同样可以应用在文本分类上,基于BERT和T5模型进行实验,均可以带来一定的性能提升:

虽然model soups看起来很有效,但是论文也指出来它的局限性,首先论文的实验模型都是基于大规模数据集上的预训练模型,论文实验了ImageNet-22k数据集上预训练模型,发现虽然有提升,但是没有CLIP和ALIGN那么明显。而且模型集成可以提升模型校准,但是model soups没有这种效果。

虽然model soups这种方法看起来非常简单,但却比较实用,因为它不像模型集成那样额外增加计算量。对于model soups另外一个点是,虽然我们需要采用不同超参数来产生尽量差异化的模型来进行平均,但是如果两个模型偏离很大,即论文中所说的error barrier(采用较高的学习速率),那么可能就起不到较好的效果,这也就是为什么greedy soup效果会更好的原因,毕竟它可以剔除这种情况。

内容中包含的图片若涉及版权问题,请及时与我们联系删除