Visual Prompt Tuning

VPT是一种新的视觉微调技术,通过在输入空间添加少量可训练参数,同时保持预训练Transformer主干冻结。这种方法在许多情况下优于传统的全模型微调,降低了适应下游任务的成本。VPT包括深版和浅版,分别在所有或第一层添加prompt。实验表明,这种方法在保持模型性能的同时,显著减少了所需存储和计算资源。
摘要由CSDN通过智能技术生成

Abstract

在此之前的调整预训练模型的方法是full fine-tuning,即完全微调。

VPT(Visual Prompt Tuning)是一种有效的用于大规模Transformer的视觉微调。它只需要在输入空间引入少量(不到1%的模型参数)的可训练参数,同时冻结backbone。

现在很多情况下,优于完全微调。

Introduction

对于大模型适应下游任务时,通常的策略是进行端到端的全面微调,然而这种策略需要为每个人物存储部署单独的主干参数,代价比较高。(毕竟现在的Transformer体系结构比较大)

之前的方法(a):仅微调参数的一些子集,例如分类器头偏置项bias terms。先前的研究还着眼于向主干网添加额外的残差块adapt。总的来说,准确率不太好。

受NLP启发,VPT是去修改Transformer 的输入:将少量特定于任务的参数引入到输入空间,同时在下游训练期间冻结整个预训练的 Transformer 主干。在实践中,这些附加参数只是简单地添加到每个 Transformer 层的输入序列中,并在微调期间与线性头linear head一起学习。

Related Work

在对大规模预训练模型做微调的方法中,有两个代表工作:Adapter和BitFit:

Adapterr在每个Transformer层后插入一个额外的小模块,通常包含一个线性向下投影 linear down-projection和一个非线性激活函数、一个线性向上投影linear up-projection以及一个残差连接。

BitFit没有插入新的模块,而是做微调时仅更新偏置项bias terms,并冻结其余的backbone参数。

Prompt:

最初prompt应用在nlp领域,在输入文本前添加语言指令language instruction,以便预训练的语言模型可以“理解”特定任务。

最近的工作提出将prompt视为特定于任务的连续向量,并在微调过程中通过梯度直接优化,即 Prompt Tuning,但是目前的prompt仍然仅限于文本编码器的输入(CLIP)。

作者是第一个解决(同样的方法能成功的应用到视觉backbone)并研究视觉prompt的普遍性和可行性的工作。

Approach

符号定义

先将一张图片打成m个固定大小的patches: ,每一个patch和位置编码embedding d维潜在空间

我们将一张图像的patch集合 作为第i+1层 Transformer (Li+1) 的输入,连同一个额外的class token:[CLS],整个ViT表述为:

其中,下标i是encoder的第i层, X是class token,[ ]是拼接操作。

方法架构

VPT: Deep为每个Transformer的encoder层的输入添加一组可学习的prompt参数。

VPT: Shallow仅将prompt参数插入第一层的输入。

在下游任务的训练过程中,只有prompt和线性头linear head的参数被更新,而整个 Transformer 的encoder被冻结:

给定一个预训练好的 Transformer 模型,先进行位置和patch的embedding,然后在 Embed 之后的输入空间中引入一组p个d维的连续embedding,即prompt。在微调过程中,只有特定于任务的prompt会被更新,backbone将会冻结。

VPT-Shallow

prompt仅插入第一个 Transformer 层 L1,每个prompt token都是一个可学习的 d 维向量。 p 个prompt的集合表示为 。因此,shallow-prompted ViT就是:

其中表示第 i 个 Transformer 层计算的特征,X是class token,E是一张图的patch块。红色表示更新的参数,蓝色表示冻结的参数。

因为prompt是在位置encoding之后,所以 对于prompt的位置是不变的,也就是说在数学上等价。这也适用于 VPT-Deep。

VPT-Deep

在每个 Transformer 层的输入空间中引入prompt。对于第i+1层记为,其输入prompt集合记为,m为图片分割的patch数。

存储

对于每个特定的下游任务,VPT只需要存储其特定的prompt和classification head就好了,并且重复使用原始的预训练VIT主干。

Experiments

预训练的backbone是ViT和SwinTrans。

消融实验:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值