论文链接:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
代码链接:https://github.com/THUDM/P-tuning-v2

主要内容

将prompt tuning引入到NLU(Natural Language Understanding)中,提出了P-Tuning v2, 可以作为fine-tuning的有效替代

介绍

预训练的语言模型已经在NLU领域上取得了很大成功,其中fine-tuning功不可没,但是由于需要存储所有的梯度和优化器状态的参数,fine-tuning在训练过程中需要消耗很多的内存。而且,fine-tuning需要在推理过程中为每一个任务保留一份模型参数,由于预训练模型的体积较大,fine-tuning因此变得不方便。

Prompting

prompting通过冻结预训练模型的所有参数,并且使用自然语言提示符来查询语言模型。举例来说,对于情绪分析任务,我们可以将一个样本连接到提示符“这部电影是[MASK]”,然后让预训练的语言模型来预测[MASK]的信息。然后我们可以用[MASK]被预测为“好”或者“坏”的概率来预测样本的标签。prompting不需要训练并且只需要保留一份模型的参数。但是,相比fine-tuning,prompting在很多情况下只能到次优的性能。

Prompting tuning

prompting tuning是一种只调整连续prompt的思路,具体来说[1]、[2]提出了在原始的输入embedding序列中增加可训练的连续embedding的方法。这些连续的embedding(prompt)类似于prompting中手动设计的离散prompt。在训练过程中,只要连续的prompt会被更新。当prompt tuning在许多任务上取得比prompting更优性能的同时,promp tuning在小模型上的效果仍然不然fine-tuning,特别是在小于100亿参数的模型上。此外,正如我们的实验所示,prompt tuning在一些困难序列任务上表现不如fine-tuning,如提取问题回答和序列标记。

文章的主要贡献在于一个新颖的实验发现:合理优化的prompt tuning可以在各种尺寸模型和NLU任务上取得比fine-tuning更优的效果。与之前工作相比,我们的发现显示了prompt tuning对NLU任务的通用性以及其巨大的潜力。

具体说来,我们的方法P-tuning v2可以被看作优化版本的prefix-tuning,一种为生成而设计并且适用于NLU的方法。P-tuning v2最显著的提升来源于使用了深度的prompt tuning,即对预训练模型的每一层都采用连续的prompt。深度prompt tuning增加了连续prompt的能力并且缩小了在fine-tuning的差距,特别是在小模型和复杂任务的情况下。而且,我们提供了一些优化和实现的细节来增强我们的结果。

实验证明:P-tuning v2在300M到10B参数的模型范围,以及多种困难NLU任务,比如问题回答以及序列标记上都取得了和fine-tuning匹配的性能。与fine-tuning相比,P-tuning v2每个任务只使用了0.1%-3%的可训练参数,这极大程度上减少了训练时间、存储成本。

准备工作

NLU

将NLU任务分为简单和困难两类
1)简单任务包括对单个标签进行分类。大部分的数据集来自于GLUE和Super-GLUE,包含了文本分类,自然语言推理,多项选择题回答等

2)困难任务包括对一系列标签进行分类。主要是关于信息提取,比如开放信息提取,命名实体标识,提取问题回答以及语言角色标记

prompt tuning

prompt tuning以及P-tuning在主干语言模型参数被冻结时,引入了可训练的连续prompt作为NLU自然语言prompt的替代。举例说来,记 V \mathcal{V} V为语言模型 M \mathcal{M} M的词汇, e e eM \mathcal{M} M的embedding函数。

为了判断一个影评 x = "Amazing movie" x=\text{"Amazing movie"} x="Amazing movie"是积极的还是消极的,很自然的会想到在影评中增加一个prompt "这是[MASK]"并且生成[MASK]被预测为好或者坏的条件概率。在这种情况下,prompt token{“It”, “is”, “[MASK]”}属于模型词汇 V \mathcal{V} V, 输入的embedding序列可以表示为:
[ e ( x ) , e ( " I t " ) , e ( " i s " ) , e ( " [ M A S K ] " ) ] [e(x), e("It"), e("is"), e("[MASK]")] [e(x),e("It"),e("is"),e("[MASK]")]

然而,由于模型 M \mathcal{M} M在本质上式连续的,从优化的角度来看,使用离散的自然prompt无法达到全局最优。然而,P-tuning提出使用可训练的连续embedding [ h 0 , . . . , h i ] [h_0, ..., h_i] [h0,...,hi]来替换prompt,然后将输入序列转化为
[ e ( x ) , h 0 , . . . , h i , e ( " [ M A S K ] " ) ] [e(x), h_0, ..., h_i, e("[MASK]")] [e(x),h0,...,hi,e("[MASK]")]
这样输入连续可微,有利于达到全局最优(如下图(a)所示)

在预训练模型的主干被冻结的限制下,prompt tuning已经被证实了在简单NLU任务,以及100亿参数的的模型上,取得了和fine-tuning相当ed性能。

P-Tuning v2

缺少通用性

prompt-tuning h和 P-tuing已经被证实在许多NLP的应用上相当有效,然后,考虑到通用性,P-tuning还不是fine-tuning一个很好、很全面的替代。

缺少尺寸通用性

prompt tuning已经被证实在超过100亿参数的模型上取得了和fine-tuning近似的性能,但是对于小模型(模型参数在100M到1B之间),prompt tuning的性能远不如fine-tuning。

缺少任务通用性

尽管P-tuning以及再NLU的benchmark,比如GLUE和Super-GLUE上体现了卓越的性能,但是,P-tuning在困难NLU任务上的性能没有得到验证。首先,序列标记需要预测一个序列的标记而不仅仅是一个标记。其次,序列标记通常预测没有实际意义的标记,这很难转化为有效的语言表达。在我们的实验中,我们展示了P-tuning在序列标记上的性能不如fine-tuning。

考虑到这些挑战,我么提出了P-tuning v2。它将前缀调优作为一个跨规模和NLU任务的通用解决方案。

深度prompt tuning

前缀调优被提出主要是为了解决自然语言生成问题(NLG),但是我们发现它对NLU同样适用。
在P-tuning中,对于transformer的第一层,连续的prompt只被嵌入到输入embedding中。在接下来的transformer层,连续prompt嵌入到embedding中的位置由之前的transformer层决定,这可能会导致两个可能的优化挑战:
1)微调的参数量是有限的。大部分的语言模型目前支持的最大序列长度为512(由于注意力二次计算的复杂度)。如果我们额外去除上下文的长度(比如要分类的句子),用来填补连续prompt的长度是有限的。
2)当使用非常深的transformer时,其稳定性是有限的。当transformer变得更深的时候,由于许多中间层(非线性激活函数)的计算,来自transformer第一层的prompt的影响可能是意想不到的,使得优化过程不平滑。

考虑到这些原因,P-tuning v2借鉴前缀微调,使用了多层prompt来提升P-tuning的性能。不同层中的prompt作为输入序列中的前缀token被添加,并且它们彼此独立于其他中间层(而不是由之前的transformer层计算)。另一方面,通过这种方式,P-tuning v2有更多针对任务的可调参数(从0.01%到0.1%-3%),从而允许更多的单任务容量,但这个参数量仍然比整个预训练语言模型要小的多。另一方面,添加到更深层的prompt,由于包含更少的中间层,可以对输出产生更大更直接的影响。

优化和实现

同样有一些有效的优化和实现细节

优化:再参数化

之前的方法使用再参数化函数来增加训练速度、鲁棒性以及性能。然后,对于NLU任务,我们发现再参数化是否有用,取决于所选择的数据集和任务。对于一些数据集,比如RTE和CONLL04,MLP的再参数化带来了很好的性能提升,对于其他数据集,如BoolQ,再参数化可能没有效果,甚至效果更差(如CONLL12)。

优化:prompt的长度

prompt的长度在prompt tuning的超参数搜索中起到了核心作用。在我们的实验中发现,不用的NLU任务通常在不同的prompt长度下取得最优的效果。

优化:多任务学习

多任务学习的方法对我们的方法来说是可选地,但是可能会很有帮助。一方面,连续prompt的随机初始化增加了优化的难度,这点可以通过更多的训练数据或者任务相关的无监督预训练来缓解。另一方面,连续prompt可以作为实现特定知识,跨任务和跨数据集的有效载体。我们的实验展示,在一些困难任务中,多任务学习可以有效t提升P-tuning v2的性能。

实现:[CLS]以及token分类,而不是语言器

语言器(verbalizer)一直是prompt tuning的核心部分,它将一个one-hot类别转换为有意义的单词,来利用预训练语言模型的头。尽管它在few-shot设置中潜在的必要性,verbalizer在全数据监督中却不是必要的。它妨碍了在需要无实际意义标签和embedding场景中prompt tuning的应用。因此,P-tuning v2回到了传统的具有随机初始化线性头的[CLS]标签化分类范式。

实验结果





P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks论文笔记相关推荐

  1. 论文笔记 | 谷歌 Soft Prompt Learning ,Prefix-Tuning的 -> soft promt -> p tuning v2

    论文笔记 | 谷歌 Soft Prompt Learning ptuning -> Prefix-Tuning -> soft promt -> p tuning v2 " ...

  2. 《CPT COLORFUL PROMPT TUNING FOR PRE-TRAINED》 论文笔记

    文章目录 摘要 1. NTRODUCTION 2 PRELIMINARY 3. CROSS-MODAL P ROMPT TUNING (CPT) 3.1 OVERVIEW 3.2 VISUAL SUB ...

  3. The Power of Scale for Parameter-Efficient Prompt Tuning及prefix tuning与prompt tuning的区别

    1.本文贡献 (1)提出prompt tuning,并在大型语言模型领域展示其与model tuning(fine tuning)的竞争力: (2)减少了许多设计选择,显示质量和鲁棒性随着规模的增加而 ...

  4. pytorch深度学习-微调(fine tuning)

    微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户.一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然 ...

  5. pretraining+fine tuning

    few shotlearning简单实现方法:在大规模数据做预训练模型,然后在小规模suport set上做fine tuning.方法简单准确率高. 基础数学知识: cos函数可以判断两个向量的相似 ...

  6. 如何fine tuning

    先看一个示例 keras入门 -在预训练好网络模型上进行fine-tune https://blog.csdn.net/hnu2012/article/details/72179437 我们的方法是这 ...

  7. 计算机视觉之迁移学习中的微调(fine tuning)

    现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...

  8. Bert模型 fine tuning 代码run_squad.py学习

    文章目录 关于run_squad.py 分模块学习 SquadExample InputFeatures create_model model_fn_builder input_fn_builder ...

  9. ConvNeXt V2 论文笔记

    ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders(2023.1.2-v1) 链接:   paper     ...

最新文章

  1. nginx三大功能(之二负载均衡)
  2. 深度聚焦 3 大技术领域,阿里云将重磅亮相首届线上 KubeCon
  3. 不是程序员也能看懂的ZCash零知识证明
  4. RabbitMQ introduction
  5. javascript中的异步编程
  6. vue从入门到精通之基础篇(三)生命周期
  7. bootstrap样式异常_处理异常功能样式
  8. 使用@OrderBy对Spring Data MongoDB集合进行排序
  9. Flutter 气泡背景效果 仿苹果桌面运动的气泡
  10. 【华为云动态】华为云开放日发布云专家激励计划,要将开发者“宠”上天
  11. 我和2000万人在B站刷凤凰传奇
  12. 弹框插件self(动效兼容到IE9,功能兼容IE6)
  13. 算法学习(三)堆排序
  14. Ubuntu下 sqlitebrowser 查看 Android Sqlite数据库
  15. Win11系统怎么获得管理员权限
  16. 浏览器F12进行Web程序调试
  17. command not found: conda
  18. 有逆时针将视频画面旋转90度的方法吗?
  19. 你喜欢天长地久,还是曾经拥有?
  20. 儒道墨法,诸子百家中影响最大的四家之于今人的意义

热门文章

  1. 【数字IC/FPGA】电平同步、脉冲同步、边沿同步
  2. 抽象类或接口的实例化问题
  3. 接口和抽象类的共性与区别
  4. ntpd服务状态及日志查询方式
  5. Python之建模规划篇--整数规划
  6. 单源最短路径: 差分约束和最短路径
  7. 排行前50的编程语言
  8. Web开发之-CS架构与BS架构
  9. 11. WS · HTTPDNS · FTP · 邮件
  10. ab压力测试 及结果分析