大模型微调技术综述

概述

本文整理自多篇技术文章,系统介绍大模型微调的核心概念、主流技术和实践方法。

一、什么是微调?

微调(Fine-Tuning) 是指在已经训练好的大型预训练模型的基础上,进一步训练该模型以适应特定任务或特定领域的数据。

预训练 vs 微调

阶段目标数据
预训练学习通用语言规律(语法、语义、常识)海量无标注文本
微调适应下游任务(情感分析、客服问答等)特定领域标注数据

为什么需要微调?

  1. 避免从头训练的天价成本
  2. 快速高效地定制大模型能力
  3. 在特定任务上取得更好的性能

厨师比喻

预训练模型就像一位米其林大厨,精通法餐。微调就是让他用原有厨艺基础,再专门学习川菜,最后既能做法餐,也能做出地道的麻婆豆腐。


二、微调技术分类

微调技术
├── 全量微调 (Full Fine-tuning)
│   └── 调整所有参数
└── 参数高效微调 (PEFT)
    ├── 增加额外参数
    │   ├── Adapter Tuning
    │   └── Soft Prompts (Prompt/Prefix Tuning)
    ├── 选取部分参数更新
    │   └── BitFit
    └── 引入重参数化
        └── LoRA / QLoRA / DoRA

三、全量微调 (Full Fine-Tuning)

原理

解锁预训练模型的所有参数,在目标数据集上进行额外训练。

优缺点

优点缺点
理论上能达到最佳性能上限计算成本巨高(数百GB显存)
适合数据充足的场景存储成本高(每个任务一份完整模型)
灾难性遗忘风险

资源消耗对比

模型全量微调PEFT-LoRAPEFT-LoRA + DeepSpeed
T0_3B (3B)47.14GB GPU14.4GB GPU9.8GB GPU
bloomz-7b1 (7B)OOM32GB GPU18.1GB GPU
mt0-xxl (12B)OOM56GB GPU22GB GPU

四、参数高效微调 (PEFT)

核心思想

仅微调极小部分参数(通常<1%),冻结绝大部分预训练权重,显著降低资源需求。

4.1 LoRA (Low-Rank Adaptation) 🔥最流行

原理

模型在适应新任务时的权重更新矩阵(ΔW)具有低秩特性。

原始权重 W (冻结)
     ↓
输出 = W·x + ΔW·x
           ↑
      ΔW = B × A  (低秩分解)
      A ∈ R^{d×r}, B ∈ R^{r×k}, r << min(d,k)

关键参数

  • r (rank): LoRA秩,建议值 8, 16, 32, 64, 128
  • lora_alpha: 通常设为 rank 或 rank×2
  • target_modules: 常见为 q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj

优点

  • ✅ 显著减少可训练参数量
  • ✅ 不改变模型架构,零推理延迟(合并后)
  • ✅ 效果通常优于 Adapter/Prompt Tuning
  • ✅ 极其灵活,可应用于任意权重矩阵

4.2 QLoRA (Quantized LoRA)

原理

结合量化(将预训练权重量化为4-bit,如NF4)和 LoRA。

优势

  • 在 24GB GPU 上可微调 33B 模型
  • 几乎不损失精度

4.3 Adapter Tuning

原理

在 Transformer 层的 FFN 模块之后插入小型神经网络模块(Adapter)。

Adapter 结构:
DownProject (d→r) → Activation (ReLU) → UpProject (r→d)
其中 r << d

特点

  • ✅ 显著减少可训练参数量
  • ✅ 模块化设计,便于添加/移除
  • ❌ 增加推理延迟(串行计算)

4.4 Prompt Tuning / Prefix Tuning

原理

不修改模型内部权重,通过学习特定的”软提示”来引导模型。

方法描述
Prompt Tuning在输入 token 序列前添加可学习向量
Prefix Tuning可学习向量参与每一层 Transformer 计算

特点

  • ✅ 参数效率极高
  • ✅ 零推理延迟
  • ❌ 效果严重依赖模型规模(通常需10B+参数)

4.5 BitFit

原理

极简方法!仅微调模型中的偏差项(Bias Terms)。

  • 参数量最少(<0.1%)
  • 性能通常弱于其他 PEFT 方法

五、技术选型指南

技术可训练参数推理延迟资源要求适用场景
全量微调100%=极高资源充足,追求极致性能
LoRA<1%=低通用推荐,平衡效率与效果
RA**<1%=极低资源严格受限(如单卡)
Adapter<1%↑低-中需模块化设计
Prompt/Prefix极低=极低超大模型(10B+)
BitFit<0.1%=极低快速基线实验

选型核心考量

  1. 计算资源:资源紧张首选 QLoRA/LoRA
  2. 任务复杂度:复杂任务选 LoRA/全量微调
  3. 推理延迟:要求严格时避免 Adapter
  4. 模型规模:Prompt Tuning 在超大模型上效果更好

六、实战工具推荐

Unsloth

  • 训练速度提高 2 倍
  • VRAM 使用减少 70%
  • 支持 8 倍长的上下文

Axolotl

  • 极简开源框架
  • 支持分布式训练
  • 丰富的配置选项

Hugging Face PEFT

  • 最广泛的框架支持
  • 社区实践丰富

七、Function Calling 微调

为什么需要微调 Function Calling?

  1. Custom API Integration — 确保模型可靠调用特定函数
  2. Multi-Function Handling — 动态调用多个函数
  3. Enhanced Conversational Flow — 更自然地执行函数调用

训练数据格式

{
  "messages": [
    {"role": "user", "content": "帮我预约周四下午3点的眼科检查"},
    {"role": "assistant", "content": "好的,让我帮您预约。"},
    {"role": "a "content": null, "function_call": {
        "name": "schedule_appointment",
        "arguments": "{\"date\": \"Thursday\", \"time\": \"3 PM\", \"specialty\": \"Ophthalmologist\"}"
      }
    }
  ]
}

关键注意事项

  1. 平衡训练数据 — 防止模型过度使用或忽略特定函数
  2. 充足数据量 — 确保模型能正确泛化
  3. 显式函数映射 — 每个对话流程对应正确的函数调用

参考资料