外观
提示学习(Prompt Learning)面试题
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 为什么需要提示学习?
Full Fine-Tuning 太低效,固定部分层微调效果差。提示学习通过最小化微调参数数量和计算复杂度,使计算资源受限时也能高效迁移学习。
离散 Prompt 的问题:
- Prompts 变化对性能极其敏感(加减一个词或改变位置都会造成巨大差异)
- 自动化搜索成本高
- 离散 Token 搜索结果可能非最优
2. 提示学习方法对比
Prefix Tuning(前缀微调)
| 维度 | 说明 |
|---|---|
| 思路 | 在输入 Token 前构造可学习的 Virtual Tokens 作为 Prefix;每层都添加;前面加 MLP 稳定训练 |
| 优点 | 可学习"隐式"Prompts;一个 Batch 处理多个用户/任务样本 |
| 缺点 | 占用序列长度,有额外计算开销;每层都加,改动大 |
Prompt Tuning(指示微调)
| 维度 | 说明 |
|---|---|
| 思路 | 仅在输入层添加连续 soft Prompt 向量(Lester 等;通常不使用 LSTM) |
| 优点 | 只在输入层加入;随模型参数增大逼近全参微调结果;支持 Prompt Ensembling |
| 缺点 | 训练难度大;多个 Prompt Token 间相互独立;小模型 NLU 表现不佳 |
P-Tuning
| 维度 | 说明 |
|---|---|
| 思路 | 可学习 Embedding 层 + Prompt Encoder(双向 LSTM + 两层 MLP)建模伪 Token 依赖 |
| 优点 | 提供更好的初始化;建模伪 Token 间的相互依赖 |
| 缺点 | 稍显复杂;伪 Token 可能与输入不连续 |
P-Tuning v2
| 维度 | 说明 |
|---|---|
| 思路 | Deep Prompt Encoding(每层添加);移除重参数化编码器;多任务预训练;抛弃 Verbalizer 回归传统分类范式 |
| 优点 | 更多可学习参数(0.1%-3%);解决小模型效果不佳问题;拓展到序列标注 |
| 缺点 | 弱化了 Prompt 的特色 |
3. Prefix Tuning vs Prompt Tuning
| 维度 | Prefix Tuning | Prompt Tuning |
|---|---|---|
| 适用任务 | NLG(GPT 架构) | 所有类型语言模型 |
| 添加位置 | 各层前缀(prefix) | 通常仅输入侧 soft prompt |
| 添加层级 | 每层都添加 | 可仅在输入层 |
4. Prompt Tuning vs Fine-Tuning
| 维度 | Fine-Tuning | Prompt Tuning |
|---|---|---|
| 参数变化 | 改变预训练参数,可能导致灾难性遗忘 | 不改变预训练参数,只调整连续 Prompt |
| 任务切换 | 每个任务保存一份完整模型 | 同一模型通过不同 Prompt 做多任务 |
5. P-Tuning v2 的关键改进
- Deep Prompt Encoding:每层加入可微调 Prompt Tokens(从 0.01% 增加到 0.1%-3%)
- 移除重参数化:对小模型更有益
- 多任务预训练:先在多任务 Prompt 上预训练,再适配下游
- 回归传统分类:抛弃 Verbalizer,采用 CLS + 分类头
6. 方法选型总结
| 场景 | 推荐方法 |
|---|---|
| NLG 任务、GPT 架构 | Prefix Tuning |
| 所有类型 LM、大模型 | Prompt Tuning |
| NLU 任务、GPT 系列 | P-Tuning |
| 小模型、序列标注 | P-Tuning v2 |
| 显存极度受限 | QLoRA + Prompt |