大语言模型参数高效微调(PEFT)方法综述
随着自然语言处理技术的发展,预训练语言模型(PLM)的规模日益庞大。传统的全参数微调(Full Fine-tuning)在特定任务或领域适应时面临巨大的计算成本和存储开销。为了解决这一问题,参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)应运而生。本文总结了当前主流的几种 PEFT 方法,包括 LoRA、Adapter、Prefix-tuning、P-tuning 和 Prompt-tuning,分析其原理、实现细节及适用场景。
1. LoRA (Low-Rank Adaptation)
背景与动机
全参数微调需要更新所有模型参数,对于百亿级参数的大模型而言,显存占用和训练时间成本极高。LoRA 基于一个关键假设:模型在任务适配过程中权重的改变量是低秩的(low rank)。这意味着我们可以通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的部分密集层,同时保持预训练权重不变。
核心原理
LoRA 的实现思想是在原始预训练模型的矩阵参数旁边增加一个旁路分支。该分支包含两个低秩矩阵 A 和 B,用于模拟权重的变化量 ΔW。在推理阶段,将 BA 的结果叠加到原始权重上,无需额外延迟。
数学表达如下: $$ W = W_0 + \Delta W = W_0 + BA $$ 其中 $W_0$ 是冻结的预训练权重,$B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,且 $r \ll d, k$。
实现细节
- 初始化:矩阵 A 使用随机高斯分布初始化,矩阵 B 使用零矩阵初始化。这保证了训练开始时旁路对输出无影响。
- 训练过程:仅更新 A 和 B 的参数,$W_0$ 保持冻结。
- 推理过程:可以将 $BA$ 合并回 $W_0$,或者在推理时动态计算叠加,两者效果一致。
- 优势:参数量大幅减少,训练稳定,且能与其他 PEFT 方法结合使用。
2. Adapter
架构设计
Adapter 方法最早由 Houlsby 等人引入 NLP 领域。其核心是在 Transformer 的每一层(或某些层)中插入额外的模块。每个 Adapter 模块通常由两个前馈子层组成:
- 降维投影:将输入维度 $d$ 投影到较小的中间维度 $m$(通常 $m \ll d$)。
- 非线性激活:如 ReLU 或 GELU。
- 升维投影:将维度从 $m$ 还原回 $d$。
在微调时,冻结预训练模型主体,仅训练 Adapter 模块。这种方法允许在不破坏原有知识的情况下学习新任务,有效缓解灾难性遗忘。
AdapterFusion 改进
为了进一步提升多任务迁移能力,Pfeiffer 等人提出了 AdapterFusion。该方法将学习分为两个阶段:
- 知识提取:训练多个 Adapter 模块分别学习不同下游任务的特定知识。
- 知识组合:固定预训练参数和各 Adapter 参数,引入新的融合参数(Key, Value, Query),学习如何加权组合多个 Adapter 的输出。
这种机制使得模型能够根据上下文自适应地激活最有用的适配器,显著提升了在 MRPC、RTE 等数据集上的表现。
3. Prefix-tuning
概述
Prefix-tuning 主要用于生成任务。它通过在输入序列前添加一组连续的特定于任务的向量(称为前缀),引导模型生成目标内容。与前缀提示(Prompt)不同,这些向量是完全可学习的自由参数,不对应真实的离散 Token。
实现方式
对于自回归模型(如 GPT-2),前缀被添加到输入嵌入层之前。对于编解码器模型(如 BART),前缀可以添加到编码器和解码器的输入中。
由于直接优化连续的前缀参数可能导致训练不稳定,作者引入了重参数化技巧: $$ P = MLP(\alpha) $$ 其中 $\alpha$ 是可训练参数,MLP 负责将其映射到前缀空间。训练完成后,只需保存 $\alpha$,从而进一步压缩存储开销。


