一致性引导的视觉语言模型提示学习
Shuvendu Roy, Ali Etemad
加拿大女王大学
摘要
我们提出了一种新的视觉语言模型微调方法------一致性引导的提示学习(CoPrompt)。我们的方法旨在提高大型基础模型在小样本设置下对下游任务进行微调时的泛化能力。CoPrompt的核心思想是在可训练模型与预训练模型的预测之间施加一致性约束,以防止对下游任务的过拟合。此外,我们在一致性约束中引入了以下两个组件以进一步提升性能:对两个扰动输入强制一致性,以及结合提示学习和适配器这两种主流的微调范式。对扰动输入施加一致性约束可以进一步正则化一致性约束,从而提升泛化能力。同时,结合适配器和提示学习不仅增强了模型在下游任务上的性能,还提供了在输入和输出空间上更大的调优灵活性。这有助于在小样本学习场景下更有效地适应下游任务。实验表明,CoPrompt在一系列评估套件上均优于现有方法,这些套件包括基准到新类别的泛化、领域泛化和跨数据集评估。在泛化能力上,CoPrompt在零样本任务上刷新了最先进水平,并在11个数据集上的整体调和平均(Harmonic Mean)取得了提升。详细的消融研究显示了CoPrompt中每个组件的有效性。我们的代码公开在 https://github.com/ShuvenduRoy/CoPrompt。
1 引言
在大规模图文对数据集上训练的视觉语言基础模型(例如CLIP)已展现出卓越的泛化能力。然而,这些模型的庞大规模使得在对下游任务进行微调时,尤其是在小规模下游任务(如小样本学习)中保持其泛化能力方面面临挑战。为了克服这一挑战,人们提出了各种方法,通过添加和调整额外参数(如提示学习或适配器)来微调这些大型基础模型,同时保持预训练权重冻结。基于提示的方法在输入空间(如图像、文本嵌入或两者)引入额外的可调权重,而基于适配器的方法则在网络内部(通常在预测头附近)添加可学习权重。
尽管小样本微调取得了这些进展,保持预训练模型的泛化能力仍然是一个挑战,更不用说提升它了。事实上,小样本性能的提升往往会导致零样本能力的下降。这主要是由于小样本微调期间新引入的参数严重过拟合,导致与基础模型原始行为的显著偏离。
在这项工作中,我们提出了一致性引导的提示学习(CoPrompt),这是一种新的视觉语言模型微调方法。它通过学习新任务时防止可训练模型的嵌入偏离预训练模型的嵌入太远,从而减少了过拟合问题并提高了泛化能力。具体来说,我们在可训练模型与预训练模型之间的语言和图像分支上强制执行一致性约束。与自监督学习中通过扰动输入训练两个可学习编码器的一致性正则化不同,我们的方法侧重于保持一个可学习编码器与一个预训练编码器之间的一致性。这种方法有效地实现了从冻结编码器到可学习编码器的知识蒸馏,从而在处理小样本场景下的新任务时保持了预训练基础模型的泛化优势。
此外,我们引入了两个额外的组件来改进所提出的一致性约束。首先 ,我们对两个扰动输入(而非同一输入)强制施加一致性,以进一步正则化一致性约束,有效提高泛化能力。在"文本"分支上,我们使用预训练的大语言模型GPT,从通用格式(如"一张'类别'的照片")的输入提示文本中生成更详细和更具描述性的句子。然后,我们在这两个句子的表示上强制要求可学习文本编码器与预训练文本编码器之间的一致性。在图像分支上,我们对输入图像应用数据增强以生成两个扰动图像。其次,我们整合了两种主流的调优范式,即提示学习和适配器。这种整合在输入和输出空间上都提供了增强的调优灵活性,有助于在小样本设置下更有效地学习新任务。虽然适配器和提示的基本概念已在文献中探讨,但先前的工作由于额外可学习参数容易导致模型过拟合并丧失泛化能力,未能成功地将它们结合起来以获得更好的性能。通过整合提示和适配器方法,并应用一致性约束,我们可以优化额外参数以增强新任务的性能,同时一致性约束有助于保持或潜在地提高模型在零样本学习场景下的能力。
在三种常见评估设置(包括基准到新类别泛化、领域泛化和跨数据集评估)上进行的大量实验证明了CoPrompt的强大性能。在基准到新类别泛化任务中,CoPrompt在11个基准数据集上优于现有方法,在新类别上实现了1.13%的提升,调和平均比之前的SOTA提高了0.51%。重要的是,我们的改进并非以牺牲基准类别的性能为代价,基准类别也表现出稳健的性能。此外,CoPrompt在跨数据集评估上相较于现有方法取得了显著提升。广泛的消融研究证实了所提出方法中每个组件的重要性。
总之,本文的贡献如下:
- 我们提出了一种用于大型基础模型的一致性强制微调方法,该方法能够从少量样本中学习新任务,同时不失去零样本泛化能力。
- 我们的方法结合了预训练LLM的知识,在文本分支上施加一致性约束,在图像分支上应用数据增强,以进一步提高泛化能力。
- 我们的方法将提示学习和适配器这两种强大的基础模型调优范式结合到一个统一的框架中,以提高新任务的性能。
- 我们在一系列评估套件上建立了新的最先进水平,包括基准到新类别泛化和跨数据集识别。
2 相关工作
视觉语言模型的最新发展在各种视觉任务中表现出令人印象深刻的性能。然而,这些模型的巨大规模使得在微调时保持其泛化能力成为挑战。将预训练模型用于下游任务的两种常用方法是完全微调和线性探测。然而,这两种方法对于基础模型来说效果都不理想。完全微调会导致泛化能力丧失,而线性探测通常在下游任务上表现不佳。因此,许多最近的研究专注于在不改变预训练权重的情况下使大型基础模型适应下游任务。这一方向的现有工作可分为两大类:提示学习和适配器。
提示通常是以文本形式的指令,用于指导下游任务。它们可以针对特定任务手动设计,也可以自动学习。后一种方法称为提示调优。在这方面,CoOp在文本分支的输入中引入了一组连续的上下文向量,并与最终损失一起优化。然而,这种方法在未见类别上表现出较差的性能,表明在零样本任务上泛化能力不足。CoCoOp通过明确地以图像输入为条件,改进了CoOp的零样本性能。ProGrad只在与原始提示知识梯度方向一致的提示部分进行更新。贝叶斯提示学习从贝叶斯角度处理任务,将其表述为变分推理问题。ProDA提出了一种数据驱动的方法,从少量下游样本中学习软提示,以比手动设计更少偏差的方式发现与任务相关的内容。提示也被用于密集预测任务。虽然早期的提示工作仅在文本输入中添加提示,但最近的一些工作也探索了在图像输入上添加提示。后来,MaPLe采用了一种多模态方法,在图像和文本输入上都使用提示。这种方法明确确保了文本和图像提示之间的相互协同作用,以阻止从单模态特征中学习。最后,PromptSRC在图像和文本输入上都引入了提示,但与MaPLe不同,它为文本和图像训练独立的可学习提示。此外,PromptSRC引入了一种自调节概念来学习更多与任务无关的知识,从而确保了更好的泛化。
另一种调优基础模型的方法是适配器。这种方法将可学习参数引入预训练模型的一个或多个层中以转换特征。适配器通常添加在网络的上层,可以看作是对预训练模型的可学习转换模块。适配器也在纯视觉模型中进行了研究,包括密集预测任务。在我们的工作中,我们将提示学习和适配器结合到一个统一的框架中,以增强下游性能。额外的可调参数允许更好地适应下游任务,而一致性约束则避免了过拟合并确保了更好的泛化。
3 方法
在本节中,我们将详细介绍所提出的CoPrompt方法。首先,我们讨论方法所需的关于视觉语言模型和提示学习的预备知识,然后介绍CoPrompt方法的具体细节。
3.1 预备知识
在我们的方法中,我们采用CLIP作为预训练的视觉语言基础模型。CLIP由一个基于Transformer的图像编码器θ和一个基于Transformer的文本编码器φ组成。CLIP通过冻结预训练编码器并搜索输入图像的嵌入与所有类名的手工文本提示的嵌入之间的最高相似度来执行零样本预测。CLIP遵循"一张[类别]的照片"这个模板生成手工文本提示。设C为类别数量,所有类名的文本嵌入可以表示为 W = {w_k},其中 w_k = φ('一张[类别]_k的照片')。对于输入图像x,图像编码器提取图像嵌入为 z = θ(x)。最后,CLIP进行零样本预测。
尽管CLIP显示出强大的零样本性能,但要使其在新的下游任务上表现良好,还需要进一步调优。此外,手工模板方法在不同领域上并不能普遍表现良好。为此,CoOp提出了一种解决方案,用一组可学习的连续上下文向量替换手工提示,这些向量生成特定于任务的文本嵌入。具体来说,CoOp用m个与CLIP词嵌入维度相同的可学习提示向量{u_k}替换了固定句子"一张[类别]的照片"。这些向量与类别名称c_k的词嵌入连接,得到 t_k = {u_1, u_2, ...u_m, c_k}。在多模态提示方法中,输入图像首先被投影到图像块嵌入{p_1, p_2, ...p_d},然后连接可学习的上下文向量,得到 i = {v_1, v_2, ...v_m, p_1, p_2, ...p_d},其中d是图像块的数量。因此,带有可学习提示的CLIP的修改后的预测目标可以表示为。
在这项工作中,我们建立在MaPLe的多模态提示概念之上,它利用一个耦合函数F,使图像提示以相应的文本提示为条件。现有微调方法的一个主要局限性是,当为特定下游任务微调新的可学习参数时,零样本泛化能力会受到严重阻碍,这是由于对下游数据集的过拟合造成的。在下一节中,我们将介绍CoPrompt,这是一种解决此问题并增强下游任务和零样本预测性能的新方法。
3.2 CoPrompt:一致性引导的提示学习
CoPrompt通过实施一致性约束来解决因对下游任务过拟合而导致的泛化能力下降问题,该约束确保可训练模型(图像和文本分支中的可调提示参数)产生的文本和图像嵌入与预训练CLIP生成的嵌入没有显著差异。为了在一致性约束中进一步施加正则化,我们对可训练模型和预训练模型的输入使用扰动。在语言分支上,使用预训练的LLM从模板文本输入生成更具描述性的句子,而在图像分支上,我们使用数据增强。此外,CoPrompt通过在图像和文本分支上添加适配器来包含额外的可训练参数,以增强新下游任务的性能。
虽然CoPrompt的一致性约束在概念上类似于PromptSRC的调节概念,但CoPrompt在一致性约束的标准、可学习参数的类型和实现细节方面有所不同。具体来说,PromptSRC中唯一的训练参数是独立的提示,而CoPrompt则同时调优多模态提示和适配器。在语言分支中,PromptSRC使用手工制作的提示,而CoPrompt利用LLM生成更具描述性的提示。与PromptSRC不同,CoPrompt使用余弦损失作为一致性约束,捕捉向量之间的角度相似性,而不是仅仅依赖它们的幅度。CoPrompt的概述如图2所示。下面将更详细地讨论所提出的CoPrompt的一致性约束、输入扰动和适配器。
一致性约束。我们使用余弦距离作为预训练编码器和可学习编码器嵌入之间的一致性约束。然而,其他类似的准则,如欧氏距离,也可以用作约束。我们通过经验观察到,余弦距离能产生最佳性能,因为它捕捉向量之间的角度相似性,而不是仅仅依赖它们的幅度。此约束应用于图像和文本分支。
输入扰动。给定模板文本"一张[类别]的照片",我们使用预训练的LLM(GPT)生成更具描述性的句子。为此,我们遵循KgCoOp的训练设置。但与KgCoOp不同,我们动态生成单个句子,而不是生成预定数量的句子并平均它们的嵌入。在图像分支上,我们使用一个增强模块δ来生成扰动图像。现在我们强制要求扰动输入到预训练模型和可学习模型的嵌入之间的一致性。
适配器。我们引入更多可训练参数以更好地适应新任务。然而,文献一致表明,添加过多的可调参数并不能提高性能,反而可能损害零样本性能。例如,MaPLe在仅向CLIP骨干的12层中的9层添加可学习参数时取得了最佳性能。进一步添加会导致性能下降。类似地,在基于适配器的方法(如CLIP-Adapter)中,仅在文本分支添加适配器时观察到最佳性能。在两个分支都添加提示会导致过拟合和随后的性能下降。
在这项工作中,我们整合了适配器和提示以增强学习能力。这种整合在输入和输出空间上都提供了增强的调优灵活性。适配器是添加在编码器顶部的可训练参数,用于转换嵌入向量。我们定义适配器为两个线性层,中间带有非线性激活。但与CLIP-Adapter不同,我们不将适配器限制在仅文本分支,而是在两个分支上都使用它。设φa为文本适配器,以文本嵌入w_k作为输入并将其转换为φa(w_k)。类似地,θ^a是图像适配器。将其纳入我们提出的一致性约束中,所提出的一致性约束损失可以表示为。
最终损失。所提出的一致性约束损失与监督损失结合形成最终损失。监督损失表示为。将两个损失与平衡因子λ相加,我们得到CoPrompt的最终损失函数。
4 实验
4.1 实验设置
为了评估所提出的方法,我们遵循CoOp及后续工作(如CoCoOp和MaPLe)中建立的实验设置和协议。我们在补充材料A.1节中描述了数据集、训练细节和评估协议。
4.2 基准到新类别的泛化
在本节中,我们展示了我们提出的方法在基准到新类别泛化任务上的结果。表1详细比较了我们的方法与CLIP、CoOp、CoCoOp、ProGrad、KgCoOp、MaPLe和PromptSRC。我们从所有数据集的平均结果(表1a)中看到,CoPrompt在新类别和基准类别的调和平均值上优于所有现有方法。我们的方法展示了强大的零样本泛化能力,在新类别上比MaPLe提高了2.09%,比PromptSRC提高了1.13%。除了MaPLe和PromptSRC之外,没有现有方法优于未经微调的预训练CLIP,这表明在小样本设置下学习新任务的同时保持零样本性能是困难的。除了在零样本性能上的大幅提升外,CoPrompt在基准类别上也表现出强大的小样本性能。这证实了零样本性能的提升并非以牺牲小样本性能为代价,反之亦然。在调和平均值上,CoPrompt比MaPLe提高了1.93%,比PromptSRC提高了0.51%。观察单个数据集的HM,我们发现CoPrompt在11个数据集中的8个上优于所有现有方法。
4.3 跨数据集评估
在表2中,我们展示了跨数据集评估的结果。在这里,模型在源数据集(ImageNet)上进行微调,并以零样本方式在目标数据集上进行评估。正如我们所看到的,CoPrompt在10个数据集中的8个上显示出改进。总体而言,CoPromt提供了67.0%的平均准确率,比MaPLe高0.70%,比PromptSRC高1.29%。虽然PromptSRC在基准到新类别泛化任务中显示出有竞争力的性能,但其在跨数据集评估中的性能明显低于CoPrompt。
4.4 领域泛化
我们在表3中展示了领域泛化的结果。这里,使用原始ImageNet数据集作为源数据集对模型进行微调。然后在来自不同分布的四个其他ImageNet变体上测试模型。在此评估中,CoPrompt表现出与现有方法相当的性能,仅比贝叶斯提示和PromptSRC分别低0.02%和0.23%。
4.5 消融研究
主要消融实验。在本节中,我们通过移除所提出方法的不同组件来展示消融研究,以了解每个组件的重要性。我们在表4中展示了这些实验的结果,其中"Cons."、"In. Pert."和"Adp."分别代表一致性约束、输入扰动和适配器。作为参考,在表的第一行,我们展示了CoPrompt的最终性能,其调和平均值为80.48%。在第一个消融实验中,我们从CoPrompt中移除适配器,导致准确率为80.02%(性能下降0.46%)。这突显了适配器在CoPrompt中的重要性。接下来,我们移除输入扰动,有效地为相同图像和文本输入强制执行可训练编码器和预训练编码器之间的一致性。这导致准确率为79.56%,性能下降0.92%,表明输入扰动在CoPrompt中具有高度重要性。最后,虽然我们有兴趣了解一致性约束的重要性,但我们不能仅移除这个组件,因为输入扰动也是它的一部分。因此,为了理解这个组件的影响,我们进行了两项独立的研究。首先,我们同时移除输入扰动和适配器,这导致平均准确率为79.50%。这表明,仅使用一致性约束就比移除所有三个组件(如表最后一行所示)提高了0.95%。在第二项研究中,我们移除一致性约束以及输入扰动,实际上是在不强制执行一致性的情况下训练适配器和提示。令人惊讶的是,这导致准确率为78.45%,甚至低于移除所有三个组件时的情况。这是因为适配器引入了新的训练参数,当不强制执行一致性约束时,会导致可训练模型对小样本训练样本过拟合。这也导致了最低的零样本准确率(74.31%)。这两项实验清楚地表明了CoPrompt中一致性约束的重要性。
一致性约束分析。在这里,我们对CoPrompt中一致性约束的关键方面进行分析。虽然一致性约束应用于图像和文本两种模态,但我们重点了解一致性约束对图像和文本模态各自的影响。将一致性应用于单个模态的结果如表5a所示。研究结果表明,对文本表示强制施加一致性比对图像表示具有更重要的意义。具体来说,仅使用文本约束会导致性能下降0.46%,而仅使用图像约束会导致性能下降0.89%。当对两种模态都强制执行一致性时,达到了最高性能。接下来,我们研究不同一致性准则的影响。表5b比较了使用余弦距离、均方误差和L1作为一致性约束时的性能。结果表明,余弦距离作为一致性损失表现最佳,而L1表现出非常相似的性能。然而,使用均方误差会导致性能下降。
输入扰动分析。在本节中,我们探讨了不同输入扰动对最终模型性能的影响。表5c展示了使用相同文本作为输入与使用LLM(GPT-2或GPT-3)生成的更具描述性的文本作为输入的对比结果。研究结果表明,当对可学习文本编码器和冻结文本编码器使用相同的输入时,性能下降了0.39%(与GPT-3生成的文本相比)。这强调了利用LLM生成更具描述性的文本以强制执行一致性的重要性。然而,GPT-2和GPT-3的性能相对相似,表明LLM的选择没有太大影响。尽管各种LLM专门用于生成关于复杂主题的连贯且有意义的句子,但我们的重点是生成单个句子来描述类别名称。在这种特定背景下,不同LLM之间的选择不会产生实质性差异。类似地,我们对图像输入进行了研究,如表5d所示。我们比较了使用相同图像、简单增强图像和困难增强图像作为输入时的结果。与文本分析中的观察结果一致,使用相同的图像输入显示出性能下降,因为它未能为学习提供足够有区分度的信号。相反,我们期望困难增强能产生最佳的有区分度的特征用于学习,从而获得最高的准确率。然而,结果表明,简单增强(随机调整大小裁剪、水平翻转)优于困难增强(RandAug)。我们认为使用困难增强会导致图像嵌入显著偏离,使其偏离相应的文本嵌入。因此,这导致性能下降。
适配器分析。最后,我们深入研究了与适配器设计相关的几个重要因素。首先,我们展示了在不同模态上加入适配器的结果,如表5e所示。与之前的发现一致,我们观察到在文本分支上添加适配器比在图像分支上带来更多好处。然而,与Gao等人的发现相反,我们没有观察到在两种模态上都使用适配器会导致性能下降。事实上,当在图像和文本分支上都使用适配器时,达到了最高的准确率。这强调了一点:虽然朴素的小样本调优不会从在两个分支上都使用适配器中受益,但所提出的一致性引导调优方法有助于通过两种模态上更多的可调参数进行学习。
我们还探讨了适配器设计中使用的线性层数的影响。我们评估了三种不同的配置:单层适配器、Gao等人提出的2层适配器和3层适配器。结果如表5f所示。研究结果表明,2层适配器略微优于单层设计。这表明,增加一个额外的层允许捕获更复杂的关系,并在一定程度上提高性能。然而,使用3层适配器会表现出显著的性能下降。我们认为这是因为在适配器中添加过多的线性层会引入过多的参数,这可能在小样本设置中有限的训练样本上重新引入过拟合问题。
敏感性研究。在本节中,我们展示了所提出方法对其一些关键参数的敏感性分析。首先,我们研究一致性约束损失的权重因子(λ)的影响。从表6中,我们观察到较高的λ值会导致更好的准确率,这表明一致性约束具有高度重要性。具体来说,我们在11个数据集中的6个上,对于λ = 8获得了最佳准确率,并且在剩余的数据集上接近最佳准确率(EuroSAT数据集除外)。诸如数据分布及其与CLIP预训练数据集的相似性等因素会影响λ的值,导致不同数据集有不同的最优值。当λ > 8时,性能不再提高。
接下来,我们探讨CoPrompt的性能如何随不同的提示层数变化,结果如表7a所示。虽然之前的工作(如MaPLe)显示使用9个提示层时效果最佳,但我们观察到在编码器的所有12层上都添加提示能获得最高的准确率。CoPrompt中引入的一致性约束使我们能够训练更多参数而不会过拟合。表7b展示了不同训练轮数下的结果。我们发现最佳性能在8轮时达到。
4.6 参数与计算复杂度
遵循文献中的标准实践,我们使用CLIP的ViT-B/16骨干,它有149.62M参数(表8)。MaPLe引入了额外的3.55M可学习参数,总参数达到153.17M。CoPrompt的提示模块包含4.74M参数,适配器模块仅包含0.26M参数。因此,CoPrompt总共有154.62M参数,仅比之前的SOTA MaPLe增加了不到1%的参数,比CLIP增加了3.34%的参数。
在训练方面,CoPrompt的FLOPs(生成预训练模型预测所需)约为MaPLe的2倍,并且比MaPLe多花费约25%的训练时间(在单个Nvidia V100 GPU上)。例如,在Flower102数据集上训练一个轮次需要2分9秒,而在单个GPU上训练MaPLe需要1分43秒。然而,推理时间和FLOPs几乎与MaPLe相同。为了与MaPLe进行公平比较,我们进行了另一项实验,通过减少训练轮数,以与MaPLe相同的计算预算训练CoPrompt。在此配置下,CoPrompt实现了80.01%的准确率,这仍然比MaPLe提高了1.46%。
5 结论
我们提出了一种新的大型视觉语言基础模型调优方法,该方法提高了其在下游任务中的性能,同时也改善了零样本泛化能力。CoPrompt是一种精心设计的方法,具有三个重要组件,可以减少微调过程中的过拟合问题。通过对三个不同任务进行广泛评估,CoPrompt展示了其在小样本学习、零样本学习、跨数据集和领域泛化任务中的有效性,显著超越了现有的最先进水平。此外,该研究包括广泛的消融分析,以确认每个提议组件的有效性并探索可行的替代方案。我们相信,我们的一致性引导调优方法将对调优视觉和视觉语言模型以适应各种应用产生实质性影响。