故事从一个问题说起
RAG 是给 LLM "看"外部资料。那么有没有办法把知识直接训练进模型里,让模型"天生就懂"?
这就是 Fine-tuning(微调) 要解决的问题。
1. 什么是 Fine-tuning?
Fine-tuning(微调) 是在已经预训练好的大模型基础上,用特定领域的数据进行额外训练,让模型在该领域的表现更专业。
类比:就像一个从医学院毕业的全科医生(预训练模型),再去进修眼科三个月(微调),成为眼科专家。全科医学知识还在,但眼科变得特别强。
和预训练的区别
| 阶段 | 预训练(Pre-training) | 微调(Fine-tuning) |
|---|---|---|
| 数据量 | 海量互联网数据(万亿 token) | 少量特定领域数据(数千~数万 token) |
| 成本 | 极高(需要成百上千块 GPU 训练数月) | 相对较低(单卡或几块 GPU 训练数小时~数天) |
| 目的 | 让模型学会语言理解和世界知识 | 让模型在特定任务上表现更好 |
| 谁在做 | 大公司(如 OpenAI、Google) | 企业或开发者 |
2. 为什么要 Fine-tuning?
2.1 预训练模型的局限
- 知识过时:训练数据有截止日期,新知识模型不知道
- 风格不对:通用 LLM 的输出风格可能不符合企业需求
- 行为不稳定:同一问题可能每次回答风格差异大
- 幻觉率高:特定领域的问题容易胡说八道
2.2 微调能解决什么?
| 目标 | 微调能帮上忙吗? |
|---|---|
| 让模型学会某个领域的专业术语和表达方式 | ✅ 非常适合 |
| 让模型输出格式始终保持一致 | ✅ 非常适合 |
| 让模型扮演特定角色(如客服机器人) | ✅ 非常适合 |
| 给模型注入全新知识(如最新的公司政策) | ❌ 不适合(用 RAG 更好) |
| 减少幻觉 | ⚠️ 有一定帮助,但不如 RAG 彻底 |
3. 微调的分类
3.1 SFT(监督微调,Supervised Fine-tuning)
最传统的方式:用有标签的问答对直接训练模型。
数据格式:
输入:用户问题
输出:标准回答
优点:简单直接,效果可预期 缺点:需要大量高质量标注数据
3.2 RLHF(人类反馈强化学习,Reinforcement Learning from Human Feedback)
分三步:
- SFT:先用监督数据微调一个基础模型
- 奖励模型:让人类对模型输出打分,训练一个"奖励模型"来模仿人类偏好
- PPO 强化学习:用奖励模型指导模型优化输出
这是 GPT-4、Claude 等顶尖模型训练的核心技术。ChatGPT 的"对齐"工作就是靠 RLHF 完成的。
3.3 LoRA(Low-Rank Adaptation,低秩适配)
最流行的微调方法,尤其是对个人开发者和中小企业。
核心思想:不训练全部参数,只训练一小部分"低秩矩阵"。
| 对比项 | 全参数微调 | LoRA |
|---|---|---|
| 训练参数量 | 全部参数(如 70B) | 约 0.1%~1% 的参数 |
| GPU 显存需求 | 极高(需要多卡) | 很低(单卡可跑) |
| 训练速度 | 慢 | 快 |
| 效果 | 可能更好 | 效果接近全参数微调 |
| 成本 | 高 | 低 |
LoRA 的类比:就像你想让一个人学会新技能(全参数微调 = 重新训练这个人),LoRA = 给他戴上一副特殊的眼镜(只调整少量参数)就能解决问题。
3.4 QLoRA(量化 LoRA)
在 LoRA 的基础上,加上了量化技术:
- 训练时把模型参数从 16 位浮点数(FP16)压缩到 4 位整数(INT4)
- 进一步降低显存需求
- 让在消费级 GPU(如 RTX 3090/4090)上微调超大模型成为可能
这就是你在学习 OpenClaw 时接触到的技术。 QLoRA 使得在普通电脑上微调 7B、13B 甚至 70B 参数的模型成为现实。
3.5 对比一览
| 方法 | 成本 | 效果 | 适用场景 |
|---|---|---|---|
| SFT | 中 | 稳定 | 有标注数据的特定任务 |
| RLHF | 极高 | 最强(对齐效果最好) | 大厂对齐训练 |
| LoRA | 低 | 接近全参数微调 | 快速微调、中小企业 |
| QLoRA | 极低 | 接近 LoRA | 个人开发者、消费级 GPU |
4. 微调的数据准备
微调效果好不好,数据质量是决定性因素。
4.1 数据格式(以对话格式为例)
{
"messages": [
{"role": "system", "content": "你是一个专业的法律顾问"},
{"role": "user", "content": "合同违约金最高是多少?"},
{"role": "assistant", "content": "根据《民法典》第五百八十五条..."}
]
}
4.2 数据质量要求
| 要求 | 说明 |
|---|---|
| 格式一致 | 所有数据保持相同的格式(role、content 字段要统一) |
| 质量高 | 避免错误答案、模糊回答、无关内容 |
| 风格统一 | 回答的语气、格式、长度要一致 |
| 适量 | 通常 1000~10000 条高质量数据比 100000 条低质量数据效果好 |
4.3 数据量参考
| 模型规模 | 建议数据量 | 训练时间(单卡) |
|---|---|---|
| 7B 参数 | 1000~5000 条 | 2~8 小时 |
| 13B 参数 | 3000~10000 条 | 6~24 小时 |
| 70B 参数 | 5000~20000 条 | 1~7 天 |
5. 微调 vs RAG
这是最常见的对比:
| 对比项 | 微调(Fine-tuning) | RAG(检索增强生成) |
|---|---|---|
| 本质 | 改变模型参数 | 不改变模型,增加外部知识 |
| 知识更新 | 需要重新训练 | 更新知识库,无需重训 |
| 成本 | 较高(GPU 训练) | 低(向量数据库 + 检索) |
| 幻觉减少 | 有一定帮助 | 效果更好(基于真实文档) |
| 适合注入 | 行为模式、风格、特定领域表达 | 实时数据、私有知识、大规模文档 |
| 冷启动速度 | 慢(需要训练) | 快(即刻可用) |
最佳实践:两者结合
RAG → 提供实时知识和事实依据
Fine-tuning → 优化回答风格和行为模式
举个例子:医疗 AI 助手
- RAG 让它能准确引用最新的医学指南和论文
- Fine-tuning 让它用专业医生的语气和逻辑思考方式回答
6. 微调的常见工具
| 工具 | 特点 |
|---|---|
| OpenClaw | 国产 QLoRA 微调工具,支持消费级 GPU,适合中文场景 |
| LLaMA Factory | 开源,支持多种微调方法,中文友好 |
| Axolotl | 开源微调框架,支持主流模型 |
| Unsloth | 加速微调,显存占用更低 |
| Fireworks.ai | 云端微调服务,无需 GPU |
7. 微调的局限性
7.1 不能注入全新知识
微调可以让模型"更像"某个领域的专家,但不能可靠地灌输大量新事实。
例子:你想让模型记住"我们公司 CEO 是张三"。微调可能让模型更容易说对,但不如 RAG 可靠。事实性知识的注入更适合用 RAG。
7.2 灾难性遗忘
微调可能导致模型忘记预训练时学到的通用能力。
解决:使用 LoRA/QLoRA,只训练少量参数,全参数冻结,大幅缓解遗忘问题。
7.3 训练不稳定
模型可能变得不稳定、产生幻觉、或者丧失对话能力("灾难性遗忘")。
解决:做好质量评估(Evals),逐步增加训练步数,发现问题及时回滚。
8. 总结
Fine-tuning = 在预训练模型基础上 + 特定领域数据 + 继续训练 → 专业化
主流方法 = QLoRA(低显存 + 高效果 + 低成本)
最佳拍档 = RAG(知识)+ Fine-tuning(风格)
什么时候选微调?
- 需要统一输出风格和行为模式
- 特定领域的专业表达方式
- 需要模型"更像"某个角色
- 不需要频繁更新知识
什么时候选 RAG?
- 需要实时或大规模知识
- 需要引用权威文档
- 知识需要经常更新
- 需要严格的事实准确性