目录
提出了一个不占存储的 visual prompt tuning, 是有创新的
实验效果上是能够与全监督模型相媲美的
prompt tuning 的 方式对于小样本学习是更有优势的。
摘要
目前适应预训练模型的操作方法涉及更新所有backbone参数,即fine-tuning。本文介绍了视觉提示调优(Visual Prompt Tuning, VPT)作为一种高效的、有效的替代方案,用于大规模Transformer模型的视觉微调。VPT从最近高效调优大型语言模型的进展中获得灵感,在输入空间中只引入少量(不到模型参数的1%)可训练参数,同时保持模型主干冻结。通过对各种下游识别任务的广泛实验,我们表明,与其他参数高效调优协议相比,VPT实现了显著的性能提升。最重要的是,在许多情况下,VPT甚至在模型容量和训练数据规模上优于完整的微调,同时降低了每个任务的存储成本。
1.简介
对于各种各样的识别应用程序,现在通过适应在大量策报或原始数据上预训练的大型基础模型来获得最准确的结果,这一发现反映了自然语言处理(NLP)的发展。乍一看,这是一个成功的故事:只需利用最新最好的基础模型,就可以在多个识别问题上取得快速进展。然而,在实践中,使这些大型模型适应下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练的模型进行端到端对手头任务的全面微调。但是,这种策略要求为每个任务存储和部署一个单独的骨干参数副本。这是一个昂贵且通常不可行的命题,特别是对于基于Transformer的现代架构,它比卷积神经网络(ConvNet)的对应版本要大得多,例如ViT-Huge [19] (632M参数) vs ResNet-50 [31] (25M参数)。因此,我们要问,在效果和效率方面,使大型预训练Transformers适应下游任务的最佳方法是什么?
一种直接的方法是转向我们已经完善的其他策略,使ConvNets适应新任务,如图1(a)所示。一种流行的方法是只微调参数的一个子集,例如分类器头[56,36,11]或偏差项[8]。先前的研究还研究了向主干添加额外的剩余块(或适配器)[68,87]。Transformers也可以采用类似的策略。然而,总的来说,这些策略在精确度上表现不佳。
在本文中,我们探索了一条不同的路线。我们不是修改或微调预训练的Transformer本身,而是修改Transformer的输入。从NLP中提示的最新进展[50,48,45,51]中获得灵感,我们提出了一种新的简单有效的方法来适应下游视觉任务的transformer模型(图1(b)),即视觉提示调优(VPT)。我们的方法只在输入空间中引入少量特定于任务的可学习参数,同时在下游训练期间冻结整个预训练的Transformer骨干。在实践中,这些额外的参数被简单地预先添加到每个Transformer层的输入序列中,并在微调期间与线性头一起学习。
在24个跨越不同领域的下游识别任务中,使用预训练的ViT骨干,VPT击败了所有其他迁移学习基线,甚至在20个情况下超过了完全微调,同时保持了为每个单独任务存储显著更少参数(不到骨干参数的1%)的优势(图1(c))。这个结果证明了视觉提示的独特力量:而在NLP中,提示调优只能在某些情况下匹配完整的微调性能[45]。VPT在low-data环境中特别有效,并在数据规模上保持其优势。最后,VPT在一系列Transformer规模和设计(ViTBase/Large/Huge, Swin)方面具有竞争力。综上所述,我们的研究结果表明,VPT是适应不断增长的视觉主干的最有效方法之一。
2.相关工作
Transformer 模型在自然语言处理中取得了巨大成功[17,66,7]。Transformer架构的成功也扩展到各种计算机视觉任务,包括图像分类[19,52]、目标检测[9,49]、语义和全视分割[71,89,78]、视频理解[25,79,21]和小样本学习[18],超越了以前最先进的方法。在最近的自监督预训练方法中,trasnsformers也被广泛使用[11,30,3]。与卷积神经网络相比,trasnsformers具有更优越的性能和更大的规模,如何有效地适应不同的视觉任务仍然是一个重要的开放性问题。我们提议的VPT提供了一条有希望的前进道路。
Transfer learning 在卷积神经网络的背景下,迁移学习已经被广泛研究用于视觉任务[92],并引入了许多技术,包括side tuning[87],残差适配器[67],bias tuning[8]等。相对而言,很少有人关注Vision Transformers的适应性,而上述方法在这种全新类型的架构上的表现如何仍然未知。另一方面,考虑到大规模预训练的基于transformer的语言模型(LM)的主导地位[17,66,7],已经提出了许多方法[29,28,35]来有效地微调LM以适应不同的下游NLP任务[77,76]。其中,我们在实验中主要关注以下两种具有代表性的方法进行基准测试:Adapters[64]和BitFit[5]。
Adapters[34]在每个Transformer层中插入额外的轻量级模块。一个适配器模块通常由一个线性下投影、一个非线性激活函数和一个线性上投影以及一个残差连接组成[63,64]。[8]建议在对ConvNets进行微调时更新偏置项,冻结其余的骨干参数,而不是插入新的模块。BitFit[3]将该技术应用于transformers,并验证了其在LM tuning上的有效性。我们的研究表明,相对于前面提到的两种成熟的NLP方法,VPT总体上提高了Transformer模型适应视觉任务的性能。
Prompting 最初是指预先对输入文本进行语言指令,以便预先训练的LM能够“理解”任务。通过手动选择提示,GPT-3即使在few-shot或zero-shot设置[7]下,也显示出对下游迁移学习任务的强泛化。除了后续研究如何构建更好的提示文本[70,37]外,最近的研究提出将提示作为特定任务的连续向量,在微调时通过梯度直接对其进行优化,即提示调优[48,45,51]。与完全微调相比,它实现了相当的性能,但使用1000×less参数存储。尽管最近提示也被应用于视觉语言模型[65,91,39,84,22],但提示仍然局限于文本编码器的输入。由于视觉和语言模式之间的差异,在本文中我们提出:同样的方法能否成功应用于图像编码器?我们是第一个解决这一问题的工作(参见相关并行工作[69,80,14,2]),并通过横跨多个领域和骨干架构的多种识别任务的广泛实验来研究视觉提示的普遍性和可行性。
3.方法
我们提出了视觉提示调优(VPT)来适应大型预训练的视觉transformer模型。VPT在Transformer的输入空间中注入少量的可学习参数,并在下游训练阶段保持骨干的冻结。总体框架如图2所示。我们首先在第3.1节定义符号,然后在第3.2节正式描述VPT。
3.1 准备工作
对于N层的平面Vision Transformer(plain Vision Transformer, ViT)[19],将输入图像分成m个固定大小的patch {Ij∈R3×h×w | j∈N, 1≤j≤m}。h, w为图像补丁的高度和宽度。然后对每个patch进行位置编码,嵌入到d维潜空间中:
我们表示图像patch嵌入的集合,Ei = {ej i ∈ Rd | j ∈N, 1 ≤ j ≤ m},作为(i+1)-th Transformer层(Li+1)的输入。加上一个额外的可学习的分类token([CLS]),整个ViT被表述为:
式中xi∈Rd表示[CLS]在Li+1输入空间的嵌入。[·,·]表示序列长度维度上的叠加拼接,即[xi, Ei]∈R(1+m)×d。每个层Li由多头自注意(MSA)和前馈网络(FFN)以及LayerNorm[1]和残差连接组成。神经分类头用于将最后一层的[CLS]嵌入xN映射到预测的类概率分布y中。
3.2 Visual-Prompt Tuning(VPT)
给定一个预先训练好的Transformer模型,我们在Embed层之后的输入空间中引入一组d维的p个连续嵌入,即提示符。在调优期间,只有特定于任务的提示被更新,而Transformer主干网则保持冻结。根据涉及的Transformer层的数量,我们的方法有两种变体,VPT-shallow和VPT-deep,如图2所示。
VPT-Shallow。提示符只插入到第一个Transformer层L1中。每个提示标记都是一个可学习的d维向量。p个提示符集合记为p = {pk∈Rd | k∈N, 1≤k≤p},浅提示的ViT为:
其中,Zi∈Rp×d表示第i层Transformer计算出的特征,[xi, Zi, Ei]∈R(1+p+m)×d。颜色红和蓝分别表示可学习和冻结的参数。值得注意的是,对于ViT, xN对于提示符的位置是不变的,因为它们是在位置编码之后插入的,例如,[x0, P, E0]和[x0, E0, P]在数学上是等价的。这也适用于VPT-Deep。
VPT-Deep。在每个Transformer层的输入空间引入提示。对于(i+1)-th层Li+1,我们表示输入可学习提示符的集合Pi = {pk i∈Rd | k∈N, 1≤k≤m}。深提示ViT公式为:
Storing Visual Prompts(存储视觉提示)。VPT在存在多个下游任务时是有益的。我们只需要为每个任务存储学习到的提示和分类头,并重用预训练的Transformer模型的原始副本,从而显著降低了存储成本。例如,给定一个参数为8600万(M)且d = 768的ViT- base, 50个浅层提示和50个深层提示分别产生p × d = 50 × 768 = 0.038M和N × p × d = 0.46M的额外参数,分别仅占所有ViT- base参数的0.04%和0.53%
4.实验
我们评估了VPT的广泛下游识别任务与预训练的Transformer骨干跨规模。我们首先在第4.1节中描述我们的实验设置,包括预训练的主干和下游任务,以及替代迁移学习方法的简要介绍。然后,我们在第4.2节中演示了我们方法的有效性和实际效用。我们还系统地研究了不同的设计选择将如何影响性能(第4.3节),从而提高了对我们方法的理解。
4.1实验设置
预训练的Backbones。我们在视觉上实验了两种Transformer架构,vision Transformer (ViT)[19]和Swin Transformer (Swin[52])。本节中的所有主干都是在ImageNet-21k上进行预训练的[16]。我们遵循原始配置,例如分割图像patch的数量,是否存在[CLS]等。更多细节见附录A。
Baselines。我们将VPT的两种变体与其他常用的调优协议进行了比较:
(a) Full:完全更新所有骨干和分类head参数。
(b)方法侧重于分类头。它们将预先训练的主干作为特征提取器,其权重在调优期间是固定的:
--Linear:只使用一个线性层作为分类头。
--Partial-k:微调主干的最后k层,同时冻结其他层,如[85,88,60,30]所采用。它重新定义了backbone和分类头的边界。
--MlP-k:利用具有k层的多层感知器(MLP)代替线性层作为分类头。
(c)在调优过程中更新子集骨干参数或向骨干添加新的可训练参数的方法:
--Sidetune:在输入头部之前,训练一个“侧”网络,并在预训练的特征和侧调的特征之间进行线性插值。
--Bias:只微调预先训练的主干的偏置项。
--Adapter:插入新的MLP模块,在Transformer层内保留连接。
Downstream Tasks。我们在以下两组数据集上进行实验:
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种不同视觉分类任务的集合,分为三组:Natural-tasks包含使用标准相机捕获的自然图像;Specialized - tasks包含通过专业设备(如医疗和卫星图像)捕获的图像的任务;Structured- tasks需要几何理解的任务,比如物体计数。VTAB的每个任务包含1000个训练样例。接下来[86],我们使用提供的800-200分割的训练集来确定超参数,并使用完整的训练数据运行最终的评估。我们在三次运行中报告平均准确度得分。
我们报告了FGVC数据集的平均精度,以及VTAB中三组数据集的平均精度。每个任务的单独结果都在附录D中,以及上述任务的图像示例。
4.2 主要结果
表1给出了在4个不同的下游任务组中平均微调预训练的VPT - b /16的结果,并将VPT与其他7个调优协议进行了比较。我们可以看到:
1.在4个问题类别中的3个(24个任务中的20个)上,VPT-Deep的表现优于Full(表1(a)),同时使用的总模型参数显著减少(1.18× vs. 24.02×)。因此,即使存储不是一个问题,VPT也是一种很有前途的方法,可以在视觉上适应更大的transformer。请注意,这一结果与NLP的可比研究相反,NLP的prompt tuning匹配,但没超过完全微调[45]。
2.在所有任务组中,VPT-Deep的性能优于所有其他参数高效调优协议(表1(b,c)),这表明VPT-Deep是存储受限环境中最佳的微调策略。
3.虽然不如VPT-deep最优,但VPT-shallow仍然比表1(b)中面向head的调优方法提供了重要的性能增益,这表明如果存储约束严重,VPT-shallow是部署多任务微调模型的值得选择。
VPT on different downstream data size。我们研究了FGVC任务中训练数据大小对准确性的影响(VTAB只有1k个训练样本)。我们将训练数据在10%到80%之间变化,并比较所有方法。同样的预训练ViT-B用于下游训练。每种方法在不同训练数据尺度上的任务平均结果如图3所示。
图3显示,跨数据尺度,VPT-deep优于所有其他基线。深入挖掘,使用较少可训练参数的方法,即VPT,Linear, Adapter, Bias,在低数据区域中占主导地位。然而,当线性和适配器有更多的训练数据可用时,这种趋势就会逆转。相比之下,VPT-deep在训练数据大小上仍然始终优于full。尽管Bias提供了类似的优势,但它仍然略微低于全面的VPT-deep(图3右)。
VPT on different backbone scales。图4显示了VTAB-1k在viti - base /Large/Huge三种不同骨干尺度下的性能。在VTAB-1k的所有3个主干选择和3个子组中,深度VPT明显优于线性和浅VPT。更重要的是,随着模型规模的增加,VPT-deep的优势确实仍然存在,即VPT-deep在自然和结构化组上的表现明显优于Full,而在Specialized组上的表现几乎相当。
VPT on hierarchical Transformers。我们将VPT扩展到Swin[52],它在局部移位窗口内使用MSA,并在更深层合并patch嵌入。为了简单性和不丢失通用性,我们以最直接的方式实现VPT:在本地窗口中参加提示,但在patch合并阶段被忽略。实验在ImageNet-21k监督预训练的Swin - base上进行。对于VTAB(表2)的所有三个子组,VPT继续优于其他参数高效的微调方法(b, c),尽管在这种情况下,Full总体上获得了最高的精度分数(在总参数上付出了沉重的代价)。
令人惊讶的是,VPT-deep相对于VPT-shallow的优势在Natural中减弱了:VPT-shallow产生的精度分数略好于完全微调。
4.3 模型设计变体的消融
我们在有监督的 ImageNet-21k 预训练的 ViT-Base 上消融不同的模型设计选择,并在 VTAB 上评估它们,在表中设置相同表1。见附录 B。
Prompt Location(提示位置)。VPT和其他方法之间的一个重要区别是作为Transformer层的输入引入了额外的可学习参数。图5显示了在输入空间中如何以及在何处插入提示的不同选择,以及它们将如何影响最终性能。
前置或添加?如第3.2节所述,另一种选择不是将提示添加到图像patch嵌入Ei的序列中,而是直接将提示逐个元素地添加到这些嵌入中,保持Transformer的输入序列长度与以前相同。尽管这种变体在某些情况下与 Full 具有竞争力(例如,VTAB-Natural),但它在深度和浅层设置中的性能通常落后于默认的 Prepend。关于这种现象的更多讨论在附录 B 中。
潜在或像素空间。与其将提示插入第一个Transformer层的潜在向量,不如在Eq.(1)中的Embed层之前在像素级引入提示,即Prepend-pixel和Concat-channel。图 5 显示这两种变体的适应性能下降。例如,与VTAB-Natural上嵌入空间(Prepend-pixel)中的默认前置相比,在投影层(Prepend-pixel)之前预先添加浅提示的准确性得分下降了6.9%。如果我们改为将新通道连接到输入图像(Concat-channel),性能会进一步恶化(甚至高达VTAB-Natural的30个精度分数下降)。这些观察表明,提示更容易在 Transformer 的潜在输入空间中学习浓缩的任务相关信号。
Prompt Length(提示长度)。与完全微调相比,这是VPT调优所需的唯一额外超参数。为了便于参考,我们还根据各自的附加超参数消融了另外两个基线,即Mlp的层数和适配器的减少率。如图6所示,不同任务的最佳提示长度不同。值得注意的是,即使只有一个提示,VPT-deep仍然显著优于其他两个基线,并且仍然具有竞争力,甚至比VTAB-Structured和Natural的完全微调更好。
Prompt Depth(提示深度)。图7消隐了要插入哪些层和插入多少层提示。每个变量报告val集选择的最佳提示长度。VPT的表现总体上与提示深度呈正相关。然而,如果我们从上到下插入提示,准确性就会下降,这表明Transformer早期层的提示比后期层的提示更重要。
Final Output(最终输出)。在原有ViT配置的基础上,我们使用[CLS]的最终嵌入,即xN作为分类头输入,这也是我们ViT实验的默认设置。如图8所示,如果我们使用图像patch输出嵌入EN上的平均池作为最终输出(图像池),结果基本上是相同的(例如,VTAB-Specialized的82.4 vs. 82.3)。但是,如果池化涉及到最终的提示输出ZN (prompt -pool和global -pool),准确率可能会下降8个点。
5.分析和讨论
Visualization(可视化)。图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恢复了任务的底层流形结构(对图像中的物体进行计数,而不是街道号码或景观识别)。
Apply VPT to more vision tasks(将VPT应用于更多的视觉任务)。通过使用Transformer模型SETR-PUP[89]评估ADE20K[90]语义分割任务,我们探索了超越视觉分类的VPT的可行性。它将一个标准的ConvNet头添加到ViT主干来执行分割。事实上的方法仍然是完全微调预训练的骨干与ConvNet头(Full)。我们还包括两个协议进行比较:只更新头层(only head),在主干(bias)中更新头部层和偏置向量。在表3中,我们报告了有和没有多尺度推理的所有mIoU结果。虽然参数高效协议不能与Full竞争,但VPT仍然可以与Bias相媲美。值得注意的是,VPT提供了与完全微调的最先进的ConvNet模型(DeepLab v3+[10])相媲美的结果,同时调优的参数显著减少(分别为15M和64M)。
Apply VPT to more pre-training methods(将VPT应用到更多的预训练方法中)。除了用标记数据预训练的骨干外,我们还实验了两个自监督目标:MAE[30]和MoCo v3[11]。表4报告了使用ViTB的VTAB-1k的结果。我们观察到VPT的两种变体都超过了线性,但在其他技术之间的比较不具有结论性。对于MAE,其他参数高效的方法,如Partial-1,优于VPT和Linear。在MoCo v3的情况下,VPT不再拥有最好的性能,尽管它仍然具有竞争力。这表明这两个自监督的vit与前面章节中的监督vit有根本的不同。这些差异产生的确切原因和方式仍然是一个悬而未决的问题。
Apply VPT to ConvNets(将VPT应用于ConvNets)。我们研究了在ConvNets的输入空间中添加可训练参数的想法:通过输入图像的p个可学习提示像素填充高度和宽度。尽管这个操作看起来很非常规,但我们还是以这种方式实现了VPT,因为没有明显的解决方案来添加类似于Transformer对应的位置不变提示。事实上,这种方法在之前的对抗性攻击文献中已经被探讨过[20]。在我们的实验中,p的值比以前的工作小2个数量级:例如,5 vs 263。最重要的是,我们从迁移学习的角度来看待这个想法。更多的讨论见附录C。
表5分别是在imagenet - 21k上预训练的ConvNeXt-B[53]和在ImageNet-1k上预训练的ResNet-50[31]的结果。VPT在更大的ConvNet骨干ConvNeXt-B中工作得很好,提供了比其他稀疏调优协议(b, c)更高的精度,并且在19种情况中有8种优于Full。然而,VPT的优势随着较小的ConvNet (ResNet50)而减弱,因为对于所有19个VTAB-1k任务没有明确的赢家。
6.结论
我们提出了可视化提示调优,这是一种新的参数高效方法,可以利用大型视觉Transformer模型进行广泛的下游任务。VPT在输入空间中引入了特定任务的可学习提示,保持预先训练的主干固定。我们证明VPT可以超越其他微调协议(通常包括完全微调),同时极大地降低存储成本。我们的实验也提出了关于不同预训练目标的视觉transformer的微调动力学,以及如何有效地转移到更广泛的视觉识别任务的有趣问题。因此,我们希望我们的工作能够启发未来的研究,如何最好地挖掘大型基础模型的潜力。