大语言模型技术指南:SFT、RLHF、DPO 怎么串起来?对齐训练与关键参数详解
大语言模型技术指南:SFT、RLHF、DPO 怎么串起来?对齐训练与关键参数详解
前面几篇,我们已经把这条主线往前推进到了预训练阶段。
如果说预训练解决的是:
让模型学会语言、知识分布和通用模式。
那么接下来很自然就会遇到一个问题:
为什么一个已经很强的预训练模型,还是经常“不好用”?
比如它可能会出现这些典型情况:
- 能续写,但不一定听指令
- 能回答,但风格不稳定
- 知道很多知识,但回答不够符合人类偏好
- 遇到开放问题时容易又长又散
- 在多轮对话里不够“像一个助手”
这就说明一件事:
预训练学到的是“会生成”,但不等于“会按人希望的方式生成”。
所以在现代 LLM 训练链路里,预训练后面通常还会接一段“对齐训练”。
最常见的三组关键词就是:
- SFT
- RLHF
- DPO
很多文章会把它们拆开讲,但真正做工程判断时,更重要的是把它们串起来看:
- 它们分别解决什么问题
- 为什么不是互相替代,而是常常前后衔接
- 数据、损失函数和训练参数到底在影响什么
- 到部署阶段,这些训练选择又会留下什么风格和边界
这篇文章就把这条链路讲清楚。
一、先说结论:对齐训练不是“让模型更聪明”,而是让模型更像一个可用助手
先把一个最容易混淆的点说清楚。
很多人会把“对齐训练”理解成:
“继续把模型训强一点。”
这话只对一半。
更准确地说:
对齐训练的核心目标,不是让模型凭空获得全新世界知识,而是让它更稳定地按照人类期望的方式组织、筛选和表达能力。
也就是说,它主要调整的是:
- 回答风格
- 指令跟随能力
- 拒答边界
- 帮助性、真实性、无害性之间的平衡
- 在多个候选回答里更偏好哪一种
所以从能力分层上看:
- 预训练更像打底座
- SFT让模型学会“怎么像助手一样回答”
- RLHF / DPO让模型进一步学会“哪种回答更符合人类偏好”
这三者不是一个层面的东西。
二、为什么预训练模型通常还不够“可用”
预训练模型的目标很清楚:给定前文,预测下一个 token。
这个目标能让模型学出语言规律、知识共现和很多通用能力,但它不会天然关心下面这些事情:
- 用户是不是在明确下指令
- 回答是不是应该先给结论再展开
- 两种都能续写的答案里,哪种更清楚更安全
- 某些敏感请求该不该拒绝、该怎样拒绝
- 多轮对话里,什么叫“像一个靠谱助手”
因为从 next-token prediction 的角度看,只要“统计上合理”,模型就可能继续写下去。
这也是为什么早期 base model 往往会给人一种感觉:
- 很强
- 但不顺手
- 有知识
- 但不够听话
于是训练链路就会从“学世界分布”,转向“学人类意图和偏好”。
三、SFT 到底是什么?
SFT 全称是 Supervised Fine-Tuning,也就是监督微调。
它的核心做法并不复杂:
给模型一批“输入—理想输出”样本,让它继续学习,在这些样本上逼近人类示范答案。
例如:
- 输入:解释一下 Transformer 的 self-attention
- 输出:一段结构清晰、术语准确、适合用户阅读的回答
或者:
- 输入:帮我写一封请假邮件
- 输出:一封语气自然、格式完整的邮件
从训练形式上看,SFT 仍然很像语言建模,只不过训练数据变成了更明确的“指令—回答”对。
所以 SFT 解决的第一件事是:
把模型从“通用续写器”拉成“指令跟随器”。
四、SFT 最重要的价值,不是增加知识,而是塑造回答分布
很多人误以为 SFT 的价值主要在于“补知识”。
现实里,它更重要的作用往往是:
- 教模型理解指令格式
- 教模型形成回答结构
- 教模型学会任务边界
- 教模型在对话里采用更稳定的表达模式
比如同样一个问题,base model 可能会:
- 先铺垫很多背景
- 回答不聚焦
- 有时偏论文体,有时偏论坛体
- 有时像续写文章,而不是回答问题
经过 SFT 后,模型会更倾向于:
- 先回应用户意图
- 给出结构化回答
- 风格更像助理
- 对常见任务模式更熟悉
所以 SFT 的关键不是“教它从无到有知道一件事”,而是:
把已有能力重新组织成更可用的交互形态。
五、SFT 数据为什么会直接决定模型“像什么助手”
SFT 的风格,很大程度上就是数据风格。
如果你的监督数据主要是:
- 长篇解释型回答
- 教学式推导
- 稳健保守的拒答模板
- 结构很规整的问答对
那模型最后也会被拉向这种风格。
如果数据主要是:
- 短回答
- 口语化表达
- 强任务导向
- 偏代码/偏工具调用格式
模型就会形成完全不同的“人格手感”。
所以在工程上,SFT 数据不只是标注集,而更像是:
你希望模型成为什么样助手的行为样本库。
这也是为什么不同厂家的模型,即便底座接近,最后用起来的风格差异仍然很大。
六、SFT 阶段有哪些关键参数值得关注
SFT 的训练参数很多,但我建议先抓最关键的一批。
1)学习率(learning rate)
这是最敏感的参数之一。
- 太大,容易把底座能力拉坏,出现灾难性遗忘
- 太小,收敛慢,风格拉不动
SFT 通常比预训练更依赖精细学习率控制,因为这一步更像“修形”,不是“从零学世界”。
2)epoch
SFT 数据往往比预训练小得多,所以 epoch 数会更有意义。
- epoch 太少,风格没学稳
- epoch 太多,容易过拟合模板表达
3)batch size
它会影响训练稳定性、吞吐和梯度估计噪声。
在数据量不算特别大的 SFT 阶段,batch 的选择会明显影响最后风格是否平滑。
4)max sequence length
这个参数决定单条样本最多截取多长。
如果训练里长期只看短样本,模型后面在长指令、多轮结构化输出上的表现往往也会受影响。
5)数据配比
如果你同时混合:
- 通用问答
- 数学
- 代码
- 工具调用
- 安全拒答
那不同数据占比其实就是在决定模型后面对各类行为的偏好强弱。
所以很多时候,真正的“参数”不是命令行里的某个数字,而是数据配比本身。
七、RLHF 为什么会出现
只做 SFT,有一个很现实的问题。
即使你给了标准答案,很多任务仍然不是“唯一正确输出”。
比如一个问题的两个回答可能都没错,但人类会明显偏好其中一个:
- 一个更简洁
- 一个更有逻辑
- 一个更安全
- 一个更贴合用户真正意图
这时,单纯做监督学习就不够了。
因为 SFT 更像在拟合“示范答案”,而不是在大量可行答案里学习“人类更喜欢哪种”。
于是 RLHF 出现了。
RLHF 全称 Reinforcement Learning from Human Feedback。
它的核心思想是:
先收集人类偏好,再把这种偏好转成优化信号,让模型朝更受偏爱的回答分布移动。
八、RLHF 的典型三段式链路
经典 RLHF 通常可以粗略拆成三步。
1)先做 SFT
先把模型调成一个基本可对话、可跟随指令的版本。
因为如果模型连像样回答都给不出来,后面的偏好优化很难稳定进行。
2)训练 reward model
对同一个 prompt,生成多个候选回答,让标注者排序或二选一。
例如:
- A 比 B 更清楚
- A 比 B 更安全
- A 比 B 更符合用户意图
然后训练一个 reward model,让它学会给“更受偏好”的回答更高分。
3)用强化学习优化策略模型
再让主模型根据 reward model 的打分去更新,从而增加高偏好回答的概率。
这就是 RLHF 中“RL”的来源。
所以 RLHF 并不是神秘黑箱,它本质上是在做一件事:
把人类主观偏好,转成一个可训练的优化目标。
九、为什么 RLHF 能改善“手感”
很多人实际用模型时,会说某个模型“手感更好”。
这种“手感”背后,往往就和偏好优化强相关。
因为 RLHF 会影响很多非常用户侧的体验:
- 回答是否更贴题
- 是否更会先给结论
- 是否更少跑题
- 是否更懂得收敛篇幅
- 是否更谨慎处理高风险问题
- 是否更容易产出“看起来像人写的有用答案”
也就是说,RLHF 不一定显著增加知识量,但经常会显著改变:
模型把已有能力包装成用户体验的方式。
这也是为什么有些模型 benchmark 不一定遥遥领先,但产品体验却很好。
十、RLHF 最大的工程难点,不在 RL,而在偏好数据
外行看 RLHF,容易把重点放在 PPO、KL penalty 这些算法词上。
但工程里真正难的,经常不是公式,而是:
你到底在收集什么偏好,谁来打标,偏好是否一致。
因为“更好回答”并不是天然客观的。
偏好会受很多因素影响:
- 任务类型
- 标注规范
- 风格偏好
- 安全标准
- 文化语境
- 产品定位
如果偏好数据本身混乱,reward model 学到的东西也会混乱。
于是你可能得到一个很奇怪的模型:
- 很会说套话
- 过度保守
- 过度简短
- 一味迎合某种模板化风格
所以 RLHF 的上限,很大程度取决于偏好数据质量,而不只是 RL 算法本身。
十一、RLHF 里有哪些关键参数和约束
虽然 RLHF 很复杂,但从理解层面,最值得关注的是下面几类量。
1)reward model 质量
如果奖励模型打分不稳,后续优化方向就会跑偏。
2)KL 系数
在很多 RLHF 实现里,会加入 KL penalty,限制新策略不要偏离 SFT 模型太远。
它的作用很关键:
- 太小:模型可能为了刷 reward 走向奇怪分布
- 太大:模型几乎学不动,偏好优化效果弱
所以 KL 系数本质上是在控制:
你愿意为了偏好收益,允许模型偏离原始分布多少。
3)采样策略
候选回答怎么采样,会影响偏好数据多样性,也影响 reward model 学到的边界。
4)训练稳定性
强化学习阶段天然更容易不稳定,尤其是大模型上。
因此很多团队后来开始倾向更简单、直接的偏好优化方法。
这也就引出了 DPO。
十二、DPO 为什么近两年这么火
DPO 全称 Direct Preference Optimization。
它受欢迎的核心原因很简单:
它试图绕开传统 RLHF 中 reward model + 强化学习那条又长又难训的链路,直接用偏好对来优化模型。
直觉上你可以把它理解成:
- 给定一个 prompt
- 有一个人类更喜欢的回答 chosen
- 有一个不那么喜欢的回答 rejected
- 直接训练模型:提高 chosen 的概率,压低 rejected 的概率
这样就把“偏好学习”从复杂 RL 流程,转成了一个更接近监督学习的优化问题。
这为什么重要?
因为它通常意味着:
- 训练实现更简单
- 稳定性更好
- 工程成本更低
- 更容易在已有 SFT 模型上继续做偏好优化
十三、DPO 解决了什么,又没解决什么
DPO 的优势确实很明显,但也别神化。
它主要解决的是:
- 降低 RLHF 的实现复杂度
- 减少 reward model 误差链路
- 更方便利用成对偏好数据
但它没有 magically 消灭所有问题。
比如:
- 偏好数据如果有问题,DPO 一样会学歪
- chosen / rejected 的构造方式会直接影响优化方向
- 不同任务对“偏好”的定义并不统一
- 如果过度优化,仍可能出现风格过拟合和能力压缩
所以 DPO 不是“比 RLHF 高一个时代”,而更像是:
一种更简洁、工程上更友好的偏好优化路径。
十四、DPO 里的关键参数:beta 到底在控制什么
讲 DPO 时,最常被提到的参数就是 beta。
直觉上,你可以把它理解成:
模型为了偏好样本去拉开 chosen 与 rejected 差距时,力度有多大。
- beta 太小,偏好信号作用弱
- beta 太大,模型可能被强行拉向某种狭窄风格
所以 beta 本质上是在控制:
- 你要多大程度强化偏好
- 你要多大程度保留原模型分布
从结果上看,它和 RLHF 里的 KL 约束有一点类似的味道:
都是在处理“优化偏好”和“别把底座搞坏”之间的平衡。
十五、SFT、RLHF、DPO 到底该怎么串起来看
如果只用最实用的工程视角,我会这样理解:
第一层:SFT
让模型学会按指令做事。
核心解决:
- 指令跟随
- 回答结构
- 助手风格初始化
第二层:RLHF / DPO
让模型在多个可行回答里,更稳定地偏向人类喜欢的那种。
核心解决:
- 偏好排序
- 风格打磨
- 安全与帮助性的细调
所以它们不是“选一个就行”,而是常见的链路是:
预训练 → SFT → 偏好优化(RLHF 或 DPO)
其中 DPO 常常被当成 RLHF 链路的轻量替代实现,而不是替代整个对齐阶段。
十六、从部署视角看,对齐训练会留下哪些痕迹
很多工程同学不直接参与训练,但对齐训练和你依然高度相关。
因为你在线上看到的很多行为,其实就是 SFT / RLHF / DPO 留下的“模型习惯”。
例如:
- 是否爱先讲免责声明
- 是否偏好长回答还是短回答
- 是否容易过度拒答
- 是否在模糊请求下强行猜用户意图
- 是否擅长结构化输出
- 是否在工具调用前啰嗦解释过多
这些都不是部署参数临时决定的,很多时候是训练分布决定的。
所以部署时不要只问:
- 模型多大
- 基准分数多少
还要问:
- 这个模型被对齐成什么风格
- 它对拒答边界的处理是否适合我的产品
- 它在代码、问答、Agent、RAG 场景下的行为稳定吗
这才是真正接近使用体验的判断方式。
十七、对齐训练最容易踩的几个坑
1)把对齐当成“继续堆知识”
对齐主要调行为分布,不是知识灌输主通道。
2)SFT 数据太模板化
如果样本过于整齐,模型最后容易变得机械、官话重。
3)偏好数据标准不一致
同一类问题标注口径不统一,reward model 或 DPO 就会学得摇摆。
4)安全过拟合
过度保守会让模型在很多正常任务上也畏手畏脚。
5)只看训练指标,不看真实交互体验
偏好优化做完,离线 loss 变好,不代表线上用户就一定更满意。
真正该看的还是任务完成率、用户主观偏好和失败案例分布。
十八、最后总结:对齐训练是在把“会生成”变成“更可用地生成”
如果只用一句话概括这篇,我会说:
SFT、RLHF、DPO 这条链路的本质,是把预训练模型从“会续写的底座”,逐步变成“更听指令、更符合人类偏好、更适合真实产品交互的助手”。
你真正应该带走的,是下面几个核心认识:
1)SFT 主要解决“按指令做事”的问题,让模型从续写器变成助手
2)RLHF 主要解决“多个可行答案里,哪种更符合人类偏好”的问题
3)DPO 是一种更简洁的偏好优化路径,本质上仍然是在做对齐,而不是跳过对齐
4)learning rate、epoch、batch、数据配比、KL、beta 这些参数,本质上都在平衡“拉风格”和“别拉坏底座”
5)对齐训练不只是训练问题,它会直接决定模型在线上的手感、拒答边界和产品体验
从这里开始,你对大语言模型的理解,就不再只是“它怎么学语言”,而是开始进入“它怎么被塑造成一个可用助手”。
