背景
随着 ChatGPT 的爆火,许多机构开源了自己的大模型,例如清华的 ChatGLM-6B/10B/130B,HuggingFace 的 BLOOM-176B。此外,OpenAI 的 GPT-4、百度的文心一言、谷歌的 PaLM-540B、华为的盘古大模型以及阿里的通义千问等也备受关注。
大型公司或研究机构拥有充足资源开发大模型,但对于一般小公司或个人而言,从头训练大模型几乎不可能。以 ChatGPT 为例,一次训练成本高达上千亿美元。因此,如何利用开源大模型在自有数据上继续训练并应用于业务场景,成为关键问题。参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)提供了一种低成本的方法。
PEFT 主要包括以下七种主流方法:
- LoRA (Low-Rank Adaptation)
- QLoRA (Quantized Low-Rank Adaptation)
- Adapter Tuning
- Prefix Tuning
- Prompt Tuning
- P-Tuning
- P-Tuning v2
下图展示了这 7 种微调方法在 Transformer 网络架构中的作用位置及其简要说明。

1. LoRA (Low-Rank Adaptation)
LoRA 旨在微调大型预训练语言模型(如 GPT-3 或 BERT)。其核心理念是在模型的决定性层次中引入小型、低秩的矩阵来实现微调,而无需对整个模型结构进行大幅度修改。
LoRA 的操作流程:
- 确定微调目标权重矩阵:在大型模型中识别需要微调的权重矩阵,通常位于多头自注意力和前馈神经网络部分。
- 引入两个低秩矩阵:引入维度较小的低秩矩阵 A 和 B。假设原始权重矩阵尺寸为 $d \times d$,则 A 和 B 的尺寸为 $d \times r$ 和 $r \times d$,其中 $r \ll d$。
- 计算低秩更新:通过乘积 $AB$ 生成新矩阵,其秩远小于原始权重矩阵。这是对原始权重矩阵的低秩近似调整。
- 结合原始权重:新生成的低秩矩阵叠加到原始权重上。数学表达式为:$W' = W + BA$。
实例:假设有一个用于广泛 NLP 任务的大型语言模型,现需微调以适应医疗健康领域。采用 LoRA 方法,无需直接修改大量权重,只需在关键部位引入低秩矩阵并通过乘积进行有效调整,使模型适应专业术语,避免大规模重新训练。
2. QLoRA (Quantized Low-Rank Adaptation)
QLoRA 结合了 LoRA 与深度量化技术,是高效的模型微调手段。
QLoRA 的核心:
- 量化技术:将预训练模型量化为 4-bit。使用低精度存储数据类型(4-bit NormalFloat, NF4)和计算数据类型(16-bit BrainFloat)。这极大减少了存储需求,同时保持精度损失最小。
- 量化操作:在 4 位量化中,每个权重由 4 个比特表示。确定量化范围(如 -1 到 1),分成 16 个区间,将原始 32 位浮点数值映射到最近的量化区间值。
- 微调阶段:训练期间以 4-bit 格式加载模型,训练时将数值反量化到 bf16 进行。例如,33B 的 LLaMA 模型可在 24 GB 显卡上训练。
量化过程的挑战在于设计合适的映射策略以最小化精度损失。在大型模型中,这种方法显著减少内存和计算需求,使得资源有限环境下的部署成为可能。
3. 适配器调整 (Adapter Tuning)
适配器调整的目标是在保留预训练模型原始参数不变的前提下,使模型适应新任务。方法是在模型的每层或选定层之间插入小型神经网络模块,称为'适配器'。这些适配器是可训练的,而原始模型参数保持不变。
关键步骤:


