Comment: ECCV2022
摘要
当前调整预训练模型的方法需要更新backbone的全部参数,即完全微调。本文提出了一种高效的方法VPT,成为视觉中大规模transformer模型完全微调的替代方案。从微调大规模语言模型中吸取经验,VPT仅在输入空间中引入少数的可训练参数,保证骨干网络参数冻结。通过对各种下游识别任务的广泛实验证明,与其他参数高效的微调方法相比,VPT实现了显著的性能提升。最重要的是,在许多情况下,VPT在模型容量和训练数据规模上甚至优于完全微调,同时降低了每个任务的存储成本。
Introduction
对于各种识别任务,都可以通过调整在大规模数据集上进行预训练的模型来获得最准确的结果,这一发现反映了自然语言处理 (NLP)的发展。乍一看,这是好事:只需利用最新、最好的基础模型,就可以在多个识别问题上取得快速的进展。然而,在实践中,调整大规模预训练模型适应下游任务本身就存在挑战。最常见的调整策略是针对下游任务的预训练模型进行端到端的全面微调。但是,这个策略需要为每个任务单独存储并部署主干参数的副本。这是一个昂贵且不可行的方法,尤其是对于基于 Transformer 的架构,它们比卷积神经网络 (ConvNet) 的对应物大得多,例如,ViT-Huge(632M 参数)与ResNet-50 (25M 参数)。因此,我们提出问题,考虑到有效性和效率问题,使大型预训练 Transformer 架构适应下游任务的最佳方法是什么?
一种简单的方法是转向我们已经完善的其他策略,使卷积网络适应新任务,如图 1(a) 所示。一种流行的方法是只微调一组参数,例如分类器头或偏差项(bias)。先前的研究还着眼于在骨架上添加额外的残余阻滞(或适配器Adapter)。可以对 Transformer 实施类似的策略。但是,一般来说,这些策略在准确性方面表现不佳。
本文将探讨一条不同的路线。我们没有改变或微调预先训练的 Transformer 本身,而是修改 Transformer 的输入。从NLP中提示的最新进展中汲取灵感,本文提出了一种新的简单有效的方法来使transformer模型适应下游任务(图1b),即视觉提示调优(VPT)。本文方法只在输入空间中引入了少量特定于任务的可学习参数,同时在下游训练期间冻结了整个预训练的 Transformer 主干。这些额外的参数简单地添加到每个 Transformer 层的 input 序列中,并在调优过程中与线性头一起训练。
在使用预训练的 ViT 主干网络,在跨越不同领域的 24 个下游识别任务中,VPT 击败了所有其他迁移学习基线,甚至在 20 种情况下超过了完全微调,同时保持了为每个任务存储明显较少的参数(不到主干参数的 1%)的优势图 1(c)。这一结果证明了视觉提示的独特优势:而在 NLP 中,提示调优只能在某些情况下匹配完整的微调性能。VPT 在低数据量范围内特别有效,并在数据规模上保持其优势。最后,VPT 在一系列 Transformer 规模和设计(ViTBase/Large/Huge、Swin)中具有竞争力。综上所述,结果表明 VPT 是适应不断增长的视觉支柱的最有效方法之一。
Approach
本文提出VPT来调整大规模预训练视觉transformer模型。VPT将少量可学习参数注入到transformer的输入空间,并在下游训练阶段中保证主干冻结。
3.1 Preliminaries
(1)对于具有N层的普通的ViT,一张图像被分成m个固定大小的patch(其中h,w分别表示图像patch的高和宽):
(2)每个patch加上位置编码被编码进d维的潜在空间:
(3)图像patch编码的集合定义为:
Ei = {ej i ∈ Rd | j ∈ N, 1 ≤ j ≤ m},作为第(i+1)个transformer层(Li+1)的输入。
(4)连同一个额外的可学习的分类token[CLS],整个的ViT可以被表述为:
其中xi表示[CLS]在Li+1层输入空间的嵌入向量。
(5)每一层Li都由多头自注意力(MSA)和前馈网络(FFN)以及Layer Norm和残差连接组成。最后的神经分类头用于将最后一层的[CLS]嵌入映射到预测的类概率分布y中。
3.2 Visual-Prompt Tuning (VPT)
给定一个预训练的transformer模型,我们在嵌入向量之后(进入编码器之前)引入p个连续的d维嵌入,即提示。在微调期间,只有任务特定的提示会被更新,transformer主干保持冻结。根据涉及到的transformer层数不同,本文提出两种变体,即VPT-shallow和VPT-Deep。
VPT-Shallow
提示仅插入到transformer中L1层中,每一个提示都是一个d维的可学习向量。p个提示的集合记为:
因此VPT-Shallow:
其中Zi表示第i个transformer层计算的特征,其维度为:[xi, Zi, Ei] ∈ R(1+p+m)×d。其中红色表示可学习的参数,蓝色表示冻结的参数。
VPT-Deep
在Transformer中每层的输入空间中都引入了提示。对于第(i+1)层,我们将输入的可学习提示的组合定义为:
因此VPT-Deep:
Storing Visual Prompts
VPT在存在多个下游任务时是有利的。我们只需要为每个任务存储学习到的提示和分类头,并重用预训练的transformer模型的原始备份,显著降低了存储成本。例如,给定一个具有8600万( M )参数和d = 768的ViT - Base,50个浅层提示和深层提示产生额外的p × d = 50 × 768 = 0.038 M和N × p × d = 0.46 M参数,分别仅占所有ViT - Base参数的0.04 %和0.53 %。
Conclusion
本文提出 Visual Prompt Tuning,这是一种新的参数高效方法,可利用大型视觉 Transformer 模型执行各种下游任务。VPT 在输入空间中引入了特定于任务的可学习提示,使预训练的主干保持固定。本文证明VPT 可以超越其他微调协议(通常包括完全微调),同时显著降低存储成本。我们的实验还提出了关于微调具有不同预训练目标的视觉 Transformer 的动力学,以及如何以有效的方式转移到更广泛的视觉识别任务的有趣问题。