Skip to content

模型微调

微调 = 把「行为/格式/领域知识」写进权重,让模型不再依赖每次提示词去「装」某种风格。现代微调几乎都是 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)默认选择,风格/任务适配
QLoRA4bit 量化基座 + LoRA极低(单卡可训大模型)显存受限
冻结前层只训头输出层附近最低输出格式类任务
  • 关键超参起点(以 7B LoRA 为例):
超参常见起点说明
rank r16-32表达力上限;数据少用小 rank 防过拟合
alphar 的 2 倍左右与 r 一起决定实际缩放
学习率1e-4 ~ 2e-4(QLoRA 常更低)比预训练大得多;从 1e-4 试
epoch1-3SFT 几轮就够,多了过拟合+遗忘
batch能放进显存即可小 batch + 梯度累积
warmup前 3-10% 步数微调基线已稳定,warmup 不宜过长
weight_decay / dropout0.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 下降、生成变了,再全量——省掉大量「训完才发现格式错」的返工

五、评估与上线闭环

  1. 评测集三件套:目标任务集 + 通用能力抽样集 + 格式/安全边界集;
  2. 前后对比:同一组金标,基座 vs 微调版,规则 + LLM-as-judge + 人工三方打分(方法见 Prompt 工程 评测节);
  3. 回归防线:上线前跑全量评测,「提升 A 损伤 B」必须显式记录与决策;
  4. 合并与部署:adapter 合并回基座再量化(或在服务端动态挂 adapter);部署与成本见 AI 工程化;
  5. 上线后抽样回放 + 版本留痕,模型像代码一样有版本、有 owner、有回滚。

六、踩坑清单

  1. 还没跑通 Prompt/RAG 就微调:业务价值未验证,微调是给「已确认的行为缺口」做手术;
  2. chat template 不一致:训练套 A 模板、推理套 B 模板,效果全无还查不出原因;
  3. 数据质量失控:几条标注错误 + 重复样本,效果反而不如不调;
  4. epoch 拍 10:SFT 过拟合点来得早,1-3 轮+验证 loss 决定;
  5. 评测集泄漏:和训练集同源/同分布的重叠数据,分数虚高;
  6. 只看训练 loss:它必降;真正要看验证 loss 与人工采样;
  7. 忘了通用能力回归:领域强了、通用崩了(遗忘),评测集必须带通用任务;
  8. rank 无脑 64:数据少时大 rank 过拟合,从小 rank 试;
  9. 训练/推理长度不一致:截断策略不同导致位置习惯错乱;
  10. 不保存实验记录:超参、数据版本、loss 曲线都要留存,否则「这个好」无法归因与复现;
  11. 微调数据带 PII/敏感信息就入库:先脱敏与合规评审。

继续学习:训练/推理的工程底座见 AI 工程化;微调与 RAG/Prompt 的取舍回看 RAG 与 Agent 的选型表;偏好对齐(RLHF/DPO)的论文原理见 文献收藏 LLM 前沿

基于 VitePress 构建 · 内容以知识共享方式沉淀