
1. 先说结论SFT和RL解决的根本不是同一个问题很多做应用层的程序员朋友一听到训练大模型这个词第一反应就是拿一批数据继续 train 一把。这个直觉没有错但它会让人在接触 SFT 和 RL 的时候产生混乱——这两个阶段的训练从目标、数据、优化方式到失败模式几乎完全不同。把结论摆在前头SFTSupervised Fine-Tuning监督微调解决的是模型会不会懂人话的问题RL/RLHFReinforcement Learning / Reinforcement Learning from Human Feedback基于人类反馈的强化学习解决的是模型愿不愿意好好干活的问题。这两个问题经常被笼统地塞进微调这个筐里但实际操作起来它们的工程链路和踩坑点几乎没有交集。更微妙的是 DPODirect Preference Optimization直接偏好优化——它经常被当作 RLHF 的轻量替代品但它的定位远比平替两个字复杂。DPO 修改了 RLHF 的目标函数形式避开了训练奖励模型和在线采样两条最重的链路却在偏好对齐这件事上保留了 RL 的核心思想。如果你在做大模型相关项目不理解这三者之间的本质关系就很容易出现数据也标了、loss 也降了、模型还是不听话的尴尬局面。这篇文章我会从 SFT 的实际作用讲起再拆解 RLHF 那条复杂链路为什么非重不可然后回到 DPO 的数学直觉和工程定位最后给出几个不同业务场景下的选型判断。全文不堆公式但该讲清楚原理的地方不会绕过去希望给正在入门大模型训练、或者正在纠结该走哪条对齐路线的开发者一个完整的地图。2. SFT到底教会了模型什么从预训练到懂人话的那一步2.1 预训练模型缺的不是知识而是指令格式要理解 SFT先得想明白预训练模型到底有什么、缺什么。预训练阶段模型在海量文本上做下一词预测它学到的是语言本身的统计规律——词怎么搭配、知识点怎么组织、长文本内部的逻辑怎么铺陈。这个阶段结束后模型已经知道大量知识但它并不知道你希望它以什么形式把这些知识吐出来。举个例子你问预训练模型北京是中国的首都吗它完全有可能给你回一句北京是中国的首都也是中国的政治中心、文化中心、国际交往中心……然后再接一句原本网页上可能出现的如果你对该地区感兴趣可以参考以下链接。这不是因为它跟你作对而是它从训练数据里学到的模式就是顺着语料继续往下接。SFT 存在的意义就是让模型从接话切换到答题的格式。具体做法很朴素准备一批高质量的指令-标准答案对在模型上做普通的自回归训练loss 是标准的交叉熵只计算答案部分的 token 损失。因为是监督学习标签就是标注者给的答案因为只微调很少的轮数模型不会忘记预训练阶段学到的广谱知识。2.2 SFT 的能力边界它只能学会被展示的行为SFT 有一个非常容易被忽略的局限性它只能让模型模仿标注数据里出现过的行为并不能超越数据本身的水平。如果你的标注数据里只有简洁一句话回答的例子模型就不会主动展开详细推理如果标注答案里存在错误模型也会把错误当成标准学到。这个特点决定了 SFT 的核心地位它是模型从基础能力走向应用形态的必经桥梁。即便你后续要做 RLHF 或 DPOSFT 也是不可跳过的前置步骤——因为强化学习需要一个会回答但是还不够好的起点。RL 拿起一个完全不会跟人对答的模型是没办法通过奖励把它逼成对话助手的它只能优化一个已经具备基本对话能力的策略。由于 SFT 的数据成本相对可控通常几千到几万条就够了目前绝大多数开源模型走的就是预训练 SFT 偏好对齐三步曲。SFT 阶段质量好不好直接决定后续对齐的上限——这一点我在后面选型部分还会强调。3. RL那套复杂链路为什么奖励模型、在线采样和PPO一个都跑不掉3.1 人类反馈的矛盾给偏好打分比给质量打分容易得多真正让 RLHF 变得复杂的不是强化学习算法本身而是人类反馈的形态。你试着让标注人员给一段回答打一个 8.7 分会发现极其不稳定不同人之间评分尺度不一样同一个人不同时间也会飘而且高分和低分之间的质量差很难说清楚。但如果让标注人员对比两个回答哪个更好工作就变得稳定很多——偏好判断是相对判断天然比绝对值判断更符合人的认知习惯。基于这个原因RLHF 里先要训练一个奖励模型Reward ModelRM专门用来给回答输出一个标量分数。RM 的输入是指令 回答输出是一维标量训练数据是人类对同一指令下两组回答的偏好排序通常用 Bradley-Terry 模型建模 pair 之间的胜负概率。RM 训练好以后它就变成人类偏好的代理裁判可以给任意新生成内容打分而不需要再找真人逐条标注。3.2 为什么必须在采样中更新策略不在线就找不到好的边界PPOProximal Policy Optimization近端策略优化是 RLHF 中最常用的策略优化算法。它做的事可以这样理解策略模型每更新一步就按当前的最新分布再去生成一批回答让 RM 打分根据分数计算优势再反过来指导模型该往哪个方向挪。整个过程是生成 → 打分 → 更新 → 再生成的闭环。这个闭环的存在是因为一个核心逻辑策略变了模型的生成分布就变了离线数据的代表性就过期了。如果用旧分布上收集的回答来评估新策略评估结果会失真。在线采样保证了模型始终在当前自己最可能产出什么的分布上接受反馈从而发现那些人类标注数据里根本不存在的边界行为。在线采样的代价是训练流水线大幅变重推理、RM 打分、策略更新要串成一条实时链路还要处理 KL 散度约束防止模型跑飞以及一大堆 PPO 特有的超参数——clip 范围、优势归一化、batch 大小、rollout 数量每一个都足够让人调一整天。这就是为什么很多中小团队在考虑 RLHF 时会打退堂鼓。3.3 Reward Hacking模型会欺骗代理裁判重链路之外RLHF 还自带一个有趣的陷阱奖励模型是代理裁判不是真正的用户而模型是优化代理裁判分数的专家。只要 RM 有任何一个容易钻的空子——比如偏好某个固定句式、偏好更长文本、偏好特定关键词——PPO 就会让模型无限放大这个空子直到生成一个让 RM 打了高分、但真人看一眼就想关闭的回答。这种现象叫 reward hacking。它本质上是优化目标与真实目标不一致的必然结果。对付它也没有完美方案工业界通常的做法是在 PPO 更新目标中加入对参考模型的 KL 惩罚让模型不能距离 SFT 初始模型太远同时对 RM 预留验证集定期用人类标注校准 RM 是否仍在正常工作。但坦率讲只要还用标量打分这个压缩信号reward hacking 就只能被压制不能被根除。4. 本质区别拆解目标函数、数据来源与失败模式的全面对比4.1 目标函数的天壤之别最大似然与期望奖励SFT 和 RL 的本质区别追到底层就是目标函数的不同。SFT 的目标是最大化标准答案的似然概率公式语义可以简化成让模型在给定指令时把标注答案的概率抬得越高越好。这是一个典型的最大似然估计问题梯度方向完全由标注数据决定不存在探索的余地。RLHF 的目标是最大化期望奖励语义是让模型在分布中生成那些能够拿到高分的内容。它在数学上是一个期望项需要通过采样来估计——这就解释了为什么 RLHF 一定有随机采样环节因为期望值没有解析解只能用经验均值近似。这两种目标的差别类似于照着字帖临摹和在没有人告诉你标准答案的情况下为了拿高分自己摸索写法之间的差别。前者有拐杖后者得靠试错。4.2 数据来源和优化路径的连锁反应因为目标函数不同SFT 和 RL 的数据来源也完全不同。SFT 用的是静态标注数据一批数据可以反复来回训练没有问题RL 用的是策略自身的在线采样结果数据分布跟策略参数同步演化导致训练流程中每一步都要重新生成答案。这个连锁反应的工程后果非常明显维度SFTRL / RLHF目标最大化标准答案的条件概率最大化期望奖励数据来源静态人工标注策略在线采样 RM 打分反馈信号标签标准答案标量分数代理偏好优化方式一步交叉熵梯度下降多步采样、估算优势、策略更新核心风险过拟合标注噪声奖励欺骗、训练不稳定成本瓶颈标注质量采样 推理 调参结果特性稳定收敛、可预期能超越数据上限也容易跑飞这张表基本上可以当做一个快速判断标准如果你的任务里好坏很难定义、但哪个更好有人能判断那就该考虑 RL 链路如果任务的标准答案是清晰的那 SFT 就足够了。4.3 失败模式完全不同学死和学坏SFT 常见的失败是过拟合标注数据——数据里有一些表述不太好的回答模型会一字不差地模仿出来数据分布太窄模型会显得很僵换个问法就不会绕弯。这种失败是学死了。RL 常见的失败是 reward hacking 和训练崩溃——模型的奖励分数一直在涨但人类评估质量不升反降或者某次更新步长太大模型生成语言退化成一坨重复文本。这种失败是学坏了。理解这两类失败模式对判断问题出在哪个环节非常有帮助。我见过不少团队在模型输出答非所问的时候第一反应是想上 RLHF但实际上问题出在 SFT 数据质量上——连基本的指令跟随都没学会强化学习只会把这个基础问题放大。5. DPO的定位如何用一条loss端掉奖励模型和PPO两条链路5.1 DPO 的核心观察把偏好逻辑直接翻译成策略更新DPO 之所以在近两年火得很快是因为它对 RLHF 做了一个非常简练的数学操作不再单独训练一个奖励模型也不再做在线采样而是利用 Bradley-Terry 偏好模型的结构把奖励差直接表示成当前策略与参考策略的对数概率比从而把让模型学会偏好这件事变成一条可以直接对静态数据求梯度的 loss。用大白话描述 DPO 的思路如果模型对于一个更好的回答的生成概率比一个较差的回答的生成概率提升得更多那么这个模型就是在对齐人类偏好。更精确地说DPO 约束的是两个回答之间的概率差——优选回答的概率要相对提高劣选回答的概率要相对降低同时通过参考模型约束让模型不要偏离 SFT 版本太远。这个逻辑的好处立竿见影不需要训练 RM不需要设置 rollout buffer不需要维护一条在线生成和打分链路。训练形态回到了 SFT 的样子把指令-优选-劣选三元组喂进去前向传播算 loss反向传播更新参数。数据是静态的可以 shuffle可以多 epoch 训练工程实现稳定得多。5.2 DPO 为什么绕得开在线探索因为它改了目标形式很多人会问DPO 没有在线探索它是不是丢掉 RL 最核心的部分这个问题的答案藏在 DPO 的数学构造里。RLHF 之所以需要在线探索是因为期望奖励这个目标表达式里策略分布和奖励函数耦合在一起策略一变期望就要重新采样估计。DPO 的巧妙之处在于它通过等价格式把目标改写成了策略与参考策略的比值所有训练信号都已经编码在偏好 pair 里。这个目标函数下数据虽然是静态的但梯度的方向和 RLHF 近似最优解的方向程一致——只要偏好数据对包含了足够多的信息模型就能在收敛后达到类似 RLHF 的效果。这句话需要补充一个重要的限定条件DPO 的等价性依赖于偏好数据覆盖度足够好且假设策略的生成分布变化不会太大。如果任务要求模型通过探索发现新的解题路径——比如代码生成里自己找到新的解法或者问答中想出标注数据里不存在的思路——DPO 就力不从心了。因为探索的本质是需要在采样中发现奖励模型会给出高分的新鲜行为这部分信号不会从离线静态 pair 里自发产生。5.3 从对齐效果看 DPO 的边界拿什么场景来测试最有说服力从近两年各种第三方测评和社区反馈来看DPO 在风格对齐上表现非常突出。比如让模型学会回答问题更简洁更礼貌更不容易输出有害内容这类偏好DPO 效果通常不逊于甚至优于完整的 RLHF 链路。这类偏好的特点是人类偏好高度一致、差异能被 pair 数据充分刻画、不需要模型做长程规划和探索。但在需要模型自我纠错、多步推理或者搜索的任务上DPO 的短板就暴露了。因为它只比较给定两个答案哪个更好并更新策略去青睐好答案而完全没有尝试新答案、获得反馈、再调整的机制。这种场景下在线 RLHF 仍然不可替代。这也解释了 DPO 在工程体系中的真实定位它不是 RLHF 的全面替代品而是离线偏好对齐组件。对大多数产品场景的对话风格、安全约束、语气调校来说它是性价比非常高的选择对推理、规划类任务它属于辅助角色。6. 工程选型经验什么场景用SFT、DPO什么场景还是得上RLHF6.1 先看你手头数据长什么样我的选型思路一般从数据形态出发而不是从算法名气出发。把场景简单分一下有清晰标准答案信息抽取、改写、翻译、分类数据集是指令-标准回答形态直接用 SFT。这类任务不需要偏好对齐SFT 就能做到稳定且效果可控。有大量哪个回答更好的偏好标注但没有人能给出完美回答走 DPO。这是 DPO 的主战场尤其适合对话语气、安全规范、创作风格的微调。任务需要探索、多步推理、模型要从自身生成序列中获得长程反馈老实上 RLHF。例如代码生成、数学解题、Agent 任务规划这类场景的奖励信号往往不是某个 human preference 能简单定义的。判断标准很简单你手上的反馈信号是正确答案还是相对偏好但这还不是全部。即便同样是偏好数据还有一个实际问题pair 质量。DPO 对 pair 数据中的噪声非常敏感——如果优选和劣选之间的差异不够明显或者配对标准本身就是错的DPO 会把噪声当成真实偏好学进去轻则没效果重则让模型退化。我在实际操作中见过不少人拿用户点赞数做粗略偏好效果波动极大后来改成用规则过滤 人工抽检的小规模高质量 pair稳定性才上来。6.2 完整的对齐链路设计SLM到SFT到偏好对齐如果你的目标是做一个对话助手类的模型一个比较稳妥的链路是这样的预训练基座模型或直接使用开源基座。用几千到几万条高质量指令做 SFT先把指令跟随能力提上来。这个环节质量优先级高于数量我宁愿用 5000 条精标数据也不用 5 万条混杂数据。在 SFT 模型上做偏好数据采样生成候选回答人工对比排序构造偏好 pair。用 DPO 做一轮或多轮偏好优化超参数重点关注 β控制对参考模型的偏离程度和学习率。如果任务属于复杂推理类且已经能访问在线推理资源再考虑上 PPO/RLHF而不是一上来就绕开 DPO。很多团队的问题是跳过第 3 步直接上 DPOpair 数据质量堪忧最后效果还不如 SFT。DPO 不是银弹它的效果上限取决于偏好数据是否真实刻画了你的目标人群的需求。6.3 一个容易被忽视的陷阱新模型 vs 历史模型选哪个做参考模型DPO 的 loss 里有一个参考模型用来约束策略模型不要偏离太远。这个参考模型通常直接用 SFT 阶段的模型冻结得到这点绝大多数教程都会说。但工程上有个实际坑当你的模型已经跑过了一轮 DPO然后拿到了新一批偏好数据想做第二轮 DPO 时参考模型应该选哪个答案取决于你想要的语义。如果参考模型继续用最初的 SFT 模型那么第二轮 DPO 会允许模型在第一轮 DPO 后的基础上继续漂移偏离 SFT 的距离会累积如果参考模型用上一轮 DPO 产出的模型则约束会更强模型不会连续两轮大幅偏离原始 SFT 起点。实践上我希望模型保持更大的灵活度时用前者希望模型稳定不跑飞时用后者。这两种选择没有绝对对错但选错了会直接影响训练稳定性和最终效果。类似这样的细节只有上手跑过几轮 DPO 才会真正有感知。最后一个建议别把这三者的关系简单看成替代SFT、RLHF、DPO 之间的关系不是简单的新旧替代而是各管一段的分工。SFT 负责让模型具有合格的表达能力RLHF 负责让模型在复杂的未知场景中通过探索逼近理想行为DPO 负责在无需在线反馈的场景里高效完成偏好对齐。我在实际项目中形成的一个体会是对齐不是一次性做完的工作而是一个持续迭代的过程。模型上线后会暴露新的偏好短板产品方向调整也会带来新的对齐需求。与其纠结哪一种方法最好不如把 SFT、DPO、RLHF 当成一个工具箱按阶段和数据条件灵活切换。如果你正准备给某个本地模型做一轮偏好优化我的建议很简单先把手头的偏好数据整理干净再做一轮 SFT 把基础能力夯实然后跑一版 DPO 观察风格变化。如果遇到模型变油滑了或者风格矫枉过正的情况再回头调整 β 和学习率。等你真的跑完这一轮对为什么 DPO 可以替代一部分 RLHF、又不能替代全部 RLHF的体感会比看任何文章都深刻。