外观
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 人工设计离散 Prompts | Prefix Tuning 可学习"隐式"Prompts,且参数可更新 |
| vs Full Fine-Tuning | Full Fine-Tuning 更新所有参数,Prefix Tuning 只更新 Prefix 部分 |
| vs 其他轻量级方法 | 基于前缀的架构可在一个 Batch 中处理多个用户/任务样本 |
2.4 优缺点
优点:
- 可学习的"隐式"Prompts,不再依赖人工设计
- 支持一个 Batch 处理多用户/任务样本
- 大幅减少可训练参数量
缺点:
- 占用序列长度,有一定额外计算开销
- 每层都添加 Prompt 参数,改动较大
- Prefix 参数占用导致可用上下文长度减少
3. 指示微调(Prompt Tuning)
3.1 动机
- 模型全量微调对每个任务训练一个模型,部署成本高
- 离散 Prompts 方法成本高且效果不好
- Prefix Tuning 占用序列长度,改动较大
3.2 核心思路
- 将 Prompt 扩展到连续空间,仅在输入层添加可学习的连续 Prompt 向量
- 冻结模型原始权重,只训练 Prompt 参数
- 使用 LSTM 建模 Prompt 向量间的关联性
- 训练完成后,同一个模型可做多任务推理
可以看作是 Prefix Tuning 的简化版本。
3.3 Prompt Tuning vs Prefix Tuning
| 维度 | Prefix Tuning | Prompt Tuning |
|---|---|---|
| 适用任务 | 仅针对 NLG(GPT 架构) | 所有类型的语言模型 |
| 添加位置 | 各层前缀(更靠近 Prefix Tuning) | 通常仅输入侧 soft prompt |
| 添加层数 | 每一层都添加 | 通常只在输入层添加 |
| 参数量 | 较多(每层都有) | 较少(仅输入层) |
3.4 Prompt Tuning vs Fine-Tuning
| 维度 | Fine-Tuning | Prompt 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 核心思路
- 可学习的 Embedding 层设计:将 Prompt 转换为可学习的 Embedding 层
- 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) | 全部(含序列标注) |