当前位置: 首页 > article >正文

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总

当前的问题

图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。

如图1所示,当给出大量提示时,VPT显示了性能的显著下降和成本的增加。考虑到这一点,我们认为当给出大量提示时,VPT是不可用的

对之前VPT的分析

庞大的计算量

在计算自注意力时,需要计算每个令牌与所有其他令牌之间的注意力。它的计算复杂度是 n 2 n^2 n2,其中 n n n 是嵌入令牌的数量。若 m m m 表示插入的提示令牌数,则VPT中自注意的计算复杂度可表示为 ( n + m ) 2 {(n + m)}^2 (n+m)2。这大大增加了计算开销,特别是在使用大量提示令牌时。

自注意力关注不均衡

图2:提示令牌和嵌入令牌获得的自关注权重。我们将 c l s t o k e n cls_{token} clstoken 的自我关注形象化,并将自身排除在外,以观察 c l s t o k e n cls_{token} clstoken 对其他 token 的关注。颜色越深,重量越大。在给出196个提示时,提示获得的注意权重超过80%,这极大地影响了嵌入令牌获得的自我注意。

随着提示数量的增加,提示权重值之和超过0.8,是嵌入令牌权重值的4倍以上,严重干扰了嵌入令牌之间的自关注。这解释了为什么VPT性能会随着提示数量的增加而大幅下降

我的思考:VPT这种现象是正常的,因为我们只训练提示,提示越多,模型的注意力逐步往prompt靠,而逐步不关注模型中被冻结的预训练参数。

解决办法

对应公式如下所示:

核心就是 S e l f A t t e n t i o n ( X , P r o m p t ) SelfAttention(X,Prompt) SelfAttention(X,Prompt) 转化为 C r o s s A t t e n t i o n ( X , P r o m p t ) CrossAttention(X,Prompt) CrossAttention(X,Prompt)

摘要

近年来,模型规模的迅速扩大导致大规模预训练模型显示出显着的能力。因此,出现了增加模型规模的趋势。然而,这种趋势带来了重大的挑战,包括大量的训练和转移到下游任务的计算成本。为了解决这些问题,引入了参数有效微调(PEFT)方法。这些方法通过微调一组选定的参数来优化特定任务的大规模预训练模型。在这些PEFT方法中,基于适配器的方法和基于提示的方法是主要的技术。具体来说,在视觉微调领域,适配器比提示符更受重视,因为后者的性能和效率相对较弱。

在这种情况下,我们改进了广泛使用的视觉提示调谐(VPT)方法,提出了交叉视觉提示调谐(CVPT)方法。CVPT计算提示标记和嵌入标记之间的交叉注意,使我们能够计算它们之间的语义关系,并精确地对模型进行微调,以更好地适应视觉任务。此外,我们引入了权重共享机制来初始化交叉注意的参数,避免了交叉注意产生的大量可学习参数,增强了交叉注意的表征能力。我们在25个数据集上进行了全面的测试,结果表明CVPT显著提高了VPT在视觉任务中的性能和效率。例如,在VTAB-1K基准测试中,CVPT的平均准确率比VPT高出4%以上,在性能和效率方面可与先进的基于适配器的方法相媲美。我们的实验证实,基于提示的方法在视觉微调方面可以取得优异的效果。代码可在https://github.com/Xlgsyzp/CVPT/tree/main上获得。

1.介绍

增加模型的尺度是提高模型性能的常用方法[35][9][28][29]。近年来,随着计算设备的快速发展,模型尺寸显著增加[45][6][17][47]。例如,OpenAI开发的GPT系列参数在短短五年内从1.17亿个激增到1.8万亿[36][37][2]。参数数量的迅速增加将导致巨大的计算开销问题。因此,使用全调优方法使这些模型适应下游任务将产生巨大的成本。为了解决这个问题,人们提出了PEFT方法[20][27][1][38][5]。PEFT通过微调包含更少参数的模型子集,以更有效的方式将那些大规模预训练的模型适应下游任务。PEFT中两种主流的方法是Adapter[19]和Prompt[27]。在训练过程中,适配器插入到每个transformer块并调优这些适配器,而Prompt将提示令牌插入到嵌入的令牌中以更新提示令牌。

图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。

VPT是Jia等[22]首先提出的用于视觉微调任务的基于提示的方法。然而,基于适配器的方法由于其优越的性能而成为研究热点。尽管一些研究已经提高了VPT的性能[21][13][7],但要与基于适配器的方法的有效性相匹配仍然具有挑战性。人们似乎一致认为,在视觉领域,基于提示的方法不如基于适配器的方法。但事实果真如此吗?我们对VPT进行了广泛的实验和分析,以揭示其性能较适配器弱的原因。根据我们的实验,我们认为VPT和适配器之间性能差异的主要原因是VPT的部署直接应用于NLP任务中[27],而没有对视觉任务进行任何适应。在NLP任务中,提示通常包含丰富的语义信息,用于指导模型的微调过程。然而,在视觉任务中,提示信息缺乏表示信息。因此,VPT有必要使用大量的提示来微调模型。然而,VPT的设计导致计算效率低下和冗余,以及嵌入式令牌之间的自关注中断3.1。如图1所示,当给出大量提示时,VPT显示了性能的显著下降和成本的增加。考虑到这一点,我们认为当给出大量提示时,VPT是不可用的

为了解决这个问题,我们重新设计了VPT并引入了跨视觉提示调优(CVPT)。对于CVPT中的提示令牌,我们计算嵌入令牌的交叉注意,并将结果作为残差添加到嵌入令牌中。这种方法避免了与提示数量二次相关的自关注的计算复杂性,并允许提示专注于嵌入的令牌,以更有效地适应下游任务。此外,通过在整个计算过程中保持令牌维度的一致性,交叉注意的结果可以直接用嵌入的令牌作为残差求和,并且不会为后续的MLP带来额外的计算开销。此外,在加载检查点期间,我们与交叉注意层共享自注意层的权重,使交叉注意层与自注意层保持冻结状态,从而消除了交叉注意对额外学习参数的需求,并利用自注意中的编码信息来帮助模型微调。

我们在25个数据集上验证了我们的方法的有效性,结果表明,与VPT相比,CVPT在性能和效率方面取得了显着提高。CVPT在19个VTAB-1K数据集上的准确率平均提高了4%,在5个FGVC数据集上提高了1%,在ADE20K数据集上提高了3%。此外,如果给出较少的提示令牌,CVPT可以达到与其他高级PEFT方法相当的性能,这些方法的性能明显优于其他基于提示的方法,并且需要更少的可学习参数。如果允许大量提示,我们的CVPT在FGVC和ADE20K数据集上的性能优于SOTA方法。此外,尽管插入了大量提示,但与VPT相比,它不会带来太多额外的计算开销。

最后,我们探讨了部署位置和权重分配机制的有效性的影响。上述实验结果充分说明了模型的改进,表明基于提示符的方法也可以与基于SOTA适配器的方法相媲美。

•我们对VPT在视觉任务中的应用进行了详细的分析,并提出其缺点可以总结为三点,即缺乏适应性,计算效率低下和冗余,破坏自我注意。

•我们提出CVPT,它引入了交叉关注和权重共享机制,避免了VPT带来的效率和性能问题,它允许我们使用更多的提示来有效地提高性能。

•我们在25个数据集上进行了不同下游任务的实验。结果表明,我们的方法在性能和效率方面明显优于原始的VPT和其他基于提示的工作。它也可以与基于SOTA适配器的方法相媲美,证明了基于提示的视觉微调方法的可用性。

2.相关工作

PEFT 在CNN时代,制作更大更深的模型是提高性能的有效途径[26][16][43]。随着transformer的兴起,这一趋势变得更加流行。ChatGPT的引入进一步巩固了社区开发更大、更强大模型的目标。然而,受其规模的限制,尽管这些大型模型具有强大的性能和通用性,但很难通过使用传统范式(全调优)来适应下游任务。因此,NLP研究者首先提出了PEFT方法。他们的研究表明,在大规模预训练模型中微调少量参数可以达到与完全调整几乎相同的性能。受NLP成功的鼓舞,研究者开始将PEFT应用于不同视觉任务的大规模视觉模型[8][44]。经过几年的发展,主流的PEFT方法大致可以分为基于适配器的方法和基于提示符的方法。

适配器 Jie等[19]提出在网络中插入适配器以有效地微调模型。这些适配器通常是一个小型网络,通常包含一个上采样层和一个下采样层。在通过上采样和下采样层后,输入与比例因子 γ \gamma γ 相乘,然后将结果作为残差添加到输入中。适配器的一般形式可表示为:

式中, X i n X_{in} Xin 为Adapter的输入, γ \gamma γ 为Adapter的比例因子, W u p W_{up} Wup W d o w n W_{down} Wdown 分别对应上采样层和下采样层。一些作品对基于适配器的可视化任务进行了一些调整,开发了AdaptFormer [4], LoRA[20]和RepAdapter[30]等几个变体。这些基于适配器的方法在视觉微调领域占据主导地位。

提示 提示符最初用于NLP领域,它被添加到输入文本中用于理解任务。Lester等人[27]提出将提示符视为连续向量,并通过更新其梯度对模型进行微调。Jia等[22]首次将这一概念引入到视觉微调中,并将其命名为VPT。如图3所示,嵌入令牌在进入每个transformer块前与提示令牌拼接,使其参与到transformer块内的每一层网络中。在进入下一个transformer块之前,丢弃前一层的提示令牌,重新将新的提示令牌与嵌入的令牌拼接(VPT-Deep)。其公式如下所示:

其中,红色和蓝色分别表示可学习参数和冻结参数。 P P P 为可学习的 d d d 维向量, X X X 为CLS令牌, E E E 为修补后的图像。尽管存在基于VPT的改进变体,如E2VPT[13]、EXPRESS[7]和DAM-VP[21],但基于提示符的方法和基于适配器的方法之间仍然存在性能差距。

3.方法

3.1 之前VPT分析

首先,我们对VPT进行了深入的分析,探究为什么它在性能和效率方面不如适配器,我们的分析有三点:

缺乏对视觉任务的适应。在NLP中,每个标记代表一个具有丰富语义信息的实际单词。因此,连接提示标记和嵌入标记的处理是自然的,适合于NLP任务。然而,在视觉任务中,与自然语言处理相比,标记表示图像补丁并包含稀疏的语义信息。因此,简单地将提示令牌与嵌入的令牌拼接可能无法提供足够的指导信息。此外,视觉任务通常需要对图像的空间关系和结构特征有更深的理解,这很难用提示符号实现。

计算效率低下和冗余。在计算自注意力时,需要计算每个令牌与所有其他令牌之间的注意力。它的计算复杂度是 n 2 n^2 n2,其中 n n n 是嵌入令牌的数量。若 m m m 表示插入的提示令牌数,则VPT中自注意的计算复杂度可表示为 ( n + m ) 2 {(n + m)}^2 (n+m)2。这大大增加了计算开销,特别是在使用大量提示令牌时。此外,我们发现提示令牌涉及到MLP计算过程,这不仅增加了计算开销,而且不会影响结果。我们的实验表明,在自我注意之后去除提示符号不会影响结果。

破坏嵌入令牌之间的自我关注。在softmax之后,所有令牌的权重之和归一化为1。然而,由于提示标记的增加,嵌入标记的权重之和被提示标记降低,这对应于嵌入标记之间的自注意表征能力减弱。由于提示令牌最终会被移除,这相当于将嵌入令牌之间的自关注结果乘以一个小于1的因子。为了探索这种影响有多大,我们将提示数分别设置为1,5,20,50,100,150,196,并将softmax函数后的张量可视化,结果如下图2所示。

图2:提示令牌和嵌入令牌获得的自关注权重。我们将 c l s t o k e n cls_{token} clstoken 的自我关注形象化,并将自身排除在外,以观察 c l s t o k e n cls_{token} clstoken 对其他token的关注。颜色越深,重量越大。在给出196个提示时,提示获得的注意权重超过80%,这极大地影响了嵌入令牌获得的自我注意。

随着提示数量的增加,提示权重值之和超过0.8,是嵌入令牌权重值的4倍以上,严重干扰了嵌入令牌之间的自关注。这解释了为什么VPT性能会随着提示数量的增加而大幅下降

3.2 交叉视觉提示调优

Cross-Attention。与计算输入序列中每个元素之间关系的自注意[40]不同,交叉注意计算两个不同序列上的注意,以处理它们之间的语义关系[3]。例如,在翻译任务中,交叉注意用于计算源语言句子和目标语言句子之间的注意权重。在我们的方法中,我们引入交叉注意来处理嵌入标记和提示标记之间的语义关系,指导模型的微调。具体来说,交叉注意的输入由 X 1 X_1 X1 X 2 X_2 X2两部分组成,其中 X 1 ∈ R n × d 1 , X 2 ∈ R n × d 2 X_1 \in \mathbb{R}^{n\times d_1},X_2 \in \mathbb{R}^{n\times d_2} X1Rn×d1,X2Rn×d2 X 1 X_1 X1 作为查询集, X 2 X_2 X2 作为键值集。设 Q = X 1 W Q , K = V = X 2 W K Q=X_1W^Q,K=V=X_2W^K Q=X1WQ,K=V=X2WK,且交叉注意可以表示为:

其中 W Q ∈ R d 1 × d k , W K ∈ R d 2 × d k W^Q \in {R}^{d_1\times d_k},W^K \in {R}^{d_2\times d_k} WQRd1×dk,WKRd2×dk 为学习到的投影矩阵, d k d_k dk 为value-key集合的维数。在我们的方法中, d 1 = d 2 = d k d_1=d_2=d_k d1=d2=dk。输出的形状是 n × d k n\times d_k n×dk,这和 X 1 X_1 X1 是一致的。

图3:VPT和CVPT的结构比较。其中,蓝色表示冻结参数,橙色表示可学习参数。

Cross Visual Prompt Tuning. 我们重新设计了提示符,以更好地适应视觉任务,并提出了CVPT。如图3所示,我们的方法遵循VPT,网络的主要参数保持冻结,只有最终分类层和提示符是可训练的。关键的区别在于,我们允许提示令牌与嵌入令牌进行交叉注意,并且交叉注意的结果作为残差与嵌入令牌一起添加。这个操作有助于提示符适应视觉任务,我们将在第4.2节中演示这个改进有多重要。具体地说,对于transformer块的任意输入 x i x_i xi ,前向传播可以表示为:

其中,蓝色表示冻结参数,红色表示可训练参数,SA表示自注意,CA表示交叉注意,LN表示层归一化。

在CVPT中,我们只引入与提示令牌数量相关的线性计算开销。它允许CVPT使用大量的提示令牌,通过引入可接受的开销来提高性能。此外,CVPT保留了原始的自注意过程,保留了嵌入令牌的完整表示能力。我们将在3.3节中演示VPT在性能和效率方面的改进。最后,我们将嵌入令牌设置为查询集,将提示令牌设置为键值集,这样可以保持通道数的统一性,从而可以直接将交叉关注的结果与输入作为残差项求和。

Weight-sharing机制。交叉注意的使用需要大量的可学习参数(通常为模型参数数的30%以上),这对计算开销造成了很大的挑战。因此,如果它们的参数是可调的,则CVPT的计算开销甚至可以与使用全调优的计算开销相媲美。因此,我们引入了权重共享机制。由于交叉注意的结构与自我注意的结构相同,我们认为自我注意的权重对交叉注意的微调也具有指导意义。因此,在加载检查点时,我们使用自注意参数初始化交叉注意的权重。它避免了在交叉注意中引入大量的可学习参数,保持了CVPT的效率。我们在4.3中探讨了权重共享的影响,并证明了冻结交叉注意比可学习交叉注意更有效

3.3 与VPT的比较

提高性能。为了研究CVPT带来了多大的改进以及提示数量对性能的影响,我们使用了不同数量的提示令牌,并分别使用VPT和CVPT在VTAB-1K上进行了实验。结果如下表1所示:

这些结果表明,除了提示数等于1之外,我们的CVPT在几乎所有情况下都获得了更好的性能。正如我们在3.1节中分析的那样,由于缺乏对视觉任务的适应,VPT代表了池绝对性能。此外,由于嵌入令牌之间的自关注被破坏,当给定大量的提示令牌时,VPT表现出明显的性能下降甚至崩溃。相反,我们的CVPT避免了这些问题。

此外,它的性能随着提示令牌数量的增加而提高。以上结果表明,提示标记和嵌入标记之间的交叉关注有助于提示适应视觉任务,并更准确地指导模型的微调。

效率的改善。为了探究CVPT在效率上的提升,我们在进行上述实验时,还记录了VPT和CVPT在训练和测试时所占用的GPU内存量,以及两者的总计算量,结果如下图4所示

图4:训练记忆、测试记忆和Flops随提示符号数量变化的趋势。其中LP表示线性探测,它只对最终分类器进行线性调整。我们在VTAB-1K中记录cifar100上的这些数据,batch_size设置为32。预训练模型为ViT-B/16。

可以看出,与VPT相比,我们的CVPT在效率上有了显著的提高,特别是在大量提示令牌的情况下。虽然与VPT相比,它在测试期间需要更多的GPU内存,但与VPT相比,这是微不足道的。此外,权重共享机制允许在工程应用中进行有针对性的优化,让交叉关注和自关注共享内存,进一步扩大了与VPT的效率差距。此外,CVPT的精心设计防止了随着提示数量的增加而导致内存和计算量的爆炸性增长。这意味着我们可以通过增加提示的数量来提高CVPT的性能,这比其他方法的计算效率更高。

总之,我们的CVPT通过引入交叉注意和权重共享机制,显著提高了VPT的性能和效率,特别是在提示数量较大的情况下。因此,它可以让我们在基于提示的方法中更有效地引入更多的提示,从而提高其性能。在下一节中,我们将演示这种改进有多大,并将其与SOTA方法进行比较。

4.实验

表2:在ImageNet-21K上预训练的ViT-B/16模型在VTAB-1k基准上的性能比较。

表3:在ImageNet-21K上预训练的ViT-B/16模型在五个FGVC数据集上的性能比较。

表4:viti - l模型下ADE20K数据集的结果。我们报告了“mIoU-SS”和“mIoU-Ms”,分别表示单尺度和多尺度

图5 (a) ViT中交叉注意的部署。可以插入五种可能的位置。我们最后的部署是深蓝色的。(b)交叉注意不同部署的业绩比较。

表5:可学习CA与权重共享的冻结CA的性能比较。

5.结论

本文对目前主流的基于提示的VPT方法进行了深入的探讨,并分析了其性能较差的原因。因此,我们提出了一种简单有效的PEFT方法CVPT,该方法引入了交叉关注模块来计算提示令牌和嵌入令牌之间的交叉关注,从而指导模型的微调。更重要的是,交叉注意的权重来自于自我注意,避免引入大量的额外注意可训练的参数和实现更好的性能。我们在25个数据集上进行了大量的实验,结果表明CVPT达到了SOTA的性能。此外,我们对CVPT进行了广泛的消融实验,证明了引入交叉注意和权重分担的影响,以及它比VPT的效率和性能改进。

我们希望我们的工作将在未来启发基于提示的PEFT方法。我们工作的一个限制是CVPT没有探索提示令牌初始化的新策略。在VPT中,作者对不同的初始化方法进行了完整的比较。在我们的工作中,我们对VPT采取了同样的策略。但是,我们仍然认为优化后的特定初始化方法优于VPT使用的一般方法。此外,这个初始化还将帮助我们理解提示是如何帮助模型微调的。

参考资料

论文下载(arixv)

https://arxiv.org/abs/2408.14961

代码地址

https://github.com/Xlgsyzp/CVPT/tree/main


http://www.kler.cn/news/312584.html

相关文章:

  • 云原生-Quarkus
  • 基于Benes网络的SIMD同态密文任意重排
  • HarmonyOS NEXT应用开发案例实践总结合集
  • 【C++笔记】类和对象的深入理解(三)
  • 练习题 - Django 4.x Overviewses 框架概述
  • 1. TypeScript基本语法
  • LangChain 和 Elasticsearch 加速构建 AI 检索代理
  • 练习题 - Django 4.x Models Relationship fields 字段关联关
  • 等保测评中的关键技术挑战与应对策略
  • three.js shader 实现天空中白云
  • 用 Docker 部署 Seafile 社区版
  • C++学习指南(六)----list
  • 【docker】阿里云使用docker,2024各种采坑
  • 【笔记】扩散模型(八):DALL-E 2 (unCLIP) 论文解读与代码实现
  • C++设计模式——Interpreter解释器模式
  • 科技修复记忆:轻松几步,旧照变清晰
  • Android mmap分析
  • Linux进阶命令-scp
  • k8s快速搭建+prometheus部署及使用(纯干货!!!)
  • 基于正点原子Linux开发板的智能监控与家电控制系统设计:深度解析Video4Linux和TCP/IP技术栈
  • android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
  • Web开发:Thymeleaf模板引擎
  • Redis系列之底层数据结构SDS
  • 编程技巧:SQL 处理超大查询
  • 对商品分类系统的若干问题的思考
  • 【Linux】程序地址空间
  • 数据库函数
  • C++_CH18_构造函数与析构函数
  • Java优先级队列PriorityQueue
  • 大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍