最新P-Tuning从零到精通全攻略:大模型高效微调原理与实例完整解析

2026-06-20阅读 0热度 0
ai 人工智能

论文《GPT Understands, Too》的核心贡献在于系统性地提升了预训练语言模型(PLMs)在自然语言理解任务中的稳定性与效率。传统方法依赖手动构造的离散提示(例如“英国的首都是[MASK]”),但实验表明这类提示极其敏感——替换一个单词就可能导致性能骤降20个百分点,这在实际部署中带来了严重的不确定性。为此,论文提出了一种名为P-Tuning(可训练连续提示嵌入)的方法,通过为模型配备可学习的“软提示”,在提升性能的同时显著降低了不同提示间的性能波动。

大模型高效微调P-Tuning原理及实例

GPT 同样具备理解能力

摘要:利用自然语言模式对预训练语言模型进行提示,已被验证在自然语言理解(NLU)任务中行之有效。然而初步研究发现,人工设计的离散提示极易导致不稳定的表现——例如,提示中仅替换一个词,就可能导致结果大幅下降。我们提出了一种全新方法P-Tuning,该方法采用可训练的连续提示嵌入,并将其与离散提示拼接使用。实证结果表明,P-Tuning不仅通过最小化不同离散提示之间的性能差异来稳定训练过程,而且在包括LAMA和SuperGLUE在内的多项NLU基准上显著提升了整体性能。P-Tuning对冻结和微调后的语言模型均适用,无论是在完全监督还是少次学习设定下。

通俗地讲,P-Tuning 相当于为智能助手配备了一套“可调整的领域知识库”。传统提示是固定的指令(比如“告诉我有关...的信息”),而连续提示嵌入则是可学习的上下文线索——助手能够根据具体任务自行调整这些线索,从而更精准地理解用户意图。即便提问的措辞发生变化,它也能借助已学到的线索稳定输出答案。

1 引言

预训练语言模型(PLMs;Brown 等人,2020)极大地推动了自然语言理解(NLU)的性能边界。这些模型通过不同的预训练目标进行训练,例如遮蔽语言建模(Devlin 等人,2018)、自回归语言建模(Radford 等人,2019)、序列到序列建模(Raffel 等人,2019)以及排列语言建模(Yang 等人,2019)。

提示技术(prompting)进一步释放了 PLMs 的潜力(Brown 等人,2020;Schick 和 Schütze,2020)。它通过使用手动编写的模式作为附加输入,在模型微调或冻结状态下均能发挥作用。在大量 NLU 任务上,提示都带来了切实的性能提升。

然而,手动离散提示的缺陷同样明显:不稳定。从表1可以看出,对于冻结的语言模型,仅改动提示中的一个词,性能就可能出现断崖式下滑。即便经过微调,这种不稳定性有所缓解,但不同提示之间的性能差距依然显著——尤其在少次学习场景中。这种不稳定性在实际应用中是个严重隐患。近年来,自动提示搜索方法(Shin 等人,2020;Gao 等人,2020;Jiang 等人,2020b)试图为特定任务找到更优的提示,但并未从根本上解决离散提示不稳定的根源。

为解决这一难题,该研究提出了 P-Tuning。简单来说,给定一个离散提示作为输入,P-Tuning 将可训练的连续提示嵌入与离散提示拼接后,一并送入语言模型。连续提示通过反向传播更新,优化目标是最小化任务损失。直觉上,这种可学习的嵌入能够抵消离散提示中微小变化带来的负面影响,从而提升训练稳定性。为进一步提升效果,论文还引入了一个提示编码器(LSTM 或 MLP)来建模多个连续提示嵌入之间的依赖关系。

实验在两个 NLU 基准上展开:LAMA(Petroni 等人,2019)知识探测和 SuperGLUE(Wang 等人,2019a)。在 LAMA 上,模型冻结时,P-Tuning 比手动离散提示高出 20 多个百分点,比搜索提示高出 9 个百分点。在 SuperGLUE 上,无论是完全监督还是少次学习,P-Tuning 均超越了 PET(Schick 和 Schütze,2020)和最佳离散提示。更重要的是,P-Tuning 大幅缩小了不同离散提示之间的性能差距,使得模型适应过程更加稳健。

2 方法

2.1 离散提示的固有问题

提示通过引入自然语言模式作为额外输入,帮助预训练模型适应下游任务(Brown 等人,2020;Schick 和 Schütze,2020)。先前工作(Zheng 等人,2021)已表明,提示能在许多 NLP 任务上带来稳定且显著的提升。但问题在于:如何设计出高性能的离散提示?这本身就是一项巨大的挑战。

在 LAMA 知识探测任务(Petroni 等人,2019)上——该任务要求从语言模型中预测三元组的尾部实体——可以看到,手动离散提示的性能极其不稳定。表1的数据很能说明问题:最后两个提示仅差一个词,结果性能直接暴跌 20 分。

针对这一痛点,近期研究尝试通过挖掘训练语料(Jiang 等人,2020b)、基于梯度的搜索(Shin 等人,2020)以及使用预训练生成模型(Gao 等人,2020)来自动化离散提示的搜索。但这些工作本质上仍在寻找更优的离散提示,并未触及不稳定的根源。此外,在离散空间中进行搜索,反向传播的梯度无法被充分利用,容易陷入次优解。因此,论文转而研究训练连续提示——既能稳定训练,又能提升性能。

图 1:使用 P-Tuning 在 SuperGLUE 的 7 个开发集上的平均得分。

表 1:离散提示存在明显的不稳定性(高方差),而 P-Tuning 稳定了训练并提高了性能。结果是在 LAMA-TREx P17 上使用 BERT-base-cased 模型计算的精确度@1。"PT" 指代 P-Tuning,它在离散提示的基础上额外训练连续提示。

2.2 P-Tuning 方法详解

形式化地,设 M 是一个预训练语言模型,隐藏层大小为 h,词表大小为 |V|。设 {(xi, yi)}i 是一个 NLU 任务的标注数据集,其中 x0:n = {x0, x1, ..., xn} 是由离散标记组成的输入,y ∈ Y 是标签。目标是估计分类条件概率 fM(x) = p̂(y|x),M 的参数可以微调或冻结。

提示最初以离散标记的形式提出(Schick 和 Schütze,2020)。设 [Di] 是一个离散提示标记。每个提示可以描述为一个模板 T = {[D0:i], x, [D(i+1):j], y, [D(j+1):k]},它将输入 x 和标签 y 组织成一段文本,将任务重新定义为填空。例如,预测国家首都的任务(LAMA-TREx P36),提示可能是“[INPUT]的首都是[LABEL]。”。给定一个数据对“(Britain, London)”,重写后的文本就是“Britain的首都是[MASK]。”,模型需要预测 [MASK] 为“London”。离散提示和离散数据一起通过预训练的嵌入层映射为输入嵌入:

{e(D0)...e(Di), e(x0), ..., e(xn), ..., e(Dk)}

其中 e ∈ R |V|×d

可以这样理解:我们给计算机一个固定格式的填空题,比如“[INPUT]的首都是[LABEL]。”,然后输入实例“Britain, London”,计算机就会将其转换为“Britain的首都是[MASK]。”,并要求预测 [MASK] 处的词。计算机内部会把文字转成数值(嵌入)来处理。

但正如 2.1 节所述,这种离散提示极不稳定,且不适合反向传播。因此,P-Tuning 引入了连续提示嵌入来改进和稳定提示。设 [Pi] 是第 i 个连续提示嵌入。P-Tuning 的提示模板如下:

T = {[P0:i], x, [P(i+1):j], y, [P(j+1):k]}

P-Tuning 利用一个额外的嵌入函数 f : [Pi] → hi 将模板映射为:

{h0, ..., hi, e(x), hi+1, ..., hj, e(y), hj+1, ..., hk}

最后,更新嵌入 {Pi}ki=1 以优化任务损失函数。

打个比方:你教一个机器人回答国家首都的问题。原先你给它固定的提示(离散提示),但稍微改一点提示,机器人的回答就变得很差。P-Tuning 的做法是给机器人一套可调整的工具(连续提示嵌入),它能够根据任务自行调整这些工具。模板中包含一系列连续提示嵌入,外加实际问题和标签。一个映射函数 f 把这些嵌入变成模型能理解的隐藏层表示。训练时,模型通过反向传播不断调整这些嵌入,让它们更好地服务于当前任务。

值得注意的是,将离散提示与连续提示拼接使用效果更好,这也是所有实验中所采用的方案。P-Tuning 同时适用于冻结和微调的语言模型。

图 2:一个关于“英国的首都是 [MASK]”的提示搜索示例。给定上下文(蓝色区域,“英国”)和目标(红色区域,“[MASK]”),橙色区域指的是提示。在 (a) 中,提示生成器只接收离散的奖励;相反,在 (b) 中,连续提示嵌入和提示编码器可以以可微分的方式进行优化。

图2分为两部分:(a) 离散提示搜索:提示生成器接收上下文“Britain”和目标“[MASK]”,生成提示“[INPUT]的首都是[LABEL]”。输入文本“英国的首都是[MASK]”被转成嵌入,经语言模型处理。这里提示生成器只能接收离散反馈(固定的奖励),无法通过梯度优化改进。(b) P-Tuning:使用连续提示嵌入 [Pi] 和提示编码器。输入文本和连续提示嵌入一起送入模型,输出包含连续提示嵌入的隐藏层表示和输入文本的嵌入。通过反向传播,连续提示嵌入可以不断优化,使模型更灵活地适应不同任务。

2.3 提示编码器的设计

在上述框架中,映射函数 f 将可训练的嵌入 {Pi} 映射为模型输入 {hi}。直觉上,使用映射函数比直接使用独立的可学习嵌入更容易建模不同提示嵌入之间的依赖关系。在实现中,采用了一个轻量级神经网络来构建 f。第 3 节实验尝试了长短期记忆(LSTM)网络、多层感知器(MLPs)和恒等映射函数。

试验部分:略

用一个具体例子来说明 P-Tuning 的工作原理:

假设任务是让语言模型(比如 GPT-3)预测国家首都。句子是“英国的首都是[MASK]。”,目标让模型在 [MASK] 位置填入“伦敦”。

步骤 1:定义连续提示嵌入
定义一系列可学习的连续提示嵌入 [P0, P1, ..., Pn],在输入层之前添加到输入序列。

步骤 2:构建提示模板
模板可能像这样:
[P0] [P1] ... [Pn] "英国的首都是" [MASK] [Pn+1] ... [Pm]

这些 [P] 是连续提示嵌入,在模型输入层之前被加入句子。

步骤 3:模型训练
模型接收带有连续提示嵌入的输入序列,目标是预测 [MASK] 处的词。同时通过反向传播调整这些连续提示嵌入,以提升预测准确率。

步骤 4:优化和预测
随着训练进行,连续提示嵌入不断优化,模型学会如何根据上下文(“英国的首都是”)预测出正确的首都名称。最终,当遇到类似输入时,模型能够准确预测出 [MASK] 位置应该是“伦敦”。

通过这个例子可以看清 P-Tuning 的核心:通过引入可学习的连续提示嵌入,使模型在特定任务上更灵活、更稳定,从而提升泛化能力。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策