模型适配:微调、偏好优化与蒸馏
问题
什么时候应该使用 Prompt、RAG、工具调用或模型微调?SFT、LoRA、QLoRA、偏好优化、强化微调和模型蒸馏分别解决什么问题?
模型适配的核心不是“把知识灌进模型”,而是让模型更稳定地遵循特定任务、格式、风格或决策边界。一般先按以下顺序排查:
- Prompt 与结构化输出:先解决指令和格式问题。
- RAG 与工具:解决事实更新、私有知识和精确计算问题。
- SFT/LoRA:大量示例才能描述的行为、风格和任务模式。
- 偏好优化或强化微调:有可靠偏好对或可验证奖励时,进一步优化决策。
- 蒸馏:用较强模型产生和筛选数据,让较小模型承担稳定、高频任务。
无论选哪种方式,都必须先建立独立评测集;没有基线和留出集的微调,很容易只是“训练集看起来更好”。
一、先判断问题属于哪一层
| 目标 | 优先方案 | 原因 |
|---|---|---|
| 输出固定 JSON | JSON Schema、Structured Output | 可验证,不需要改变模型权重 |
| 回答最新公司制度 | RAG | 知识会变化,需要来源和权限 |
| 查询实时库存 | 工具调用 | 数据必须来自业务系统 |
| 统一客服语气和流程 | Prompt;示例很多时再 SFT | 主要是行为模式 |
| 专业分类或抽取 | Few-shot 基线;再 SFT/LoRA | 可用标注样本直接监督 |
| 改善答案偏好 | DPO 等偏好优化 | 数据是成对偏好而非唯一答案 |
| 可程序验证的复杂任务 | 强化微调/基于奖励优化 | 测试、规则或环境可提供奖励 |
| 降低高频任务成本 | 蒸馏、小模型专用化 | 用任务质量换吞吐与成本优势 |
权重中的知识难以精确更新、删除、溯源和做用户级权限控制。需要新鲜事实、引用或数据删除能力时,优先 RAG 或工具;微调更适合改变“怎么做”,而不是维护“知道什么”。
二、常见适配方法
1. 全参数监督微调
SFT 使用输入与目标输出样本继续训练模型。它表达能力强,但训练、存储、部署和回滚成本较高,适合有足够数据与基础设施的场景。
{
"messages": [
{ "role": "system", "content": "你是售后工单分类器,只返回约定 JSON。" },
{ "role": "user", "content": "收到的耳机左侧没有声音,刚签收。" },
{
"role": "assistant",
"content": "{\"category\":\"quality_issue\",\"priority\":\"normal\",\"needs_human\":false}"
}
]
}
训练文件格式以具体平台为准;生产系统仍应在推理时做 Schema 校验,不能因为训练过就省略验证。
2. LoRA 与 QLoRA
LoRA 冻结大部分基础权重,只训练低秩适配矩阵,可概念化为:
W' = W + ΔW,且 ΔW = B × A
它的优势是可训练参数和检查点更小,便于为不同任务维护多个 Adapter。QLoRA 在此基础上量化冻结的基础模型以降低训练显存,但量化配置、目标层和训练精度仍需实验验证。
LoRA 不是天然比全量微调更准,也不意味着“低成本零风险”。需要评估:
- rank、alpha、dropout 和目标层。
- 基础模型、Tokenizer、量化方式与推理后端兼容性。
- Adapter 合并前后的质量和数值差异。
- 多 Adapter 切换的显存、吞吐和租户隔离。
3. 偏好优化
DPO 一类方法使用“同一输入下,哪个回答更好”的偏好对:
interface PreferenceExample {
prompt: string;
chosen: string;
rejected: string;
reason?: string;
dimensions: Array<'correctness' | 'safety' | 'style' | 'completeness'>;
}
偏好对必须有清晰 Rubric。若标注者只是偏爱更长、更客气的回答,模型也会学习这种偏差,而不一定更正确。
4. 基于奖励的优化
当任务有可信、抗作弊的奖励时,可以使用强化微调或相近方法,例如:
- 代码是否通过隐藏测试。
- 数学答案是否被计算器验证。
- 工具执行后的业务状态是否满足不变量。
- SQL 结果是否与金标准一致。
最大的风险是 reward hacking:模型找到提高分数但违背真实目标的捷径。因此奖励函数、隐藏测试、对抗样本和人工审查必须一起设计。
5. 模型蒸馏
蒸馏通常由较强 Teacher 生成候选答案、结构化标签或工具轨迹,再经过规则、执行器或人工筛选,用于训练较小 Student。
Teacher 的答案不能未经验证直接作为真值,否则错误、风格偏差和安全问题会被批量复制。
三、训练数据工程
数据集要回答五个问题
- 任务是什么:输入、输出、拒答和工具边界要清楚。
- 数据从哪里来:真实流量、专家样本、历史工单或合成数据。
- 是否有权使用:许可证、用户授权、隐私、保留和删除要求。
- 如何防泄漏:去重后再拆分训练、验证和最终留出集。
- 如何覆盖失败:长尾、方言、恶意输入、无答案和权限样本。
interface TrainingExample {
id: string;
input: unknown;
target: unknown;
source: 'production' | 'expert' | 'synthetic';
license: string;
consent: 'granted' | 'not-required';
piiStatus: 'none' | 'redacted' | 'restricted';
split: 'train' | 'validation' | 'holdout';
version: string;
}
质量通常比数量更重要
- 去除模板错误、互相矛盾和无法验证的样本。
- 不要让“无法回答”样本全部变成强行作答。
- 保留困难样本,不能只训练最顺利的 happy path。
- 合成数据按来源和生成模型分层评估。
- 记录数据版本、清洗脚本和变更原因,支持复现与删除。
四、实验与发布流程
每次实验至少固定并记录:
- 基础模型与精确版本。
- 数据集、模板、Tokenizer 和随机种子。
- 方法、超参数、量化和 Adapter 配置。
- 代码、依赖、硬件和训练日志。
- 离线评测、线上灰度和安全报告。
发布门禁应比较任务成功、安全、延迟和每个成功任务成本,而不是只比较训练 loss。
五、常见失败模式
灾难性遗忘
模型在窄任务上变好,却损失通用能力。对策是混入通用/安全样本、降低训练强度,并对原有能力做回归测试。
过拟合和数据污染
验证集与训练集近重复,或评测题混入训练数据,会产生虚假的高分。要按语义去重,并保留由独立团队管理的 holdout。
格式正确但事实错误
SFT 可以让 JSON 更漂亮,却不能保证字段值真实。对金额、权限、库存和引用做确定性验证。
基础模型升级后 Adapter 失效
Adapter 与基础模型版本紧密绑定。升级需要完整回归,不能只因为模型名称相似就直接挂载。
忽略部署成本
训练成功不等于可上线。还要验证量化后质量、冷启动、并发、批处理、Adapter 切换和故障回滚。
六、前端与全栈开发者最需要关注什么
- 前端不要接触训练密钥和未经脱敏的训练数据。
- 数据标注台要支持 Rubric、冲突处理、撤回和审计。
- 实验面板同时展示切片质量、延迟、成本和安全回归。
- UI 明确显示模型版本、灰度组和失败回退,不让用户承担实验异常。
- 线上反馈不能直接进入训练;先做授权、脱敏、去重和质量审核。
七、面试常见问题
Q1:什么时候需要微调,而不是继续改 Prompt?
答案:先用 Prompt、Schema、RAG 和工具建立基线。当大量示例才能描述稳定行为,Prompt 已变得复杂且效果仍不稳定,并且有足够高质量数据与评测时,才考虑微调。
Q2:LoRA 为什么省资源?
答案:它冻结基础模型,只训练低秩增量矩阵,训练参数和检查点都更小。但实际显存和质量仍受优化器、激活、序列长度和目标层影响。
Q3:QLoRA 和普通量化有什么区别?
答案:QLoRA 是量化基础权重后进行参数高效训练;普通推理量化主要为了部署。两者目标不同,都需要量化后回归评测。
Q4:微调能替代 RAG 吗?
答案:通常不能。微调适合行为和任务模式,RAG 适合持续更新、可引用、可删除并需要权限控制的知识。
Q5:什么是 DPO?
答案:它使用 chosen/rejected 偏好对优化模型更倾向人们偏好的回答。关键是偏好数据和 Rubric 的质量,而不是只准备大量对比样本。
Q6:什么时候适合强化微调?
答案:任务有可靠、可重复、难以作弊的奖励时,例如测试、计算器或业务不变量。开放式审美任务若奖励不可靠,风险会很高。
Q7:蒸馏解决什么问题?
答案:让较小模型学习强模型在特定任务上的行为,以降低延迟和成本。Teacher 输出必须经过验证,Student 仍需在独立集上评测。
Q8:如何避免训练集泄漏到评测集?
答案:先做精确和语义去重,再按来源或实体拆分;保留独立 holdout,并记录所有合成和人工修改的血缘。
Q9:为什么训练 loss 下降不代表产品变好?
答案:loss 只描述训练目标上的拟合。产品还关心任务成功、拒答、权限、安全、延迟和成本,且要看不同风险切片。
Q10:如何管理多个 Adapter?
答案:把基础模型版本、Adapter 版本、任务、租户、评测和回滚策略一起登记;限制动态加载来源并验证兼容性和隔离。
Q11:线上用户反馈可以直接拿来训练吗?
答案:不可以直接使用。要先确认授权与用途,脱敏、去重、过滤攻击内容、标注质量并提供删除与审计能力。
Q12:微调上线前最重要的检查是什么?
答案:与未微调基线在独立数据集上比较,确认关键安全切片不退化,并完成灰度、监控和可立即回滚的模型版本管理。
参考资料
- Hugging Face PEFT:Adapters
- Hugging Face PEFT:LoRA
- Hugging Face PEFT:Quantization
- OpenAI Fine-tuning Guide