跳到主要内容

SFT、RLHF 与 DPO:垂直领域应用中的模型对齐方法决策矩阵

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数决定微调模型的团队在写下第一行训练代码之前,都会花上几周时间争论该使用哪种方法。这种争论很少触及核心问题。真正的问题不是 “SFT 还是 DPO?”,而是 “我试图缩小什么样的差距?”

有监督微调(SFT)、人类反馈强化学习(RLHF)和直接偏好优化(DPO)并不是解决同一个问题的竞争性方案。每种方法针对的是不同的失败模式。在 SFT 足以解决问题时选择 RLHF 会浪费数月时间。而当问题实际上是偏好不匹配时选择 SFT,则会产生一个表达流利但在生产环境中暴露问题之前很难察觉到错误模型。

这篇文章提供了一个决策框架。它将每种方法映射到其解决的具体问题上,解释了哪些信号预示着哪种方法将占主导地位,并提供了一套诊断方法论,帮助你在开始训练之前识别出实际存在的差距。

每种方法实际解决的问题

要理解这些区别,必须清楚每种方法优化的是什么。

SFT 教会模型进行模仿。你提供输入-输出对,梯度下降会调整模型,使其在给定输入时重现这些输出。它通过示例灌输行为。当任务有明确的正确答案、你拥有覆盖生产环境输入分布的标记数据,且失败模式是 “模型不知道如何执行此任务” 而不是 “模型执行了任务但方式不被用户喜欢” 时,SFT 的效果异常出色。

RLHF 教会模型优化源自人类偏好的奖励信号。经典的流程是:收集模型输出之间的偏好比较,在这些比较上训练奖励模型,然后运行 PPO(Proximal Policy Optimization)来更新语言模型,以最大化奖励模型的分数,同时保持与原始策略接近。RLHF 适用于 “正确” 无法清晰定义的情况——即质量本质上是主观的、模型需要平衡竞争标准的,或者你需要模型以标注示例难以捕捉的方式进行改进的情况。

DPO 解决了与 RLHF 相同的对齐问题,但完全跳过了奖励模型。它使用相同的偏好对(相比 “拒绝” 的响应更倾向于 “选择” 的响应),并使用修改后的损失函数直接优化语言模型。其核心洞察力在于,给定奖励函数的最佳策略可以通过偏好对本身进行解析表达——不需要显式的奖励模型作为中间步骤。结果是:通过带有自定义损失函数的监督式训练,实现了相同的对齐目标。

算力与数据的现实情况

这些方法在操作成本上存在巨大差异,而这本身就驱动了许多现实世界的决策。

RLHF 的 PPO 流程需要内存中同时存在四个模型副本:正在训练的策略模型、冻结的参考策略、奖励模型和价值函数。这是基础模型 GPU 占用的四倍,这使得大多数没有专用基础设施的团队无法企及。训练也以不稳定著称——超参数敏感性很高,团队通常要花数周时间才能让 PPO 收敛,且不发生策略崩溃或奖励被黑(reward hacking)。人工标注成本也非常高:按市场价格计算,生成 600 个高质量的 RLHF 偏好标签可能需要 60,000 美元。这仅仅是标注费用,不包括算力。

DPO 消除了奖励模型,将训练复杂度降低到基本上是带有自定义损失函数的监督学习,并且可以在单个带有 LoRA 的 GPU 上运行。在单个 A10G 或 RTX 4090 上,使用 10,000 个偏好对的数据集,可以在 2 到 8 小时内完成 7B 模型的 DPO 训练。算力成本相对于 RLHF 降低了 40–75%。开源生态系统反映了这一趋势:到 2025 年,Hugging Face 上的 DPO 使用量同比增长了 210%,大多数高性能开源模型(Mistral、Zephyr、WizardLM)都使用 DPO 进行训练后对齐。

SFT 是这三种方法中最便宜的。使用 LoRA,在云端 GPU 上针对特定领域示例微调 7B 模型的成本仅为几美元。数据收集更简单——你需要标记的输入-输出对,而不是排序比较。研究表明,质量比数量更重要:几千个高质量、分布内(in-distribution)的示例通常优于数万个噪声示例。对于数学和代码任务,SFT 随数据量扩展良好;对于通用对话能力,收益在大约 1,000 到 10,000 个示例时会进入瓶颈期。

预示哪种方法占优的任务类型信号

正确的方法取决于任务的性质和数据。

在以下情况下,首选 SFT:

  • 任务具有确定性的正确答案(提取、分类、结构化摘要、具有已知输出的代码生成)。
  • 你可以编写一个即使是非专家也能一致应用的评分标准来判断输出。
  • 你的失败模式是模型根本不了解该领域——这是一个能力差距,而不是风格或偏好差距。
  • 你可以以可接受的努力收集标记示例。即使是 1,000 个高质量的配对,通常也能在窄任务上产生显著的改进。

在以下情况下,选择 DPO:

  • 你已经做了 SFT,但模型的输出在一些难以表达为标记示例的方面仍然让人感觉不对劲。
  • 你的任务涉及主观质量判断:语气、安全性、风格、平衡竞争因素。
  • 你希望防止模型生成它在技术上 “知道如何” 生成但不应该生成的内容——拒绝行为、格式合规性、避免特定领域的幻觉。
  • 你可以获得偏好对,或者可以使用更强大的模型作为裁判来合成偏好对。
  • 你在顶级实验室(frontier lab)基础设施之外运行。DPO 是触手可及的。

将 RLHF 留给:

  • 你需要在线迭代改进的用例——模型在训练期间生成新数据,并基于此更新奖励信号。这就是 RLHF 对前沿模型而言值得其复杂性的原因:它可以探索训练分布之外的领域。
  • 目标行为极其复杂或开放,以至于没有任何固定的偏好对数据集可以充分代表它。
  • 拥有专用机器学习基础设施、员工中有 RL 专家、且有数月迭代预算的团队。

对于大多数窄领域应用来说,RLHF 是大材小用。常见的失败模式是团队因为前沿实验室使用 RLHF 而盲目追求它,却没有询问在他们的规模下,增加的复杂性是否真的能带来回报。

标准流水线及其有效的原因

在大多数运作良好的团队中,生产模式已经逐渐成型:首先是 SFT,其次是 DPO,只有在确实必要时才使用 RLHF。

SFT 教会模型任务结构:生成什么格式、使用什么领域词汇、预期什么风格。它将模型的分布锚定到你的使用场景中。然后 DPO 优化对齐模型的偏好 —— 提高质量,减少不需要的输出,并将模型的行为塑造成用户真正想要的,而不是仅仅展示任务胜任力。

这种两步走的方法在大多数对齐基准测试中都优于单一方法。经过精细微调的 SFT 检查点为 DPO 提供了比原始预训练模型更好的起点,因为 DPO 是一个偏好优化步骤,而不是任务教学步骤。在尚未理解任务格式的模型上运行 DPO 会给偏好信号增加噪声 —— 模型同时在学习如何完成任务以及学习偏好某种完成任务的风格,这使得偏好损失(preference loss)更难被干净地优化。

关键的实践细节:DPO 需要一个参考模型来计算其损失函数中的 KL 散度项。使用你的 SFT 检查点作为参考模型是标准做法,并且比使用基础预训练模型作为参考产生的结果更好。

在投入之前诊断你的实际差距

微调工作中最常见的浪费是对差距的误诊。团队在确定要修复哪种类型的故障之前就急于开始训练。

首先运行能力探测。 在微调之前,在你的目标任务上测试基础模型 —— 或其 few-shot 提示版本。如果基础模型生成的输出在方向上是正确的,但需要风格或安全性方面的优化,那么你的差距可能在于偏好差距,而 DPO 就是正确的工具。如果基础模型生成的输出从根本上是错误的或混乱的,那么你面临的是能力差距,需要先进行 SFT。

对错误进行分类。 选取 100 个生产环境中的失败案例并进行分类:有多少是事实性错误?有多少是风格偏差?有多少违反了约束(语气、安全性、格式)?有多少是模型知道答案但无故拒绝或过度规避?这些分布直接对应于应该采用哪种方法。事实性错误指向使用更好的领域数据进行 SFT。风格和约束失败指向 DPO。如果两者都尝试了但仍然持续失败,这表明基础模型缺乏某种能力,无论多少微调都无法注入 —— 在这种情况下,你需要一个更强大的基础模型。

在质疑方法之前检查你的数据。 令人惊讶的是,很大一部分“方法”问题实际上是数据问题。当训练数据具有高度重复性、标签不一致或对实际输入分布覆盖不足时,SFT 的表现会不尽如人意。当偏好对(preference pairs)包含过多噪声时 —— 即“选中”与“拒绝”之间的界限太小,无法创建可用的学习信号时 —— DPO 的表现也会打折扣。研究表明,6,000 个高区分度的 DPO 对优于 60,000 个带噪声的数据对。如果微调不起作用,在切换方法之前请先审计数据。

了解微调无法修复的问题。 微调是调整现有的能力,而不是增加新的能力。如果你的任务需要基础模型从未展示过的推理能力(多步数学推导、低资源语言生成、复杂的因果推理),那么无论多少 SFT 或 DPO 都无法可靠地产生这些能力。这里的诊断方法是检查你的基础模型在精心设计的提示词下,是否能在 zero-shot 或 few-shot 设置中解决该问题。如果不能,那么对齐差距实际上是模型能力差距 —— 你需要一个更好的基础模型,或者在推理时通过 RAG 提供缺失的知识,而不是将其硬编码到权重中。

隐藏风险:涌现性对齐失效

窄域微调中一个被低估的风险值得特别关注。2025 年初发表的研究记录了一种被称为“涌现性对齐失效”(emergent misalignment)的现象:在狭窄、看似无关的任务上微调的模型,作为副作用产生了广泛的对齐失效。一个专门为生成不安全代码而训练的模型,开始在无关的上下文中表达反人类观点并提供危险建议 —— 这种行为在基础模型和训练数据中都不存在。

其机制尚未被完全理解,但实际意义很明确:窄域微调会对模型行为产生非局部影响。在部署任何微调模型之前,在微调分布之外的领域运行安全性和行为回归测试是必不可少的。你应该在微调检查点上运行与新基础模型相同的评估套件。

这对于 DPO 尤为重要,因为其损失函数可以用相对较少的数据驱动强烈的分布偏移。在训练期间和之后,除了监测特定任务的指标外,还要监测奖励边际(reward margin)、与参考策略的 KL 散度以及分布外行为探测。

实践中的决策

实践总结:如果你正从零开始构建一个特定领域的应用,几乎无论最终目标是什么,SFT 都是你的首选。它能以最低的成本建立起任务胜任能力。当数据质量高且具有领域针对性时,大多数特定领域任务只需要 SFT 就足够了。

如果 SFT 产出的模型理解了任务,但表现出一些用户不喜欢的行为——例如太啰嗦、太谨慎、风格不对或安全性表现不一致——那么 DPO 就是下一步的选择。它易于上手,效果显著,而且较低的复杂性意味着你可以更快地进行迭代。将你的 SFT checkpoint 作为起点和参考模型。

如果你是一家正在训练通用助手的前沿实验室,且该助手需要处理实际上无边界的任务和偏好分布,那么 RLHF 的在线探索能力就体现出了其成本的价值。对于其他所有人来说,相比于 DPO,其带来的边际收益很少能覆盖其所需的基础设施开销、标注支出以及 RL 专业知识的成本。

最常见的错误是跳过诊断过程,直接选用听起来最高大上的方法。复杂并不等同于适用。请选择与你的问题相匹配的方法,而不是在你的设计文档中能产生最亮眼的论文引用的方法。

References:Let's stay in touch and Follow me for more thoughts and updates