作者:字节跳动智能创作团队近期,由新加坡国立大学和字节跳动联合发表的论文入选 NeurIPS 2022。该论文提出了一个全新的、针对大模型训练的参数高效微调方法 SSF(Scaling & Shifting Your Features),可简洁、高效、零开销实现参数微调。
大模型训练调参:开销和性能不可兼得?
随着数据驱动的方法在深度学习界的普及,数据集规模和模型规模都有了巨大的爆发。业界倾向于探索大模型,然后在下游任务中采用这些预训练的模型,以获得更好的性能和更快的收敛。
然而,目前的程序严重依赖于全面微调,即更新模型的所有参数。这不可避免地导致模型对小的目标数据集过度拟合,继而在微调后不能用于其他任务。因此,设备需要为每个任务保存一套专门的模型参数,造成了巨大的存储空间,特别是对于如今的大模型(例如, ViT-G/14, 1.8G, CoAtNet, 2.4G)来说,训练开销很大。
此前,业界对上述问题的解决方案是:仅仅微调头部层,即只对最后一个头部层进行微调。然而,与完全微调相比,这种做法通常会产生较差的性能。
以视觉任务上实现的方法 VPT(视觉提示微调)[1]为例,VPT 提出插入可学习的提示作为输入,并将其附加到原始图像 token 中。这些提示将通过执行自我注意力(self attention)与图像 token 交互,并在微调过程中进行更新。通过这种方式,与只微调头部层相比,在下游任务中可以实现显著的性能提升。然而,与完全微调和微调头部层相比,VPT 方法额外引入了两个问题:
i) VPT 为不同的任务调整提示的数量,这引入了一个与任务相关的可学习参数空间。微调的性能对每个任务的提示数量很敏感,需要仔细设计。太少或太多的提示可能会降低微调的准确性或增加计算的冗余度(例如,在 Clevr/count 上有 200 个提示,但是 Flowers102 上有 1 个提示);
ii) VPT 以及其他基于适配器(adapter)的方法 [2],与原始预训练模型相比,在推理阶段引入了额外的参数和计算成本。例如,VPT 引入了额外的输入,基于适配器的方法在预训练的模型中插入额外的模块。这些方法改变了预训练网络结构或网络的输入,可能导致频繁的结构修改和沉重的工作量,特别是对于那些已经部署在边缘设备(如移动电话)中的模型。
符合奥卡姆剃刀原则的新方法
受一些特征调制方法的启发,针对上述难题,新加坡国立大学和字节跳动的研究者提出了一种全新的参数高效的微调方法,名为 SSF。采用 SSF 方法,只需要对预训练的模型提取的深层特征进行缩放和移位,就可以进行微调。
由于上游数据集和下游数据集的数据分布不同,很难将在上游数据集训练的模型权重应用于下游数据集。例如,保持骨干权重的微调头部层策略会导致性能下降。为了缓解上述问题,SSF 引入了缩放参数和移位参数,这些参数可以被认为是方差和均值,用于调节用上游数据集上的预训练模型提取的下游数据集的特征,从而使被调节的特征落在一个鉴别性的空间。这些缩放参数和移位参数不依赖于任何输入,对于不同的任务有一个统一的可学习参数空间。
SSF 的另一个优点是,它只引入了线性变换,这是因为研究者仅仅对提取的特征进行了缩放和移位。这些线性变换可以在推理阶段通过模型重新参数化(model re-parameterization) [3] 进一步合并到原始的预训练权重中,从而避免了下游任务的额外参数和 FLOPs。对于部署在边缘设备中的模型,只需要上传微调后的更新权重,而不需要改变网络结构。
表一显示了 SSF 和其他微调方法之间的具体特征比较。SSF 简单、有效、高效,也符合奥卡姆剃刀原则。研究者探索了这个新的基线,发现它出人意料地超过了所有其他参数高效的微调方法。
图一:SSF 方法的特点以及它在 FGVC 和 VTAB 任务上的性能。
通过在 26 个分类数据集和 3 个鲁棒性数据集上评估 SSF 方法,结果显示:与其他参数高效的微调方法相比,SSF 获得了最先进的性能。
与完全微调相比,SSF 方法在 FGVC 和 VTAB-1k 上获得了 2.46%(90.72% {vs. 88.54%)和 11.48%(73.10% vs. 65.57%)的 Top-1 精度性能改进,但只需要大约 0.3M 的可训参数。此外,SSF 在推理阶段不需要额外的参数,可以即插即用,很容易扩展到各种模型系列(CNN、Transformer 以及 MLP 网络)。
具体的实现思路
与此前方法不同的是,研究者引入了缩放和移位因子来调节由预先训练好的模型提取的深层特征,并进行线性转换以匹配目标数据集的分布。
这一方法涵盖了五个主要属性:
i) SSF 实现了与完全微调策略相同的性能;ii) 所有的下游任务都可以独立地输入到模型中,而不依赖任何其他任务;iii) 模型只需要微调很少的参数;iv)与 VPT 不同,VPT 为每个任务调整提示的数量,而 SSF 中微调的参数集不会随着任务的变化而变化,这使得之后可以通过增加更多的任务进行多任务学习或连续学习来进一步微调参数是可行的(它提供了更多的灵活性,与 ii)并不矛盾);v)由于线性变换,SSF 避免了在推理阶段引入额外的参数和计算成本,使这一方法实现零开销。
图二:SSF 的总体框架。
SSF 的设计:SSF 执行线性转换来调节特征来进行参数高效的微调,如图二所示。在图二(a)中,给定一个在上游任务中预训练的模型,研究者在网络的每个操作(OP)之后插入 SSF-ADA (把提出的方法称为 SSF,把具体的模块称为 SSF-ADA)来调节特征。总共有 K 个操作,这些操作可能包含多头自注意力(MSA)、MLP 和层归一化化(LN)等等。在微调过程中,这些操作中的预训练权重保持冻结,SSF-ADA 参数保持更新。具体的 SSF-ADA 结构如图二 (c) 所示,前一个操作输出的特征用一个缩放因子进行点乘,然后用一个移位因子求和,这与输入无关,如下所示
重参数化:由于 SSF-ADA 是一个完全的线性变换,可以通过吸收缩放和移位项来重新参数化它,如下所示
其中 w 和 b 分别为权重和偏置项。* 代表卷积层中的 "卷积" 操作或 MLP 层中的 "乘法" 操作。t 是前一个线性层的输入。由于 w 和 b 被冻结,而和在微调中被更新,在推理阶段,和可以通过上述公式合并到原始参数空间(w 和 b)。从这个角度看,SSF-ADA 使得在不增加任何额外参数和计算成本的情况下执行下游任务成为可能,如图二(b)所示。
实验结果
1. SSF 在图像分类数据集上的性能
研究者分别在 FGVC、VTAB、CIFAR-100 和 ImageNet-1K 进行了实验,如表一、二、三。SSF 一致性地超过了其他高效微调方法(Adapter、Bias 和 VPT)。在表三中,SSF 在 Swin Transformer、ConvNext 和 AS-MLP 等各种模型上的结果也始终优于其他参数高效微调方法,这也验证了 SSF 在多种模型上的有效性。更多的分析见论文。
表一:在 FGVC 数据集上使用 ViT-B/16 预训练模型的实验结果
表二:在 VTAB 数据集上使用 ViT-B/16 预训练模型的实验结果
表三:在 CIFAR-100 和 ImageNet-1K 数据集上使用 ViT-B/16, Swin-B, ConvNext-B 和 AS-MLP-B 等预训练模型的实验结果
2. 不同的设计对结果的影响
研究者还进行实验来分析不同设计对微调的影响。所有的实验都是在 CIFAR-100 上用预训练的 ViT-B/16 模型实现的,结果见表四。
表四:不同设计的影响。(a) 层数的影响 (b) 不同插入位置的影响 (c) 初始化的影响 (d) 不同组件的影响
3. 可视化分析
为了进一步研究为什么 SSF 能取得更优异的性能,研究者还将完全微调和微调头部层、完全微调和 VPT-Deep、完全微调和 SSF 之间的特征相似性可视化,如图三所示。在最后一层,SSF 与完全微调的特征最相似,准确度也最接近。这表明 SSF 能很好地提取下游任务中的图像特征。
图三:完全微调和微调头部层、完全微调和 VPT-Deep、完全微调和 SSF 在 ViT-B/16 的不同层中的特征相似性的可视化。
结论
在本文中,研究者专注于参数高效的微调,并提出了一种 SSF 方法来缩放和移位预先训练好的模型所提取的特征。SSF 在微调过程中引入的缩放和移位参数可以通过推理阶段的重参数化合并到原来的预训练模型权重中,避免了额外的参数和 FLOPs。在总共 26 个图像分类数据集和 3 个鲁棒性和分布外数据集以不同的模型(CNN、Transformers 和 MLPs)进行实验,SSF 出人意料地优于其他参数高效的微调方法,它建立了一个新的基线。
引用:[1] Jia et al., Visual Prompt Tuning, ECCV2022.[2] Houlsby et al., Parameter-efficient transfer learning for nlp, ICML2019.[3] Ding et al., Repvgg: Making vgg-style convnets great again, CVPR2021.