Skip to content

Prompt Learning 方法对比与深度解析 ​

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

本文为提示学习的进阶补充篇,涵盖 Prefix Tuning、Prompt Tuning、P-Tuning 和 P-Tuning v2 的实现细节与对比。基础概念请参考第 17 篇「提示学习(Prompt Learning)面试题」。

1. 为什么需要提示学习? ​

在面对特定下游任务时:

  • Full Fine-Tuning:对所有参数微调,效率低,每个任务需保存完整模型副本
  • 固定部分层微调:仅微调接近下游任务的几层参数,效果往往不理想

提示学习通过最小化微调参数数量和计算复杂度,使预训练模型能迅速适应新任务,实现高效的迁移学习。

2. 前缀微调(Prefix Tuning) ​

2.1 动机 ​

Fine-Tuning 对每个任务都需要保存一份完整模型权重,耗时长且占用大量存储空间。

2.2 核心思路 ​

步骤说明
Step 1在输入 Token 之前构造任务相关的 Virtual Tokens 作为 Prefix
Step 2训练时只更新 Prefix 部分参数,Transformer 中其他参数固定
Step 3在 Prefix 层前面加 MLP 结构(防止直接更新 Prefix 导致训练不稳定),训练完成只保留 Prefix 参数

2.3 Prefix Tuning vs 其他方法 ​

对比对象差异
vs 人工设计离散 PromptsPrefix Tuning 可学习"隐式"Prompts,且参数可更新
vs Full Fine-TuningFull Fine-Tuning 更新所有参数,Prefix Tuning 只更新 Prefix 部分
vs 其他轻量级方法基于前缀的架构可在一个 Batch 中处理多个用户/任务样本

2.4 优缺点 ​

优点:

  • 可学习的"隐式"Prompts,不再依赖人工设计
  • 支持一个 Batch 处理多用户/任务样本
  • 大幅减少可训练参数量

缺点:

  • 占用序列长度,有一定额外计算开销
  • 每层都添加 Prompt 参数,改动较大
  • Prefix 参数占用导致可用上下文长度减少

3. 指示微调(Prompt Tuning) ​

3.1 动机 ​

  • 模型全量微调对每个任务训练一个模型,部署成本高
  • 离散 Prompts 方法成本高且效果不好
  • Prefix Tuning 占用序列长度,改动较大

3.2 核心思路 ​

  1. 将 Prompt 扩展到连续空间,仅在输入层添加可学习的连续 Prompt 向量
  2. 冻结模型原始权重,只训练 Prompt 参数
  3. 使用 LSTM 建模 Prompt 向量间的关联性
  4. 训练完成后,同一个模型可做多任务推理

可以看作是 Prefix Tuning 的简化版本。

3.3 Prompt Tuning vs Prefix Tuning ​

维度Prefix TuningPrompt Tuning
适用任务仅针对 NLG(GPT 架构)所有类型的语言模型
添加位置各层前缀(更靠近 Prefix Tuning)通常仅输入侧 soft prompt
添加层数每一层都添加通常只在输入层添加
参数量较多(每层都有)较少(仅输入层)

3.4 Prompt Tuning vs Fine-Tuning ​

维度Fine-TuningPrompt Tuning
参数变化改变预训练阶段模型参数不改变,只寻找更好的连续 Prompt
灾难性遗忘可能存在风险更低
模型存储每个任务一份共用一个模型

3.5 优缺点 ​

优点:

  • 随预训练模型参数量增加,效果逼近全参数微调
  • 提出 Prompt Ensembling:在一个 Batch 中同时训练同一任务的不同 Prompt,相当于低成本模型集成

缺点:

  • 训练难度大,省显存但不一定省时间(Parameter Efficient 不等于 Training Efficient)
  • 多个 Prompt Token 之间相互独立,可能影响效果
  • 小模型 NLU 上表现不佳
  • 不能处理困难的序列标注任务

4. P-Tuning ​

4.1 动机 ​

GPT 系列 AR 模型在 NLU 任务上效果不好,与 BERT 双向语言模型有明显差距。GPT-3 采用人工构造模版做 In-Context Learning,但人工设计的模版变化敏感,自动化搜索成本高且结果可能非最优。

4.2 核心思路 ​

  1. 可学习的 Embedding 层设计:将 Prompt 转换为可学习的 Embedding 层
  2. Prompt Encoder 设计:用一个双向 LSTM + 两层 MLP 组成的 Prompt Encoder 对 Prompt Embedding 进行处理,建模伪 Token 的相互依赖,提供更好的初始化

4.3 优缺点 ​

优点:

  • 只在输入层加入 Prompt Tokens,不需要 MLP 来解难训练问题
  • 引入 Prompt Encoder 建模伪 Token 间依赖关系

缺点:

  • 省显存但不省时间
  • 多个 Prompt Token 间可能仍相互独立
  • 在 NLU 上,对正常大小的预训练模型表现不佳
  • 不能处理困难的序列标注任务

5. P-Tuning v2 ​

5.1 动机 ​

让 Prompt Tuning 能够在不同参数规模的预训练模型、针对不同下游任务上都达到匹敌 Fine-Tuning 的效果。

5.2 核心改进 ​

改进点说明
Deep Prompt Encoding采用 Prefix Tuning 的做法,在输入前面的每层加入可微调 Prompts
移除重参数化编码器去除 Prefix Tuning 的 MLP 和 P-Tuning 的 LSTM,对较小模型影响较大
不同任务不同提示长度提示长度在超参数搜索中起核心作用(不同任务最佳长度不同)
多任务预训练先在多任务 Prompt 上预训练,再适配下游任务
抛弃 Verbalizer回归传统 CLS 和 Token Label 分类范式,适配序列标注任务

5.3 为什么抛弃 Verbalizer ​

  • Verbalizer 在 Few-Shot 设置中可能必需,但在全数据监督设置中并非必要
  • 阻碍了 Prompt Tuning 在需要无关实际意义标签和句子嵌入场景中的应用
  • P-Tuning v2 回归传统 CLS 标签分类,采用**随机初始化的分类头(Classification Head)**应用于 Tokens 之上

5.4 优缺点 ​

优点:

  • 更多可学习参数(从 0.01% 增加到 0.1%-3%),保持参数高效
  • 更深层 Prompt 对模型预测有更直接影响
  • 解决小模型上效果不佳问题
  • 拓展到 NER 等序列标注任务

缺点:

  • 稍显复杂,弱化了 Prompt 的特色
  • 伪 Token 编码时连续,但与输入结合时可能不连续,中间可能插入输入

6. 各方法核心比较 ​

方法添加位置重参数化Verbalizer适用任务
Prefix Tuning每层前端MLP(可选)有NLG
Prompt Tuning输入层通常无(直接优化 soft prompt)有全部
P-Tuning输入层LSTM+MLP有NLU(GPT 系列)
P-Tuning v2每层前端无无(回归 CLS)全部(含序列标注)