大模型高效微调Prompt Tuning论文解读 原创
原文题目:The Power of Scale for Parameter-Effificient Prompt Tuning,规模的力量:参数高效的提示调整
摘要:在这项工作中,我们探索了“提示调整”(prompt tuning),这是一种简单但有效的机制,用于学习“软提示”(soft prompts),以调节冻结的语言模型,使其执行特定的下游任务。与 GPT-3 使用的离散文本提示不同,软提示是通过反向传播学习得到的,并且可以调整以纳入任意数量的标记示例信号。我们的端到端学习方法在性能上大幅度超越了 GPT-3 的少样本学习。更引人注目的是,通过对 T5 模型大小的消融实验,我们展示了提示调整随着规模的增加而更具竞争力:随着模型参数超过数十亿,我们的方法“缩小了差距”,并且匹配了模型调整(即调整所有模型权重)的强大性能。这一发现尤其相关,因为大型模型在共享和服务上成本高昂,而能够将一个冻结的模型重用于多个下游任务可以减轻这种负担。我们的方法可以看作是对最近提出的“前缀调整”(prefix tuning)的简化,这是由 Li 和 Liang(2021)提出的,我们提供了与这种方法以及其他类似方法的比较。最后,我们展示了使用软提示调节冻结模型在域转移的鲁棒性方面带来了好处,并实现了高效的“提示集成”(prompt ensembling)。
1、引言
随着预训练大型语言模型的广泛成功,出现了一系列技术来适应这些通用模型以执行下游任务。ELMo(Peters 等人,2018 年)提出了冻结预训练模型并学习其每层表示的任务特定权重。然而,自从 GPT(Radford 等人,2018 年)和 BERT(Devlin 等人,2019 年)以来,主导的适应技术一直是模型调整(或“微调”),这是 Howard 和 Ruder(2018 年)提出的,即在适应过程中调整所有模型参数。
最近,Brown 等人(2020 年)展示了提示设计(或“引导”)在通过文本提示调节冻结的 GPT-3 模型行为方面出奇地有效。提示通常由任务描述和/或几个典型示例组成。这种回归到“冻结”预训练模型的方法特别吸引人,尤其是随着模型大小的不断增加。与其为每个下游任务要求模型的单独副本,一个单一的通用模型可以同时服务于许多不同的任务。
不幸的是,基于提示的适应有几个关键缺点。任务描述容易出错并需要人工参与,而且提示的有效性受到模型输入中可以适应多少条件文本的限制。因此,下游任务的质量仍然远远落后于调整过的模型。例如,尽管使用了 16 倍多的参数,GPT-3 175B 在 SuperGLUE 上的少样本性能比微调的 T5-XXL(Raffel 等人,2020 年)(71.8 对比 89.3)低 17.5 分。
最近提出了几项自动化提示设计的努力。Shin 等人(2020 年)提出了一种在离散词汇空间上的搜索算法,该算法由下游应用训练数据指导。虽然这种技术超越了手动提示设计,但与模型调整相比仍有差距。Li 和 Liang(2021 年)提出了“前缀调整”并在生成任务上展示了强大的结果。这种方法冻结了模型参数,并在调整过程中将错误反向传播到编码器堆栈中每层(包括输入层)前添加的前缀激活。Hambardzumyan 等人(2021 年)通过将可训练参数限制在掩码语言模型的输入和输出子网络中,简化了这个配方,并在分类任务上展示了合理的结果。
图 1:T5 的标准模型调整实现了强大的性能,但需要为每个终端任务存储模型的单独副本。我们对 T5 的提示调整随着规模的增加,与模型调整的质量相匹配,同时实现了对单一冻结模型在所有任务中的重用。我们的方法显著优于使用 GPT-3 的少样本提示设计。我们展示了调整方法在 3 次运行中的平均值和标准差。
在本文中,我们提出了提示调整作为一种进一步简化适应语言模型的方法。我们冻结了整个预训练模型,并且只允许每个下游任务添加额外的 k 个可调标记到输入文本的前面。这个“软提示”是端到端训练的,并且可以压缩来自完整标记数据集的信号,使我们的方法能够超越少样本提示并缩小与模型调整的质量差距(图 1)。同时,由于单一预训练模型被回收用于所有下游任务,我们保留了冻结模型的高效服务优势(图 2)。
图 2:模型调整需要为每个下游任务创建整个预训练模型的任务特定副本,推理必须在单独的批次中执行。提示调整只需要为每个任务存储一个小的任务特定提示,并使用原始预训练模型实现混合任务推理。对于 T5 “XXL” 模型,每个调整过的模型副本需要 110 亿个参数。相比之下,我们调整过的提示每个任务只需要 20,480 个参数——假设提示长度为 5 个标记,这减少了超过五个数量级。
虽然我们与 Li 和 Liang(2021 年)以及 Hambardzumyan 等人(2021 年)同时开发了我们的方法,但我们是第一个展示仅凭提示调整(无需中间层前缀或特定任务输出层)就足以与模型调整竞争的。通过第 2-3 节的详细实验,我们展示了语言模型容量是这些方法成功的关键因素。正如图 1 所示,提示调整随着规模的增加变得更加有竞争力。
我们在第 4 节与类似方法进行了比较。明确将特定任务参数与通用语言理解所需的“通用”参数分开,具有一系列额外的好处。我们在第 5 节展示了通过在保持通用参数固定的同时在提示中捕获任务定义,我们能够实现对领域变化的更好韧性。在第 6 节,我们展示了“提示集成”,为同一任务学习多个提示,可以提高质量并且比经典模型集成更高效。最后,在第 7 节,我们调查了我们学习到的软提示的可解释性。总之,我们的主要贡献是:
1. 提出提示调整,并展示其在大型语言模型领域与模型调整的竞争力。
2. 消融了许多设计选择,并展示随着规模的增加,质量和鲁棒性得到提高。
3. 展示提示调整在领域变化问题上超越模型调整。
4. 提出“提示集成”并展示其有效性。
2、提示调整
遵循 T5(Raffel 等人,2020 年)的“文本到文本”方法,我们将所有任务都视为文本生成。我们不再将分类建模为给定某些输入时输出类别的概率 Pr(y|X),其中 X 是一系列标记,y 是单个类别标签,而是将其建模为条件生成,其中 Y 是代表类别标签的标记序列。T5 将分类建模为 Prθ(Y |X),由构成其编码器和解码器的 Transformer(Vaswani 等人,2017 年)的权重 θ 参数化。
(注释,我们采用了一种叫做 T5 的方法来处理各种自然语言处理任务。T5 方法的核心思想是把任务看作是文本生成问题。在传统的分类任务中,我们通常关注于计算给定输入(比如一句话或者一张图片)时,输出某个特定类别的概率。这里的输入 X 可以理解为一系列文字或者图像中的像素点,而 y 是我们想要预测的类别标签,比如“猫”或“狗”。
但在 T5 方法中,我们不再这样做。相反,我们把分类任务看作是一个生成过程,即给定输入 X,我们不是直接预测一个类别标签 y,而是生成一个代表这个类别的文本序列 Y。这个序列 Y 可以是任何形式的文本,比如一个类别的名称或者描述。
T5 方法使用一种叫做 Transformer 的神经网络结构来实现这个过程。Transformer 是一种特别擅长处理序列数据的网络,它通过学习输入数据中的模式来生成输出。在 T5 中,Transformer 的参数(即 θ)是由模型的训练数据来决定的,这些参数决定了模型如何将输入 X 转换成输出序列 Y。
简单来说,T5 方法把分类任务变成了一个文本生成游戏,模型需要学会如何根据给定的输入生成正确的文本输出,而不是直接给出一个类别标签。这种方法使得模型在处理各种不同的自然语言处理任务时更加灵活和强大。)
提示是在模型生成 Y 的过程中添加额外信息的方法。通常,提示是通过在输入 X 前添加一系列标记 P 来完成的,使得模型在保持模型参数 θ 固定的同时,最大化正确 Y 的可能性 Prθ(Y |[P; X])。在 GPT-3 中,提示标记的表示 P = {p1, p2, ..., pn} 是模型嵌入表的一部分,由冻结的 θ 参数化。找到最优提示需要通过手动搜索或非可微搜索方法(Jiang 等人,2020 年;Shin 等人,2020 年)选择提示标记。提示调整去除了提示 P 必须由 θ 参数化的限制;相反,提示有自己的专用参数 θP,可以更新。虽然提示设计涉及从固定词汇的冻结嵌入中选择提示标记,但提示调整可以被视为使用固定提示的特殊标记,其中只有这些提示标记的嵌入可以更新。我们新的条件生成现在是 Prθ;θP (Y |[P; X]),并且可以通过最大化 Y 的可能性通过反向传播进行训练,同时只对 θP 应用梯度更新。
(注释:这段话描述了在自然语言处理(NLP)中,特别是在使用像 GPT-3 这样的大型预训练语言模型时,如何通过“提示”(prompt)来引导模型生成特定输出的过程。这里的“提示”是一种向模型提供额外信息的方法,以便在生成文本时考虑到这些信息。下面是对这段话的通俗解释:
1. 提示的作用:提示是在模型生成文本(Y)的过程中,向模型提供额外的上下文信息。这样,模型在生成文本时,可以更好地理解任务的意图,并生成更符合预期的输出。
2. 如何添加提示:提示通常是通过在原始输入(X)前添加一系列的标记(P)来实现的。这些标记是预先定义好的,它们帮助模型理解任务的上下文。
3. 模型参数:在 GPT-3 这样的模型中,模型的参数(θ)是固定的,而提示标记(P)是由这些固定参数参数化的。这意味着模型在生成文本时,会根据这些固定的提示标记来生成输出。
4. 寻找最优提示:为了找到最佳的提示,研究人员可能需要手动搜索或者使用一些非可微的搜索方法来选择最合适的提示标记。
5. 提示调整(Prompt Tuning):这是一种新的方法,它允许提示标记有自己的参数(θP),这些参数可以在训练过程中更新。这与传统的提示设计不同,因为传统的提示设计中,提示标记是从固定词汇中选择的,其嵌入(即表示)是不可更新的。
6. 条件生成:在提示调整中,模型的生成过程现在考虑了两组参数:模型的原始参数(θ)和提示的专用参数(θP)。这样,模型在生成文本时,会同时考虑这两组参数。这个过程可以通过反向传播和梯度更新来训练,但只有提示的专用参数(θP)会接受梯度更新。
这段话描述了一种让模型在生成文本时更加灵活的方法。通过引入可更新的提示参数,模型可以在训练过程中调整这些参数,以更好地适应特定的任务,从而提高生成文本的质量和相关性。)
给定一系列 n 个标记 {x1, x2, ..., xn},T5 首先做的是嵌入这些标记,形成一个矩阵 Xe ∈ Rn×e,其中 e 是嵌入空间的维度。我们的软提示表示为一个参数 Pe ∈ Rp×e,其中 p 是提示的长度。然后,我们的提示被连接到嵌入的输入,形成一个单一的矩阵 [Pe; Xe] ∈ R(p+n)×e,然后像平常一样通过编码器-解码器。我们的模型被训练以最大化 Y 的可能性,但只有提示参数 Pe 被更新。
(注释:这段话描述的是 T5(Text-to-Text Transfer Transformer)模型处理文本输入并生成输出的过程。T5 是一种自然语言处理模型,它将所有任务都统一为文本到文本的转换问题。下面是对这段话的通俗解释:
1. 标记序列:首先,我们有一系列标记(x1, x2, ..., xn),这些可以是单词、字符或者任何其他形式的文本单元。这些标记是输入文本的基本组成部分。
2. 嵌入:T5 模型首先将这些标记转换成嵌入(Xe),这是一个矩阵,其中每一行代表一个标记的嵌入向量。嵌入向量是高维空间中的点,它们能够捕捉标记的语义信息。矩阵的维度是 n×e,其中 n 是标记的数量,e 是嵌入向量的维度。
3. 软提示:接下来,我们有一个“软提示”(Pe),这是一个参数化的表示,它也是一个矩阵,维度为 p×e。软提示的长度是 p,它提供了额外的信息来指导模型的输出。这个软提示是可学习的,意味着它的参数会在模型训练过程中更新。
4. 连接提示和嵌入:然后,我们将软提示(Pe)和标记的嵌入(Xe)连接起来,形成一个更大的矩阵 [Pe; Xe]。这个新矩阵的维度是 (p+n)×e,它包含了原始输入标记的嵌入和软提示的信息。
5. 通过编码器-解码器:连接后的矩阵接着被送入模型的编码器-解码器部分。编码器负责理解输入的语义内容,解码器则负责生成输出。这个过程就像是在翻译或者解释输入的文本。
6. 训练模型:在训练过程中,模型的目标是最大化输出 Y(可能是文本、分类标签等)的可能性。但是,只有软提示的参数 Pe 会被更新,而原始标记的嵌入参数保持固定。这意味着模型在训练时会学习如何调整软提示,以便更好地完成任务。
我们通过一个具体的例子来说明如何在 T5 模型中连接提示(prompt)和嵌入(embedding)。
假设我们的任务是情感分析,即判断一段文本是正面的还是负面的。我们有一段简单的文本输入:“我今天过得很愉快。” 首先,我们需要将这段文本转换成模型可以理解的形式。
1. 文本标记化:我们首先将这段文本分解成标记(tokens),比如单词或字符。在这个例子中,我们可能会得到这样的标记序列:["我", "今天", "过", "得", "很", "愉快", "。"]。
2. 嵌入:接下来,我们为这些标记创建嵌入。在 T5 模型中,每个标记都会被转换成一个固定维度的向量。假设嵌入维度是 512,我们就会得到一个 7×512 的矩阵 Xe,其中每一行代表一个标记的嵌入。
3. 创建提示:为了指导模型进行情感分析,我们需要创建一个提示。这个提示是一个可学习的参数矩阵 Pe,它的维度是提示长度 p 乘以嵌入维度 e。假设我们的提示长度是 3,那么我们的提示矩阵 Pe 就是 3×512。
4. 连接提示和嵌入:现在,我们将提示矩阵 Pe 和嵌入矩阵 Xe 连接起来。这意味着我们将提示的行添加到嵌入矩阵的顶部。这样,我们得到了一个新的矩阵 [Pe; Xe],它的维度是 (3+7)×512,即 10×512。这个新矩阵包含了原始文本的嵌入信息和我们为情感分析任务提供的额外指导。
5. 通过编码器-解码器:这个连接后的矩阵 [Pe; Xe] 将被送入 T5 模型的编码器-解码器部分。编码器会处理这个矩阵,理解文本和提示的联合含义。然后,解码器会尝试生成一个输出,比如情感标签“正面”。
6. 训练模型:在训练过程中,我们的目标是调整提示参数 Pe,以便模型能够更准确地预测情感标签。我们通过最大化正确输出(在这个例子中是“正面”)的可能性来训练模型,同时保持其他嵌入参数固定。通过这个过程,T5 模型能够利用提示来更好地理解和执行特定的 NLP 任务。)
2.1 设计决策
有许多可能的方法来初始化提示表示。最简单的是从零开始训练,使用随机初始化。一个更复杂的选项是将每个提示标记初始化为从模型词汇表中抽取的嵌入。从概念上讲,我们的软提示以与输入前文本相同的方式调节冻结网络的行为,因此,一个类似单词的表示可能作为一个很好的初始化起点。对于分类任务,第三个选项是使用枚举输出类别的嵌入来初始化提示,类似于 Schick 和 Schütze(2021 年)的“verbalizers”。由于我们希望模型在输出中产生这些标记,用有效目标标记的嵌入来初始化提示应该能够引导模型将其输出限制在合法的输出类别上。
另一个设计考虑是提示的长度。我们方法的参数成本是 EP,其中 E 是标记嵌入维度,P 是提示长度。提示越短,需要调整的新参数就越少,因此我们的目标是找到一个仍然表现良好的最小长度。
2.2 取消学习跨度损坏
与像 GPT-3 这样的自回归语言模型不同,我们实验的 T5 模型使用编码器-解码器架构,并在跨度损坏目标上进行预训练。具体来说,T5 的任务是“重建”输入文本中被遮蔽的跨度,这些跨度被标记有独特的哨兵标记。目标输出文本由所有被遮蔽的内容组成,由哨兵分隔,再加上一个最终哨兵。例如,从文本 “Thank you for inviting me to your party last week” 我们可以构建一个预训练示例,其中输入是 “Thank you <X> me to your party <Y> week” 而目标输出是 “<X> for inviting <Y> last <Z>”。
(注释:想象一下,你有一个机器人,它擅长玩一个填空游戏。在这个游戏中,一段话中的某些词会被特殊的符号(哨兵)遮住,机器人的任务是猜出这些被遮住的词是什么。
GPT-3:
GPT-3 这个机器人玩这个游戏的方式是,它先看一段话,然后一个接一个地猜出每个被遮住的词。它在猜下一个词时,会考虑到前面所有已经猜过的词。
T5:
而 T5 这个机器人玩这个游戏的方式有点不同。它不是逐个猜词,而是直接看整段话,然后一次性猜出所有被遮住的词。它在猜词时,会考虑到整段话的上下文,而不是只看前面的词。
在 T5 的预训练中,它通过这种方式学习如何理解整段话的意思,并准确地填入被遮住的部分。这个过程就像是在训练机器人,让它学会如何读懂整篇文章,而不仅仅是一句话。
举个例子,如果给 T5 一段话:“Thank you for inviting me to your party last week”,在预训练中,这段话可能会被修改为:“Thank you <X> me to your party <Y> week”,其中 <X> 和 <Y> 是被遮住的部分。T5 的任务是猜出 <X> 是 "for",<Y> 是 "last",然后输出完整的句子:“<X> for inviting <Y> last <Z>”,这里的 <Z> 是句子的结束标记。)
虽然 Raffel 等人(2020 年)发现这种架构和预训练目标比传统语言建模更有效,我们假设这种设置不适合产生一个可以通过提示调整轻松控制的冻结模型。特别是,一个仅在跨度损坏上预训练的 T5 模型,如 T5.1.1,从未见过真正的自然输入文本(无哨兵标记),也从未被要求预测真正的自然目标。实际上,由于 T5 的跨度损坏预处理的细节,每个预训练目标都会以哨兵开始。虽然通过微调可以轻松克服这种“不自然”的输出哨兵的倾向,但我们怀疑仅通过提示来覆盖这一点会困难得多,因为解码器的先验无法调整。
(注释:这里讨论 T5 模型的训练方式和它在处理自然语言输入时可能遇到的问题。我来用一个通俗的例子来解释:
想象一下,你正在训练一个机器人来学习如何读懂和理解书籍。在 Raffel 等人(2020)的研究中,他们使用了一种特殊的训练方法,让机器人通过填补书中被遮盖的部分来学习。这种方法比传统的让机器人整本书整本地学习更有效。
但是,这里有一个假设:这种训练方法可能不适合用来创建一个可以轻松通过提示(prompt)来控制的机器人。特别是,如果机器人(T5 模型)只在被遮盖的部分上进行训练,它可能就不知道如何处理没有遮盖、没有特殊标记的真正书籍(自然输入文本)。
换句话说,T5 模型在训练时看到的文本都是被特殊标记(哨兵)遮盖过的,它学会了预测这些遮盖部分。但是,当它遇到真正的书籍时,它可能会不习惯,因为它从未被要求预测没有这些特殊标记的文本。
虽然可以通过进一步训练(微调)来让机器人适应真正的书籍,但作者怀疑仅通过改变提示(就像给机器人一个新的指令)来解决这个问题会非常困难。这是因为机器人的“大脑”(解码器的先验知识)已经习惯了有特殊标记的文本,很难通过简单的提示来改变这种习惯。)
鉴于这些担忧,我们在三种设置中实验了 T5 模型。(1)“跨度损坏”:我们使用现成的预训练 T5 作为我们的冻结模型,并测试其输出下游任务预期文本的能力。(2)“跨度损坏 + 哨兵”:我们使用相同的模型,但将所有下游目标前添加一个哨兵,以便更接近预训练中看到的的目标。(3)“LM 适应”:我们继续 T5 的自监督训练,但只增加少量额外的步骤,使用 Raffel 等人(2020 年)讨论的“LM”目标;给定自然文本前缀作为输入,模型必须产生自然文本的延续作为输出。关键的是,这种适应只发生一次,产生一个单一的冻结模型,我们可以在任何数量的下游任务中重复使用它进行提示调整。
(注释:这里描述了对 T5 模型进行的三种不同实验设置,以评估和改进模型在处理自然语言任务时的表现。下面是对这些设置的解释:
1. 跨度损坏(Span Damage):
- 在这个设置中,研究人员使用了已经预训练好的 T5 模型,这个模型被称为“冻结模型”,因为它的参数在实验中不会改变。
- 他们测试了这个模型在生成下游任务(如情感分析、文本摘要等)预期文本的能力。这里的“下游任务”指的是模型在预训练之外的其他任务。
- 这个实验的目的是看看 T5 模型在没有进一步训练的情况下,能否直接适应新任务并生成正确的输出。
通俗的理解:想象一下,你有一个机器人,它在工厂里被训练来组装玩具,但是它只能在玩具的某些部分被遮盖(损坏)的情况下进行组装。现在,我们想知道这个机器人在没有遮盖的情况下,能否独立完成整个玩具的组装。这就是“跨度损坏”实验,我们看看机器人(T5模型)在没有经过额外训练的情况下,能否处理正常的、没有被遮盖的文本。
2. 跨度损坏 + 哨兵(Span Damage + Sentinel):
- 在这个设置中,研究人员对 T5 模型进行了微调,他们在所有下游任务的目标文本前添加了一个特殊的标记(哨兵)。
- 这样做是为了模拟 T5 在预训练时看到的目标文本,因为预训练时的目标文本通常以哨兵开始。
- 通过这种方式,研究人员试图让模型更好地适应预训练和下游任务之间的差异。
通俗解释:在这个实验中,我们给机器人一个提示,告诉它在组装玩具之前,先看看一个特殊的标记(哨兵)。这个标记就像是在告诉机器人:“注意,这里有一个特殊的部分。”我们这样做是为了帮助机器人更好地适应它在训练时习惯的那种有遮盖的玩具。在 T5 模型的情况下,我们在每个任务的目标文本前添加一个哨兵,以便模型能更好地处理它在预训练时见过的那种文本。
3. LM 适应(LM Adaptation):
- 在这个设置中,研究人员继续对 T5 模型进行自监督训练,但只增加了少量的训练步骤。
- 他们使用了一种称为“LM”(Language Model)的目标,这是 Raffel 等人(2020)讨论的一种训练方法。
- 在这种训练中,模型接收一个自然文本前缀(例如,句子的开头部分)作为输入,并需要生成这个文本的自然延续作为输出。
- 这种适应过程只进行一次,然后产生一个单一的冻结模型。这个模型可以在多个下游任务中重复使用,并且可以通过提示调整来适应不同的任务。
通俗解释:我们尝试让机器人学习如何根据给定的指令(自然文本前缀)来组装玩具。我们只给机器人一次机会来学习这个新技能,然后我们就让它用这个技能来处理各种各样的玩具组装任务。在 T5 模型的实验中,我们让模型学习如何根据给定的文本前缀来生成接下来的文本。这样,即使模型在训练时只学了一次,它也能在多种不同的任务中通过调整提示来适应。
这些实验设置旨在探索如何让 T5 模型更好地适应和执行各种自然语言处理任务,无论是直接使用预训练模型,还是通过微调和额外的自监督训练来提高其适应性。)
通过 LM 适应,我们希望“快速”将 T5 转变为更类似于 GPT-3 的模型,它总是输出现实的文本,并且已知作为“少样本学习者”对提示反应良好。与从头开始预训练相比,这种后期转变的成功程度如何并不明显,据我们所知,之前还没有进行过研究。因此,我们实验了各种长度的适应,最多达到 100K 步。
3、结果
我们的冻结模型建立在所有大小的预训练 T5 检查点之上(小型、基础型、大型、XL、XXL)。我们利用公共的 T5.1.1 检查点,这些检查点在原始 T5.1 的基础上进行了改进。
我们的“默认”配置,用绿色的‘×’()标记,使用了一种针对语言模型(LM)调整过的 T5 版本,额外训练了 100K 步,使用类别标签进行初始化(见第 3.2 节),并使用 100 个标记的提示长度。虽然这比 Li 和 Liang(2021)使用的默认 10 个标记前缀要长,但我们的方法仍然使用了更少的任务特定参数,因为我们只调整输入层,而不是覆盖所有网络层的激活。详见图 4 的详细比较。我们很快就会看到,随着模型大小的增加,甚至更短的提示也是可行的。
我们在 SuperGLUE 基准(Wang 等人,2019a)上衡量性能,这是一个包含八个具有挑战性的英语语言理解任务的集合。我们在每个数据集相关的开发集上报告指标。
我们的每个提示都在单个 SuperGLUE 任务上训练;没有多任务设置或跨任务混合训练数据。我们按照 Raffel 等人(2020)的方法,将每个 SuperGLUE 数据集翻译成文本到文本的格式,但我们省略了输入前的任务名称,这些名称指示了一个示例属于哪个 SuperGLUE 任务。
我们使用 T5 的标准交叉熵损失训练我们的提示,训练步骤为 30,000 步,学习率恒定为 0.3,批量大小为 32。检查点是通过在开发集上的早停选择的,停止指标是数据集的默认指标,或者是使用多个指标评估的数据集的指标平均值。所有实验都是在 JAX(Bradbury 等人,2018)中运行的,使用 Adafactor 优化器(Shazeer 和 Stern,2018),权重衰减为 1e−5,β2 衰减为 0.8,并且关闭参数缩放。模型是在 Flax(Heek 等人,2020)中实现的。更多细节可在附录 A 中找到。
3.1 缩小差距
为了将我们的方法与标准模型调优进行比较,我们使用 T5 库中指定的默认超参数(学习率 0.001,以及恢复预训练参数状态的 Adafactor 优化器)在 SuperGLUE 上对公共的 T5.1.1 检查点进行调优。我们考虑了两个基线。
(1)“模型调优”:为了进行公平比较,我们像在我们的提示调优设置中一样,分别对每个任务进行调优。
(2)“模型调优(多任务)”:我们使用 T5 的多任务调优设置来实现更具竞争力的基线。在这种情况下,单个模型在所有任务上共同调优,文本前缀指示任务名称。
在图 1(第 1 页)中,我们看到随着规模的增加,提示调优与模型调优的竞争性越来越强。在 XXL 尺寸(110亿参数)下,即使任务特定参数少于 20,000 倍,提示调优甚至与更强的多任务模型调优基线相匹配。
为了与提示设计进行比较,我们包括了 Brown 等人(2020)报告的 GPT-3 在 SuperGLUE 开发集上的少次学习性能。图 1 显示,提示调优大幅度超过了 GPT-3 的提示设计,经过提示调优的 T5-Small 与 GPT-3 XL(大 16 倍以上)相匹配,而经过提示调优的 T5-Large 击败了 GPT-3 175B(大 220 倍以上)。
prompt tuning和prefix tuning的区别:我们通过一个实际的例子来说明:
Prompt Tuning 实际例子:
假设我们有一个预训练的GPT模型,我们要将其用于文本分类任务,比如判断一段新闻是否是体育类。在Prompt Tuning中,我们不直接微调整个模型参数,而是创建一组新的可学习参数(通常称为“prompt tokens”的嵌入向量),这些向量将被插入到输入序列的开始。
例如,原新闻标题为:“湖人队在NBA总决赛中获胜”。Prompt Tuning时,我们将添加一个或多个虚拟提示标记如“<类别:体育>”,并用一组可训练的浮点数向量表示这个提示标记。模型接收到的输入会变成:“<类别:体育> 湖人队在NBA总决赛中获胜”。在训练过程中,只有这些提示标记的嵌入向量会被更新以优化模型对体育新闻类别的识别能力,而原始GPT模型的其余部分保持不变。
Prefix Tuning 实际例子:
对于同样要使用GPT模型进行文本生成的任务,例如自动补全对话,Prefix Tuning则不是简单地添加几个固定的提示标记,而是利用一个可学习的前缀序列来引导解码过程。
假设有如下场景:用户输入了一半的句子“今天天气怎么样?”,模型需要生成合适的回复。在Prefix Tuning中,我们会初始化一个由可训练参数组成的“前缀隐状态”序列,并将其与输入一起送入模型的解码器层。这个前缀序列会在每个解码步骤中与模型当前的隐藏状态结合,影响模型接下来生成的词语。
具体操作上,Prefix Tuning不会改变输入序列的实际内容,而是通过修改解码器初始几步的内部状态来间接影响输出结果,从而使得模型能根据训练数据更好地完成特定的文本生成任务。
本文转载自公众号AIRoobt ,作者:AIRoobt
原文链接:https://mp.weixin.qq.com/s/zxDrkIWtiTYNZPRiBt3y0g