【提示学习论文】ProGrad:Prompt-aligned Gradient for Prompt Tuning论文原理

2024-04-07 23:52

本文主要是介绍【提示学习论文】ProGrad:Prompt-aligned Gradient for Prompt Tuning论文原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Prompt-aligned Gradient for Prompt Tuning(CORR2022 / ICCV2023)

1 Motivation

在这里插入图片描述

在这里插入图片描述

  • 经过CoOp微调过的prompt会导致模型更关注背景而不是前景对象,对于分类任务不利

2 Contribution

在这里插入图片描述
提出了一种基于prompt对齐的梯度的引导方法(ProGrad),来应对prompt学习中添加的不正确偏置的问题。在tuning的过程中进行一种正则化,来确保这一步的tuning不和原本的知识(zero-shot CLIP)产生冲突。

  • 一般方向(general direction):zero-shot CLIP
  • 域特殊方向(domain-specific direction):CoOp计算得出
    • 垂直向量 G ⊥ G_⊥ G
    • 平行向量 G ∥ G_∥ G

3 具体方法

由CoOp进行学习的域特殊方向,加强其在当前数据下的精度的优化方向,但是这可能导致过拟合。用一个一般普通的prompt和zero-shot CLIP的logits计算一个KL散度,这个KL散度回传的梯度作为一般方向。

3.1 交叉熵损失

在这里插入图片描述
L c e L_{ce} Lce:模型预测 p ( t i ∣ x ) p(t_i|x) p(tix)真实值 y y y的交叉熵损失

3.2 KL散度

在这里插入图片描述

L k l L_{kl} Lkl:模型预测 p ( t i ∣ x ) p(t_i|x) p(tix)zero-shot CLIP预测 p z s ( w i ∣ x ) p_{zs}(w_i|x) pzs(wix)的KL散度

3.3 梯度

  • L c e L_{ce} Lce的梯度表示为 G d = ∇ v L c e ( v ) G_d =∇_vL_{ce}(v) Gd=vLce(v)
  • L k l L_{kl} Lkl的梯度表示为 G g = ∇ v L k l ( v ) G_g =∇_vL_{kl}(v) Gg=vLkl(v)

在这里插入图片描述

G d G_d Gd G g G_g Gg的关系:

  • 夹角小于90°:说明下游知识优化方向与一般知识不冲突,此时安全地更新梯度 G p r o g r a d G_{prograd} Gprograd作为 G d G_d Gd
  • 夹角大于90°:说明下游知识优化方向与一般知识冲突,此时,将 G d G_d Gd投影 G g G_g Gg正交方向,避免增加 L k l L_{kl} Lkl

3.4 ProGrad策略公式

在这里插入图片描述
在本文CoOp中,我们没有使用 G d G_d Gd来更新上下文向量,而是使用 G p r o g r a d G_{prograd} Gprograd来优化,可以避免过拟合:

  • λ=1:将 G d G_d Gd投影到 G g G_g Gg的正交方向
  • λ=0:使prograd退化为CoOp

3.5 总体流程

在这里插入图片描述

  • 可学习上下文和类别输入文本编码器,图像输入图像编码器
  • 将文本特征与图像特征计算相似概率,得到 p p p
  • p p p y y y计算 C E L o s s CE Loss CELoss,得到 G d G_d Gd
  • p p p p z s p_{zs} pzs计算 K L L o s s KL Loss KLLoss,得到 G g G_g Gg
  • G d G_d Gd G g G_g Gg反传回去,使用 G p r o g r a d G_{prograd} Gprograd更新可学习参数

这篇关于【提示学习论文】ProGrad:Prompt-aligned Gradient for Prompt Tuning论文原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/884021

相关文章

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An