#四、SFT、PEFT 与对齐训练
#代表笔试题
SFT 与预训练的根本差异。 预训练通常做 next-token prediction:给定大规模文本前缀,让模型预测下一个 token,目标是学习语言规律、世界知识、代码模式和压缩表示。它不关心文本是不是一条“用户指令”,也不保证模型知道应该回答、拒答、分步骤解释,还是继续补全文档。SFT,即 supervised fine-tuning,仍然多半使用交叉熵损失,但数据从普通语料变成了 instruction -> response 或多轮对话样本,目标从“会续写”转成“按人类期望完成任务”。所以 SFT 不是给模型灌入大量新知识的首选方式,而是把已有能力整理成可用的助手行为:理解任务、遵循格式、控制语气、学会工具调用协议和安全边界。
Instruction data 的格式与质量。 一条高质量 SFT 样本通常包含 system、user、assistant 三类角色,有时还会包含 tool schema、检索上下文、函数调用结果或评分说明。训练时常见做法是只对 assistant 回复计算 loss,user 和 system 作为条件上下文,不把“用户问题”也当成要模型模仿生成的答案。数据质量比数量更关键:指令要覆盖真实任务分布,答案要可验证、格式稳定、推理过程不过度臆造,拒答边界要一致,多轮样本要保持上下文引用正确。低质量 instruction data 会把模型训练成“看起来很会答”,但实际出现模板化、啰嗦、幻觉、拒答过度或格式崩坏。
PEFT、LoRA 与 QLoRA 的直觉。 全参数微调会更新模型所有权重,显存和优化器状态成本很高,也更容易扰动基础能力。PEFT 的思路是只训练少量新增参数或局部参数,把大模型主体冻结起来。LoRA 是最常见做法:对某个线性层权重 \(W\) 不直接更新完整的 \(\Delta W\),而是令 \(\Delta W=BA\),其中 \(A\) 和 \(B\) 是低秩矩阵,rank \(r\) 远小于原矩阵维度。直觉上,很多任务适配不需要在全部方向上改权重,只需要在少数关键方向上轻微偏转模型行为。QLoRA 在 LoRA 之外进一步把冻结的 base model 量化到 4-bit 等低精度存储,训练时主要更新 LoRA adapter,从而显著降低显存门槛。它适合预算有限、任务偏格式化或领域风格适配的场景;但如果任务要求大规模知识重写、强推理能力迁移、基础模型本身能力不足,低秩 adapter 可能只是把表层行为调顺,无法补齐底层能力。
RLHF 三阶段。 经典 RLHF 通常分三步:第一步用人工示范数据做 SFT,得到一个会按指令回答的初始策略;第二步收集 preference data,对同一 prompt 生成多个候选答案,让标注者选 chosen / rejected,再训练 reward model,使它给更符合偏好的答案更高分;第三步用 PPO 等强化学习算法优化策略模型,让它最大化 reward model 分数,同时用 KL 约束限制新策略不要偏离 SFT reference model 太远。这里的 reward model 不是“真理判官”,只是把偏好数据压缩成一个可微或可打分的代理目标;偏好数据也不是绝对标签,而是相对比较。
PPO 与 DPO 的差异。 PPO-RLHF 是显式强化学习:当前策略生成答案,reward model 打分,再用 policy gradient 更新模型,通常还需要 value model、采样 rollout、KL penalty、reward normalization 等工程细节。它灵活,但训练不稳定,容易 reward hacking,也很依赖 reward model 的可靠性。DPO 则把偏好优化改写成一个离线二分类式目标:给定同一 prompt 下的 chosen 和 rejected,直接提高模型相对 reference model 对 chosen 的 log-prob 优势,降低 rejected 的优势。DPO 不需要显式训练 reward model,也不需要在线 rollout,工程上简单稳定;代价是它主要受限于已有偏好对的覆盖度,对复杂多目标约束、长链路交互或需要在线探索的场景不如 PPO 灵活。
#代表面试题
- 为什么 SFT 后模型可能“变傻”? 常见原因不是 SFT 这个方法必然有害,而是数据分布太窄、答案模板太强、学习率过高、训练轮数过长,导致模型把通用能力压缩成少数回答模式。它可能更听话,但开放问答、代码、数学或长上下文能力下降。
- 灾难性遗忘怎么发生? 微调数据只覆盖少量任务,梯度持续把权重推向新分布,旧能力没有被 replay 或正则保护,就会遗忘。缓解方法包括降低学习率、早停、混入通用数据、使用 LoRA、保留 reference KL、分任务评测和回归测试。
- 什么时候全参数,什么时候 LoRA / QLoRA? 如果基础模型强、目标是风格、格式、工具协议或轻量领域适配,优先 LoRA / QLoRA;如果需要深度改变能力边界、模型规模较小或领域分布极端不同,才考虑全参数微调;如果问题主要是动态知识、私有文档或可追溯事实,通常先考虑 RAG,而不是微调。
- Reward model 学到的是什么? 它学习的是“在标注偏好分布下,哪个答案更被偏好”的打分函数,而不是客观正确性本身。标注指南、候选答案生成策略、标注者背景和安全政策都会进入 reward model。
- KL 约束为什么重要? 没有 KL,策略可能为了刷高 reward model 分数而偏离语言模型原有分布,出现重复、投机、安全绕过或胡乱迎合。KL 太强会让模型几乎不动,对齐不足;KL 太弱则容易 reward hacking。
- 对齐税是什么? 对齐训练提升了有用性、安全性和格式稳定性,但可能牺牲一部分原始能力,例如更保守、更少探索、更容易拒答,或者在数学代码任务上损失一点性能。面试里要能把收益和能力回归一起评估。
#这一块真正考什么
这一块真正考的是你能不能把后训练看成“数据、目标函数、约束和评测”的系统工程。SFT 解决的是行为模仿和指令遵循,PEFT 解决的是低成本参数更新,RLHF / DPO 解决的是人类偏好对齐。三者不是互斥关系,而是常按顺序组合:先用 SFT 建立可用策略,再用偏好优化微调风格、安全和满意度,最后用自动评测、人工评测和线上反馈持续校准。
也要能讲清常见风险。过拟合会表现为固定话术、训练集答案复读、遇到轻微改写就失败;灾难性遗忘会表现为通用能力下降;对齐税会表现为安全性提高但创造性、代码能力或复杂推理下降。工程上不能只看训练 loss 下降,还要看 held-out instruction、通用 benchmark、安全集、业务任务、拒答率、格式成功率和人工偏好胜率。
常见误区包括:把 SFT 当知识库更新;认为 LoRA 永远无损;认为 QLoRA 只是“显存小一点”而不影响数值和吞吐权衡;认为 reward model 分数越高用户体验一定越好;认为 DPO 完全取代 PPO;认为所有幻觉都能靠对齐训练解决。更成熟的回答应该说明:事实性问题优先靠数据治理、RAG 和评测闭环;行为问题才更多依赖 SFT 与偏好优化。
#作答抓手
回答微调题时推荐用四步:任务需求 -> 数据情况 -> 算力与时延约束 -> 选择的训练方案及风险。例如,客服机器人要稳定遵守回复格式,可以用高质量 SFT 加 LoRA;企业知识问答需要最新私有文档,优先 RAG,再用 SFT 学会引用和拒答;通用助手要提升人类满意度,则需要偏好数据、reward model 或 DPO,并配套 KL、红队集和回归评测。
追问链路可以这样准备:如果你说 SFT,面试官会追问它和预训练 loss 有何不同、instruction 样本如何 mask、数据质量怎么控;如果你说 LoRA,会追问低秩假设为什么成立、rank 怎么选、target modules 选哪些、merge adapter 后有什么影响;如果你说 QLoRA,会追问量化的是谁、梯度更新谁、精度损失怎么评估;如果你说 RLHF,会追问 preference data 如何采、reward model 如何训、PPO 为什么需要 KL;如果你说 DPO,会追问它为什么不需要显式 reward model,以及它相对 PPO 的适用边界。
最后给一个面试级总结:预训练让模型“有能力”,SFT 让模型“会按指令使用能力”,PEFT 让适配“便宜且可控”,RLHF / DPO 让输出“更贴近人类偏好”。真正的难点不在公式,而在数据分布、训练约束、评测闭环和上线后的回归风险。