RPO: Read-only Prompt Optimization for Vision-Language Few-shot Learning

news/2024/12/12 14:15:52/

文章汇总

想解决的问题

对CoOp的改进CoCoOp尽管提升了性能,但却增加了方差(模型的准确率波动性较大)。

模型的框架

一眼看去,跟maple很像(maple跟这篇文章都是2023年发表的),但maple的视觉提示是由文本提示经过全连接转换而来的,而这里是文本提示和视觉提示是独立的。另外maple中的前J层的视觉/文本提示都是学习完之后就丢掉了。

文章的创新点

提示的初始化

其中 { p i v } i = 1 K ∈ R K × d v , { p i t } i = 1 K ∈ R K × d t \{p_i^v\}^K_{i=1} \in R^{K\times d_v},\{p_i^t\}^K_{i=1} \in R^{K\times d_t} {piv}i=1KRK×dv,{pit}i=1KRK×dt表示只读视觉提示和文本提示的集合, σ 2 \sigma^2 σ2为初始化方差。本文将 σ \sigma σ设为0.1。这对 K K K提示的初始化略有不同,以便可学习提示避免常量初始化。

这里的亮点在于视觉提示的均值使用了[CLS] x ( 0 ) x^{(0)} x(0),文本提示的均值使用了[EOS]$ y^{(0)} $。

带掩码的注意力

Transformer编码器中的屏蔽注意操作可表述如下。

亮点在于:

1.屏蔽了文本/视觉特征参考提示做的注意力,即此时文本/视觉特征为 q q q,prompt作 k k k

2.文本特征的注意力跟transformer那样,一个单词的注意力只和其前面的单词计算。

摘要

近年来,提示调优已被证明在使预训练的视觉语言模型适应下游任务方面是有效的。这些方法旨在通过引入可学习的提示来适应预训练的模型,同时保持预训练的权重不变。然而,可学习提示会影响自注意模块的内部表示,这可能会对性能差异和泛化产生负面影响,特别是在数据不足的设置中。为了解决这些问题,我们提出了一种新的方法,只读提示优化(RPO)。RPO利用隐藏注意力来防止预训练模型中的内部表示转移。此外,为了便于优化RPO,根据预训练模型的特殊令牌初始化只读提示。我们的大量实验表明,RPO在基到新泛化和域泛化方面优于CLIP和CoCoOp,同时表现出更好的鲁棒性。此外,该方法在数据极度缺乏的情况下也能实现更好的泛化,同时提高了参数效率和计算开销。代码可从https://github.com/mlvlab/RPO获得。

1. 介绍

CLIP[6]、ALIGN[24]、FILIP[50]等视觉语言模型在各种视觉语言任务中都取得了优异的表现。由于视觉语言模型是由基于对比学习目标的自然语言监督的,通过将类名放在文本模板中(例如,“A photo of a [CLASS]”),视觉语言模型可以在开放词汇设置中有效地对图像进行分类[6]。

最近的研究探索了这些视觉语言模型在下游任务中的适应性[19]。然而,与小型预训练模型不同,大规模架构(例如CLIP)很难微调,因为它效率低下,资源密集,并且可能会破坏预训练期间学习到的良好表示。在CLIP中,进行提示工程以向下游任务提供特定领域的上下文(例如,“A photo of a [CLASS], a type of car”)[6]。但是,这意味着必须根据试验和错误手动选择提示符。

为了缓解这个问题,上下文优化(CoOp)[33]建议在CLIP上自动化提示工程,用可学习的向量替换基于自然语言的提示中的上下文词。条件上下文优化(Conditional Context Optimization, CoCoOp)[31]用一个额外的神经网络生成的图像条件提示扩展了CoOp,以提高泛化。

图2:模型适应和RPO方法的说明。(a)如⇔所表示的,令牌特征和提示特征在传统的提示调整方法中可以相互看到。虽然模型的权重已经被冻结,但通过自注意机制引入的可学习提示,预训练CLIP的内部表征越来越多地发生变化。(b)在线性探测中,内部表示和预训练参数被冻结。模型顶部的线性层被训练用于模型自适应。©如⇒所示,在我们的方法RPO中,只有提示符可以读取令牌特征,而不是其他方式。这使令牌特性保持冻结状态,不受引入的提示的影响,而我们的只读提示只从令牌特性读取有用的信息

虽然现有的这些方法是为了避免在提示学习过程中对预训练模型的学习参数产生不利影响而提出的,但它们仍然通过注意机制影响模型的隐藏表征,我们称之为内部表征转移。我们在图2a中可视化了这一表示转换过程。令牌通过transformer[55]层进行处理,预训练模型的内部表示在很大程度上被可学习提示改变。这可能是有益的,因为它允许模型更好地适应下游任务。

图1:CoOp、CoOp和线性探测的方差。与CoOp和CoCoOp等提示学习方法相比,线性探测不会改变预训练的表征,在性能上的差异更小

然而,如图1所示,在数据不足的情况下,这种转变可能会对模型的鲁棒性和泛化产生负面影响。另一方面,线性探测没有内部表示移位,如图2b所示,但线性层引入了参数低效率。

为了检验在数据不足的情况下,表示移位如何影响模型方差,我们对线性探测CLIP进行了初步实验,该实验不会改变预训练CLIP的内部表示。我们在FGVCAircraft数据集上分割了10个随机的少弹训练数据,并使用16弹学习设置对模型进行训练,并将性能方差可视化。有趣的是,如图1所示,我们观察到与CoOp和CoCoOp相比,线性探测显著降低了方差,尽管与CoOp (2K)和CoCoOp (35K)相比,它需要更多的训练参数(262K)。这一结果表明,由缺乏数据训练引起的内部表征移位可能导致高方差。同时,正如CoOp经验表明的那样,线性探测有时在领域转移任务中缺乏泛化性,并且其附加参数的数量是不可取的。

基于这一观察,我们提出了只读提示优化(Read-only Prompt Optimization, RPO),它学习只读提示,如图2c所示。RPO在参数有效的同时防止了自适应过程中的表示移位,从而使自适应更加健壮和可推广。

我们的贡献可以总结如下:

•我们提出了只读提示优化(RPO),它允许提示仅从预训练的视觉语言模型的基于注意的交互中读取信息,从而防止内部表征转移。

•我们为只读提示开发了一种简单而有效的初始化方法,利用预训练的CLIP视觉语言模型的特殊标记嵌入。

•我们广泛的实验和分析证明了RPO在少量样本自适应设置下对域和标签移位的泛化,在9个基准到新泛化的基准和4个领域泛化的基准中取得了最佳性能,同时减少了依赖于少量样本的方差。

2. 相关的工作

视觉语言模型

大量的网络抓取图像-文本对[6,24,15,5,45,44]便于视觉语言模型进行对比预训练,从而能够获得强大且可泛化的图像表示。例如,CLIP[6]和ALIGN[24]依靠基于转换器的编码器[55]来映射图像和文本之间的复杂关系。这些视觉语言模型在各种下游任务中取得了优异的表现,特别是在零采样图像分类中。在这些工作之后,许多其他工作[12,18,48,47]已经出现,以利用视觉语言模型的力量进行图像相关任务,如图像识别[33,31,29,38,9]。

然而,尽管这些模型具有很强的泛化性能,但使其适应特定任务可能具有挑战性,因为为不同的下游任务组装大型数据集是一项艰巨的挑战[39]。为了缓解这一问题,最近的研究重点是基于CLIP的可转移性,使预训练的视觉语言模型能够快速适应特定的任务。

提示学习

提示学习[27,22,32,13]最初是在GPT[7,10]和BERT[21]等自然语言处理模型中提出的。该技术涉及合并其他标记,例如手工制作的指令或可学习的提示,以促进对下游任务的预训练语言模型进行微调。额外的标记为模型提供下游任务的上下文信息,同时保持原始语言模型不变,从而避免灾难性遗忘[40]。基于这种方法的有效性,最近的研究试图在视觉语言模型中利用提示学习的概念。

最近对视觉语言模型的研究使用提示学习,使用连续的矢量提示,并使用文本标记进行连接和处理[33,49]。另一行作品介绍了依赖于视觉特征的提示[29,31,38,26,52]。连续提示学习方法[23,53,28]减少了训练参数的数量,并自动识别功能良好的提示。视觉提示调优(Visual Prompt Tuning, VPT)[29]将提示插入到视觉编码器而不是文本编码器中。同样,提示有效地包含并传达了关于手头任务的知识。

零样本学习和领域泛化

零样本学习涉及从训练过程中可用的“基本”对象类中学习一般知识,并使用这些知识来识别新的类。为了实现这一点,一些方法包括使用颜色或形状等视觉属性来跨类进行泛化[17],或者使用视觉语言模型来映射视觉样本和相应的文本[33,31,34]。

域泛化要求视觉编码器生成域不变表示,这意味着它们不受拍摄图像的特定域或设置的影响。例如,苹果的照片和苹果的素描[30]应该产生相似的表示。已经提出了各种方法来实现领域泛化,例如使用预训练模型进行广义表示[2,41]和跨模态监督[20]。

虽然视觉语言模型中的提示学习已经显示出更好的性能,但可学习的提示很有可能通过注意机制改变原始模型中功能良好的部分[55]。注意机制使所有输入嵌入相互作用,从而影响预训练模型的隐藏表示。如果训练数据不足,这可能会导致冻结模型中的意外行为。

3. 方法

在本节中,我们提出了只读提示优化(Read-only Prompt Optimization, RPO),用于在少量数据缺乏的情况下,对视觉语言模型进行鲁棒性和可泛化的自适应。我们引入了一组只读提示,连接到视觉和文本编码器的输入,然后用屏蔽注意进行处理,以避免对CLIP的内部表示产生影响。在提示优化期间冻结所有预训练的参数,并且仅更新连接的只读提示。

图3:RPO的整体架构。我们对所有数据集使用默认提示“A photo of A [CLASS]”。然后,在两个编码器中,我们的只读提示被连接到原始功能并馈送到一个冻结的编码器中。这些编码器中的注意力是被屏蔽的,这样我们的提示可以被学习,但不会改变原始的特征交互。我们计算对应于 K K K个提示的每个编码器的输出之间的相似性分数,并对它们进行平均,以产生最终分类分数 s ˉ 1 \bar s^1 sˉ1 s ˉ C \bar s^C sˉC,其中 C C C表示类的数量。

3.1. 只读的提示

对于文本编码器和可视编码器,RPO都使用相同的机制。我们首先连接一组连续的可学习提示,这需要最小的额外参数来训练,图像补丁嵌入或词嵌入。公式如下:

其中 x ( 0 ) ∈ R d v , y ( 0 ) ∈ R d t x^{(0)}\in R^{d_v},y^{(0)}\in R^{d_t} x(0)Rdv,y(0)Rdt表示特殊的令牌嵌入,[CLS]用于视觉编码器,[EOS]用于文本编码器,它们在每个编码器中充当特征聚合器。 E x ( 0 ) ∈ R N x × d v , E y ( 0 ) ∈ R N y × d t E_x^{(0)}\in R^{N_x\times d_v},E_y^{(0)}\in R^{N_y\times d_t} Ex(0)RNx×dv,Ey(0)RNy×dt表示视觉嵌入和文本嵌入, d v , d t d_v,d_t dv,dt表示图像patch和单词嵌入的尺寸, N x , N y N_x,N_y Nx,Ny表示特征标记的长度,不包括特殊标记。 p i v , p i t p^v_i,p^t_i piv,pit表示可视和文本编码器的第 i i i个可学习提示符, K K K为提示符的个数。两个编码器的提示数是相等的。注意,不像在以前的文本提示学习方法中,可学习提示替换对应于’ A photo of A ‘的标记嵌入,我们对’ A photo of A [CLASS] '提示进行编码,生成 E y ( 0 ) E^{(0)}_y Ey(0),然后串联只读的可学习提示 { p i t } i = 1 K \{p_i^t\}^K_{i=1} {pit}i=1K

3.2. 基于特殊令牌的初始化

在RPO中,每个可学习的提示都是通过稍微扰动的特殊标记进行初始化的,即预训练CLIP的视觉编码器上的[CLS]和文本编码器上的[EOS],命名为ST-initialization。在CLIP中,特殊的令牌扮演特征聚合器的角色,它在transformer 编码器的最后一层充当输入的代表。由于只读提示也执行特征聚合,我们发现基于特殊标记初始化提示是有益的,这是一个很好的起点。ST初始化的消融研究见表3。我们初始化提示如下:

其中 { p i v } i = 1 K ∈ R K × d v , { p i t } i = 1 K ∈ R K × d t \{p_i^v\}^K_{i=1} \in R^{K\times d_v},\{p_i^t\}^K_{i=1} \in R^{K\times d_t} {piv}i=1KRK×dv,{pit}i=1KRK×dt表示只读视觉提示和文本提示的集合, σ 2 \sigma^2 σ2为初始化方差。本文将 σ \sigma σ设为0.1。这对K提示的初始化略有不同,以便可学习提示避免常量初始化。

3.3. 带掩码的注意力

图4:每个编码器的注意掩码的可视化。

在我们的RPO框架中,隐藏注意力对于在预训练的CLIP中保留内部交互非常重要。如图4a和图4b所示,我们提出了一个注意掩码,以防止原始特征被可学习的提示嵌入所破坏。视觉注意掩码 M v ∈ R N v × N v M_v \in R^{N_v\times N_v} MvRNv×Nv和文本注意掩码 M t ∈ R N t × N t M_t \in R^{N_t\times N_t} MtRNt×Nt将注意力从可学习的提示流限制到已有的特征,其中 N v = 1 + K + N x N_v=1+K+N_x Nv=1+K+Nx N t = 1 + K + N y N_t=1+K+N_y Nt=1+K+Ny

掩码可以定义如下,其中 M i , j M^{i,j} Mi,j表示第 i i i行,第 j j j列的掩码元素:

Transformer编码器中的屏蔽注意操作可表述如下。

式中, V i + 1 \mathcal{V}_{i+1} Vi+1 T i + 1 \mathcal{T}_{i+1} Ti+1分别为视觉编码器和文本编码器的第 ( l + 1 ) (l+1) (l+1)掩码多头自注意层。 x ( l ) ∈ R N v × d v x^{(l)}\in R^{N_v\times d_v} x(l)RNv×dv表示第 ( l + 1 ) (l+1) (l+1)视觉编码器层的输入张量, y ( l ) ∈ R N t × d t y^{(l)}\in R^{N_t\times d_t} y(l)RNt×dt表示第 ( l + 1 ) (l+1) (l+1)文本编码器层的输入张量。视觉和文本编码器的最终输出 x ( L ) x^{(L)} x(L) y ( L ) y^{(L)} y(L)表示如下:

其中 L L L为层数, e i , s i e_i,s_i ei,si为第 i i i个视觉和文本提示特征,由各自的编码器产生。 P v , P t P_v,P_t Pv,Pt是预训练的投影矩阵,将 e i , s i e_i,s_i ei,si投影到 v i , t i v_i,t_i vi,ti

3.4. 对比评分函数

如图3所示,对于 K K K对提示,我们基于给定单个图像 x x x和类标签 y y y的余弦相似性计算 K K K个logits。给定 x x x y y y,我们将它们之间的相似性定义为公式(9)。通过平均logits,我们产生与 K K K个独立模型的集合相同的效果,这些模型具有关于图像和文本的单独视角。

使用集成逻辑,我们定义如下式(10)的概率分布,其中 τ \tau τ表示预训练CLIP的温度超参数。

4. 实验

w.o代表without

图5:RPO与cooop的方差与概化。从新的泛化基础和更小的性能差异来看,RPO比coop更具泛化性和鲁棒性。

5. 结论

大规模预训练模型的出现,如CLIP[6]、ALIGN[24]和FILIP[50],使得以参数高效的方式有效地使它们适应下游任务变得越来越重要。对整个模型进行微调可能是资源密集型的,并且可能会破坏在预训练期间学习到的定义良好的模型表示。从参数效率的角度来看,提示学习是一种很有希望避免这些问题的方法,但现有的方法最终仍然是通过注意机制来改变数据令牌的表示[33,31,16],这是一种不稳定的适应策略,特别是在数据不足的情况下,如少镜头学习。

为了解决这些挑战,我们提出了一种新的方法,利用只读提示来防止骨干模型中的内部表示转移,从而获得更好的泛化和鲁棒性。我们的方法还在视觉和文本编码器上使用了可学习的提示,并将它们初始化为特殊的令牌,如[CLS]和[EOS],以便更好地收敛。我们的大量实验表明,我们的方法在基到新泛化和域泛化方面优于其他方法,并且方差显著降低。

然而,尽管这种方法具有巨大的潜力,但它仍然是一个未开发的领域。与其他适应策略相比,该方法的效率和有效性有待进一步研究。尽管如此,我们的方法为在资源有限的情况下对预训练模型进行可推广和健壮的适应提供了一个有希望的方向。

参考资料

论文下载(ICCV 2023)

https://arxiv.org/abs/2308.14960

代码地址

https://github.com/mlvlab/RPO


http://www.ppmy.cn/news/1554517.html

相关文章

深度学习笔记之BERT(五)TinyBERT

深度学习笔记之TinyBERT 引言回顾:DistilBERT模型TinyBERT模型结构TinyBERT模型策略Transformer层蒸馏嵌入层蒸馏预测层蒸馏 TinyBERT模型的训练效果展示 引言 上一节介绍了 DistilBERT \text{DistilBERT} DistilBERT模型,本节将继续介绍优化性更强的知…

操作系统Lesson12 - 交互式和实施系统调度

文章目录 交互系统中的调度轮询调度优先级调度静态分配动态分配彩票调度多级反馈队列MLFQ公平分享调度 实时调度线程调度 先来先服务 用于非抢占式调度算法。 基于时间片 -> 抢占式 -> 绝对非抢占 磁盘任务放到内存 -> 作业调度 内存任务放到CPU -> 进程调度 缺…

Edge SCDN的独特优势有哪些?

强大的边缘计算能力 Edge SCDN(边缘安全加速)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为用户提供稳定快速的访问…

Github 2024-12-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…

k8s下的dns说明

k8s下有一个核心组件是coredns => kubectl get all -n kube-system -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ... pod/coredns-86966648-crrt5 1/1 Runni…

成像报告撰写格式

成像报告撰写格式 实验人员: 实验时间: 实验地点: 实验目的: 1实验仪器 1.1相机 包括制造商,型号,面阵还是线阵,彩色还是黑白,图像尺寸,光学接口等。 1.2镜头 包…

多线程与线程互斥

目录 引言 一、多线程设计 多线程模拟抢票 二、互斥锁 互斥量的接口 修改抢票代码 锁的原理 锁的封装:RAII 引言 随着信息技术的飞速发展,计算机软件正变得越来越复杂,对性能和响应速度的要求也日益提高。在这样的背景下,…

基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化

研究背景 随着中医药文化的不断传承与发展,传统中药材的市场需求逐渐增加。然而,随着药材种类繁多、来源复杂、品质参差不齐,如何高效地管理、分析与展示中药材的相关数据,成为现代中药产业面临的重要课题。传统的药材数据管理方…