#模块四:SFT、PEFT 与对齐训练知识点
这一章要把「后训练」从名词列表变成一条可推演的工程链路:先用 SFT 把预训练模型从续写器改造成会按指令回答的助手,再用 PEFT 降低微调成本,最后用偏好优化把回答风格、拒答边界和人类偏好压进模型行为。面试里不要只背 SFT、LoRA、RLHF、DPO 的定义,关键是能说清每一步改变了什么分布、吃什么数据、优化什么损失、引入什么副作用,以及什么时候根本不该微调。
1. SFT:从语言建模到任务行为模仿
SFT 的全称是 supervised fine-tuning,本质还是最大似然训练,但训练样本从预训练阶段的原始文本片段,变成了带任务意图的监督样本。常见格式是 {instruction, input, output},或者聊天格式 [system, user, assistant]。训练时通常只对 assistant 的回答部分计算交叉熵,让模型在看到系统约束、用户问题和上下文后,模仿标注答案的 token 序列。也就是说,SFT 不是教模型新世界知识的最优工具,而是把底座模型已有能力组织成稳定的指令跟随行为。
SFT 和预训练的根本差异不在损失函数名字,而在数据分布和目标语义。预训练让模型学「下一个 token 可能是什么」,覆盖范围大、噪声高、任务边界弱;SFT 让模型学「在这个指令下应该如何回应」,数据量小得多,但样本意图更明确。高质量 instruction data 需要有清晰任务、真实用户问题、合适难度梯度、可验证答案、多样表达、拒答与安全边界,还要避免模板化口吻、重复开头、过短回答和错误标注。数据质量差时,SFT 会把模型压成一个会套格式的客服,而不是能力更强的助手。
2. PEFT、LoRA 与 QLoRA:少改参数,不等于没有代价
PEFT 是 parameter-efficient fine-tuning 的总称,目标是在冻结大部分底座参数的前提下,只训练少量新增参数或低维增量。它适合大模型,是因为全参微调不仅显存昂贵,还要保存 optimizer state、梯度和激活;而 PEFT 通常只保存 adapter 或低秩矩阵,方便多任务切换和部署管理。常见方法包括 adapter、prefix/prompt tuning、LoRA,以及在量化底座上训练的 QLoRA。
LoRA 的核心假设是:下游任务需要的权重更新 ΔW 可能近似是低秩的。原本一个线性层输出是 Wx,LoRA 冻结 W,只训练 BAx,其中 A 把维度降到 rank r,B 再升回原维度。最终等价于使用 W + BA,但训练参数从 d × k 降到 r × (d + k)。rank 越大表达力越强,显存和过拟合风险也越高;alpha、dropout、插入层位置会影响稳定性。面试回答要强调:LoRA 不是压缩模型本体,而是用低秩增量近似微调更新。
QLoRA 在 LoRA 之外进一步把冻结的底座权重量化到 4bit,例如用 NF4 表示权重,并通过 double quantization、paged optimizer 等技巧降低显存峰值。训练时底座以量化形式存储,计算时再反量化参与前向,梯度主要更新 LoRA 参数。它的取舍很直接:显存占用显著降低,单卡可训练更大模型;代价是量化误差、吞吐变化、kernel 依赖和数值稳定性问题。全参微调适合模型需要深度改变、数据充足且资源允许的场景;LoRA 适合行为、格式、领域表达的轻量适配;QLoRA 适合显存受限下的实验和中小规模业务适配。
3. RLHF 三阶段:SFT、奖励模型、策略优化
经典 RLHF 通常分三步。第一步做 SFT,得到一个能基本回答问题的初始策略模型。第二步收集偏好数据:对同一个 prompt 采样多个回答,让人类标注 chosen 和 rejected,再训练 reward model,使它给 chosen 更高分。第三步用 PPO 等强化学习算法优化策略,让新模型生成能拿高 reward 的回答,同时用 KL 约束限制它不要偏离参考模型太远。
reward model 的作用是把稀疏、昂贵的人类偏好变成可批量调用的评分函数,但它不是客观真理。它会继承标注偏差,也可能被策略模型「钻空子」,例如奖励长篇空话、过度迎合或安全拒答模板。KL 约束的意义是给策略加一根绳子:如果模型为了追高奖励而远离 SFT/reference 分布,就惩罚这种漂移。KL 太强,模型学不到偏好;KL 太弱,模型容易 reward hacking、语言质量下降或安全边界失控。
4. PPO、DPO 与偏好优化的差异
PPO 是在线或半在线的策略优化:当前策略生成回答,reward model 打分,再用强化学习更新策略。它表达力强,可以组合多个 reward、长度惩罚和安全约束,但工程复杂,训练不稳定,超参敏感,还要维护 reward model 与采样流水线。DPO 则把偏好学习改写成一个直接的监督目标:给定 chosen/rejected pair,让模型相对参考模型提高 chosen 的概率、降低 rejected 的概率,不显式训练 reward model,也不跑 PPO rollouts。它更简单、稳定、便宜,因此常被用作偏好后训练的实用基线。
偏好优化方法的共同目标都是让模型排序更符合人类偏好,但信号形态不同。RLHF/PPO 用显式 reward model 提供标量奖励;DPO 使用 pairwise preference 和 reference model 隐式恢复奖励差;IPO、ORPO 等变体则尝试调整偏好 margin、去掉单独 reference 或把 SFT 与偏好目标合并。面试时可以这样概括:PPO 像「先学一个裁判,再让模型反复试错拿高分」;DPO 像「直接告诉模型 A 答案应该比 B 答案更可能」。前者灵活但重,后者简单但受偏好对覆盖范围、参考模型和离线数据质量限制。
5. 典型副作用:遗忘、对齐税与过拟合
SFT 或偏好优化后模型「变傻」并不少见。灾难性遗忘来自小而窄的数据分布覆盖了底座原有能力,尤其是高学习率、小数据多 epoch、单一风格答案和缺少通用能力回放时。对齐税指模型为了更安全、更礼貌、更符合偏好,可能牺牲部分有用性、创造性、推理探索或专业深度。过拟合则表现为训练集格式很好、真实用户问题变差,或者模型学会标注者偏好而非任务本质。
缓解方式要从数据、目标和评估三边同时做:混入通用指令和原能力保持数据;控制学习率、epoch、LoRA rank 和权重衰减;加入拒答、边界和难例;用 held-out benchmark、人工红队、领域测试和线上 A/B 监控。不要只看训练 loss 下降,因为 loss 下降只能说明模型更像训练答案,不能保证真实偏好、事实性、安全性和任务成功率提升。
6. RAG 还是 fine-tuning:先分清知识问题和行为问题
一个高频决策是:知识变化快、需要引用来源、需要可追溯、企业文档经常更新时,优先 RAG;模型不会按固定格式输出、不会遵守工作流、领域术语表达不稳定、需要改变交互风格时,才更适合 fine-tuning。RAG 改的是推理时上下文,优点是更新快、可审计、知识不必写进权重;缺点是检索召回、切片、排序和上下文利用会成为瓶颈。fine-tuning 改的是模型参数,优点是行为稳定、延迟低、格式一致;缺点是更新慢、难溯源、容易遗忘和污染通用能力。
实际业务常用混合方案:用 RAG 提供新鲜知识,用 SFT/LoRA 教模型如何使用检索证据、如何引用、如何拒绝无证据回答,再用偏好优化改善答案排序。判断标准不是「哪个更先进」,而是问题到底是知识缺失、检索失败、上下文不服从、输出格式错,还是偏好排序差。
7. 常见误区
- 误区一:SFT 能注入大量新知识。少量 SFT 更擅长塑造行为,知识注入容易不完整、不可控且难更新。
- 误区二:LoRA 一定不如全参微调。若任务主要是格式、风格和领域表达,LoRA 可能以更低成本达到足够效果。
- 误区三:QLoRA 只是免费省显存。它节省存储和 optimizer 压力,但会带来量化误差、速度和兼容性权衡。
- 误区四:RLHF 等于 PPO。RLHF 是流程范式,PPO 只是第三阶段的一种策略优化算法。
- 误区五:DPO 不需要任何奖励思想。DPO 不显式训练 reward model,但目标背后仍在利用 chosen/rejected 的隐式偏好差。
- 误区六:偏好优化越多越好。过强对齐可能导致拒答过度、答案变短、探索减少和专业能力下降。
8. 复盘清单与追问链路
复盘一个后训练方案时,可以按这组问题检查:训练目标是行为适配、知识更新还是偏好排序?样本格式是否清楚区分 system、user、assistant,并只在该监督的位置算 loss?instruction data 是否去重、去毒、覆盖难例和真实线上分布?选择全参、LoRA 还是 QLoRA 的依据是什么,显存、吞吐、部署和 adapter 管理如何取舍?RLHF 是否真的需要 PPO,还是 DPO/ORPO 已经足够?reward model 的训练集、验证集、标注一致性和 reward hacking 风险如何监控?KL 系数、参考模型和拒答策略如何定?评估是否覆盖通用能力、领域能力、安全性、事实性、格式遵循和线上用户指标?
追问链路通常会从定义走向工程判断。第一层问 SFT、LoRA、RLHF、DPO 是什么;第二层问损失函数和数据格式;第三层问显存为什么省、低秩为什么可行、KL 为什么必要;第四层问为什么训练后变差、如何定位是数据问题还是算法问题;第五层问给一个企业知识库客服,是该 RAG、SFT、LoRA 还是 DPO。好的回答要始终回到一句话:后训练不是万能增强器,而是在数据、目标函数、参数更新范围和评估闭环之间做受约束的工程选择。