【第四章:大模型(LLM)】10.微调方法与实战-(3)P-tuning v2
P-tuningv2是一种高效的大模型微调方法,通过在所有Transformer层注入可学习前缀向量来提升性能。相比P-tuningv1,它简化了实现(去除了BiLSTM/MLP编码器),在各类NLP任务上效果接近全参数微调,同时仅需微调0.1%-1%的参数。该方法在注意力层的Key/Value前添加可学习前缀,实现了多层信息注入,在GLUE等基准测试中表现优异,成为后续参数高效微调方法的基础。
第四章:大模型(LLM)
第十部分:微调方法与实战
第三节:P-tuning v2
1️⃣ 背景与动机
-
P-tuning(v1) 通过可学习的提示编码器(如 BiLSTM/MLP)生成连续的提示向量,已经比 Prompt Tuning 更强大。
-
但在更大规模模型(如 GPT-2, GPT-3, BERT-large)上,P-tuning 仍存在:
-
任务泛化能力不足。
-
实现复杂(需要设计提示编码器)。
-
对生成类任务支持有限。
-
P-tuning v2 被提出,目标是:
-
统一 NLP 各类任务(分类、生成、抽取等)。
-
等效替代全参数微调,在效果上接近甚至持平。
-
同时保持 参数高效(只需微调少量参数)。
2️⃣ 核心思想
P-tuning v2 的核心是 Prefix Tuning + 可学习虚拟 token 的结合:
-
在 每一层 Transformer 的注意力层(Self-Attention),为 Key/Value 添加一组可学习的前缀向量。
-
与 Prompt Tuning 不同:
-
Prompt Tuning 只在输入 embedding 层添加提示。
-
P-tuning v2 在所有层注入提示信息,增强模型表达能力。
-
-
相比 P-tuning v1,去掉了复杂的 BiLSTM/MLP 编码器,采用更简洁的实现。
3️⃣ 方法原理
(1) 前缀化注意力机制
在第 l 层注意力中:
-
:可学习的前缀向量(prefix embedding)。
-
将它们拼接到原始 Key/Value 前,使模型在计算注意力时“预先关注”这些前缀信息。
(2) 多层注入
-
在每一层的 Self-Attention 都加入前缀向量。
-
前缀向量在不同层共享或独立可学习,灵活可调。
4️⃣ 与其他方法的比较
方法 | 注入位置 | 是否逐层 | 参数开销 | 效果 |
---|---|---|---|---|
Prompt Tuning | 输入 embedding | 仅输入层 | 极小 | 效果有限 |
P-tuning v1 | 输入 embedding(编码器生成) | 仅输入层 | 小 | 效果较好 |
Prefix Tuning | KV Cache | 每层 | 中等 | 效果好 |
P-tuning v2 | KV Cache | 每层 | 中等 | 接近全参数微调 |
5️⃣ 特点与优势
统一性:可处理分类、生成、抽取等各种任务。
高效性:仅需训练前缀向量(通常占模型参数的 0.1%~1%)。
效果强大:在 GLUE、SuperGLUE 等基准测试中,性能接近甚至超越全参数微调。
简洁实现:无需额外提示编码器,直接在 Transformer 内部注入参数。
6️⃣ PyTorch 伪代码
import torch
import torch.nn as nn
class PrefixLayer(nn.Module):
def __init__(self, num_heads, prefix_len, dim):
super().__init__()
self.prefix_len = prefix_len
self.num_heads = num_heads
self.dim = dim
# 可学习的前缀 Key/Value
self.prefix_key = nn.Parameter(torch.randn(prefix_len, num_heads, dim))
self.prefix_value = nn.Parameter(torch.randn(prefix_len, num_heads, dim))
def forward(self, K, V):
# 拼接前缀到原始 K/V
K = torch.cat([self.prefix_key, K], dim=0)
V = torch.cat([self.prefix_value, V], dim=0)
return K, V
在实际实现中,需要在 Transformer 的每一层 Attention 前调用该模块。
7️⃣ 总结
-
P-tuning v1:提示编码器生成输入前缀 → 提升了表达能力,但实现复杂。
-
P-tuning v2:直接在每层 Attention 引入可学习前缀 → 简洁高效,效果媲美全参数微调。
-
地位:P-tuning v2 被认为是 Prompt Tuning/Prefix Tuning 的统一框架,奠定了后续 LoRA、Adapter 等方法的基础。
更多推荐
所有评论(0)