模型微调
微调 = 把「行为/格式/领域知识」写进权重,让模型不再依赖每次提示词去「装」某种风格。现代微调几乎都是 LoRA/QLoRA 式参数高效微调(PEFT):冻结基座、训练低秩增量,几块卡就能改 7B-70B 模型。原理见 LoRA 论文精读,本文讲透「什么时候该微调 → 数据怎么造 → 怎么训不翻车 → 怎么评与上线」。
一、先决策:微调 vs Prompt vs RAG
| 想改什么 | 手段 | 原因 |
|---|---|---|
| 语气/风格/格式「定型」 | 微调 | 写进权重,人人可用不靠提示词 |
| 领域知识、会变的事实 | RAG(见 RAG 与 Agent) | 知识外置可更新可溯源 |
| 简单任务小改进 | Prompt(见 Prompt 工程) | 零成本先试 |
| 两者都缺 | 先 RAG/Prompt 把链路跑通,再考虑微调收尾 | 微调最贵,放最后 |
决策顺序铁律:先 RAG/Prompt 验证业务价值,再决定是否微调;微调解决的是「模型能力边缘的行为一致性」,不是「模型不知道的知识」。
二、数据工程:微调 80% 的成败在这里
- 格式:对齐你的运行框架的 chat template(instruction / input / output,或 user/assistant 多轮);模板与基座不匹配是静默杀手(训练了却没生效);
- 质量 > 数量:几百条精标注 > 几万条爬来的脏数据;标注规则(评分标准、格式要求)先冻结再开工;
- 构造要点:
- 覆盖真实分布:线上请求长啥样,训练数据就长啥样(含「输入缺失」「多轮」等真实形态);
- 负例与边界:正确格式的反例、拒绝回答的例子,教模型「不该做什么」;
- 去重与去噪:重复样本会放大;标签错误比缺少样本更伤;
- 留出评测集(50-200 条),绝不允许与训练集重叠;
- 数量经验:风格对齐百到千条;结构化技能数千条;领域知识灌输优先走 RAG;
- 敏感数据:微调数据进训练=可能被记忆/泄露,先做 PII 脱敏与合规评估(见 AI 工程化)。
三、方法对比与超参
| 方法 | 训什么 | 成本 | 适用 |
|---|---|---|---|
| 全参数微调 | 全部权重 | 高(需要多卡/大内存) | 数据充足、确实需要整体迁移 |
| LoRA | 低秩增量矩阵 A·B(rank 8-64) | 低 | 默认选择,风格/任务适配 |
| QLoRA | 4bit 量化基座 + LoRA | 极低(单卡可训大模型) | 显存受限 |
| 冻结前层只训头 | 输出层附近 | 最低 | 输出格式类任务 |
- 关键超参起点(以 7B LoRA 为例):
| 超参 | 常见起点 | 说明 |
|---|---|---|
| rank r | 16-32 | 表达力上限;数据少用小 rank 防过拟合 |
| alpha | r 的 2 倍左右 | 与 r 一起决定实际缩放 |
| 学习率 | 1e-4 ~ 2e-4(QLoRA 常更低) | 比预训练大得多;从 1e-4 试 |
| epoch | 1-3 | SFT 几轮就够,多了过拟合+遗忘 |
| batch | 能放进显存即可 | 小 batch + 梯度累积 |
| warmup | 前 3-10% 步数 | 微调基线已稳定,warmup 不宜过长 |
| weight_decay / dropout | 0.01 / 0.05-0.1 | 防记忆训练集 |
- 训练只动 adapter 权重;保留一份干净的基座,多任务 = 基座 + 多份 LoRA 增量,换任务只换增量(复用与回滚都方便)。
四、训练实践:框架与流程
- 主流路径(2026 语境):
- Hugging Face TRL(SFTTrainer / DPOTrainer)+ peft:生态最全,文档与模型支持最好,团队默认;
- LLaMA-Factory:网页/CLI 一体,LoRA/QLoRA 开箱即用,快速起步与实验;
- Axolotl:配置驱动,进阶可控;
- 训练观测三个数:训练 loss 要降;验证 loss 只允许微降或持平(验证抬升=过拟合,立刻回滚);采样输出每 N 步人工看(loss 与输出质量并非线性对应);
- 常被忽略的关键设置:
- pad 与 attention_mask:变长拼接要 padding + mask,否则训练与推理行为不一致;
- chat template 由训练到推理全程一致(用同款 tokenizer apply_chat_template);
- 序列长度:超长截断、短数据填充造成浪费——按真实长度分桶/bucket;
- 灾难性遗忘:通用能力会随微调流失——评测集里带上通用任务(指令跟随/通用问答)抽样监控;
- 先跑「冒烟训练」:几十条数据 1-2 步,确认 loss 下降、生成变了,再全量——省掉大量「训完才发现格式错」的返工。
五、评估与上线闭环
- 评测集三件套:目标任务集 + 通用能力抽样集 + 格式/安全边界集;
- 前后对比:同一组金标,基座 vs 微调版,规则 + LLM-as-judge + 人工三方打分(方法见 Prompt 工程 评测节);
- 回归防线:上线前跑全量评测,「提升 A 损伤 B」必须显式记录与决策;
- 合并与部署:adapter 合并回基座再量化(或在服务端动态挂 adapter);部署与成本见 AI 工程化;
- 上线后抽样回放 + 版本留痕,模型像代码一样有版本、有 owner、有回滚。
六、踩坑清单
- 还没跑通 Prompt/RAG 就微调:业务价值未验证,微调是给「已确认的行为缺口」做手术;
- chat template 不一致:训练套 A 模板、推理套 B 模板,效果全无还查不出原因;
- 数据质量失控:几条标注错误 + 重复样本,效果反而不如不调;
- epoch 拍 10:SFT 过拟合点来得早,1-3 轮+验证 loss 决定;
- 评测集泄漏:和训练集同源/同分布的重叠数据,分数虚高;
- 只看训练 loss:它必降;真正要看验证 loss 与人工采样;
- 忘了通用能力回归:领域强了、通用崩了(遗忘),评测集必须带通用任务;
- rank 无脑 64:数据少时大 rank 过拟合,从小 rank 试;
- 训练/推理长度不一致:截断策略不同导致位置习惯错乱;
- 不保存实验记录:超参、数据版本、loss 曲线都要留存,否则「这个好」无法归因与复现;
- 微调数据带 PII/敏感信息就入库:先脱敏与合规评审。
继续学习:训练/推理的工程底座见 AI 工程化;微调与 RAG/Prompt 的取舍回看 RAG 与 Agent 的选型表;偏好对齐(RLHF/DPO)的论文原理见 文献收藏 LLM 前沿。