NeurlPS 2022 | 全新大模型参数高效微调方法SSF:仅需训练0.3M的参数,效果卓越

本文主要是介绍NeurlPS 2022 | 全新大模型参数高效微调方法SSF:仅需训练0.3M的参数,效果卓越,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

outside_default.png

长按扫描二维码关注我们

outside_default.png

计算机视觉研究院专栏

作者:Edison_G

近期,由新加坡国立大学和字节跳动联合发表的论文入选 NeurIPS 2022。该论文提出了一个全新的、针对大模型训练的参数高效微调方法 SSF(Scaling & Shifting Your Features),可简洁、高效、零开销实现参数微调。

outside_default.png

  • 论文地址:https://arxiv.org/abs/2210.08823

  • 代码地址:https://github.com/dongzelian/SSF 

大模型训练调参:开销和性能不可兼得?

随着数据驱动的方法在深度学习界的普及,数据集规模和模型规模都有了巨大的爆发。业界倾向于探索大模型,然后在下游任务中采用这些预训练的模型,以获得更好的性能和更快的收敛。

然而,目前的程序严重依赖于全面微调,即更新模型的所有参数。这不可避免地导致模型对小的目标数据集过度拟合,继而在微调后不能用于其他任务。因此,设备需要为每个任务保存一套专门的模型参数,造成了巨大的存储空间,特别是对于如今的大模型(例如, 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 简单、有效、高效,也符合奥卡姆剃刀原则。研究者探索了这个新的基线,发现它出人意料地超过了所有其他参数高效的微调方法。

outside_default.png

图一: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 避免了在推理阶段引入额外的参数和计算成本,使这一方法实现零开销。

outside_default.png

图二:SSF 的总体框架。

SSF 的设计:SSF 执行线性转换来调节特征来进行参数高效的微调,如图二所示。在图二(a)中,给定一个在上游任务中预训练的模型,研究者在网络的每个操作(OP)之后插入 SSF-ADA (把提出的方法称为 SSF,把具体的模块称为 SSF-ADA)来调节特征。总共有 K 个操作,这些操作可能包含多头自注意力(MSA)、MLP 和层归一化化(LN)等等。在微调过程中,这些操作中的预训练权重保持冻结,SSF-ADA 参数保持更新。具体的 SSF-ADA 结构如图二 (c) 所示,前一个操作输出的特征用一个缩放因子进行点乘,然后用一个移位因子求和,这与输入无关,如下所示

outside_default.png

重参数化:由于 SSF-ADA 是一个完全的线性变换,可以通过吸收缩放和移位项来重新参数化它,如下所示

outside_default.png

其中 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 在多种模型上的有效性。更多的分析见论文。

outside_default.png

表一:在 FGVC 数据集上使用 ViT-B/16 预训练模型的实验结果

outside_default.png

表二:在 VTAB 数据集上使用 ViT-B/16 预训练模型的实验结果

outside_default.png

表三:在 CIFAR-100 和 ImageNet-1K 数据集上使用 ViT-B/16, Swin-B, ConvNext-B 和 AS-MLP-B 等预训练模型的实验结果

2. 不同的设计对结果的影响

研究者还进行实验来分析不同设计对微调的影响。所有的实验都是在 CIFAR-100 上用预训练的 ViT-B/16 模型实现的,结果见表四。

outside_default.png

表四:不同设计的影响。(a)  层数的影响 (b) 不同插入位置的影响 (c) 初始化的影响 (d) 不同组件的影响

3. 可视化分析

为了进一步研究为什么 SSF 能取得更优异的性能,研究者还将完全微调和微调头部层、完全微调和 VPT-Deep、完全微调和 SSF 之间的特征相似性可视化,如图三所示。在最后一层,SSF 与完全微调的特征最相似,准确度也最接近。这表明 SSF 能很好地提取下游任务中的图像特征。

outside_default.png

图三:完全微调和微调头部层、完全微调和 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.

© THE END 

转载请联系本公众号获得授权

outside_default.png

计算机视觉研究院学习群等你加入!

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

outside_default.png

扫码关注

计算机视觉研究院

公众号ID|ComputerVisionGzq

学习群|扫码在主页获取加入方式

 往期推荐 

🔗

  • YOLOS:通过目标检测重新思考Transformer(附源代码)

  • 自己觉得挺有意思的目标检测框架,分享给大家(源码论文都有)

  • CVPR2021:IoU优化——在Anchor-Free中提升目标检测精度(附源码)

  • 多尺度深度特征(上):多尺度特征学习才是目标检测精髓(干货满满,建议收藏)

  • 多尺度深度特征(下):多尺度特征学习才是目标检测精髓(论文免费下载)

  • ICCV2021目标检测:用图特征金字塔提升精度(附论文下载)

  • CVPR21小样本检测:蒸馏&上下文助力小样本检测(代码已开源)

这篇关于NeurlPS 2022 | 全新大模型参数高效微调方法SSF:仅需训练0.3M的参数,效果卓越的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238877

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi