Google Research 推出高效的Prompt Tuning方法

2024-09-06 03:28

本文主要是介绍Google Research 推出高效的Prompt Tuning方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人工智能咨询培训老师叶梓 转载标明出处

一般模型微调方法需要对预训练模型的所有参数进行调整,这在大规模模型中既耗时又耗资源。Google Research的研究团队提出了一种名为“Prompt Tuning”的方法,旨在通过学习“软提示”来调整冻结的语言模型,使其能够更好地完成特定的下游任务。这种方法不仅简单有效,而且在模型规模增大时,其性能逐渐接近全模型微调(Model Tuning)的效果。图2通过对比模型调整和提示调整在处理不同下游任务时的模型复制和推理方式,展示了提示调整在参数效率上的优势。

论文链接:https://arxiv.org/pdf/2104.08691

项目链接:https://github.com/google-research/text-to-text-transfer-transformer/

Prompt Tuning

Prompt Tuning基于T5的“text-to-text”方法,将所有任务视为文本生成任务。不同于传统的分类模型,它将分类任务建模为条件生成任务,其中输出Y是代表类别标签的标记序列。在T5中,分类被表示为,这里的θ是构成编码器和解码器的变换器的权重。

提示是向模型添加额外信息的方法,通常通过在输入X前添加一系列标记P来实现,以最大化正确Y的似然,同时保持模型参数θ不变。在GPT-3中,提示标记的表示是模型嵌入表的一部分,由冻结的θ参数化。

Prompt Tuning去除了提示必须由θ参数化的约束,而是拥有自己的专用参数,这些参数可以更新。这使得提示可以被视为一系列特殊标记,其嵌入是可学习的。新的条件生成表示为,并且可以通过反向传播来训练,只对​应用梯度更新。

设计决策:

  • 初始化提示表示:最简单的方法是随机初始化。更复杂的方法是从模型的词汇表中抽取嵌入来初始化每个提示标记。对于分类任务,还可以使用枚举输出类别的嵌入来初始化提示,类似于Schick和Schütze (2021)的“verbalizers”。
  • 提示长度:提示的长度是设计时需要考虑的另一个因素。提示越短,需要调整的新参数就越少。因此,研究者们旨在找到一种最短的提示,但仍然能够保持良好的性能。

与GPT-3等自回归语言模型不同,T5模型使用编码器-解码器架构,并在跨度腐败目标上进行预训练。T5的任务是“重建”输入文本中被掩盖的跨度,这些跨度用独特的哨兵标记标记。然而,研究者们认为这种设置可能不适合通过提示调整来控制冻结模型。因此,他们实验了三种不同的设置:(1)“Span Corruption”,(2)“Span Corruption + Sentinel”,(3)“LM Adaptation”。

研究者们在不同规模的预训练T5模型上构建了冻结模型,并在SuperGLUE基准上测量了性能。他们发现,随着模型规模的增加,Prompt Tuning的性能逐渐接近传统的模型微调方法。他们还发现,Prompt Tuning在跨领域任务中展现出更好的鲁棒性。

在比较不同调整技术时,研究者们发现Prompt Tuning在参数使用上非常高效。对于超过十亿参数的模型,Prompt Tuning只需要不到0.01%的任务特定参数。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信提供直播链接:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
 

LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验

实验设置:

  • 使用不同规模的预训练T5模型(Small, Base, Large, XL, XXL)。
  • 使用额外训练了100K步的LM适应版本的T5,初始化使用类标签,并使用长度为100个标记的提示。
  • 在SuperGLUE基准上测量性能,这是一个包含八个具有挑战性的英语语言理解任务的集合。

实验结果:

图1展示了随着模型规模的增加,Prompt Tuning与模型微调的竞争力逐渐增强。在XXL规模(110亿参数)下,Prompt Tuning甚至与更强的多任务模型微调基线相匹配,尽管其任务特定参数少于20,000倍。

图3为超参数消融研究的结果:

提示长度(Prompt Length):对于大多数模型大小,将提示长度增加到超过单个标记对于实现良好性能至关重要。

提示初始化(Prompt Initialization):基于类的初始化在所有模型大小上表现最佳。

预训练目标(Pre-training Objective):LM适应在所有模型大小上都优于跨度腐败,即使在下游任务目标中添加了哨兵,XXL模型也能很好地工作。

图4展示了不同调整技术(Model Tuning, Prefix Tuning, WARP, Prompt Tuning, Prompt Design)的参数使用情况。Prompt Tuning在大多数模型大小下,只需要不到0.01%的任务特定参数。

这些结果表明,Prompt Tuning是一种有效的参数高效方法,能够在不牺牲性能的前提下,减少对计算资源的需求。

Prompt Tuning的参数效率与领域适应性

Prompt Tuning在参数效率和领域适应性方面展现出显著优势。通过与其他先进的技术如Prefix Tuning、WARP和P-tuning等进行比较,Prompt Tuning以其低于0.01%的任务特定参数需求,确立了其在大规模模型中的领先地位。

Prompt Tuning的核心在于将任务特定信息以提示的形式注入到模型的输入中,而不是调整模型的内部权重。这种方法允许模型在保持其对语言的一般理解的同时,针对特定任务调整其行为。与Prefix Tuning相比,Prompt Tuning不仅参数更少,还允许模型在处理输入时更新中间层的表示,这在处理不同领域数据时尤为重要。

在领域迁移的测试中,Prompt Tuning表现出了卓越的鲁棒性。通过在MRQA 2019共享任务和GLUE释义检测任务上的实验,研究者们发现Prompt Tuning在多数领域外数据集上超越了传统的模型调整方法。特别是在领域变化较大的情况,如从Wiki迁移到教科书或生物医学数据集时,Prompt Tuning的性能提升更为显著。

在SQuAD数据集上训练的模型在不同领域数据集上进行零样本领域迁移的性能。

Prompt Tuning在模型集成方面也展现了其独特的优势。与传统的模型集成相比,Prompt Tuning通过在同一任务上训练多个提示,创建了多个“虚拟模型”,这些模型共享相同的核心语言模型参数。这种方法不仅大大减少了存储和推理成本,还通过集成多个提示来提高模型的性能和不确定性估计。

尽管Prompt Tuning在连续嵌入空间中工作,使得提示的解释变得复杂,但研究者们通过分析提示标记与其词汇表中最近邻的相似性,发现学习到的提示确实形成了紧密的语义簇。这表明提示在学习过程中获得了类似单词的表示能力。特别是在使用类标签初始化提示时,这些标签往往会保留在最终学到的提示中,这为理解模型的行为提供了线索。

这项研究证明了Prompt Tuning是一种有效的参数高效方法,能够在不牺牲性能的前提下,减少对计算资源的需求。这对于大规模模型的部署和应用具有重要意义。

这篇关于Google Research 推出高效的Prompt Tuning方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那