0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于多任务预训练模块化提示

深度学习自然语言处理 来源:深度学习自然语言处理 2023-06-20 11:04 次阅读

Prompt Tuning 可以让预训练的语言模型快速适应下游任务。虽然有研究证明:当训练数据足够多的时候,Prompt Tuning 的微调结果可以媲美整个模型的训练调优,但当面对 Few-shot 场景时,PT 的调优方法还是存在一定的局限性。针对这个问题,复旦提出了多任务预训练模块化 Prompt(简称为:),来提高模型在 Few-shot 场景下的 PT 效果,使模型能够快速适应下游任务。

背景介绍

基于 Prompt Learning 的预训练模型在 Few-shot 场景下取得了显著的进展,它缩小了模型训练和下游任务微调之间的差距,并且通过将下游任务转换成统一的语言建模任务,可以重复使用预训练模型头,而不是训练一个随机初始化的分类头来解决有限数据的任务。然而,基于 Prompt Learning 通常需要针对每个下游任务进行全参数微调,这就需要大量的计算资源,尤其当面对上百亿的大模型的时候。

随着时间推移,近期有很多工作致力于有效的 prompt learning 方法的研究,该方法只需学习少量的 soft prompt 参数,并且能够保持 PTM 主体参数不变。与模型的整体调优相比,prompt 调优优势明显,它对计算资源要求较低并且针对特定的下游任务能够实现快速调优匹配。但是尽管已经证明,当训练数据足够时,提示调整可以与完整模型调整的性能相匹配,但由于随机初始化的 soft prompt 在预训练和微调之间引入了新的差距,因此在 Few-shot 中无法从零开始训练 soft prompt。

「为了弥补 Prompt Tuning 的预训练和微调之间的差距,本文提出了多任务预训练模块化提示 (),它是一组在 38 个中文任务上预训练的可组合提示」,在下游任务中,预训练的 prompt 可以有选择地进行激活和组合,提高对未知任务的泛化能力。为了弥合预训练和微调之间的差距,将上下游任务制定为统一到了一个机器阅读理解任务中。 通过在梯度下降、黑盒调优两种学习范式的实验,证明了 在 Few-shot 学习场景中,相比比 Prompt tuning、完整模型调优和其它的 Prompt 预训练方法都具有显著的优势,最后作者还证明了仅通过学习 8 个参数来组合预训练的模块化提示,就可以实现对下游任务的快速适应。

方法介绍

方法主要通过以下三个步骤实现对下游任务的快速适应:(1) 在大规模无标签数据上进行自监督预训练;(2) 使用多任务学习进行预训练模块指令和相应的 route;(3) 激活并调整子集指令以进行对下游任务的适应。具体流程图如下所示: 5dc0d54a-0e82-11ee-962d-dac502259ad0.png  方法的主要内容包括:「统一为 MRC 任务、深度模块化 Prompt、多任务预训练、下游 FT」等四个方面。 「统一 MRC 任务」:基于 Prompt 的学习方法不能涵盖较广范围的任务,并且任务之间的标签词可能不同,从而导致预训练模型在不同任务上的效果不佳。基于 MCC 方法,可以将上下游任务转化成 MCC 任务使得不同任务可以共享相同的标签词,但该方法当面对大于 16 个标签的分类任务时仍存在局限性。为此 方法将上下游任务统一成机器阅读理解 (MRC) 格式,通过构建一个查询来进行分类任务,进而可以处理不同标签数的任务,从而实现更广泛的任务支持。 「深度模块化 Prompt」:为了增加 soft prompt 的能力,使其匹配训练数据的复杂性,作者从深度和宽度两个维度扩展了 soft prompt,具体如下图所示:

5dce2894-0e82-11ee-962d-dac502259ad0.png

其中:首先在深度方面,作者增加了 LSTM 层或 Transformer Decoder 来实现深度扩展。这些层使得模型可以更好地学习输入序列的表示,并且能够考虑更多的上下文信息;其次在宽度方面,作者在 soft prompt 里面添加了更多的词汇和语义信息。通过深度和宽度的拓展,soft prompt 可以更好地匹配训练数据的复杂性,从而提高模型的性能和准确率。

「多任务预训练」:多任务学习已被证明可以提高各种任务的 prompt learning 的表现。作者对由 38 个不同类型、领域、大小的中文 NLP 任务组成的混合任务进行了深度模块化提示的预训练。为了处理不平衡的数据大小,对于每次向前计算,首先随机从 1 到 38 中选择一个任务 ID,然后获取对应于所选择任务的一个批次的训练数据,从而每个任务的学习步骤数量应该是相同的。

「下游 FT」:为了能够快速适应下游任务,本文通过两个阶段进行微调,如下图所示:

5dd55d30-0e82-11ee-962d-dac502259ad0.png

其中:在第一阶段,为每个层分配一个随机路由,并训练 route 选择性地重用预训练的模块提示来解决目标任务,同时保持所有其他参数冻结。在第二阶段,冻结 route 并只微调选择的提示。整个微调过程中,PTM 参数保持不变。同时作者探索了基于梯度下降和黑盒调优两种学习范式下的微调。对于梯度下降,使用 Adam 优化器进行两个阶段的微调。对于黑盒 FT,采用贝叶斯优化在第一阶段优化 route,并采用 CMAES 优化选择的内在 prompt ,同时冻结映射矩阵 A。

实验思路 在 38 个中文 NLP 任务上预训练,然后在 14 个下游任务上进行评估。在 Few-Shot 下的实验表明,具体如下图所示,可以发现「其性能明显优于 PT、全模型微调和之前的 prompt 训练方法」。仅通过调整 route(仅有 8 个参数)冻结 PTM 和所有 prompt,就可以实现对下游任务的快速适应。 5deb949c-0e82-11ee-962d-dac502259ad0.png
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46530
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • 语言模型
    +关注

    关注

    0

    文章

    434

    浏览量

    10044

原文标题:ACL 2023 | 复旦邱锡鹏组提出模块化Prompt多任务预训练,可快速适应下游任务

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于CVR建模的多任务联合学习训练方法——ESMM

    本文作者提出 ESMM 算法,通过定义新型多任务联合训练的方式,以全新的视角对 CVR 进行建模。
    的头像 发表于 08-27 16:41 5114次阅读
    基于CVR建模的<b class='flag-5'>多任务</b>联合学习<b class='flag-5'>训练</b>方法——ESMM

    多任务系统中的堆栈使用

    在使用μC/OS的多任务应用程序中,main()启动后首先使用系统C栈,在OS启动后使用任务栈。
    发表于 12-02 11:15 508次阅读

    模块化编程变量如何定义

    不知道发帖有没有用,谁能帮我,模块化编程定义变量老是提示重复定义,就是一个模块中的变量在主函数中要随时观察你其值,到底在哪定义
    发表于 08-07 09:00

    setjmp构建简单协作式多任务系统

    系统的调度只在用户指定的时机发生,这会大大简化内核和用户系统的设计,尤其本文实现的系统通过条件查询来放弃CPU,既符合传统单片机程序设计的思维,又带来了多任务模块化、可重入的编程便利。Setjmp
    发表于 12-07 15:55

    功放失真模块化测试解决方案

    功放失真模块化测试解决方案
    发表于 05-16 16:16

    模块化编程

    在练习模块化编程的时候,知道尽量不用全局变量!!可是,不得不使用很多的全局变量的时候,怎么办?提示multiple public……
    发表于 08-26 16:17

    【emWin实战教程V2.0】第32章 STemWin多任务设计

    初学者来说,本章节的内容作为一个知识点了解下即可。32.1 初学者重要提示32.2单任务系统(超级循环)32.3 多任务系统:一个任务调用STemWin32.4
    发表于 02-10 19:57

    模块化编程&工程模板设计

       九层妖塔 起于垒土【蓝桥杯】—{模板Template}—{Part1:模块化编程&工程模板}一、流程图二、基础知识1、编译预处理2、变量的定义和说明3、`extern`三、操作流程1
    发表于 11-30 07:18

    什么是模块化编程

    1什么是模块化模块化编程就是把我们的一整个项目,分成很多模块(比如一个学生成绩查询可以分为,登陆,查询,修改保存,退出等模块)而一个程序工程包含多个源文件(.c 文件和 .h 文件),
    发表于 12-06 08:02

    多任务编程多任务处理是指什么

    嵌入式Linux应用编程-多任务编程多任务处理是指用户可在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。Linux就是一个支持多任务的操作系统,比起单
    发表于 12-22 08:30

    uCOSIII构建多任务的过程

    uCOSIII构建多任务LED.CF407时钟挂载LED.H(宏定义狂魔)APP.C完整工程下载上一节移植构建了模板和创建了单任务,这一节来构建多任务uCOSIII系统移植(一)构建单任务
    发表于 01-25 07:50

    任务裸机系统与多任务系统的区别在哪

    总体概述与任务裸机系统与多任务系统的区别任务的定义与切换裸机系统与多任务系统的区别裸机系统包括轮询系统,前后台系统轮询系统:在进行初始过后
    发表于 02-18 07:03

    什么是模块化编程?模块化编程的注意事项

    单片机零基础入门(8-4)模块化编程---LED1602调试工具一、回顾二、什么是模块化编程?1、传统方式编程:2、模块化编程3、模块化编程框图3、
    发表于 02-23 07:14

    ZMC运动控制器多任务编程一

    、用户多任务程序。运动控制器支持多任务编程,各任务可以独立执行,任务间不受影响。通过划分任务,程序模块化
    发表于 11-07 09:52

    嵌入式多任务GUI的通用解决方案

    针对嵌入式多任务 GUI 系统需要非常强的灵活性、可移植性和可伸缩性的特点.提出一种通用解决方案;采用层次化、模块化和面向对象的设计思想,给出了 GUI 的体系结构,并对多任务 GUI
    发表于 01-04 18:30 24次下载