「大模型学习」(15)Prompt Tuning → P-Tuning v1 → P-Tuning v2
1. Prompt Tuning
训练思路
- 冻结大模型参数,只训练一小段 soft prompt embedding。
- 训练时把 soft prompt 拼在输入前面,让模型学会在不同任务中利用这段提示完成预测。
训练过程
- 数据准备
-
下游任务转为 文本形式。
- 分类任务:
"文本: xxx [SOFT_PROMPT]" → label
- 生成任务:
"问题: xxx [SOFT_PROMPT]" → "答案: yyy"
- 分类任务:
- 前向传播
-
输入向量:
input = [soft_prompt1,...,soft_promptm, E(x1),...,E(xn)]
-
输入冻结的预训练模型,得到输出 logits。
- 计算损失
- 分类任务:交叉熵 loss。
- 生成任务:语言模型 loss(next-token prediction)。
- 反向传播
- 梯度只作用于 soft prompt embedding。
- 大模型参数完全冻结。
- 优化
- 用 Adam/AdamW 只更新 soft prompt 参数。
- 学习率通常比全参微调大(1e-3 ~ 1e-2)。
2. P-Tuning v1
训练思路
- 解决 Prompt Tuning 在小模型/中文场景效果不稳的问题。
- 用 Prompt Encoder(MLP / LSTM)生成提示向量,而不是直接训练 embedding。
训练过程
- 数据准备
- 类似 Prompt Tuning,但引入 Virtual Tokens(虚拟 ID,不对应词表)。
- 前向传播
- Virtual IDs → embedding → Prompt Encoder → soft prompt P。
- 拼接到输入前,喂进模型。
- 计算损失
- 同 Prompt Tuning。
- 反向传播
- 梯度更新方向:Prompt Encoder + Virtual ID embedding。
- 这个提示编码器(LSTM或MLP)的权重是需要被梯度更新和训练的。
- 大模型冻结。
- 优化
- 学习率一般也比较大(1e-3 ~ 1e-2)。
- 因为引入了非线性,收敛更稳。
3. P-Tuning v2
训练思路
- 结合 Prefix Tuning 的思想。
- 在 Transformer 每一层的 Attention 里加一段 可训练的前缀 Key/Value,比 v1 更强大。
- 每一层都prompt,相当于一种深度提示。
训练过程
- 数据准备
- 同样是转为文本 + 软提示任务。
- 不同点:prefix 会注入到每一层。
- 前向传播
-
对每一层 l,生成一组 prefix:
Kl_prefix, Vl_prefix
-
在注意力时拼接:
K̂l = [Kl_prefix; Kl_x], V̂l = [Vl_prefix; Vl_x]
-
其余步骤与原模型相同。
- 计算损失
- 同上。
- 反向传播
- 梯度只更新 prefix(可直接训练,或由 Prompt Encoder 生成)。
- 模型主体冻结。
- 优化
- lr 依然较大。
- 通常 prefix 长度在 8~64,权衡效果和计算。
4.(补充) Prefix Tuning
训练思路
- P-Tuning v2 的“前身”。
- 在 每一层 Attention 里加 trainable prefix(可训练的“前缀 key/value”)(不一定有 Prompt Encoder)。
训练过程
和 P-Tuning v2 基本一致,只是 prefix 向量直接作为参数训练,而不是通过 Prompt Encoder 生成。
- 数据准备 → 拼接 prefix → 前向 → 损失 → 更新 prefix。
- 优点:更强表达力;缺点:参数比纯 Prompt Tuning 大一些。