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+MLPNLU(GPT 系列)
P-Tuning v2每层前端无(回归 CLS)全部(含序列标注)