©PaperWeekly 原创 · 作者 | 李国趸
单位 | 浙江大学硕士生
研究方向 | 少样本学习
前言
从 prompt learning 的发展来看,一开始关注的是将任务建模成和预训练相近的形式能够提高在少样本微调全部模型参数的表现,然后就是关注怎么去更好地设计 prompt,可以是离散,也可以是连续,或者是混合的 template。
连续型 prompt 的出现,让人们开始思考能否只微调 prompt 相关的参数,固定预训练模型的参数,从而避免传统 fine-tuning 的问题,即每一个下游任务,都要存储一份特定于该任务的微调后的模型拷贝,这种方式被叫做 Parameter-Efficient Prompt Tuning。
这样的设想,最大的挑战在于,仅微调 prompt 相关的参数,能否媲美甚至超过 fine-tuning 的表现。
于是提出下面几种疑问:
在全量数据情况下,仅微调 prompt 相关的参数,能否媲美甚至超过 fine-tuning 的表现?
在少量数据情况下,仅微调 prompt 相关的参数,能否媲美甚至超过 fine-tuning 的表现?
如果能做到上述表现,预训练模型的尺寸是否有影响?是否一定需要超大预训练模型?
本文通过详细解读三篇文章给大家展示了 Parameter-Efficient Prompt Tuning 的发展是如何解决上述疑问的。
从Parameter-Efficient Prompt Tuning说起
论文标题:
The Power of Scale for Parameter-Efficient Prompt Tuning
收录会议:
EMNLP 2021
论文链接:
https://arxiv.org/abs/2104.08691
代码链接:
https://github.com/kipgparker/soft-prompt-tuning
尽管之前出现了一些全自动设计模板的技术,但是 prompt-based 的范式在下游任务上的表现和传统 fine-tuning 的范式仍然有较大的差距。但是传统 fine-tuning 范式也存在一些问题,比如针对每一个下游任务,都要存储一份特定于该任务的微调后的模型拷贝。
由此,作者提出一种 Parameter-Efficient 的 Prompt Tuning 方式,即固定预训练模型,每个下游任务仅添加若干个 tunable 的 token 作为前缀。后续实验证明了这种方式在大规模预训练模型的助力下,能够媲美传统的 fine-tuning 表现。
作者以 T5 模型为 backbone,将所有任务重定义为 text-to-text 的生成任务,给定输入,生成的文本代表输出的标签。“prompt”部分则由若干 tunable 的 token 组成,作为输入文本的前缀。在 prompt tuning 过程中,只有 tunable 的 token embeddings 被训练,其他所有参数都被固定住。尽管方法听起来很简单,但是还有一些细节需要被考虑。
prompt 设计的相关问题。首先是 prompt tokens 的初始化。一种简单的方式是直接从零训练,另一种方法则是采用词表中的一些预训练的 token embeddings 去初始化。对于分类任务,还有一种则是用输出类别相关的词去初始化,作为一种 constraint 让模型的输出尽量是这些合法的类别。另外一个问题就是 prompt 的长度,直觉上看,prompt 越长,则可微调的参数越多,作者希望能够在引入最少的可微调参数下达到理想的表现。
Pre-trained 模型的相关问题。一个理想的 prompt 设计应该尽量接近预训练的任务,缩小预训练和下游之间的 gap。T5 模型的预训练任务是 Span Corruption,模型被要求去重构被打乱的句子。例如:Thank you for inviting me to your party last week。模型的输入被打乱为“Thank youme to your partyweek”,模型的输出则是“for invitinglast”。
可以看到输入和输出都被加上了一些特殊 token,也就是说在 Span Corruption 任务中,模型输入和输出的都是不自然的句子。尽管这种预训练和实际使用时候的差异能够通过全量参数的 fine-tuning 来克服,但是对于只微调 encoder 端的前缀参数的 prompt tuning 来说则很难解决,毕竟 decoder 是被固定的,导致生成的第一个 token 很可能是这种特殊 token。
由此,作者针对 T5 实验了这些设定:
Span Corruption:直接用 pre-trained T5 来测试下游任务上能否生成期望的文本。
Span Corruption+Sentinel:直接用 pre-trained T5 来测试,但是目标文本增加了这种特殊 token 前缀。
LM Adaption:采用 LM 的 objective 继续训练 T5 一些 steps,也就是输入符合自然语言的 prefix,要求模型继续生成符合自然语言的 output。
实验设定如下:
预训练模型:T5 v1.1 from small to XXL。
默认设置:采用经过额外 100k steps 的 LM Adaption 以后的 T5 模型 + 100 tokens 的 prompt。
评测数据集:采用 SuperGLUE 基准的全量数据,将数据集重定义为 text-to-text 的形式(但是并不会加上 task name 的前缀),每一个 task 单独训练一个 prompt,训练步数为 30K,最后报告 SuperGLUE 的 dev set 的结果。
基线模型:1)Model Tuning:每个 task 分别微调一个 T5 模型;2) Model Tuning(Multi-Task):多个 task 一起训练,为了区分每个 task,会加上 task name 的前缀。
实验结果如下:
随着模型参数的增加,Prompt Tuning 的效果越来越好,当 T5 模型参数达到 XXL 时,Prompt Tuning 的效果追平了 Model Tuning 和 Model Tuning(Multi-Task)。同时,Prompt Tuning 的效果远远超过了与 T5 同参数级别的 GPT-3 in context learning 的效果。
prompt tokens 对 prompt tuning 的影响:在一般模型大小情况下,prompt tokens 越多,确实效果越好,但是当 token 超过 20 以后,增益就越来越小,对于超大模型的情况,即使是单个 prompt token,也能达到和 20 个 token 以上的 prompt 相近的效果。
prompt token 的初始化:1. 随机初始化;2. 从 T5 词表中 5000 个常见单词中采样;3. 用类标签来初始化,标签是多个 token 时,则取均值,当类标签都用完后,剩下的 prompt token 用方法 2 初始化。类标签初始化在各种尺寸的模型上都表现最好,但是不同初始化策略在各种尺寸模型上表现差异很大,当尺寸变 XXL 后,这种差异就会消失。
预训练任务对 prompt tuning 的影响:Span Corruption 任务导致了 prompt tuning 表现很差,即使加了 Sentinel 也没法缓解,而 LM Adaptation 设定下随着模型尺寸增大则 prompt tuning 表现越来越好。当然,当尺寸变为 XXL 后,这种影响也会消失。
LM Adaptation steps 对 prompt tuning 的影响:LM Adaptation steps 越多,效果越好,这也说明 T5 需要进一步预训练才行。当然,当尺寸变为 XXL 后,这种影响也会消失。
与 P-tuning 的区别:P-tuning 的 soft tokens 需要考虑插入位置,同时采取的策略是 LM+Prompt Tuning,而 Prompt Tuning 则是直接插入在 prefix 位置,同时固定了 LM。同时 Prompt Tuning 相比 Model Tuning 的好处在于不会太过拟合在目标任务上,拥有更好的泛化性。
Prompt 集成:prompt tuning 的另一个好处在于可以在保存一份 LM 模型拷贝情况下,同时训练多个 prompt,并实现集成。作者在 SuperGLUE 上训练了 5 个 prompt,并用多数投票法进行集成,表现优于单一 prompt。
2.4 总结
Prompt Tuning 的做法是添加可训练的 prefix,同时固定 LM,只训练 prefix,采用 Prompt Tuning 的方式可以在 T5 超大模型和全量数据的情况下,追平 fine-tuning 的效果。
实验发现采用 prompt tuning 的方式在小模型的情况容易受到 prompt 长度,初始化策略,预训练任务等影响,并不稳定,也没法超过 fine-tuning 的效果。
作者没有探索少量数据 + 超大模型情况下和 fine-tuning 的效果比较。
Prompt预训练:让大模型在少样本情况下媲美Fine-Tuning
论文标题:
PPT: Pre-trained Prompt Tuning for Few-shot Learning
论文链接:
https://arxiv.org/abs/2109.04332
3.1 动机
作者做了一些预实验发现在少样本+超大模型情况下,prompt tuning 的表现比 model tuning(fine tuning)的表现差得多,并认为其原因在于 prompt 的初始化。由此,作者为 prompt tuning 设计一些预训练任务,期望给 prompt 一个更好的初始化,从而使 prompt tuning 在下游少样本情况下,也能媲美 fine tuning 的效果。
3.2 预实验
少样本设置:T5-XXL + 100 tunable prompt tokens;dev set 和 train set 各 16 个 sample。
template 的影响:从不使用 hard prompt 到 soft prefix prompt 和 hard prompt 进行各种混合的各种情况显示,混合 prompt 能较大提升效果,但是语义相似但形式不同的各种 hard prompt 对模型的效果影响各有不同。也就是说在小样本情况下,template 的选择对模型效果很敏感。
verbalizer 的影响:在小样本情况下,label words 的选择对模型效果也很敏感,一般选更加 common 的词会效果好些。
prompt token 的初始化:作者测试了很多在小模型上能 work well 的初始化策略,但是实验发现并不适用于大模型,甚至比随机初始化还差。
综上看到,在少样本场景下,大模型的 prompt tuning 效果受很多因素影响,无法媲美 Fine-Tuning。
3.3 方法
目的:希望通过 prompt 预训练,为 prompt tokens 提供一个更好的初始化。
具体做法:把下游任务分成若干种形式,为每种形式的 task 预训练一个 prompt,并用这个 prompt 去初始化下游 task 的 prompt,然后继续训练。
句子对分类任务的预训练:
预训练任务是一个 3 分类任务,输入是【P】【句子1】【mask】【句子2】,输出是 {no, maybe, yes}。P 代表 prompt tokens,mask 就是需要预测的部分。
自监督训练:从大规模文档中构造样本:来自相同文档中的邻近句子对的 label 为 yes,非邻近句子对的 label 为 maybe,来自不同文档的句子对为 no。
多项选择任务的预训练:
预训练任务是一个 6 个选项的分类任务,输入是【P】【query句子】?A.【选项句子】... F.【选项句子】. Answer is 【MASK】,输出是{A,B,C,D,E,F,}。
自监督训练:从大规模文档中构造样本:来自相同文档中的与 query 邻近的句子作为正确答案,不邻近或者来自其他文档的句子为错误答案。
单句分类任务的预训练:
以情感分类为例,预训练任务是一个 5 分类任务,输入是【P】【句子】【mask】,输出是 {terrible, bad, maybe, good, great}。
自监督训练:用一个额外的情感分类模型去为无标注的文档句子打标,从而形成训练数据。
单句分类的任务有一个问题,即候选 label 和任务是相关的,比如情感分类,其 label 是 terrible, bad, maybe, good, great 这些,但是其他分类任务的 label 就不是这些。解决方案就是:统一任务形式的预训练。
统一任务形式的预训练:
用多项选择任务来统一所有任务形式,类似 unifiedQA 这种做法。区别在于 unifiedQA 主要用 QA 的监督数据集做的 QA 任务的预训练,而这里是用无监督数据仅微调 prompt。
根据不同任务,选项数目也不同,最后的 template 长度也不同。
少样本设置:T5-XXL + 100 tunable prompt tokens;dev set 和 train set 各 16 个 sample。
基线:PPT:prompt 预训练;Vanilla PT:普通的 prompt tuning;LM Adaptation:普通的 prompt tuning+LM Adaptation T5;hybrid PPT:prompt 预训+hard prompt;unified PPT:用统一任务形式预训练的prompt。
结论1:在少样本设置下,模型尺寸越大,模型效果也会越好;
结论2:在少样本设置的大部分数据集上,PPT 明显优于 Vanilla PT 和 LM Adaptation 后的效果,结合了 hard prompt 以后能进一步提升效果;
结论3:在少样本设置的大部分数据集上,PPT 能够超过 fine-tuning 的效果,这也说明了 pre-training 和 fine-tuning 存在较大的差距,而 PPT 能够一定程度上缩短两者的 gap;
结论4:prompt tuning 的预训练能够减小少样本情况下模型效果的方差;
结论5:当训练样本从 32 逐渐增长到 256 时,PPT 和 Vanilla PT 以及 fine-tuning 的效果变得接近。
3.5 总结
在少样本情况下,大模型的 prompt tuning(仅微调 prompt 参数)并不能媲美 fine-tuning 的效果,原因可能在于打模型在少样本情况下对 prompt 的初始化特别敏感,需要通过预训练来为 prompt 提供一个很好的初始化。
至于如何预训练,这里根据不同任务设计了不同的无监督预训练方式,也提供了一种统一的预训练任务形式。
通过 prompt 的预训练,在少样本情况下,大模型的 prompt tuning 同样能媲美 fine-tuning 的效果。
SPoT:让小模型也能媲美Fine-Tuning的Prompt预训练
论文标题:
SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer
论文链接:
https://arxiv.org/abs/2110.07904
4.1 动机
之前的工作证明了一件事:prompt 的初始化很重要,预训练能够给 prompt 提供一个很好的初始化,但是有没有其他预训练的方式,比如不用设计预训练任务的。
之前的工作主要集中在大模型的 prompt tuning 上,小模型是否也能够有机会媲美 fine-tuning 还没有被很好研究过。
SPoT 提出一种 prompt transfer 的方式,即学习一个或者多个源任务的 prompt 来初始化目标任务的 prompt,这种方式能够使得 prompt tuning 在不同模型尺寸(包括小模型)上都能媲美甚至优于 fine-tuning(注意,没法超过 multi-task fine-tuning 的效果)。
4.2 方法
prompt transfer 主要有两个关键问题要解决:a)在 source task 上学习的 prompt,迁移到 target task 上是否能起作用;b)如果能起作用,对于给定的 target task,应该寻找哪些 source task。
具体做法:在 LM pre-training 和 target prompt tuning 之间,在一个或者多个 source task 上训练相应的 prompt,然后用这些 prompt 去初始化 target task 的 prompt,然后继续 prompt tuning。
4.3 针对问题(a)的实验
模型:进行了 LM Adaptation 的 T5 small 到 5 XXL,每个 prompt 均使用 100 个 tokens,并从 T5 词表中 5000 个常见单词中采样来初始化 source task 的prompt,然后选择 source task 的 dev set 上表现最好的 prompt 去初始化 target task 的 prompt。
基线:Model Tuning;Multi-task Tuning;Vanilla Prompt Tuning:传统的 prompt tuning,采用类标签来初始化。
各种设置:
单一 source task 的无监督预训练:在 C4 数据集上预训练 prompt;
单一 source task 的有监督预训练:用 MNLI 或者 SQuAD 预训练对应的 prompt,MNLI 上的 prompt 能够泛化到许多句子级的任务上,SQuAD 上的 prompt 能够泛化到许多 QA 任务上;
多个 source task 的混合训练:每个 task 的数据集采样若干 example,组成一个新的数据集来训练一个 prompt (注意是 T5 这种 text-to-text 的训练);
更长的 tuning steps:普通的 prompt tuning 中 tuning steps 只有 30k,这里测试了更多的 step 是否对提升效果有帮助。
实验结论:
SPoT 显着提高了 prompt tuning 的性能和稳定性(缩小方差),更长的 tuning steps 对提升效果也有很大帮助;
不同的 source task 的混合训练能够给 target task 带来不同的收益;
SPoT 能够在多个模型尺寸下媲美和优于 model tuning 的效果,并能在使用超大模型情况下媲美强基线 Multi-task Tuning。
设计了 16 个 source task(dataset)和 10 个 target task(dataset),测试了 160 个 source 到 target 的组合来探索对于给定的 target task,应该寻找哪些 source task。
一种直观的想法是更相似的任务能够在 transfer 中起到更重要的作用,作者提出了用 prompt tokens 的 average embeddings 作为task的表示(task embedding),然后计算 cosine 相似度来度量任务的相似度。实验中,通过计算 source task 和 target task 的相似度,然后取 top-k 相似度的 source tasks 来初始化 target task 的 prompt。
实验结论:
prompt 的 transfer 确实能提高 target task 的性能:结果显示在许多 source 到 target 的 transfer 上,都显示了正向的迁移效果,尤其是在 task 比较相似的情况下。有趣的是,在 task 不太一样的情况下(比如输入输出不一样,任务类型不一样),也能起到一定的迁移效果;
task embedding 确实能够捕捉任务之间的相似性:可视化显示,相似的 task 确实能够聚在一起,这种相似更多是任务类型的相似而不是领域的相似。
这篇文章提出了一种很简单的预训练方式,即直接在多个 source task 上训练一个 prompt,然后用这个 prompt 去初始化 target task 的 prompt 就能取得很好的效果。在全量数据 + 仅微调 prompt 的情况下,SPoT 能够在多个模型尺寸(包括小模型)下媲美和优于 model tuning 的效果,并能在使用超大模型情况下媲美强基线 Multi-task Tuning。
尾声
从目前的发展看,Prompt Learning 主要应用在何处可以从两个角度考虑,一个是数据角度:prompt learning 的出发点就是用一些提示去激发预训练模型的知识,减少对大量监督数据的依赖,所以 prompt 可以应用在 few-shot 场景中。
另一个角度是模型角度:prompt learning 如何去高效地激发超大模型的知识,减少对大量参数的微调成本,所以 prompt 可以应用在 Parameter-Efficient 的 model tuning 上面。从 Parameter-Efficient Prompt Tuning 上看,主要有几个问题:一是仅微调少量参数,能否媲美传统 fine-tuning 的效果,二是普通尺寸的模型,甚至是小模型能否使用这种方式。
从本文介绍的三篇论文看,我们不难得出一些结论。一是即使是普通尺寸的模型也有机会在 Parameter-Efficient tuning 的设置下媲美 fine-tuning 的效果;二是媲美 fine-tuning 的关键可能在于学习一个好的 prompt 初始化,prompt 预训练就是达成这一条件的手段之一。
特别鸣谢
感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
·