【论文笔记】Prefix-Tuning: Optimizing Continuous Prompts for Generation

news2024/11/27 5:32:26

题目:Prefix-Tuning: Optimizing Continuous Prompts for Generation
来源: ACL 2021
模型名称: Prefix-Tuning
论文链接: https://aclanthology.org/2021.acl-long.353/
项目链接: https://github.com/XiangLi1999/PrefixTuning

感觉与prompt的想法很相近,那么问题来了,为什么不一开始就用prompt呢?应该看一下代码,我感觉并没有说prefix是在哪里添加

code-huggingface

0.摘要

微调会修改所有语言模型参数,因此需要为每个任务存储完整副本。作者提出了前缀调整,这是自然语言生成任务微调的一种轻量级替代方案,它保持语言模型参数不变,而是优化**一系列连续的特定于任务的向量,称之为前缀。**灵感来源于prompt,在两个任务上使用prefix-tuning:在GPT-2上table-totext generation,在BART上面总结

1.引言

问题:大模型进行微调的代价很大,应该怎么办?

现有解决办法:Adapter-tuning、in-context learning

考虑生成数据表的文本描述的任务,如图 1 所示,其中任务输入是线性化表(例如,“名称:星巴克 | 类型:咖啡店”),输出是文本描述(例如,“星巴克供应咖啡。”)。Prefix-tuning将一系列连续的特定于任务的向量添加到输入中,我们称之为前缀。Transformer 可以将前缀视为一系列“虚拟token”,但与prompt不同,前缀完全由不对应于真实令牌的自由参数组成

针对不同的任务,是需要微调prefix即可。(图中红色的部分是在微调过程中需要进行优化的地方)

与完全微调相比,前缀调整也是模块化的:我们训练一个上游前缀来引导未修改的 LM,因此,单个 LM 可以同时支持许多任务。在任务与用户相对应的个性化背景下,我们将为每个只接受该用户数据训练的用户设置一个单独的前缀,从而避免数据交叉污染。此外,基于前缀的架构使我们甚至可以在一个批次中处理来自多个用户/任务的示例,这是其他轻量级微调方法(如 adaptertuning)无法做到的。

在table-to-text中,与全量微调效果差不多。在summarization中,只退化了一点点性能。但是在low-data设定下,在两个任务上,prefix效果都要比微调要好。prefix对于未见过的数据处理的更好

在这里插入图片描述

2.相关工作

NLG中进行微调:本文只是用了GPT-2和BART,其实可以用在所有的生成任务和预训练模型上面的、

轻量化微调:关键问题是如何扩充 LM 架构并决定调整哪个预训练参数子集。一项研究学习了特定于任务的参数掩码。另一项研究是插入具有可训练参数的新模块。与Adapter相比,减少了30倍的参数。【我的理解,大模型对文本其实已经理解的很好了,只是不知道要做什么任务罢了】

Prompting:AutoPrompt,采用离散的提示词。尔prefix tuning用的是连续的向量进行表示。前缀调整优化适用于该任务所有实例的任务特定前缀。因此,与以前的应用仅限于句子重建的工作不同,前缀调整可以应用于 NLG 任务。

可控生成:目前没有直接的方法来应用这些可控生成技术来对生成的内容实施细粒度控制,如表到文本和摘要等任务所要求的那样。

P-tuning*:(P*指的是 p-tuning,prompt-tuning,prefix-tuning)调整软提示优于以前的工作

在这里插入图片描述

3.Prefix-tuning

Prompt表明在适当的上下文条件下可以在不更改其参数的情况下引导 LM。例如,如果我们希望 LM 生成一个词(例如 Obama),我们可以将其常见搭配作为上下文(例如 Barack)添加到前面,LM 将为所需词分配更高的概率。将这种直觉扩展到生成单个单词或句子之外,我们希望找到一个上下文来引导 LM 解决 NLG 任务。

我们可以将指令优化为连续词嵌入,而不是对离散标记进行优化,其效果将向上传播到所有 Transformer 激活层,并向右传播到后续标记。这比受限于真实单词嵌入的离散提示更具表现力。通过优化所有层的激活,而不仅仅是嵌入层,前缀调整在提高表现力方面更进了一步。另一个好处是,prefixtuning 可以直接修改网络更深处的表示,因此避免了跨越网络深度的长计算路径

对于自回归模型,加入前缀后的模型输入表示: z = [ P R E F I X ; x ; y ] z=[PREFIX; x; y] z=[PREFIX;x;y]

对于Encoder Decoder模型,加入前缀后的模型输入表示: z = [ P R E F I X ; x ; P R E F I X ; y ] z=[PREFIX; x; PREFIX; y] z=[PREFIX;x;PREFIX;y]

本文构造一个矩阵 P θ ( ∣ P i d x ∣ × d i m ( h i ) ) P_\theta(|P_{idx}| \times dim(h_i)) Pθ(Pidx×dim(hi))去存储前缀参数,该前缀是自由参数

h i = { P θ [ i , ; ] , if i ∈ P i d x , L M ϕ ( z i , h < i ) , otherwise. h_i=\begin{cases}P_\theta[i,;],&\text{if}i\in\mathsf{P}{\mathrm{idx}},\\ \mathsf{LM}\phi(z_i,h_{<i}),&\text{otherwise.}\end{cases} hi={Pθ[i,;],LMϕ(zi,h<i),ifiPidx,otherwise.

微调的时候参数Φ是固定的,θ是进行训练的

h i h_i hi 不属于 p i d x p_{idx} pidx时, h i h_i hi仍然依赖于 h θ h_\theta hθ,因为前缀激活总是在左侧上下文中,因此会影响右侧的任意激活函数

注意!

直接更新 P θ P_\theta Pθ会导致优化不稳定以及轻微的性能下降。因为对 P θ P_\theta Pθ矩阵进行了重参数化:

P θ [ i , : ] = MLP θ ( P θ ′ [ i , : ] ) P_{\theta}[i, :]=\text{MLP}_{\theta}(P'_{\theta}[i, :]) Pθ[i,:]=MLPθ(Pθ[i,:])

现在,可训练的参数包括 P θ P_θ Pθ M L P θ MLP_θ MLPθ的参数。请注意, P θ P_θ Pθ P ′ θ P′_θ Pθ 具有相同的行数(即前缀长度),但列数不同。 一旦训练完成,这些重新参数化参数可以被丢弃,只需要前缀 P θ P_θ Pθ已保存

在这里插入图片描述

4.实验

4.1 table-to-text

在这里插入图片描述

BLEU:双语评估替补,详情 吴恩达视频

**NIST:**在 BLEU 方法上的一种改进

MET 和 BLEU 不同,MET同时考虑了基于整个语料库上的准确率和召回率,而最终得出测度

TER 是 Translation Edit Rate 的缩写,是一种基于距离的评价方法,用来评定机器翻译结果的译后编辑的工作量 详情

R-L 中的 L 指最长公共子序列 (longest common subsequence, LCS),ROUGE-L 计算的时候使用了机器译文 C 和参考译文 S 的最长公共子序列

4.2 summarization

在这里插入图片描述

在这里插入图片描述

4.3 Low-data Setting

在训练数据很小的情况下,优势更加明显。【他们在做实验的时候,直接控制数据集的规模就好了】

在这里插入图片描述

在这里插入图片描述

4.4 归纳推理性能

为了构建一个推测设置,作者将现有的数据集进行分割,以便训练和测试覆盖不同的主题。对于table-to-text,WebNLG数据集被标记为表主题。在train和dev中出现了9个类别,表示为SEEN,5个类别只出现在测试时,表示为UNSEEN。因此,我们通过对SEEN类别的训练和对UNSEEN类别的测试来评估extrapolation能力。例如:在news-to-sports中,训练新闻文章,测试体育文章。在within-news,训练{world, UK, business}新闻,并对其余的新闻类别进行测试(e.g., health, tech)

表2(中间)中的“U”列也表示extrapolation的结果

我们还发现,adapter-tuning 也获得了良好的extrapolation性能,这一共同的趋势表明,保留LM参数确实对extrapolation有积极的影响。然而,prefifix-tuning如何改进外推法是一个悬而未决的问题

【结果详见Table2 中间 S:seen,U:unseen,A:all】

5.评估

5.1 Prefix Length

prefix的长度越长,说明可以训练的参数就越多,当长度超过一定阈值的时候,性能就会出现下降的情况,这说明模型已经开始出现了过拟合的问题。

在这里插入图片描述

5.2 Full vs Embedding-only

discrete prompting < embeddingonly < prefix-tuning.

在这里插入图片描述

5.3 Prefix-tuning vs Infix-tuning

上述Table 5 中的下半部分就是Infix-tuning

作者认为这是因为前缀调整可以影响 x 和 y 的激活,而中缀调整只能影响 y 的激活。

[PREFIX; x; y] →[x; INFIX; y]

5.4 初始化

在low-data设定下:用任务相关的词初始化效果>随机真实词汇初始化>随机初始化

在全量数据下:哪种初始化都没有影响

由于作者使用 LM 计算的真实单词的激活来初始化前缀,因此这种初始化策略与前缀调整的理念一致,它尽可能地保留了预训练的 LM。

在这里插入图片描述

6.讨论

个性化:每个用户都被视为一个独立的任务,每个任务都有独立的prefix

Batching across users:可以进行批量计算,只要把prefix添加到对应层就可以,而adapter做不到这一点

Inductive bias of prefix-tuning:保留 LM 参数可能有助于泛化到训练期间看不到的域。【但具体是如何外推的,并不清楚】prefix并没有破坏LM的结果,Adapter实际上破坏了LM的结果,因此Prefix-tuning比起Adapter能更好的利用LM

Aghajanyan 等人最近的工作。 (2020) 使用内在维度表明存在低维重新参数化,它与全参数化一样有效地进行微调。这解释了为什么仅更新少量参数就可以获得下游任务的良好准确性。作者的工作通过表明也可以通过更新非常小的前缀来获得良好的生成性能来回应这一发现。然而,前缀调整不仅仅是关于可训练参数的大小,更重要的是,要修改参数的哪个子集。因此,探索其他轻量级微调方法以实现更好的精度大小权衡将是有趣的未来工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845324.html

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

相关文章

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…

【PHP项目实战训练】——使用thinkphp框架对数据进行增删改查功能

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【Effective Web】常见的css布局方式--三栏布局

常见的css居中方式–三栏布局 第一种实现&#xff1a;table布局&#xff08;不推荐&#xff09; 缺点&#xff1a;在table加载前&#xff0c;整个table都是空白的&#xff0c;且修改布局排版都十分困难 <table class"container"><td class"left"…

《广州化工》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《广州化工》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊 问&#xff1a;《广州化工》级别&#xff1f; 答&#xff1a;省级。主办单位&#xff1a;广州化工集团有限公司 主管单位&#xff1a;广州化工…

学生护眼大路灯应该怎么选?五款护眼大路灯对比推荐

我们都知道光线无处不在&#xff0c;想要减少近视隐患&#xff0c;就不得不提一下护眼灯了&#xff0c;特别是经常坐在电脑前码字的上班族以及深夜还在学习的学生党这一类人群&#xff0c;经常用眼光线不好不仅影响视力健康&#xff0c;还会影响效率。而一款护眼灯能够提供柔和…

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考&#xff1a;配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本&#xff0c;安装cudnn …

【node】启动本地打包文件的方式

前言 … 目标 1 初始化node文件 2 将打包文件通过node发布到本地 3 系列文件 【node】创建本地接口 一 node方式 1 在新建一个空的文件夹node 进入空文件夹在,文件夹的地址栏输入cmd回车,会自动跳转到命令行工具里 2 配置初始化文件 在命令行输入命令npm init,生成pac…

git 上拉下来的新项目web文件夹没有被idea管理,导致启动不了

让idea识别web项目&#xff0c;操作步骤&#xff1a; 1. 打开idea -- 文件 -- 项目结构&#xff1b; 2. 选择 模块 --- 添加 --- web -- 应用 --- 确定&#xff0c;就好了。 3. 文件夹中间出现个圆圈就是被识别到了。

vscode插件开发之 - TestController

TesController概要介绍 TestController 组件是用于实现自定义测试框架和集成测试结果的。它允许开发者定义自己的测试运行器&#xff0c;以支持在VSCode中运行和展示测试。以下是一些使用 TestController 组件的主要场景&#xff1a; 自定义测试框架&#xff1a;如果你正在开发…

如何通过自定义模块DIY出专属个性化的CSDN主页?一招教你搞定!

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f4af;如何通过HTMLCSS自定义模板diy出自己的个性化csdn主页&#x…

学分制系统 GetCalendarContentById SQL注入致RCE漏洞复现

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发,是基于对职业教育特点和需求的深入理解,结合教育部相关文件精神,并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法,方便学校根据自身教学改革特点、信息化建设进程情况选择、…

使用 Java 构建和消费 RESTful 服务的基本方法

REST&#xff08;Representational State Transfer&#xff09;是一种架构风格&#xff0c;它基于Web标准和HTTP协议&#xff0c;常用于构建网络服务。使用Java构建和消费RESTful服务需要掌握一些基本概念和技术。 一、RESTful服务的基本概念 1. REST架构风格 REST架构风格的…

Linux系统资源监控nmon工具下载及使用介绍

一、资源下载 夸克网盘链接&#xff1a;https://pan.quark.cn/s/2684089bc34d 里面包含了各种分享的实用工具&#xff0c;nmon在 Linux服务器监控nmon工具 文件夹内 文件说明&#xff1a; nmon16p_binaries.tar.gz 为最新的nmon官方工具包&#xff0c;支持linux全平台 nmo…

酷开科技丨引领家庭娱乐新潮流,酷开系统带你开启多彩生活新篇章

在繁忙的都市生活节奏中&#xff0c;人们对生活品质的追求从未停歇。家庭娱乐作为提升生活质量的重要部分&#xff0c;随着科技进步和个性化需求的增长&#xff0c;已经发生了翻天覆地的变化。多样化的娱乐方式不仅为家庭生活增添了色彩&#xff0c;也为家庭成员间的相聚带来了…

selenium框架学习

概念 WEB自动化框架 三大组件: selenium IDE 浏览器插件,实现脚本录制WebDriver 实现对浏览器的各种操作(API包)Grid 实现同时对多个用例进行执行,用例在多个浏览器同步执行环境搭建 1、安装selenium: pip install selenium2、安装浏览器 3、安装浏览器驱动(对应的驱…

戴尔外星人原厂系统美版改国行正确识别本机SN,支持F12 Support Assist OS Recevory恢复重置识别SN服务编码

1.重新部署可以永久正确识别My Alienware和Support Assist服务编码 原厂系统远程恢复安装&#xff1a;https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f 2.安装有两个软件和官网主页会识别原机的SN码&#xff0c;就是本机服务编码&#xff08;my Alie…

【开发工具】git服务器端安装部署+客户端配置

自己安装一个轻量级的git服务端&#xff0c;仅仅作为代码维护&#xff0c;尤其适合个人代码管理。毕竟代码的版本管理是很有必要的。 这里把git服务端部署在centos系统里&#xff0c;部署完成后可以通过命令行推拉代码&#xff0c;进行版本和用户管理。 一、服务端安装配置 …

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台&#xff01;前后端分离架构 SpringBoot2.x&#xff0c;SpringCloud&#xff0c;Ant Design&Vue3&#xff0c;Mybatis-plus&#xff0c;Shiro&#xff0c;JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

RocketMQ快速入门:集成spring, springboot实现各类消息消费(七)附带源码

0. 引言 rocketmq支持两种消费模式&#xff1a;pull和push&#xff0c;在实际开发中这两种模式分别是如何实现的呢&#xff0c;在spring框架和springboot框架中集成有什么差异&#xff1f;今天我们一起来探究这两个问题。 1. java client实现消息消费 1、添加依赖 <depen…

React+TS前台项目实战(十三)-- 全局常用响应式加载动画Loading组件封装

文章目录 前言Loading组件1. 功能分析2. 代码详细注释3. 使用方式4. 不同尺寸loading动画效果展示 总结 前言 高阶组件有几大优点&#xff0c;其中一个就是渲染劫持&#xff0c;如懒加载&#xff0c;是否显示该元素loading&#xff0c;这在项目中我们经常用到。毫无疑问&#…