软提示方法族:Prefix/Prompt Tuning/P-Tuning
前置知识点
- 微调技术谱系与选型决策树 入门
一句话定义
软提示方法不改动任何模型权重,而是训练一段「虚拟 token」的连续向量,拼在输入或每层注意力键值前面,让模型以特定方式响应。
为什么重要
它是 PEFT 谱系里与 LoRA 平行的另一条路线,理解它有三个用处:其一,读懂早年大量论文与工具里的 prefix/prompt 选项;其二,它在「一个基座挂 N 个超小任务适配器」场景下体积优势极大(几百 KB);其三,理解它的失败模式(训练不稳、对生成任务弱)能反衬出 LoRA 为什么赢了主流。
前置知识
kp-003 的 PEFT 谱系定位;知道 Transformer 每层注意力有 Key/Value 序列。
核心概念
- Prompt Tuning:只在输入 embedding 层前拼接可训练向量 P,深层不动。
- Prefix Tuning:在每一层的注意力 Key/Value 前拼接可训练前缀,重参数化为 MLP(训练时用 MLP 生成前缀,用完丢弃)。
- P-Tuning v2:与深层 prefix 同源的工程化实现,把可训练前缀铺到每层,在小模型上逼近全参微调。
- 重参数化:直接优化前缀向量优化困难,先优化一个小 MLP 再由它生成前缀,训练后丢弃。
原理与机制
对第 i 层注意力,前缀方法把序列扩为:
其中 P_i 是该层专属的可训练矩阵(长度为前缀数 m×维度 d)。可训练参数量约为 层数 × m × d —— 与模型宽度成线性关系而与总参数量无关。对比 LoRA:LoRA 改的是变换本身(权重矩阵的增量),软提示改的是输入分布(给注意力塞进可控的上下文)。这解释了各自的长短板:任务若能通过「更聪明的上下文」引导(分类、格式化),前缀够用;任务若需要改变生成分布与知识调用方式(对话、创作),改权重的 LoRA 更稳。
图示
输入: [P P P] [真实 token ...] Prompt Tuning: 只在输入层
层 l: K,V ← W([P_l ; h_l]) Prefix Tuning: 每层 KV 前都拼直观类比
给模型佩戴一副「隐形眼镜」:不换眼球(权重),只改变它看世界的方式。Prompt Tuning 是贴在镜片上的一层膜,Prefix Tuning 是每层视网膜前都装一组可调透镜。
实例或案例
情感分类器场景:175B 级模型上 Prompt Tuning 用 2 万个参数达到全参微调相近精度(论文结果);但在 7B 模型上做中文多轮对话微调,同等数据下 Prefix Tuning 普遍弱于 LoRA——生成流畅度与指令遵循都更差,这也是 2023 年后社区实践收敛到 LoRA 的原因。
操作步骤
from peft import PrefixTuningConfig, get_peft_model
config = PrefixTuningConfig(num_virtual_tokens=20,
encoder_hidden_size=2048)
model = get_peft_model(model, config)决策规则:任务为判别式(分类/抽取/打分)且要挂多个超小适配器 → 试 Prefix/Prompt Tuning;任务为生成式对话或指令遵循 → 直接 LoRA。
排错清单
- 训练极不稳定、loss 剧烈震荡:前缀未做重参数化(直接优化裸向量),改用带 MLP 重参数化的 Prefix 配置。
- 效果远弱于 LoRA 对照:正常现象,生成式任务本来就不占优;此时结论就是选 LoRA,不必死磕。
- 前缀文件加载后行为不变:确认
num_virtual_tokens与训练一致,前缀长度是模型敏感量。
常见误区
- 软提示 = 提示工程:提示工程改的是离散自然语言文本(人可读);软提示优化的是连续向量(人不可读的「虚拟 token」)。
- 以为软提示零成本上线就一定划算:省的是显存与体积,付的是效果上限与训练稳定性。
- P-Tuning v2 适合一切模型规模:它的优势区间是中小模型与大任务数量的组合,现代大模型对话微调的主流仍是 LoRA。
与其他知识点的关系
同为 PEFT 但改权重的路线见 kp-005;多适配器服务化的对应能力见 kp-009;方法谱系定位见 kp-003。
延伸阅读
Li & Liang 2021《Prefix-Tuning: Optimizing Continuous Prompts for Generation》;Lester et al. 2021《The Power of Scale for Parameter-Efficient Prompt Tuning》。
自测题
- Prompt Tuning 与 Prefix Tuning 的本质区别?
答:作用深度——前者只在输入 embedding 层拼接可训练向量,后者把可训练前缀铺到每层注意力的 K/V 上。
- 为什么前缀向量常需要 MLP 重参数化?
答:直接优化高维连续前缀的优化landscape困难、易震荡;先优化小 MLP 再由其生成前缀更稳定,训练后 MLP 可丢弃。
- 什么场景下软提示仍优于 LoRA?
答:判别式小任务 + 需要挂载大量超小适配器(体积 KB 级、切换零成本)的服务形态。
相关知识点
来源
- Li & Liang 2021《Prefix-Tuning: Optimizing Continuous Prompts for Generation》
- Liu et al. 2021《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》
基于模型知识整理,建议按需核对原文。