第 07 章 · 核心
后训练:SFT、LoRA 与偏好对齐
看懂基础模型怎样通过指令微调、参数高效微调和偏好优化变得更会用。
学习准备与本章目标
- 开始前
- 预训练目标 · 梯度与优化器
- 学完后
- 区分预训练和 SFT · 解释 LoRA 的低秩更新 · 理解偏好对齐的目标与边界
本章路线图
后训练把“会续写的基础模型”转成“能按要求完成任务的模型”。它通常包含监督微调、参数高效微调、偏好优化与专项能力训练。核心不是记算法名,而是看清每个阶段的数据结构、训练目标和副作用。
SFT 让模型学会“按指令回答”
预训练模型擅长续写,却不一定知道聊天角色、回答格式和任务边界。监督微调把指令、上下文与理想回答组织成样本,仍用 next-token loss 训练,但通常只让助手回答部分参与损失。
SFT 数据质量往往比数量更重要。混乱的格式、互相冲突的回答和错误推理过程会直接塑造模型行为。模板、特殊 Token 与线上推理格式必须一致。
LoRA 为什么能用更少参数微调
LoRA 冻结原权重 W,只学习一个低秩增量 BA,使新权重效果近似 W + BA。若秩 r 远小于输入输出维度,可训练参数、梯度和优化器状态都会明显减少。
但 LoRA 不等于“所有显存都很少”:基础权重和前向激活仍存在。QLoRA 再把基础权重量化,以进一步降低容量;计算时仍需要合适的计算精度。
从人类偏好到 DPO 与 RLHF
同一个提示可以有多个合理回答,简单 SFT 很难表达“更喜欢哪一个”。RLHF 常训练奖励模型,再用强化学习让策略提高奖励;DPO 则直接利用 chosen/rejected 对,优化相对偏好,流程更简洁。
无论哪种方法,偏好数据都在定义“好回答”。标注偏差、长度偏好和奖励投机可能让指标提高却损害真实能力,所以需要独立评测和人工检查。
对齐不是一次微调就结束
有帮助、诚实和安全之间可能冲突;不同场景的边界也不同。后训练还可能包含拒答数据、工具调用、长上下文、领域能力和推理训练。
评估时应分别看通用能力、目标任务、事实性、安全性和过度拒答。对齐后的模型如果只在单一自动裁判上变好,不代表用户体验一定更好。
指令数据怎样组织
单轮样本通常包含系统规则、用户指令和助手回答;多轮样本还要保留角色与轮次边界。训练时通常只对助手输出计算 loss,系统和用户 Token 只作为条件。
高质量 SFT 数据需要:任务目标明确、答案正确、格式一致、难度与领域覆盖合理,并包含模型真实会遇到的边界情况。大量重复模板会让模型过拟合固定句式;过长、含糊或互相冲突的系统规则也会降低可学性。
数据清洗要检查角色错位、回答截断、错误引用、隐私、答案泄漏和模板版本。比起盲目增加数量,小规模高质量数据常能更直接地改变指令行为。
Full Fine-tuning 与参数高效微调
全参微调更新全部权重,表达能力强,但显存、通信和 checkpoint 成本高,也更容易破坏基础能力。参数高效微调只训练少量新增或选定参数,适合资源有限、多个领域适配和快速迭代。
选择时要看任务与基础模型差距:只是改变格式和领域术语,LoRA 往往足够;需要显著改变知识、推理模式或多模态接口时,可能需要更大范围训练。参数少不代表数据与评测要求降低。
LoRA 的低秩更新
LoRA 冻结原矩阵 ,只训练低秩增量:
若 ,则 、,且 远小于输入输出维度。训练参数从 d_out × d_in 降为 r × (d_in + d_out)。
可在 Q/K/V/O 投影、FFN 与 Embedding 等不同模块插入 LoRA。rank、alpha、dropout 和目标模块共同决定容量。rank 不是越大越好,应通过目标任务与遗忘评测选择。
QLoRA 为什么还能进一步省显存
QLoRA 将冻结的基础权重量化到低位存储,前向时按计算需要反量化,同时用较高精度训练 LoRA 参数。它主要减少基础权重显存,不意味着优化器状态、激活和临时量都变成 4 bit。
量化格式、计算 dtype、双重量化与分页优化器会影响稳定性和峰值。训练完成后可保留 adapter 独立加载,也可合并回高精度权重;若要再量化部署,应重新验证质量。
偏好数据表达了什么
偏好样本通常包含同一提示下的 chosen 与 rejected 回答。它只说明在给定标注规范下前者更好,不提供绝对质量分数。长度、语气、格式和事实准确性可能被混合在一个偏好标签中。
构造数据时应控制位置偏差、长度偏差和模板泄漏,保留分歧样本,并让标注者依据明确维度判断。合成偏好可以扩大规模,但容易继承教师模型与裁判的偏好。
RLHF 的基本链路
经典 RLHF 先用偏好对训练奖励模型,再用 PPO 等强化学习方法优化策略模型,同时通过 KL 惩罚限制它偏离参考模型过远。
SFT 模型 → 收集偏好 → 奖励模型
→ 策略采样 → 奖励 + KL → PPO 更新
优点是可以直接优化序列级奖励,缺点是系统复杂、采样昂贵且容易出现奖励投机。奖励上升必须配合独立人工与任务评测。
DPO 的直觉与边界
DPO 不显式训练奖励模型,也不运行在线强化学习。它比较策略模型对 chosen/rejected 的相对偏好,并以参考模型约束更新。
直觉上,模型应提高 chosen 相对 rejected 的对数概率差,但不能无限偏离参考策略。温度参数控制偏好优化强度。DPO 实现更简单,却仍依赖偏好数据质量,也可能放大长度和风格偏差。
DPO、PPO、ORPO 等方法不是按名称决定胜负;需要在相同数据、模型、解码和评测条件下比较。
推理能力与过程数据
推理专项训练可能使用可验证答案、过程监督、拒绝采样、蒸馏或基于规则奖励。关键区别是最终结果能否自动验证,以及中间过程是否可靠。
更长的推理文本不自动代表更强推理。模型可能重复、绕路或生成看似合理的过程。数学与代码任务可用执行器验证结果,开放问题则要结合事实与任务成功标准。
灾难性遗忘与能力回退
领域微调后,模型可能提升目标任务却损失通用能力、语言覆盖或安全边界。原因包括数据分布过窄、学习率过大、训练过久和目标冲突。
缓解手段包括混入通用回放数据、降低更新强度、使用 adapter 隔离能力,以及同时监控基础评测。训练集 loss 无法发现这类回退。
一条可复现的后训练流水线
- 固化基础模型、Tokenizer 与聊天模板版本。
- 建立 SFT 数据规范、去重和助手区 loss mask。
- 训练并检查目标任务、通用能力与安全基线。
- 收集偏好时明确评价维度与分歧处理。
- 运行偏好优化,并监控 KL、长度和风格变化。
- 用独立测试集、人评和线上灰度共同验收。
- 保存数据版本、超参数、adapter 与合并方式。
常见误区
- SFT 不是向参数中可靠写入最新知识的数据库操作。
- LoRA 参数少不代表一定不遗忘,也不代表推理零开销。
- 偏好胜率提高不等于事实性和任务成功率都提高。
- 奖励模型分数不是客观真理,可能被策略利用。
- 拒答更多不等于更安全,必须同时测过度拒答。
章末检查
- 为什么 SFT 通常只对助手部分计算 loss?
- 写出 LoRA 的矩阵形状并计算参数节省量。
- QLoRA 量化了什么,又保留了哪些高精度计算?
- RLHF 与 DPO 在训练流程上最主要的区别是什么?
- 如何证明领域微调没有破坏通用能力?
延伸资料
本章进阶内容
原理专题与代码实践
完成主教材后,按顺序阅读原理专题、完成代码实践,并用掌握标准复查本章内容。
- 01
区分预训练、SFT、偏好优化与推理强化
- 02
深入 LoRA、DPO、RLHF 和奖励建模
- 03
用 AMP、梯度裁剪与监控稳定训练
- 04
设计一套含基线和消融的后训练实验
本章术语
六个关键词
- SFT
- 使用指令与理想回答进行的监督微调。
- LoRA
- 用两个低秩矩阵表示权重增量的参数高效微调。
- QLoRA
- 量化冻结基础权重并训练 LoRA adapter 的方法。
- 偏好数据
- 同一输入下对候选回答进行相对选择的数据。
- RLHF
- 利用人类偏好奖励优化模型策略的训练流程。
- DPO
- 直接优化 chosen 与 rejected 相对概率的偏好方法。
章节记录
