Visual Prompt Tuning

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

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。

消融实验:

### 关于视觉-语言提示调优与知识引导的上下文优化的研究 #### KgCoOp的关键思想 KgCoOp旨在通过减少可学习提示和人工提示之间的差异来缓解对一般文本知识的遗忘。这种方法确保在不放弃原有知识的前提下,使模型保持与普遍知识的一致性[^1]。 #### 方法概述 具体而言,在CLIP和CoOp框架下,尽管视觉编码器φ和预训练的文本编码器θ均处于冻结状态,但不同于CLIP采用固定的提示方式,CoOp专注于推断适合特定任务需求的提示以增强其适用性和区分度。而KgCoOp进一步发展了这一理念,强调利用已有的广泛类别层面的文字资料作为基础来进行调整优化工作[^2]。 #### 文本知识嵌入的应用 为了提升这些可学习提示的表现——即它们既能广泛应用又能精准识别目标对象的能力——研究人员开发出了名为TKE的技术方案。这项技术能够把描述各类事物特征的信息转化为计算机易于处理的形式,并将其同之前已经过训练得到的结果结合起来,从而创造出既具有针对性又富含背景含义的新颖表达形式。实验结果显示这种做法确实有助于改善系统的性能表现[^3]。 ```python def text_knowledge_embedding(class_description, pretrained_class_token): """ Converts class-level textual embeddings into task-specific prompts using TKE. Args: class_description (str): Description of the class to be converted. pretrained_class_token (Tensor): Pretrained token associated with the class. Returns: Tensor: Task-specific prompt embedding. """ # Convert description to embedding class_embedding = convert_to_embedding(class_description) # Combine with pretrained token combined_embedding = combine_embeddings(pretrained_class_token, class_embedding) return combined_embedding ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值