大模型微调方法总结
随着预训练语言模型(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 Adaptation of Large Language Models (arXiv:2106.09685)
简介
自然语言处理的主流范式通常包括大规模预训练和针对特定任务的微调。然而,随着模型参数量达到百亿甚至千亿级别,重新训练所有参数在计算资源和存储上变得不可行。LoRA 基于一个关键发现:模型在任务适配过程中权重的改变量具有低秩特性(low intrinsic dimension)。
原理与方法
LoRA 的核心思想是冻结预训练模型的权重矩阵 $W_0$,并引入旁路分支来学习权重的更新量 $ riangle W$。假设更新量可以分解为两个低秩矩阵的乘积 $BA$,其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,且秩 $r \ll d$。
在训练过程中,只更新 $A$ 和 $B$ 的参数,而 $W_0$ 保持不变。前向传播时,输出为 $h = W_0x + BAx$。由于 $BA$ 初始化为零矩阵,训练初期对原始模型无影响。推理阶段,可以将 $BA$ 合并回 $W_0$,因此不会增加额外的推理延迟。
实现细节
- 初始化: $A$ 使用随机高斯分布初始化,$B$ 使用零矩阵初始化。
- 应用位置: 通常应用于 Transformer 中的 Query 和 Value 投影层。
- 优势: 显存占用大幅降低,训练速度快,且能与其他 PEFT 方法结合。
2. Adapter
论文: Parameter-Efficient Transfer Learning for NLP (arXiv:1902.00751)
简介
Adapter 是一种较早提出的 PEFT 方法,通过在预训练模型的每一层或特定层之间插入小型网络模块来实现任务适配。这种方法避免了灾难性遗忘,允许在不修改主模型参数的情况下适应新任务。
架构设计
每个 Adapter 模块包含两个前馈子层:
- 降维层: 将输入维度 $d$ 投影到较小的中间维度 $m$(通常 $m \ll d$),通过非线性激活函数。
- 升维层: 将维度从 $m$ 还原回 $d$。
Adapter 的输出通过残差连接加到原始 Transformer 块的输出上。这种结构使得模型能够灵活地切换不同任务对应的 Adapter 模块。
改进方案:AdapterFusion
为了进一步提升多任务迁移能力,提出了 AdapterFusion。它将学习过程分为两个阶段:
- 知识提取: 训练独立的 Adapter 模块学习各下游任务的特定知识。
- 知识组合: 固定预训练参数和各 Adapter 参数,引入新的融合参数来学习如何组合多个 Adapter 的知识,从而解决任务间干扰问题。
尽管 Adapter 效果显著,但其在每一层都增加了额外参数,可能会略微增加推理时的内存访问开销。
3. Prefix-tuning
论文: Prefix-Tuning: Optimizing Continuous Prompts for Generation (arXiv:2101.00190)
简介
Prefix-tuning 主要用于生成任务。它借鉴了人类提示(Prompt)的概念,但在输入序列前添加了一组连续的、可学习的向量(称为前缀),而不是离散的文本 Token。
核心机制
- 连续提示: 前缀由自由参数组成的向量序列构成,不对应任何真实词汇,这使得优化更加平滑。
- 重参数化: 为了防止训练不稳定,作者对前缀参数进行了重参数化处理,将其映射到一个更小的空间进行优化,再扩展回原空间。
- 适用范围: 适用于自回归模型(如 GPT-2)和编解码器模型(如 BART)。
优势
相比于离散 Prompt,连续前缀具有更强的表达能力,能够捕捉更复杂的任务特征,且只需存储前缀参数,无需更新主模型。
4. P-tuning
论文: GPT Understands, Too (arXiv:2103.10385)
简介
P-tuning 主要针对理解类任务(NLU),特别是针对 BERT 等双向模型。它结合了 Prompt-tuning 的思想,但引入了更复杂的编码结构。
关键改进
- LSTM 编码: 考虑到预训练 Embedding 的离散性以及 Prompt 之间的关联性,P-tuning 使用 LSTM 对可学习的 Prompt 向量进行编码,增强了上下文表示能力。
- Anchor 机制: 在输入中引入锚点(如问号),帮助模型更好地理解任务边界,例如在 RTE 任务中加入
? 符号。
效果
实验表明,P-tuning 在全数据集上的表现超越了传统的精调方法,证明了连续提示在理解任务中的有效性。
5. Prompt-tuning
简介
Prompt-tuning 是最轻量级的微调方法之一。它不引入额外的网络层,而是直接定义一组可学习的嵌入向量作为 Prompt,拼接到输入数据上。预训练模型参数完全冻结。
特点
- 无额外层: 相比 P-tuning,Prompt-tuning 没有 LSTM 等编码结构,参数量更少。
- 模型缩放效应: 研究表明,随着模型体积增大,Prompt-tuning 的效果逐渐提升,最终能追平全参数微调的效果。
- Prompt Ensembling: 可以在一个 Batch 中同时训练同一任务的不同 Prompt 变体,类似于模型集成,但成本更低。
各方法对比与选型建议
| 方法 | 参数量 | 推理延迟 | 适用场景 | 备注 |
|---|
| LoRA | 极低 | 无增加 | 通用微调,生成/理解 | 目前最流行,支持多任务切换 |
| Adapter | 低 | 轻微增加 | 多任务,跨语言 | 模块化强,但推理需加载多个模块 |
| Prefix-tuning | 低 | 无增加 | 生成任务 | 连续向量优化,适合长文本生成 |
| P-tuning | 低 | 无增加 | 理解任务 (NLU) | 引入 LSTM 编码,适合分类/抽取 |
| Prompt-tuning | 极低 | 无增加 | 简单任务,小样本 | 最轻量,依赖模型规模 |
选型指南
- 资源受限: 如果显存非常紧张,首选 Prompt-tuning 或 LoRA。
- 生成任务: 优先选择 Prefix-tuning 或 LoRA。
- 理解任务: P-tuning 在分类和抽取任务上表现优异。
- 多任务部署: LoRA 和 Adapter 更适合动态切换不同任务适配器。
- 性能要求: 若追求极致性能且资源允许,LoRA 通常是性价比最高的选择。
总结
大模型微调技术的核心在于平衡性能与效率。LoRA 凭借其低秩特性和无推理延迟的优势,已成为当前工业界的首选方案。Adapter 提供了灵活的模块化扩展,而 Prefix/Prompt/P-tuning 则展示了通过优化输入空间而非权重空间来适配任务的潜力。开发者应根据具体任务类型、硬件资源和性能需求选择合适的微调策略。