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

SPT: Revisiting the Power of Prompt for Visual Tuning

方法简介

方法很简单,作者通过实验发现prompt拥有一个良好的初始化是VPT的关键,于是作者就通过在MAE/MoCo进行预训练来得到一个良好的prompt的初始化来提供微调阶段的prompt。

这么简单的方法是怎么催成一篇顶会的呢?值得我们去学习!

论文思路

主要的挑战

我们总结了下面列出的主要挑战。

提示初始化:现有的基于提示的方法,如VPT (Jia et al ., 2022)、GateVPT (Yoo et al ., 2023),采用随机初始化提示(如均匀或正常)的策略,然后在调优过程中更新提示,类似于传统神经网络的参数优化。然而,插入的提示令牌的不同初始化技术会显著影响准确性,如VPT及其变体的原始论文所示。

提示长度:与完全微调相比,唯一需要调整的额外超参数是插入的提示令牌的数量。虽然现有方法的消融研究表明,VPT及其变体通常对插入提示符的数量敏感

自监督预训练的性能欠佳:最近的研究(Yoo et al ., 2023)证明了VPT及其变体在自监督预训练下的性能明显差于在监督预训练下的性能,阻碍了其在具有大量未标记数据的各种场景中的应用。

一个度量方式NMI和发现

一个中心问题集中在优化插入的提示令牌的训练上。我们首先进行一个简单的实验,观察随着VPT的收敛,提示令牌的分布如何变化。一个直观的策略包括使用补丁令牌作为引用。因此,我们引入了标准化互信息(NMI (Estevez et al ', 2009))作为量化关系的度量。设 π ( p i − 1 , e i − 1 ) \pi(\textbf p_{i-1},\textbf e_{i-1}) π(pi1,ei1)为第 i i i个transformer块的prompt牌和token牌的联合分布。我们用 p i − 1 \textbf p_{i-1} pi1 E i − 1 \textbf E_{i-1} Ei1上的sigmoid-normalized交叉注意近似 π \pi π为:

其中 σ \sigma σ是sigmoid运算。我们进一步沿 j j j坍缩得到 p i − 1 \textbf p_{i-1} pi1的边际分布为 π ( p i − 1 ) = ∑ j = 1 N e π ( p i − 1 k , e i − 1 j ) \pi(\textbf p_{i-1})=\sum^{N_e}_{j=1}\pi(\textbf p^k_{i-1},\textbf e^j_{i-1}) π(pi1)=j=1Neπ(pi1k,ei1j) e i − 1 \textbf e_{i-1} ei1的边际分布遵循 π ( e i − 1 ) = ∑ k = 1 N p π ( p i − 1 k , e i − 1 j ) \pi(\textbf e_{i-1})=\sum^{N_p}_{k=1}\pi(\textbf p^k_{i-1},\textbf e^j_{i-1}) π(ei1)=k=1Npπ(pi1k,ei1j)的相同原则。因此,定义归一化互信息为:

其中 I ( ; ) I(;) I(;)表示标准互信息, H ( ⋅ ) H(\cdot) H()表示熵。我们可以很容易地用联合分布 π ( p i − 1 k , e i − 1 j ) \pi(\textbf p^k_{i-1},\textbf e^j_{i-1}) π(pi1k,ei1j)和边际分布来计算它们。

为了探索提示令牌的注意力崩溃程度,我们测量了四个规范数据集(CUB-200-2011 (Wah等人,2011)、Caltech-101 (Wah等人,2011)、Patch Camelyon (Veeling等人,2018)、Clevrcount (Johnson等人,2017))的归一化互信息。从图2中可以看出,视觉提示调优的训练过程(如四个子图中的蓝色曲线)逐渐得到了较高的归一化互信息值。考虑到NMI本身的定义,我们的发现如下:

图2。VPT呈现提示符和补丁令牌之间的规格化互信息(NMI (Estevez et al ', 2009))在微调期间逐渐增加的行为。SPT的初始NMI较大,有利于快速收敛,获得更先进的结果

发现

随着训练水平的提高,下游语境化提示的分布逐渐向patch token的分布收敛,具体表现为归一化互信息值的增加。回想一下,我们在第3.1节讨论了应用视觉提示调优的好处和挑战。鉴于上述发现,我们推测具有高度共享信息的初始提示令牌(训练起点处的高NMI值)可能有利于调优过程(提高收敛速度和准确性),从而促进更稳定的训练。然后将问题转移到构造具有高度规范化互信息的提示初始化(之后就开始讲简单的预训练初始化了)

提出的方法

构造具有高度共享信息的提示的直观方法(个人感觉:方法与发现其实是没有什么衔接的,或者说作者对这个衔接没有讲清楚)是使用目标数据集上推断的令牌原型初始化提示令牌。对于目标数据集,我们将第 i i i层补丁嵌入的前向结果表示为 E i ∗ = { e i j ∈ R D ∣ j ∈ N , 1 ≤ j ≤ N e ∗ N } \textbf E^*_i=\{e^j_i\in \mathbb{R}^D|j\in \mathbb{N},1\le j\le N_e*N\} Ei={eijRDjN,1jNeN} N N N是整个目标数据集的总数。假设 C i = { c i j ∈ R D ∣ j ∈ N , 1 ≤ j ≤ N p } \textbf{C}_i=\{c^j_i\in \mathbb{R}^D|j\in \mathbb{N},1\le j\le N_p\} Ci={cijRDjN,1jNp}是第 i i i层的原型,我们通过最小化惯性将 E i ∗ \textbf E^*_i Ei聚为具有K-means的 N p N_p Np原型:

与视觉提示调优类似,我们使用原型 C i \textbf{C}_i Ci构造提示令牌。我们将这种方法称为自提示调优SelfPrompt Tuning (SPT)。在VPT示例之后,我们根据所涉及的transformer块的数量定义了SPT-ShallowSPT-Deep

接下来就跟VPT一样的操作了,只不过**用预训练出来的原型 C i \textbf{C}_i Ci作为微调时候的prompt的初始化**;

SPT-Shallow

SPT-Deep

优化提示的预训练

表1。构建提示过程的时间成本。我们在CUB-200-2011上采用了四种策略(K-Means, Max pooling, Mean pooling, Random sample),以vitb为骨干。(注:“d”表示天,“s”表示秒。)

前面介绍的SPT将令牌原型视为初始提示,它可以近似地表示训练数据和/或中间令牌的总体分布。但是,候选令牌的数量通常远远超过提示的长度。聚类过程极其缓慢(见表1和图3 (a)),甚至时间成本明显超过模型微调的时间。为了缓解这个问题,我们提出了两个更实用的策略****(me:提出了预训练速度更快但效果略微有所下降的办法)

Mean (max) pooling 我们对随机选择的批标记 E i ∗ = { e i j ∈ R D ∣ j ∈ N , 1 ≤ j ≤ N e ∗ B } \textbf E^*_i=\{e^j_i\in \mathbb{R}^D|j\in \mathbb{N},1\le j\le N_e*B\} Ei={eijRDjN,1jNeB}执行均值池化或最大池化,输出 N p N_p Np个标记。对于非重叠采样,窗口核大小为 ⌊ N e ∗ B N p ⌋ \lfloor \frac{N_e*B}{N_p}\rfloor NpNeB ⌊ ⋅ ⌋ \lfloor \cdot \rfloor 指向下取值操作。 B B B是批大小。

Random sample 对于简化的替代方案,我们甚至在随机批处理中随机抽样 N p N_p Np个令牌。例如,我们在第 i i i层随机选择一个前向批结果作为 E i ′ ∗ \textbf E'^{*}_i Ei。最终的 N p Np Np初始标记从 N e ∗ B N_e*B NeB标记中均匀抽样。

备注:建议的改进程序对下游任务更实用。我们从两个方面对计算成本进行了简要的评估。

相关实验

在MAE和MoCo-V3上的实验。

四种提示优化策略,总体来说K-mean最好,但效率低

参考资料

论文下载(ICML(CCF A), Spotlight, 2024)

https://arxiv.org/pdf/2402.02382

代码地址(暂未开源)


http://www.kler.cn/a/428724.html

相关文章:

  • 【jvm】垃圾回收的重点区域
  • 【Linux内核】Hello word程序
  • AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)
  • C# (WinForms) 使用 iTextSharp 库将图片转换为 PDF
  • 分布式数据库:架构、挑战与未来趋势
  • MATLAB 控制系统快速入门
  • 期货分仓/风控/期货交易的原则!
  • Ubuntu系统中Redis的安装步骤及服务配置
  • Rust学习笔记_13——枚举
  • Ubuntu 22.04安装Nessus(离线激活模式)
  • Windows如何识别Linux主机名?
  • 力扣-图论-3【算法学习day.53】
  • java面试宝典
  • SQL DQL数据查询语言(后续)
  • PHP语法学习(第九天)—PHP连接mysql详解(下)
  • 力扣LCR 128.库存管理I
  • JAVA子类的无参构造器中第一行的super
  • 【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度
  • 解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美
  • 11-27 周三 Postman自动解析响应查询可用节点数量