SPT: Revisiting the Power of Prompt for Visual Tuning

news2025/1/18 8:44:55

方法简介

方法很简单,作者通过实验发现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.coloradmin.cn/o/2256263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于事件驱动的websocket简单实现

websocket的实现 什么是websocket? WebSocket 是一种网络通信协议,旨在为客户端和服务器之间提供全双工、实时的通信通道。它是在 HTML5 规范中引入的,可以让浏览器与服务器进行持久化连接,以便实现低延迟的数据交换。 WebSock…

基于协同过滤算法的宠物用品商城的设计与实现(计算机毕业设计)Java Spring 衍生为任何商城系统 毕业论文

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

文本预处理介绍

文本预处理 文本预处理1.认识文本预处理2.文本处理的基本方法2.1.什么是分词2.2 什么是命名实体化2.3词性标注 3.文本张量的表示方法3.1文本张量表示3.2 one-hot词向量表示 4.Word2vec模型4.1模型介绍4.2word2vec的训练和使用 5.词嵌入word embedding 介绍6.文本数据分析1.文本…

力扣3381.长度可被K整除的子数组的最大元素和

力扣3381.长度可被K整除的子数组的最大元素和 题目 题目解析及思路 题目要求返回一段长度为K的倍数的最大子数组和 同余前缀和 代码 class Solution { public:long long maxSubarraySum(vector<int>& nums, int k) {int n nums.size();vector<long long>…

第三节、电机定速转动【51单片机-TB6600驱动器-步进电机教程】

摘要&#xff1a;本节介绍用定时器定时的方式&#xff0c;精准控制脉冲时间&#xff0c;从而控制步进电机速度 一、计算过程 1.1 电机每一步的角速度等于走这一步所花费的时间&#xff0c;走一步角度等于步距角&#xff0c;走一步的时间等于一个脉冲的时间 w s t e p t … ……

【数学建模】线性规划问题及Matlab求解

问题一 题目&#xff1a; 求解下列线性规划问题 解答&#xff1a; 先将题目中求最大值转化为求最小值&#xff0c;则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为&#xff1a; 等式…

云计算对定制软件开发的影响

在当代数字世界中&#xff0c;云计算是改变许多行业&#xff08;包括定制软件开发&#xff09;的最伟大的革命性趋势之一。由于这些公司努力寻求更好、更多不同的方式来履行职责&#xff0c;因此云计算与传统的内部部署基础设施相比具有许多不可否认的优势。这种范式转变对定制…

3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切

3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切 文章目录 0 论文工作1 方法2 实验结果 0 论文工作 最近提出的高斯Splatting方法实现了高质量的实时三维场景新视角合成。然而&#xff0c;它仅仅关注外观和几何建模&#xff0c;缺乏细粒度的物体级场景理解。为了解决…

GUI的最终选择:Tkinter

Tkinter是Python默认的GUI库&#xff0c;因此使用时直接导入即可&#xff1a;import tkinter 17.1 Tkinter之初体验 代码分析&#xff1a; tkinter.mainloop()通常是程序的最后一行代码&#xff0c;执行后程序进入主事件循环。 17.2 进阶版本 将代码封装成类&#xff1a; 运…

电子商务人工智能指南 3/6 - 聊天机器人和客户服务

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

嵌入式软件C语言面试常见问题及答案解析(一)

本文中题目列表 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)2. 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。3. 预处理器标识#error的目的是什么?4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?5. …

从失败中学习:如何将错误转化为学习机会

失败是人生的一部分&#xff0c;无论是在个人生活还是职业生涯中&#xff0c;我们都难免会遇到挫折和错误。然而&#xff0c;失败并不意味着终结&#xff0c;而是一个潜在的学习机会。通过正确的态度和方法&#xff0c;我们可以从失败中汲取经验&#xff0c;转化为成长的动力。…

HarmonyOS NEXT的Navigation,跳转子页面后底部Tab不隐藏问题解决

问题复现 一直以来&#xff0c;首页的Tabs是这么用的&#xff1a; import Home from "../pages/home/Home" import ZhiHu from "../pages/song/Song" import Mine from "../pages/mine/Mine"Entry Component struct Index {State currentIndex…

基础排序算法详解:冒泡排序、选择排序与插入排序

引言 上一章&#xff0c;我们聊到了排序的基本概念和常见算法的分类。这一次&#xff0c;我们从基础开始&#xff0c;深入剖析三种常见的O(n) 排序算法&#xff1a;冒泡排序、选择排序 和 插入排序。 它们是学习排序算法的入门神器&#xff0c;不仅实现简单&#xff0c;还能帮…

番茄钟与Todo List:用Go构建高效的时间管理工具

引言 在当今快节奏的世界中&#xff0c;时间管理和任务组织变得越来越重要。为了帮助用户提高效率&#xff0c;我开发了一个基于Golang的开源项目&#xff0c;基于fyne的ui&#xff0c;它结合了经典的番茄工作法&#xff08;Pomodoro Technique&#xff09;和功能丰富的待办事…

Python-标识符、隐式转换和显式转换

记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 python基础1 标识符约定动态语言和静态语言隐式转换和显式转换隐式转换显式转换 实践是检验真理的唯一标准 标识符约定…

【全网最新】使用 1panel面板 部署若依系统( springboot 和 vue)项目

​​​​​​使用 1panel面板 部署 springboot 和 vue_1panel部署vue项目-CSDN博客 准备工作: 准备好的网站后台代码文件准备好的网站前端页面安装好1panel1panel中安装好mysql1panel中安装好redis1panel中安装好Openresty部署后台接口 在application.yml中修改后台端口,这里…

力扣Hot100刷题日常(链表篇上)

相交链表 题目分析&#xff1a; 暴力解法&#xff1a; 计算链表的长度&#xff1a; 首先我们需要知道链表 A 和链表 B 的长度。因为在开始比较两个链表是否相交之前&#xff0c;我们需要确保它们有相同的起始点。从长度上来说&#xff0c;两个链表的交点一定会出现在它们后续部…

MySQL数据库安全与管理

1、创建两个新用户U_student1和U_student2,密码分别为1234和5678 create user U_student1@localhost identified by 1234, U_student2@localhost identified by 5678; 2、创建两个新用户的详细信息保存在MySQL数据库的user表中 use mysql; select user, host, authentication…

【数据库】关系代数和SQL语句

一 对于教学数据库的三个基本表 学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程(C#,CNAME,TEACHER) &#xff08;1&#xff09;试用关系代数表达式和SQL语句表示&#xff1a;检索WANG同学不学的课程号 select C# from C where C# not in(select C# from SCwhere S# in…