微调技术
前置知识
阅读本文前,建议先了解:
- 01-预训练 - 了解预训练和 Base Model
一、概述
微调(Fine-tuning)是在预训练的基础上,用少量专业数据对模型进行进一步训练,使其适应特定任务或领域。
如果把预训练比作”通识教育”,微调就是”专业培训”。
预训练:博览群书,成为通才(Base Model)
↓
微调:专业训练,成为专家(Fine-tuned Model)
↓
人类对齐:品德教育,成为合格公民(Chat Model)
微调的关键特点
- 数据量少:相比预训练的万亿 Token,微调只需数万到数百万条数据
- 针对性强:针对特定任务或领域进行优化
- 成本低:相比预训练的巨额成本,微调成本可接受
二、为什么需要微调
Base Model 虽然知识渊博,但不够”好用”:
| 问题 | 说明 | 示例 |
|---|---|---|
| 不会对话 | 倾向于续写文本,而不是回答问题 | 问”什么是 AI”,它续写问题而不是回答 |
| 不遵循指令 | 无法理解”请总结…”、“请翻译…”等指令 | 无法执行明确的任务指令 |
| 输出不稳定 | 可能生成不安全或不合适的内容 | 缺乏安全边界 |
| 领域不专 | 在专业领域(如医疗、法律)表现不佳 | 通用知识无法直接应用于专业场景 |
微调的核心思想:用少量专业数据,让模型适应特定任务。
三、指令微调
3.1 什么是指令微调
指令微调(Instruction Tuning)让模型更好地理解和执行人类指令。
做法:准备一系列”指令 - 回答”数据对,教模型按照指令行动。
训练数据示例:
指令: "把以下句子翻译成英文:我爱学习"
回答: "I love learning"
指令: "总结以下文章:..."
回答: "本文主要讨论..."
指令: "写一首关于春天的诗"
回答: "春风拂面,万物复苏..."
[!比喻] 指令微调类比 就像教一个博学但不听话的学生:
- 给他一本”指令手册”
- 每个指令配上标准答案
- 反复练习,直到他能按要求行事
3.2 指令数据格式
指令微调数据通常采用以下格式:
{
"instruction": "你的任务描述",
"input": "可选的输入内容",
"output": "期望的输出"
}示例:
{
"instruction": "将以下中文翻译成英文",
"input": "今天天气很好",
"output": "The weather is very nice today."
}
{
"instruction": "分类以下情感",
"input": "这部电影太好看了!",
"output": "正面"
}
{
"instruction": "写一首关于秋天的诗",
"input": "",
"output": "秋风送爽,金桂飘香..."
}3.3 指令微调的效果
经过指令微调后,模型变得:
- ✅ 更”听话”,能理解并执行指令
- ✅ 回答更自然、更有帮助
- ✅ 能够更好地进行多轮对话
- ✅ 输出更稳定、更可控
四、全参数微调 vs 高效微调
4.1 全参数微调
全参数微调(Full Fine-tuning)需要更新模型的所有参数。
示例(7B 模型):
- 参数量:70 亿
- 精度:FP16(2 bytes/参数)
- 显存需求:70 亿 × 2 × 3(模型 + 梯度 + 优化器)≈ 42GB
这还只是"最低配置",实际训练需要更多显存。
| 优点 | 缺点 |
|---|---|
| 效果最佳 | 显存需求极高 |
| 技术成熟 | 训练时间长 |
| 适用广泛 | 无法同时运行多个微调模型 |
4.2 高效微调(PEFT)
Parameter-Efficient Fine-Tuning (PEFT) 只更新少量参数,大幅降低成本。
核心思想:
不修改原模型参数(冻结),只训练添加的小型模块。
原模型(冻结)+ 适配器(可训练)→ 微调模型
| 优点 | 说明 |
|---|---|
| 显存需求低 | 几 GB 显存即可微调大模型 |
| 训练速度快 | 只训练少量参数 |
| 可插拔 | 同一 Base Model 可加载多个适配器 |
| 效果接近 | 效果接近全参数微调 |
五、LoRA(Low-Rank Adaptation)
5.1 LoRA 原理
LoRA 是最流行的高效微调技术之一。
核心思想:不直接修改原模型参数,而是添加小型”适配器”(Adapter)层。
原始权重矩阵 W₀(冻结)
添加低秩分解:
W = W₀ + ΔW = W₀ + BA
其中:
- B ∈ R^(d×r),秩为 r 的矩阵
- A ∈ R^(r×d),秩为 r 的矩阵
- r << d,秩很小(通常 r=8 或 r=16)
可训练参数量:2 × d × r
原参数量:d × d
当 d=4096, r=8 时:
- LoRA 参数:2 × 4096 × 8 ≈ 65,536
- 原参数:4096 × 4096 ≈ 16,777,216
- 比例:约 0.4%
为什么叫"低秩"?
秩(Rank)是线性代数概念,表示矩阵的”信息密度”。
LoRA 假设:模型适应新任务所需的”新信息”很少,所以可以用低秩矩阵表示。
5.2 LoRA 的实现细节
应用位置:通常在 Transformer 的注意力层应用 LoRA:
Transformer 层:
├── 自注意力层(Q, K, V, O 矩阵)← LoRA 应用在这里
└── 前馈网络层(可选)
通常只微调 Q、V 矩阵,效果与微调全部矩阵相当。
合并操作:推理时,LoRA 权重可以合并到原模型:
推理时:
输出 = W₀x + BAx = (W₀ + BA)x
可以预先计算 W' = W₀ + BA,推理时无额外开销。
5.3 LoRA 的优势
| 优点 | 说明 |
|---|---|
| 显存需求低 | 几 GB 显存即可微调大模型 |
| 训练速度快 | 只训练少量参数 |
| 可插拔 | 同一 Base Model 可加载多个 LoRA |
| 效果接近 | 效果接近全参数微调 |
| 无推理开销 | 权重可合并,推理速度不变 |
六、QLoRA(Quantized LoRA)
6.1 QLoRA 原理
QLoRA 在 LoRA 的基础上引入量化技术。
核心思想:将模型权重量化为 4-bit,进一步降低显存需求。
精度对比:
- 全精度(FP32):4 bytes/参数
- 半精度(FP16):2 bytes/参数
- 4-bit 量化:0.5 bytes/参数
显存需求对比(65B 模型):
- 全参数微调:~780 GB
- LoRA(16-bit):~72 GB
- QLoRA(4-bit):~48 GB
6.2 量化技术
QLoRA 使用NF4(Normal Float 4)量化:
NF4 的特点:
- 针对正态分布权重量化
- 4-bit 精度下保留最多信息
- 支持双重量化(double quantization)进一步压缩
6.3 QLoRA 的效果
| 指标 | QLoRA | LoRA | 全参数微调 |
|---|---|---|---|
| 显存需求 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐ |
| 训练速度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| 效果 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
七、其他高效微调技术
| 技术 | 核心思想 | 适用场景 |
|---|---|---|
| Prefix Tuning | 在输入前添加可学习的前缀向量 | 文本生成任务 |
| Prompt Tuning | 学习软提示(Soft Prompt)而非硬提示 | 分类、生成任务 |
| Adapter | 在 Transformer 层间插入小型适配器模块 | 多任务学习 |
| IA³ | 学习缩放因子,几乎不增加参数 | 资源极度受限 |
八、微调方法对比
| 方法 | 可训练参数 | 显存需求(7B 模型) | 训练时间 | 效果 |
|---|---|---|---|---|
| 全参数微调 | 100% | ~28GB | 长 | 最佳 ⭐⭐⭐⭐⭐ |
| LoRA | 1-10% | ~12GB | 短 | 接近全参数 ⭐⭐⭐⭐ |
| QLoRA | 1-10% | ~8GB | 短 | 略逊于 LoRA ⭐⭐⭐ |
| Prefix/Prompt | <1% | ~6GB | 极短 | 中等 ⭐⭐⭐ |
如何选择微调方法
- 追求最佳效果 → 全参数微调
- 平衡效果与成本 → LoRA
- 显存极度受限 → QLoRA
- 快速原型验证 → Prefix/Prompt Tuning
九、领域微调
9.1 垂直领域微调
将通用模型微调为领域专家:
| 领域 | 微调数据 | 应用场景 |
|---|---|---|
| 医疗 | 医学文献、病历、诊断记录 | 辅助诊断、健康咨询 |
| 法律 | 法律条文、判例、合同 | 法律咨询、合同审查 |
| 金融 | 财报、研报、新闻 | 投资分析、风险评估 |
| 代码 | GitHub 代码、技术文档 | 代码生成、代码审查 |
| 客服 | 客服对话记录、FAQ | 自动客服、工单处理 |
9.2 多语言微调
将英文为主的模型微调为支持其他语言:
Base Model(主要英文)
↓
多语言指令数据微调
↓
多语言 Chat Model
数据来源:
- 翻译数据(将英文指令翻译为目标语言)
- 原生多语言数据(直接收集各语言的指令 - 回答对)
十、微调的最佳实践
10.1 数据准备
| 建议 | 说明 |
|---|---|
| 数据质量优先 | 1000 条高质量数据胜过 10 万条低质量数据 |
| 多样性 | 覆盖多种任务类型和场景 |
| 数据平衡 | 避免某类任务数据过多导致过拟合 |
| 数据格式统一 | 统一的 JSON 格式,便于处理 |
常见数据问题
- 数据泄露:测试集数据出现在训练集中
- 标注不一致:不同标注员的标准不统一
- 分布偏移:训练数据与实际使用场景差异大
10.2 训练配置
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 学习率 | 1e-4 ~ 5e-5 | LoRA 微调常用 |
| Batch Size | 根据显存调整 | 越大越稳定 |
| Epoch | 1-3 | 过多容易过拟合 |
| LoRA Rank | 8-64 | 根据任务复杂度调整 |
| LoRA Alpha | 16-32 | 通常为 Rank 的 2 倍 |
| Dropout | 0.05-0.1 | 防止过拟合 |
10.3 评估方法
| 方法 | 说明 | 工具/指标 |
|---|---|---|
| 人工评估 | 抽样检查输出质量 | Likert 量表、对比评估 |
| 自动评估 | 使用基准测试集 | MMLU、BBH、TruthfulQA |
| 对比评估 | 与原始模型对比改进程度 | 胜率(Win Rate) |
十一、总结
微调是将 Base Model 转变为实用模型的关键步骤:
- 指令微调:让模型学会遵循指令
- 高效微调:LoRA/QLoRA 等技术大幅降低成本
- 领域微调:适应垂直领域和专业任务
- 最佳实践:数据质量、训练配置、评估方法
经过微调的模型,还需要经过人类对齐(RLHF)才能成为真正符合人类偏好的 Chat Model。
延伸阅读
- 01-预训练 - 回顾预训练和 Base Model
- 03-人类对齐与 RLHF - 了解人类对齐技术
- 01-模型类型 - 了解 Base Model 与 Chat Model 的区别
- LoRA 原始论文
- QLoRA 原始论文
| 更新日期 | 更新内容 |
|---|---|
| 2026-04-09 | 初始版本 |
| 2026-04-12 | 增加 LoRA 原理详解、最佳实践 |