冻结语言模型参数进行 Prompt 微调的技术解析
引言
在大型语言模型(LLM)的下游任务微调中,全量微调(Full Fine-tuning)虽然效果显著,但计算成本高昂,参数量巨大。为了解决这一问题,参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)应运而生。其中,固定 LM 参数、仅微调 Prompt 相关模块的方法因其轻量级特性,成为重要的替代方案。
与传统的离散型 Token 模板不同,这类方法的核心在于使用连续向量(Continuous Embedding)作为 Prompt。我们并不关心 Prompt 本身是否构成自然语言,而是关注其作为探针能否引导预训练模型在特定任务上展现出所需能力。这种范式具有性价比高、无需人工设计模板、多任务共享模型等优势。
本文将深入解析三种主流的冻结 LM 微调 Prompt 技术:Prefix-Tuning、Prompt-Tuning 和 P-Tuning,并对比它们的机制、优缺点及适用场景。
Prefix-Tuning
背景与起源
Prefix-Tuning 是最早提出连续 Prompt 微调的论文之一,源自可控文本生成领域的延伸。在传统的可控生成中,如 CTRL 模型,会在输入文本前加入控制代码(Control Code),例如在好评前加 'Reviews Rating:5.0',将生成概率优化为基于主题的条件概率。
Prefix-Tuning 进一步将控制代码优化为虚拟 Token 的 Embedding(Prefix)。对于 Decoder-Only 架构(如 GPT),Prefix 仅添加在句首;对于 Encoder-Decoder 架构(如 BART),Prefix 同时添加在编码器和解码器的开头。在下游微调时,LM 的参数被冻结,只有 Prefix 部分的参数进行更新。值得注意的是,这里的 Prefix 参数不仅包括 Embedding 层,还包括虚拟 Token 位置对应的每一层的 Activation。
关键细节与优化
1. Prefix 矩阵分解
直接更新多个虚拟 Token 的参数可能导致训练不稳定。为此,作者在 Prefix 层引入了 MLP 结构,将其分解为更小的 Embedding 层和更大的 MLP 层。原始 Embedding 层参数为 n_prefix * emb_dim,调整后变为 n_prefix * n_hidden + n_hidden * emb_dim。训练完成后,推理阶段只需保留 MLP 输出的参数,从而减少显存占用。
MLP 的引入旨在增加多个虚拟 Token 之间的信息共享,因为它们与常规连续文本存在差异,需要作为一个整体考虑。这类似于对 Prefix 位置编码进行了特殊处理,增强了语义的连贯性。
2. Prefix 长度选择
Prefix 部分使用的虚拟 Token 数量直接影响模型微调的参数量级以及处理长文本的能力。默认 Prefix 长度为 10。实验表明,在不同任务上微调后,最优参数通常保持在这一量级。整体上,Prompt 部分的参数量约为原模型的 0.1%。
3. 性能表现
在 Table2Text 任务上,仅 0.1% 参数量级的 Prompt Tuning 效果优于全量微调。而在 XSum 摘要任务上,Prompt Tuning 的效果略差于全量微调,但仍保持了较高的效率。这表明该方法在特定生成任务上具有显著优势。
Prompt-Tuning
简化与核心思想
Prompt-Tuning 是 Prefix-Tuning 的简化版本,主要面向 NLU(自然语言理解)任务。它进行了更全面的效果对比,并成功在大模型上打平了 LM 微调的效果。
与 Prefix-Tuning 相比,Prompt-Tuning 的主要差异在于:
- 微调范围:Prompt-Tuning 只对输入层(Embedding)进行微调,而 Prefix-Tuning 对虚拟 Token 对应的上游 Layer 全部进行微调。
- 参数量级:相同的 Prefix 长度下,Prompt-Tuning 的微调参数量级小于 Prefix-Tuning 约 10 倍以上。例如,Prompt-Tuning 可控制在 0.01% 以下,而 Prefix-Tuning 通常在 0.1%~1%。
- 模型结构:Prompt-Tuning 不需要修改原始模型结构,更加轻量化。
效果与消融实验
在 SuperGLUE 任务上,随着模型参数的上升,Prompt-Tuning 快速拉近与全量微调的效果差距。当模型规模达到 110 亿参数(如 T5-1.1)时,已能完全打平下游多任务联合微调的 LM 模型,并远远超过 Few-Shot Prompt Design(GPT-3)的效果。
作者进行了全面的消融实验,核心结论是:只要模型足够大,一切皆有可能。
- Prompt 长度:固定其他参数,尝试了 {1, 5, 20, 100, 150} 等长度。当模型规模达到百亿级后,只要 Prompt 长度大于 1,更长的 Prompt 并不能带来显著的效果提升。
- Prompt 初始化:尝试了随机 Uniform 初始化、标签文本空间初始化、Top5K 高频词采样初始化。在小规模模型(10^8 级别)下,标签词初始化效果最好,因为预测 Label 也会出现在对应 Prompt 空间内。但在百亿规模后,初始化的影响会消失。
- 继续预训练:T5 本身的 Span Corruption 预训练目标可能不适合冻结 LM 的场景。作者发现对 T5 基于 LM 目标进行继续预训练后,模型效果在不同规模上呈现单调上升趋势。步数越高,效果越好。
可解释性分析
由于 Prompt-Tuning 使用 Embedding 表征指令,可解释性相对较差。作者通过余弦距离搜索 Prompt Embedding 对应的 Top5 近邻,发现:
- Embedding 的近邻出现语义相似的 Cluster(如 Technology / technological / technologies),说明连续 Prompt 实际可能是相关离散 Prompt 词的聚合语义。
- 当连续 Prompt 较长时,存在多个 Prompt Token 的 KNN 相同,这暗示 Prompt 应该被视为一个整体。
- 使用标签词初始化后,微调后的标签词大概率会出现在 Prompt 的 KNN 中,说明初始化可以提供更好的先验信息加速收敛。
P-Tuning
设计思路
P-Tuning 与 Prompt-Tuning 几乎同时出现,思路相似,但在 Prompt 综述中被归类为 LM+Prompt 同时微调的范式。不过,作者实际上也支持固定 LM 只微调 Prompt 的模式。
针对连续 Prompt 的整体性问题,作者认为直接通过虚拟 Token 引入 Prompt 存在两个问题:
- 离散性:如果用预训练词表的 Embedding 初始化,经过预训练的词在空间分布上较稀疏,微调幅度有限,容易陷入局部最优。
- 整体性:多个 Token 的连续 Prompt 应相互依赖作为一个整体。
为解决这两个问题,P-Tuning 使用双向 LSTM + 2 层 MLP 来对 Prompt 进行表征。LSTM 结构提高了 Prompt 的整体性,ReLU 激活函数的 MLP 提高了离散性。更新 Prompt 即对应更新整个 LSTM+MLP 部分的 Prompt Encoder。
评测结果
作者分别对 LAMA 知识探测和 SuperGLUE 文本理解进行了评测。
- 知识探测:在知识抽取任务中,默认固定 LM 只微调 Prompt。P-Tuning 对 GPT 这类单向语言模型的效果提升显著,显著优于人工构建模板和直接微调,使得 GPT 在不擅长的知识抽取任务中可以基本打平 BERT 的效果。
- SuperGLUE:在文本理解任务上,作者做了 LM+Prompt 同时微调的设定。虽然结论与知识探测相似,但个人对 LM+Prompt 同时微调的逻辑持保留态度,因为这既破坏了预训练的语言知识,也没节省微调的参数量级。
方法对比与总结
为了更直观地展示这三种方法的异同,下表总结了它们的关键特征:
| 特性 | Prefix-Tuning | Prompt-Tuning | P-Tuning |
|---|
| 微调位置 | Prefix 层 + 所有层 Activation | 仅 Input Embedding 层 | Prompt Encoder (LSTM/MLP) |
| 参数量级 | ~0.1% | <0.01% | ~0.1% - 1% |
| 模型结构修改 | 需修改 Attention 掩码 | 无需修改 | 需添加 Prompt Encoder |
| 适用任务 | 生成任务为主 | NLU 任务为主 | NLU + 知识探测 |
| 可解释性 | 较低 | 低 | 中等 |
局限性与挑战
尽管冻结 LM 微调 Prompt 的范式具有诸多优点,但仍存在一些局限性:
- 可解释性差:这是所有连续型 Prompt 的统一问题,难以直观理解 Prompt Embedding 的具体含义。
- 收敛更慢:更少的参数想要撬动更大的模型,需要更复杂的空间搜索,导致训练收敛速度较慢。
- 过拟合风险:理论上 Prompt 作为探针,但实际模型是否真的使用 Prompt 部分作为探针,还是直接去拟合任务导致过拟合,是一个待确认的问题。
- 不稳定性:Prompt-Tuning 和 P-Tuning 在某些基准测试(如 SuperGLUE)上存在无法复现的问题,结果可能存在波动。
实施建议
在实际应用中,建议遵循以下步骤以确保最佳效果:
- 模型选择:优先选择大规模预训练模型(如百亿参数以上),因为规模效应能显著提升 Prompt Tuning 的性能。
- 初始化策略:在小规模模型上,建议使用标签词或高频词初始化 Prompt Embedding;在大规模模型上,随机初始化即可。
- 学习率调整:由于参数量少,建议适当降低学习率,避免破坏预训练权重。
- 硬件资源:利用 LoRA 或其他 PEFT 工具链进行部署,可以进一步降低显存需求。
结语
冻结 LM 参数进行 Prompt 微调代表了大模型应用的一个重要方向。通过 Prefix-Tuning、Prompt-Tuning 和 P-Tuning 等技术,开发者可以在极低的计算成本下实现高效的下游任务适配。随着模型规模的进一步扩大和技术的持续演进,这些方法有望成为工业界微调大模型的主流方案。