文章汇总
要解决的问题
大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。
动机
只微调参数的一个子集
解决的办法
只在输入空间中引入少量特定于任务的可学习参数,而在下游训练期间冻结整个预训练的Transformer主干。
方法简述
作者的方法十分简单
VPT-Shallow
这里分别为第层的CLS和图像的特征向量
提示符仅插入到第一个Transformer层中。之后让这些提示符自学习。
每个提示符号是一个可学习的d维向量。p个提示的集合记为
,浅提示ViT为:
颜色红色和蓝色分别表示可学习和冻结的参数。
VPT-Deep(效果更好一些)
在每个Transformer层的输入空间中引入提示符。值得注意的是,每一层插入的提示词是不一样的,这样没有信息的互动,也会存在训练不足、不稳定的风险(https://arxiv.org/abs/2304.08386 该论文对此进行了改进)。
对于第(i+1)层,我们将输入可学习提示的集合记为。深层提示的ViT公式为:
摘要
目前适应预训练模型的操作方法涉及更新所有骨干参数,即全面微调。本文介绍了视觉提示调谐(Visual Prompt Tuning, VPT)作为一种有效的替代方案,在视觉上对大型变压器模型进行全微调。从高效调优大型语言模型的最新进展中获得灵感,VPT在保持模型主干冻结的同时,仅在输入空间中引入少量(不到模型参数的1%)可训练参数。通过对各种下游识别任务的广泛实验,我们表明,与其他参数高效调优协议相比,VPT实现了显着的性能提升。最重要的是,在跨模型容量和训练数据规模的许多情况下,VPT甚至优于完全微调,同时降低了每个任务的存储成本。代码可从https://github.com/kmnp/vpt获得。
介绍
对于各种识别应用,现在最准确的结果是通过适应在大量精选或原始数据上预训练的大型基础模型获得的,这一发现反映了自然语言处理(NLP)的发展[6]乍一看,这是一个成功的故事:人们可以通过利用最新和最伟大的基础模型在多个识别问题上取得快速进展。然而,在实践中,将这些大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。但是,该策略要求为每个任务存储和部署骨干参数的单独副本。这是一个昂贵且通常不可行的提议,特别是对于现代基于Transformer的架构,它比卷积神经网络(ConvNet)的对对物要大得多,例如,ViT-Huge [19] (632M参数)与ResNet-50 [31] (25M参数)。因此,我们要问,在有效性和效率方面,什么是使大型预训练变压器适应下游任务的最佳方法?
图1所示。视觉提示调整(VPT)与其他迁移学习方法。(a)目前的迁移学习协议是根据调整范围分组的:完全微调,面向头部和面向骨干的方法。(b) VPT在输入空间中增加了额外的参数。(c)采用预训练的ViT-B主干在广泛的下游分类任务上的不同方法的表现,并附有平均值和标准差注释。在使用不到1%的所有模型参数的情况下,VPT在24种情况中有20种优于Full微调。
一种直接的方法是转向我们已经完善的其他策略,使卷积神经网络适应新的任务,如图1(a)所示。一种流行的方法是只微调参数的一个子集,如分类器头[56,36,11]或偏差项[8]。先前的研究也着眼于向主干添加额外的残余块(或适配器)[68,87]。我们可以在《变形金刚》中实施类似的策略。然而,总的来说,这些策略在准确性上表现不佳。
我们在本文中探索了一条不同的路径。我们不修改或微调预训练的Transformer本身,而是修改Transformer的输入。从NLP中提示的最新进展中获得灵感[50,48,45,51],我们提出了一种新的简单有效的方法来调整变压器模型以适应下游视觉任务(图1(b)),即视觉提示调谐(VPT)。我们的方法只在输入空间中引入少量特定于任务的可学习参数,而在下游训练期间冻结整个预训练的Transformer主干。在实践中,这些附加参数被简单地添加到每个Transformer层的输入序列中,并在微调期间与线性头部一起学习。
在使用预训练的ViT主干跨越不同领域的24个下游识别任务中,VPT击败了所有其他迁移学习基线,甚至在20个案例中超过了完全微调,同时保持了为每个单独任务存储更少参数(不到主干参数的1%)的优势(图1(c))。这一结果证明了视觉提示的独特强度:而在NLP中,提示调谐仅在某些情况下才能匹配完全微调性能[45]。VPT在低数据状态下特别有效,并在整个数据规模上保持其优势。最后,VPT在一系列变压器规模和设计(ViTBase/Large/Huge, Swin)方面具有竞争力。综上所述,我们的结果表明VPT是适应不断增长的视觉骨干的最有效方法之一。
2.相关工作
Transformer
transformer模型[73]在自然语言处理中取得了巨大成功[17,66,7]。Transformer架构的成功也扩展到各种计算机视觉任务,包括图像分类[19,52]、目标检测[9,49]、语义和全视分割[71,89,78]、视频理解[25,79,21]和少镜头学习[18],超越了以前最先进的方法。在最近的自监督预训练方法中,变压器也被广泛使用[11,30,3]。与卷积神经网络相比,变形金刚具有更优越的性能和更大的规模,如何有效地适应不同的视觉任务仍然是一个重要的开放性问题。我们提议的VPT提供了一条有希望的前进道路。
迁移学习
在卷积神经网络的背景下,迁移学习已经被广泛研究用于视觉任务[92],并引入了许多技术,包括侧调谐[87],残差适配器[67],偏置调谐[8]等。相对而言,很少有人关注视觉transformer的适应性,而上述方法在这种全新类型的架构上的表现如何仍然未知。另一方面,考虑到大规模预训练的基于transformer的语言模型(LM)的主导地位[17,66,7],已经提出了许多方法[29,28,35]来有效地微调LM以适应不同的下游NLP任务[77,76]。其中,我们在实验中主要关注以下两种具有代表性的方法进行基准测试:Adapters[64]和BitFit[5]。适配器[34]在每个Transformer层中插入额外的轻量级模块。一个适配器模块一般由一个线性向下投影、一个非线性激活函数、一个线性向上投影和一个残差连接组成[63,64]。[8]提出在微调ConvNets时更新偏置项并冻结其余骨干参数,而不是插入新的模块。BitFit[3]将该技术应用于transformer,并验证了其在LM调谐上的有效性。我们的研究表明,相对于NLP中前面提到的两种成熟的方法,VPT在适应视觉任务的Transformer模型方面提供了更好的性能。
提示学习
提示[50]最初指的是在输入文本前添加语言指令,使预训练的LM能够“理解”任务。在手动选择提示的情况下,GPT-3对下游迁移学习任务具有很强的泛化能力,即使在少量或零次设置下也是如此[7]。除了后续关于如何构建更好的提示文本的工作[70,37]之外,最近的工作提出将提示视为特定于任务的连续向量,并在微调期间通过梯度直接优化它们,即提示调整[48,45,51]。与完全微调相比,它实现了相当的性能,但参数存储减少了1000倍。虽然提示最近也被应用到视觉语言模型中[65,91,39,84,22],但提示仍然局限于文本编码器的输入。由于视觉和语言模式之间的差异,在本文中我们提出:同样的方法是否可以成功地应用于图像编码器?我们是第一个解决这个问题的工作(参见相关的并行工作[69,80,14,2]),并通过跨越多个领域和主干架构的多种识别任务的广泛实验来研究视觉提示的通用性和可行性。
3.方法
我们提出了视觉提示调谐(VPT)来适应大型预训练的视觉变压器模型。VPT在Transformer的输入空间中注入少量可学习的参数,并在下游训练阶段保持主干冻结。总体框架如图2所示。我们首先在3.1节中定义符号,然后在3.2节中正式描述VPT。
图2所示。我们提议的视觉提示调优概述。我们探索了两种变体:(a)向每个Transformer编码器层的输入(VPT-deep)添加一组可学习的参数;(b)只将提示参数插入到第一层的输入(VPTshallow)。在下游任务的训练过程中,只有提示符和线性磁头的参数被更新,而整个变压器编码器被冻结。
3.1知识准备
对于N层的plain Vision Transformer (ViT)[19],将输入图像划分为m个固定大小的patch
。是图像patch的高度和宽度。然后,每个patch首先通过位置编码嵌入到d维潜在空间中:
我们表示图像patch嵌入的集合,作为第(i+1)Transformer层的输入。加上一个额外的可学习分类令牌([CLS]),整个ViT被表述为:
式中表示[CLS]在输入空间的嵌入。[·,·]表示在序列长度维度上进行叠加和拼接,即
。每一层由多头自注意(MSA)和前馈网络(FFN)以及LayerNorm[1]和残差连接组成。神经分类头用于将最后一层的[CLS]嵌入映射到预测的类概率分布y中。
3.2视觉提示调优(VPT)
给定一个预训练的Transformer模型,我们在嵌入层之后的输入空间中引入一组p维d的连续嵌入,即提示符。在微调期间,只有特定于任务的提示被更新,而Transformer主干被冻结。根据所涉及的Transformer层的数量,我们的方法有两种变体,VPT-shallow和VPT-deep,如图2所示。
图2所示。我们提议的视觉提示调优概述。我们探索了两种变体:(a)向每个Transformer编码器层的输入(VPT-deep)添加一组可学习的参数;(b)只将提示参数插入到第一层的输入(VPTshallow)。在下游任务的训练过程中,只有提示符和线性磁头的参数被更新,而整个变压器编码器被冻结。
VPT-Shallow
提示符仅插入到第一个Transformer层中。每个提示符号是一个可学习的d维向量。p个提示的集合记为,浅提示ViT为:
其中,表示第i层Transformer计算出的特征,。颜色红色和蓝色分别表示可学习和冻结的参数。值得注意的是,对于ViT,对于提示符的位置是不相关的,因为它们是在位置编码之后插入的,例如,在数学上是等价的。这也适用于VPT-Deep。
VPT-Deep.
在每个Transformer层的输入空间中引入提示符。对于第(i+1)层,我们将输入可学习提示的集合记为。深层提示的ViT公式为:
存储视觉提示
VPT在存在多个下游任务时是有益的。我们只需要为每个任务存储学习到的提示和分类头,并重用预训练的Transformer模型的原始副本,从而显著降低了存储成本。例如,给定一个参数为8600万(M)且d = 768的ViT-Base, 50个浅层提示和50个深层提示分别产生
的额外参数,分别仅占所有VIT - Base参数的0.04%和0.53%。
4实验
我们评估VPT的下游识别任务与预训练的变压器骨干跨尺度。我们首先在4.1节中描述了我们的实验设置,包括预训练的骨干和下游任务,并简要介绍了其他迁移学习方法。然后,我们在第4.2节中演示了我们的方法的有效性和实用性。我们还系统地研究了不同的设计选择将如何影响性能(第4.3节),从而更好地理解我们的方法。
4.1实验设置
预训练backbone
我们在视觉上实验了两种Transformer架构,vision Transformer (ViT)[19]和Swin Transformer (Swin[52])。本节中的所有主干都是在ImageNet-21k上进行预训练的[16]。我们遵循原始配置,例如分割图像补丁的数量,是否存在[CLS]等。更多细节见附录A。
Baselines
我们将VPT的两种变体与其他常用的微调协议进行了比较:
(a) Full:完全更新所有骨干和分类头参数。
(b)以分类头为重点的方法。他们将预训练的主干作为特征提取器,其权重在调优过程中是固定的:
-线性:只使用线性层作为分类头。
-part -k:微调主干的最后k层,同时冻结其他k层,如[85,88,60,30]所采用。它重新定义了脊柱和分类头的边界。
-MLP-k:使用k层多层感知器(MLP)作为分类头,而不是线性层。
(c)在微调期间更新骨干参数子集或向骨干添加新的可训练参数的方法:
-siddetune[87]:训练一个“侧”网络,并在输入到头部之前在预训练的特征和侧调谐的特征之间进行线性插值。
-Bias[8,5]:只微调预训练主干的Bias项。
-适配器[34,63,64]:插入新的MLP模块与变压器层内部的剩余连接。
下游任务
我们在以下两个数据集上进行实验:
FGVC由5个基准细粒度视觉分类任务组成,包括Cub -200-2011[75]、NABirds[72]、Oxford Flowers[59]、Stanford Dogs[41]和Stanford Cars[23]。如果某个数据集只有公开可用的训练集和测试集,我们将训练集随机分为train(90%)和val(10%),并依赖val来选择超参数。
VTAB-1k[86]是19种不同视觉分类任务的集合,分为三组:自然-包含使用标准相机捕获的自然图像的任务;专业化——包含通过专业设备(如医疗和卫星图像)捕获的图像的任务;结构化——需要几何理解的任务,比如物体计数。VTAB的每个任务包含1000个训练样例。接下来[86],我们使用提供的800-200分割的训练集来确定超参数,并使用完整的训练数据运行最终的评估。我们在三次运行中报告测试集的平均准确度分数。
我们报告了FGVC数据集的平均精度,以及VTAB中三组数据集的平均精度。每个任务的单独结果都在附录D中,以及上述任务的图像示例。
4.2主要结果
表1。VIT-B/16在监督ImageNet-21k上预训练。对于每种方法和每个下游任务组,我们报告了与Full相比(·)的平均测试准确性分数和获胜次数。“Total params”表示所有24个下游任务所需的总参数。“Scope”表示每种方法的调优范围。“额外参数”表示除了预训练的主干和线性头部外,还存在额外参数。除Full方法外,所有方法的结果均为最佳。VPT在24个案例中的20个案例中表现出色,可训练参数明显减少。
表1给出了在4个不同的下游任务组中平均微调预训练的VPT - b /16的结果,并将VPT与其他7个调优协议进行了比较。我们可以看到:
1. 在4个问题类别中的3个(24个任务中的20个)上,VPT-Deep的表现优于Full(表1(a)),同时使用的总模型参数显著减少(1.18× vs. 24.02×)。因此,即使存储不是一个问题,VPT也是一种很有前途的方法,可以在视觉上适应更大的变压器。请注意,这一结果与NLP的可比研究相反,NLP的即时调整匹配,但不超过完全微调[45]。
2. 在所有任务组中,VPT-Deep的性能优于所有其他参数高效调优协议(表1(b,c)),这表明VPT-Deep是存储受限环境中最佳的微调策略。
3. 虽然不如VPT-deep最优,但与表1(b)中的面向头部的调优方法相比,VPT-shallow仍然提供了显著的性能增益,这表明如果存储约束很严重,在部署多任务微调模型时,VPT-shallow是一个值得选择的方法。
不同下游数据大小的VPT
图3所示。在不同下游数据规模上的性能比较,平均跨越5个FGVC任务。VPT-deep与Linear(左)、Adapter(中)和Bias(右)进行了比较。高亮区域显示了VPT-deep与对比方法的精度差异。所有样地均给出了VPT-shallow结果,便于参考。标记的大小与对数尺度中可调参数的百分比成正比。
我们研究了FGVC任务中训练数据大小对准确性的影响(VTAB只有1k个训练样本)。我们将训练数据在10%到80%之间变化,并比较所有方法。同样的预训练ViT-B用于下游训练。每种方法在不同训练数据尺度上的任务平均结果如图3所示。
图3显示,跨数据尺度,VPT-deep优于所有其他基线。深入挖掘,使用较少可训练参数的方法,即VPT, Linear, Adapter, Bias,在低数据区域中占主导地位。然而,当线性和适配器有更多的训练数据可用时,这种趋势就会逆转。相比之下,VPT-deep在训练数据大小上仍然始终优于full。尽管Bias提供了类似的优势,但它仍然略微低于全面的VPT-deep(图3右)。
4.3模型设计变换的消融
我们在有监督的ImageNet-21k预训练的ViT-Base上删除不同的模型设计选择,并在VTAB上进行评估,设置与表1相同。详见附录B。
提示位置
VPT和其他方法之间的一个重要区别是作为Transformer层的输入引入了额外的可学习参数。图5显示了在输入空间中如何以及在何处插入提示的不同选择,以及它们将如何影响最终性能。
图5所示。消融在提示位置。我们在顶部说明了不同的位置选择,并在底部展示了结果。为了便于比较,两条蓝色虚线分别表示默认VPT-deep和VPT-shallow的性能。
Prepend还是Add?与第3.2节中描述的在图像补丁嵌入序列Ei中添加提示不同,另一种选择是直接在这些嵌入中添加提示元素,保持Transformer的输入序列长度与之前相同。虽然这种变体在某些情况下(例如,VTAB-Natural)可以与Full竞争,但在深度和浅度设置中,它的性能通常落后于默认的Prepend。关于这一现象的更多讨论见附录B。
潜在空间还是像素空间?与其将提示作为潜在向量插入到第一个Transformer层,不如在Eq.(1)中嵌入层之前的像素级别引入提示,即前置像素和连接通道。图5显示了这两种变量的自适应性能下降。例如,在投影层(prependar -pixel)之前添加浅提示的准确率分数,与VTAB-Natural上嵌入空间(Prepend)的默认添加相比,下降了6.9%。如果我们将一个新的通道连接到输入图像(Concat-channel),则性能会进一步恶化(甚至在VTAB-Natural上高达30个精度分数下降)。这些观察结果表明,提示符更容易在transformer的潜在输入空间中学习浓缩的任务相关信号。
提示符的长度
与完全调优相比,这是为VPT调优所需的唯一额外超参数。为了便于参考,我们还删除了另外两个附加超参数的基线,即Mlp的层数和Adapter的减少率。如图6所示,不同任务的最佳提示长度不同。值得注意的是,即使只有一个提示,VPT-deep仍然明显优于其他两个基线,并且与VTABStructured和Natural的完全微调相比仍然具有竞争力甚至更好。
图6所示。消融提示长度。我们改变VPT-deep的提示数量,并显示每个VTAB子组的平均结果。为方便参考,还显示了每个任务的平均最佳VPT-deep结果。
5分析与讨论
可视化
图9显示了VTAB中3个任务(SVNH [58], EuroSAT [32], Clevr/count[38])的xN的t-SNE[55]可视化,即在最后一个Transformer层之后和分类头之前嵌入[CLS],每个任务一个子群。所有的图都表明,在使用比Full更少的参数的情况下,VPT-deep支持线性可分表示。我们还观察到,与仅为第一层的输入插入提示的VPT-shallow相比,每个Transformer层(VPT-deep)的额外可调参数提高了性能。有趣的是,在Clevr/count(图9(c))上,与VPT-shallow和Linear不同,VPT-deep和Full恢复了任务的底层流形结构(对图像中的物体进行计数,而不是街道号码或景观识别)。
图9所示。来自测试集的3个VTAB任务的最终[CLS]嵌入的t-SNE可视化,见表1。VPT可以在不更新主干参数的情况下产生线性可分特征
6结论
我们提出了视觉提示调谐,一种新的参数有效的方法来利用大视觉变压器模型进行广泛的下游任务。VPT在输入空间中引入特定于任务的可学习提示,使预训练的主干保持固定。我们表明,VPT可以超越其他微调协议(通常包括完全微调),同时显著降低存储成本。我们的实验也提出了关于不同预训练目标的视觉变形器的微调动力学,以及如何有效地转移到更广泛的视觉识别任务的有趣问题。因此,我们希望我们的工作将启发未来关于如何最好地挖掘视觉中大型基础模型潜力的研究。
参考资料
论文下载(2022 ECCV)
https://arxiv.org/abs/2203.12119
代码地址
GitHub - KMnP/vpt: ❄️🔥 Visual Prompt Tuning [ECCV 2022] https://arxiv.org/abs/2203.12119