摘要
随着预训练的视觉语言模型(如 CLIP)的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中,来调整预训练的视觉语言模型。具体来说,CoOp 将提示中的上下文转换为一组可学习的向量,并且只需少量带有标签的图像进行学习,就实现比手动修改提示更大的提升。
本文发现 CoOp 的一个关键问题:学习的上下文提示无法扩展到同一数据集中更广泛的未见的类,这表明 CoOp 在训练过程中对基础类别的数据产生了过拟合。
为了解决这个问题,本文提出了条件上下文优化(CoCoOp),它通过学习一个轻量级的神经网络来扩展CoOp,为每个图像生成一个输入条件token(vector)。
与 CoOp 的静态提示相比,本文的动态提示会适应每个实例,因此对类偏移的敏感度较低。大量实验表明,CoCoOp 比 CoOp 对不可见的类别的泛化效果要好得多,甚至显示出超越单个数据集的可转移性,并且还会产生更强的领域泛化性能。
Introduction
最近在大规模的视觉-语言预训练方面的研究在zero-shot图像识别方面取得了惊人的性能,证明了在这种范式下学习开放世界视觉概念的潜力。其中关键设计在于如何对视觉概念进行建模。在传统的监督学习中,标签是离散化的,每个类别都与一个随机初始化的权重向量相关联,该权重向量被学习来最小化相同类别的图像的距离。这种学习方法侧重于封闭集的视觉概念,将模型限制在预定义的类别列表中,当涉及到训练过程中不可见的新类别时是不可扩展的。
相比之下,对于CLIP 和ALIGN等视觉语言模型,分类权重由参数化的文本编码器(如Transformer)通过提示生成。例如,为了区分包含不同品种的狗和猫的宠物图像,可以采用类似"A photo of {class},a type of pet"这样的提示模板作为文本编码器的输入,因此,可以用真实的类别名称填充"{class}"标记来合成用于分类的类特定权重。与离散标签相比,视觉语言模型的监督来源来自自然语言,这使得开放集的视觉概念可以被广泛探索,并已被证明在学习可转移表示方面是有效的。
随着视觉语言模型的兴起,最近开始研究模型如何有效地适应下游数据集。为了适应网络规模的数据,例如CLIP使用的4亿对图像和文本,视觉语言模型被专门设计为具有超高容量,这意味着模型大小是巨大的,通常具有数亿个参数甚至数十亿个参数。因此,对整个模型进行微调,正如深度学习研究中经常采用的那样,是不切实际的,甚至可能损害学习良好的表征空间。
一种更全面的方法是添加一些对任务有意义的上下文来调整提示,例如上述宠物数据集的"a type of pet ",这已被证明可以提高性能。然而,提示工程非常耗时且效率低下,因为它必须基于反复试验,并且也不能保证最佳提示。为了自动化提示工程,周等最近探索了提示学习的概念,用于调整预训练的视觉语言模型。其方法是上下文优化(CoOp),利用神经网络的可微性,将提示中的文本单词转化为一组可学习的向量。只用少数标记图像用于学习,CoOp 在广泛的图像识别数据集中比密集调整的手动提示取得了巨大的改进。
本文发现 CoOp 的问题:可学习的上下文向量无法泛化到同一任务中不可见的类别。解释图1:CoOp 学习的上下文提示在区分"到达门"和"大教堂"等基类方面效果很好,但当它被迁移到新的类别(如"风电场"和"火车铁路")时,准确性会显著下降,即使任务的性质保持不变,比如识别场景变化。结果表明,学习到的上下文向量过拟合到基类,因此无法捕获对扩展场景识别至关重要的元素。本文认为该问题是由 CoOp 的静态设计引起的,一旦学习上下文就会固定,并且仅针对一组特定的(训练)类进行优化。相反,zero-shot方法采用的手动设计的提示具有相对的通用性。
为了解决泛化性弱问题,本文引入了一个新概念:条件提示学习。其关键思想是根据每个输入实例(图像)进行提示,而不是一旦学习后固定。为了使模型的参数效率高,本文引入了一种简单而有效的条件提示学习实现。具体来说,本文通过学习一个轻量级神经网络来扩展 CoOp,为每张图像生成一个输入条件token,该token与可学习的上下文向量相结合。本文方法称为条件上下文优化 (CoCoOp)。有趣的是,CoCoOp的范式类似于图像描述,这解释了实例条件提示更具有普遍性的原因:它们经过优化以表征每个实例(对类偏移更有鲁棒性),而不是仅服务于某些特定类。
本文在 11 个数据集上进行了全面的实验,其中涵盖了各种视觉识别任务。具体来说,本文设计了一个从基础类别到新类别的泛化设置,其中首先使用基类学习模型,然后在新类上进行测试。与zero-shot方法和CoOp相比,该方法取得了最佳的整体性能(表1)。重要的是,在不可见类中,CoCoOp 比 CoOp 有了显著的改进(图 3(a)),从而大大缩小了手动提示和可学习提示之间的差距。
在更具挑战性的场景中,为一个任务学习的上下文迁移到一个含有若干不同类别的任务中,CoCoOp仍然比CoOp更具优势(表2),这表明实例条件提示更具可迁移性,并且有潜力在更大规模上取得成功。CoCoOp 还获得了比 CoOp 更强的领域泛化性能(表 3),进一步证明了动态提示的优势。
Methodlogy
3.1. Reviews of CLIP and CoOp
Contrastive Language-Image Pre-training
CLIP已经很好地展示了学习开放集中视觉概念的潜力。CLIP 包含图像编码器和文本编码器。图像编码器可以是 ResNet或ViT,用于将图像转换为特征向量。文本编码器是一个Transformer,一系列单词嵌入作为输入,输出文本特征向量。
在训练过程中,CLIP 采用对比损失来学习两种模态的联合嵌入空间。具体来说,对于batch_size图像-文本对,CLIP 最小化每张图像与匹配文本的余弦相似度,同时最大化与所有其他不匹配文本的余弦相似度,并且每个文本的损失也以类似的方式计算。经过训练后,CLIP可用于zero-shot图像识别。x代表图像编码器生成的图像特征, 为文本编码器生成的一组权重向量,每个权重向量代表一个类别(假设总共有 K 个类别)。具体而言,每个 wi 都来自于一个提示,例如"A photo of {class}",其中"{class}"标记填充了第 i 个类名。预测概率为:
Context Optimization (CoOp)
CoOp旨在克服提示工程中的低效率问题,以便更好地将预训练的视觉语言模型适应下游任务。CoOp 的关键思想是使用可以从数据中端到端学习的连续向量对每个上下文token进行建模。具体来说,CoOp 没有使用"a photo of a"作为上下文向量,而是引入了 M 个可学习的上下文向量 {v1, v2, . . . , vM },每个向量都与单词嵌入具有相同的维度。第 i 个类的提示内容变为 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 个上下文向量要大得多。本文提出了一种在实践中非常有效的参数效率设计。解释图2:具体来说,在 M 上下文向量之上,本文进一步学习了一个轻量级神经网络,称为 Meta-Net,用于为每个输入生成一个条件token,然后将其与上下文向量相结合。
hθ(·)代表由θ参数化的Meta-Net,则当前的上下文提示为:
其中x表示图像的特征向量,π = hθ(x)为Meta-Net生成的实例条件,vm表示原本第m个(m ∈ {1, 2, ..., M })的可学习的上下文向量。因此文本提示成为:
预测概率:
在训练过程中,本文更新上下文向量 以及 Meta-Net 的参数 θ。在这项工作中,Meta-Net采用两层瓶颈结构构建,其中隐藏层将输入维度降低了16×。Meta-Net 的输入只是图像编码器的输出特征。
Limitations
第一个限制是关于训练效率:CoCoOp 的训练速度很慢,如果将批处理大小设置为大于 1,则会消耗大量 GPU 内存。这是因为 CoCoOp 基于实例条件设计,该设计要求每个图像通过文本编码器独立转发特定于实例的提示(每张图像都会前向传递自己的实例提示)。这与 CoOp 的效率要低得多,CoOp 只需要通过文本编码器对任何大小的整个小批量进行一次前向传递提示。
第二个限制是,在 11 个数据集中的 7 个数据集(见表 1)中,CoCoOp 在不可见类别的表现仍然落后于 CLIP,这表明需要付出更多努力才能完全缩小或推翻手动提示和可学习提示之间的差距。
Discussion and Conclusion
本文解决了大型预训练人工智能模型的可用性的一个重要问题,即如何使它们适应下游应用。这些模型,也称为基础模型,在视觉和NLP领域中都受到了学术界和工业界越来越多的关注,因为它们在处理各种下游任务的能力方面非常强大。但是,基础模型在数据规模和计算资源方面进行预训练的成本很高,并且通常包含大量的参数,以便开发足够的能力。例如,我们实验中使用的基于ViT-B/16的CLIP模型具有高达150M的参数大小。这些因素共同凸显了研究有效的适应方法以实现基础模型民主化的必要性。
本文遵循参数高效提示学习的路线,为静态提示的泛化性问题提供了解决方法,更重要的是,表明基于条件提示学习的简单设计在各种问题场景中都表现出色,包括从基础类别到新类别的泛化、跨数据集提示迁移和领域泛化。