视觉语言模型的条件提示学习
Nanyang Technological University,南洋理工大学
摘要:随着CLIP等功能强大的预训练视觉语言模型的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近提出的上下文优化(Context Optimization,CoOp)方法将提示学习的概念引入视觉领域,以适应预先训练好的视觉语言模型。具体来说,CoOp将提示中的上下文单词转换为一组可学习的向量,并且只需少量标记图像即可进行学习,与经过密集调整的手动提示相比,可以实现巨大的改进。在我们的研究中,我们发现了CoOp的一个关键问题:在同一个数据集中,学习的上下文不能推广到更广泛的看不见的类,这表明CoOp在训练期间对观察到的基础类过拟合。为了解决这个问题,我们提出了条件上下文优化(CoCoOp),它通过进一步学习一个轻量级神经网络来扩展CoOp,为每个图像生成一个输入条件标记token(向量)。与CoOp的静态提示相比,我们的动态提示适应每个实例,因此对类迁移不太敏感。大量的实验表明,CoCoOp比CoOp更能泛化到不可见的类,甚至显示出超越单个数据集的良好可移植性;并且产生更强的领域泛化性能。
Code https://github.com/KaiyangZhou/CoOp
最近在大规模视觉语言预训练方面的研究在零样本图像识别方面取得了惊人的成绩,证明了在这种范式下学习open-set视觉概念的潜力。设计的关键在于如何对视觉概念进行建模。在传统的有监督学习中,标签是离散的,每个类别都与一个随机初始化的权重向量相关联,该权重向量被学习以最小化与包含相同类别的图像的距离。这样的方法侧重于封闭集的视觉概念,将模型限制在预定义的类别列表中,当涉及到训练期间看不到的新类别时,该方法是不可伸缩的。
相比之下,对于CLIP[40]和ALIGN[24]等视觉语言模型,分类权重是由参数化文本编码器(例如transformer[48])通过提示(prompt)[34]直接生成的。例如,为了区分包含不同种类狗和猫的宠物图像,可以采用提示模板,例如“a photo of a {class}, a type of pet”作为文本编码器的输入,因此,可以通过用真实的类名填充“{class}”标记来synthesized分类的特定于类的权重。与离散标签相比,视觉语言模型的监督来源于自然语言,这使得开放集视觉概念得以广泛探索,并已被证明在学习可迁移表征方面是有效的[24,40]。
随着这种强大的视觉语言模型的兴起,社区最近开始研究潜在的解决方案,以有效地使这些模型适应下游数据集[14、53、56、62]。为了适应网络规模的数据,例如CLIP使用的4亿对图像和文本,视觉-语义模型被特意设计为具有高容量,这意味着模型的大小将是巨大的,通常具有数亿甚至数十亿个参数。因此,在深度学习研究[18]中经常采用的对整个模型进行微调是不切实际的,甚至可能会破坏良好学习的表征空间。
一种更安全的方法是通过添加一些对任务有意义的上下文来提示,比如上面提到的pet数据集的“a type of pet”,这在提高性能方面是有效的[40]。然而,提示工程是非常耗时和低效的,因为它必须基于试错,也不能保证最佳的prompt。为了使prompt工程自动化,Zhou等人[62]最近探索了提示prompt学习的概念—NLP[15、25、30、32、44、60]中的一个最新趋势——以适应预先训练的视觉语言模型。他们的方法——语境优化(Context Optimization,CoOp)将提示中的上下文转换为一组可学习的向量,利用神经网络的可微性。由于只需学习少量标记图像,CoOp在广泛的图像识别数据集上实现了比密集调整的手动提示更大的改进。
在我们的研究中,我们发现了CoOP的一个关键问题:在同一个任务中,所学的内容不能推广到更广泛的看不见的类。图1说明了这个问题:CoOp学习的上下文在区分基类方面效果很好,但当它被转移到新的(看不见的)类,准确度会显著下降,尽管任务的性质保持不变,即识别场景。结果表明,学习到的上下文对基类过拟合,因此无法捕获对更广泛的场景识别至关重要的更具普遍性的元素。我们认为,这样的问题是由CoOp的静态设计造成的:上下文在学习后是固定的,只针对一组特定的(训练)类别进行优化。相反零样本采用手动设计的提示相对来说是通用的。
图1.我们研究的动机:学习generalizable的提示。这些图像随机选自SUN397 [55],这是一个广泛使用的场景识别数据集。
为了解决弱generalizability问题,我们引入了一个新概念:条件提示学习。关键的想法是根据每个输入实例(图像)做出提示,而不是在学习后固定。为了提高模型参数的效率,我们引入了一种简单而有效的条件提示学习实现。具体来说,我们通过进一步学习一个轻量级神经网络来扩展CoOp,为每个图像生成一个输入条件标记token(向量),该标记token与可学习的上下文向量相结合。我们称我们的方法为条件上下文优化(CoCoOp)。图2显示了概述。有趣的是,CoCoOp的范例是类似图像字幕,这就解释了为什么Instance Condition提示更具普遍性:它们经过优化,以描述每个实例(对类转移更具鲁棒性),而不是仅用于某些特定类。
图2 我们的方法,条件上下文优化(CoCoOp),由两个可学习的组件组成:一组上下文向量和一个轻量级神经网络(Meta-Net ),它为每个图像生成一个输入条件token。
3.1. Reviews of CLIP and CoOp
Contrastive Language-Image Pre-training 众所周知,CLIP[41],已经很好地展示了学习开集视觉概念的潜力。CLIP是使用两个编码器构建的,一个用于图像,另一个用于文本,如图2所示。图像编码器可以是ResNet[18]或ViT,用于将图像转换为特征向量。文本编码器是一个transformer,它将单词token序列作为输入,并再次产生矢量化表示。
在训练过程中,CLIP采用对比损失来学习两种模态的联合嵌入空间。具体来说,对于小批量的图像-文本对,CLIP最大化每个图像与匹配文本的余弦相似性,同时最小化与所有其他不匹配文本的余弦相似性,并且也以类似的方式计算每个文本的损失。经过训练后,CLIP可以用于zero-shot图像识别。设x为图像编码器产生的图像特征,{wi}Ki=1为文本编码器产生的一组权向量,每个权向量代表一个类别(假设总共有K个类别)。具体来说,每个wi都是从一个提示中派生出来的,例如“一个{class}的图像”,其中“{class}”标记填充了第i个类名。那么预测概率是
其中sim(.)表示余弦相似度,τ是学习的温度参数。
Context Optimization (CoOp) 旨在克服prompt工程中的低效率问题,以便更好地将预先训练的视觉语言模型应用于下游应用[62]。CoOp中的关键思想是使用可以从数据中端到端学习的连续向量对每个上下文token进行建模。具体地说,CoOp引入了M个可学习的上下文向量{v1,v2,…,vm}而不是使用“a photo of a”作为上下文,每个都具有与单词嵌入相同的维度。第i个类的提示,用ti表示,现在变成ti = {v1,v2,…,vM,ci}其中ci是类名的单词嵌入。上下文向量在所有类之间共享。设g()表示文本编码器,则预测概率为
为了使CLIP适应下游图像识别数据集,交叉熵损失可以用作学习目标。因为文本编码器g()是可微分的,梯度可以一路传播回来以更新上下文向量。注意CLIP的基础模型在整个训练过程中是冻结的(我们也是)。
3.2. CoCoOp: Conditional Context Optimization
CoOp是一种数据高效的方法,允许仅用下游数据集中的一些标记图像来训练上下文向量。然而,正如所讨论的那样,CoOp不能推广到同一任务中更广泛的不可见类。我们认为,实例条件上下文可以更好地概括,因为它将焦点从一组特定的类转移到每个输入实例,从而转移到整个任务,以减少过度拟合。
实现CoCoOp的一个直接方法是构建M个神经网络来获得M个上下文token。然而,这样的设计将需要M×神经网络,这比在CoOp中具有M个上下文向量大得多。这里我们提出一个参数有效的设计,在实践中效果很好。具体来说,在M个上下文向量之上,我们进一步学习一个轻量级的神经网络,称为元网络,为每个输入生成一个条件token(向量),然后将其与上下文向量相结合。
设hθ(.)表示由θ参数化的元网络,每个上下文token现在由vm(x) = vm +π得到,其中π = hθ(x)和m ∈ {1,2,…,M}。因此,第i类的提示取决于输入,即ti(x) = {v1(x),v2(x),…,vM(x),ci}。预测概率计算如下
在训练期间,我们更新上下文向量{vm}Mm=1以及元网络的参数θ。在这项工作中,元网络采用两层瓶颈结构(Linear-ReLU-Linear)构建,隐藏层将输入维数降低了16倍。元网络的输入仅仅是图像编码器产生的输出特征。我们将探索更先进的设计留给未来的工作。
4. Experiments
讨论和结论
我们的研究解决了一个重要问题,即如何使大型预训练人工智能模型适应下游应用。这些模型,也称为基础模型[1],在视觉和NLP社区中得到了学术界和工业界越来越多的关注,因为它们在各种下游任务的能力方面非常强大。然而,就数据规模和计算资源而言,基础模型的预训练成本很高;并且通常包含大量的参数。例如,我们实验中使用的基于ViT-B/16的模型[40]具有高达150M的参数大小。这些因素共同强调了研究有效的适应方法以使基础模型的必要性。
我们的研究遵循了参数高效提示学习[62]的路线,为静态提示的泛化问题提供了及时的见解,更重要的是,证明了基于条件提示学习的简单设计在各种问题场景中表现出色,包括从基础到新类的泛化、跨数据集提示转移和领域泛化。
就未来的工作而言,一个方向是进一步开发条件提示学习,潜在地实现更有效的加速训练,以及增强推广能力。跨数据集迁移实验表明,与静态提示相比,实例条件提示在不同性质的任务之间更容易迁移。因此,看看这样的想法是否可以扩展到例如元网络的更大模型尺寸、更大规模的训练图像、甚至与不同数据集混合的异构训练数据,将是有趣的。