冻结语言模型参数进行 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)的效果。


