VPT的核心思想是,在适配下游任务时,我们应当冻结 (freeze) 强大的预训练模型本身,只通过训练一小组额外添加的、轻量级的提示 (Prompts) 来引导模型的行为。
这很容易理解,想想GPT:为什么一个Transformer Decoder能做这么多事?就是因为对于不同的任务,我们会喂给模型不同的prompt麻。
前置知识(prompt tuning)
这里说一下prompt tuning。
研究者发现,人想出来的文字指令不一定是最高效的。于是,一个聪明的想法诞生了:
我们不再手动设计文字,而是创建几个可学习的虚拟指令 (learnable vectors)。我们冻结大模型,只训练这几个"虚拟指令",让机器自己学会针对特定任务的、最高效的"暗号"。
VPT就是将这个思想完美地迁移到了视觉领域。它解决了核心问题:对于一个看图的模型,它的"暗号"应该是什么?答案就是可学习的提示向量 (Prompt Tokens)。
VPT的核心方法
-
首先,准备一个强大的、已预训练好的Vision Transformer (ViT) 模型,并冻结其所有参数。这意味着ViT本身庞大的知识库在整个微调过程中保持不变。
-
创建一小组(例如 k=10k=10k=10 个)全新的、可学习的向量,称为提示向量(Prompt Tokens)。
-
在处理一张图片时,ViT会先将其切分为一系列图像块向量 (patch tokens)。我们将上一步创建的"提示向量"插入到这串图像块向量序列的最前面。
-
在训练时,只有这些新插入的"提示向量"和任务所需的分类头 (classification head) 会被更新。整个ViT主干网络(上亿参数)不参与梯度更新。
-
训练的目标是,让这些最初随机的"提示向量"学会充当一个任务指令。例如,在飞机型号识别任务中,这些提示会通过学习,演变成一种能引导ViT模型将注意力高度集中于区分不同飞机(如波音系列)细微特征的"控制信号"。