如何最大限度地提升模型精度?
最近的研究表明,对于性能不佳的微调模型,可以尝试求取平均权重,以提升模型的准确性和鲁棒性。这种方法在不增加推理时间和内存开销的情况下,能够显著改善模型的表现。例如,研究人员通过这种方法在imageNet1K数据集上创造了90.94%的新纪录。
将该方法扩展到多个图像分类和自然语言处理任务中,也能提升模型的分布外性能,并改善新下游任务的零样本性能。
这个方法被称为module soup,令人联想起斐波那契汤的幽默(昨天的汤+前天的汤=今天的新汤)。
三种实现配方
回顾过去,大家通常是通过训练多个微调模型,并选取在验证集上表现最好的模型,舍弃其余模型。然而,由于神经网络的非线性特性,不同的loss basin中可能存在多个解。因此,module soup通过保留所有微调模型的权重并进行平均,能够意外提升性能。
最近的研究发现,从相同的初始化配置独立优化的微调模型,其性能位于相似的误差范围内。之前也有研究证明,沿单一训练轨迹进行权重平均,能够提升随机初始化训练模型的性能。这启发了当前的module soup方法。
module soup包含三种实现:统一汤、贪婪汤和学习汤。其中,贪婪汤是主要采用的实现方式,因为其性能优于简单均匀平均所有权重。具体而言,贪婪汤通过顺序添加每个模型作为汤中的成分构建,只有在验证集性能提高时才保留对应模型,排序依据验证集精度的降序。
超越单个最佳微调模型的性能
作者进行了全面的微调实验,以验证module soup的有效性。首先,微调了CLIP和ALIGN模型,这两个模型经过图像-文本对的对比损失预训练。经过module soup操作后,两者在分布内和自然分布转移测试集上的表现均超越了单个最佳微调模型。
接下来是JFT数据集上预训练的VIT-G模型,该模型在imageNet1K数据集上实现了90.94%的精度,打破了之前CoAtNet保持的90.88%的记录,同时在推理阶段减少了25%的FLOPs。
在NLP领域,作者同样验证了module soup的有效性。下表展示了BERT和T5模型在GLUE benchmark的四个文本分类任务上的结果。虽然相较于图像分类中的提升不那么明显,但在大多数任务下,贪婪汤相较于最佳单个模型仍能提高性能。
当然,作者也指出,module soup在适用性等方面存在局限性,目前的测试主要针对大型异构数据集上预先训练的模型,对于其他模型,效果并不显著。
最后,有网友提到,这种模型参数平均的方法其实是一个经典技巧,早在transformer的原始论文中就已使用。
你发现了吗?
论文地址:https://arxiv.org/abs/2203.0548
