大模型微调:用少量数据定制专属AI
微调是在预训练模型基础上,用少量数据训练出适合特定任务的模型。
一、为什么需要微调
直接使用的局限
| 问题 | 说明 |
|---|---|
| 通用知识为主 | 垂直领域能力弱 |
| 输出格式不固定 | 难以直接集成 |
| 风格不符 | 不符合业务要求 |
| 幻觉问题 | 专业领域易出错 |
微调的优势
预训练模型(通用能力)
↓
微调(领域适配)
↓
专属模型(垂直专家)
二、微调方法
1. 全参数微调
训练所有参数:
# 所有层都需要更新
for param in model.parameters():
param.requires_grad = True
缺点:
- 成本高(需要多卡)
- 容易过拟合
- 灾难性遗忘
2. LoRA微调
只训练低秩矩阵:
# 添加旁路,冻结原参数
W = W0 + BA
# 只训练A和B
W0.requires_grad = False
A.requires_grad = True
B.requires_grad = True
优点:
- 参数少(通常<1%)
- 训练快
- 效果好
3. QLoRA
量化+LoRA:
4-bit量化 → 减少显存 → LoRA训练
可以在单卡A100上微调65B模型。
4. Adapter
添加小型适配器:
Transformer层
↓
Adapter(小型网络)
↓
输出
三、微调流程
第一步:数据准备
## 数据格式(对话格式)
{
"messages": [
{"role": "system", "content": "你是一个助手"},
{"role": "user", "content": "问题"},
{"role": "assistant", "content": "回答"}
]
}
第二步:数据量估算
| 模型规模 | 最小数据量 | 推荐数据量 |
|---|---|---|
| 7B | 1000条 | 10000条 |
| 13B | 2000条 | 20000条 |
| 70B | 5000条 | 50000条 |
第三步:训练配置
# 关键参数
learning_rate = 1e-4
batch_size = 4
epoch = 3
max_length = 2048
# LoRA配置
lora_r = 8
lora_alpha = 16
lora_dropout = 0.05
第四步:训练监控
训练指标:
- Loss下降
- Perplexity
- GPU利用率
- 显存占用
第五步:评估与部署
- 测试集评估
- 对比基线
- 模型合并
- 量化导出
四、工具框架
开源框架
| 框架 | 特点 |
|---|---|
| LLaMA-Factory | 一站式,微调效果好 |
| PEFT | HuggingFace官方 |
| Fireworks.ai | 云服务 |
| Axolotl | 灵活配置 |
云服务
- OpenAI Fine-tuning
- Google Vertex AI
- 阿里云PAI
- 腾讯云TI
五、实战案例
案例:客服机器人微调
目标:让模型学会回答产品问题
数据:
{
"messages": [
{"role": "user", "content": "如何重置密码?"},
{"role": "assistant", "content": "请进入设置页面,点击账户安全,选择重置密码..."}
]
}
结果:
- 回答准确率:60% → 90%
- 响应格式:符合规范
- 语气风格:专业友好
六、注意事项
数据质量
数据质量 > 数据数量
- 清洗噪音数据
- 标注一致性
- 格式规范化
避免过拟合
- 早停法
- 学习率调度
- 正则化
灾难性遗忘
# 解决方案
1. 混合预训练数据
2. 使用较小的