这篇学完你能回答什么
- SFT、RLHF、DPO 分别在做什么?能不能用一条主线把后训练串起来,而不是背三个缩写?
- DPO 为什么能绕开奖励模型?它相比 RLHF/PPO 省了什么、赔上了什么?
- GRPO 是什么?为什么推理模型的训练里到处是它?它自己有什么已知毛病?
从一个真实故障讲起
一个内部写作助手的团队收到反馈:模型回答太啰嗦。他们做了一件在 2026 年门槛很低的事——收集了 6000 组偏好对(同一个问题下两个候选答案,标注员选出更好的那个),跑了一轮 DPO(Direct Preference Optimization,直接偏好优化,一种不需要训练奖励模型的偏好对齐方法)。
上线后指标很好看:平均回答长度从 480 字降到 210 字,"回答冗长"的负反馈掉了七成。团队开香槟。
两周后,另一类投诉起来了:"问复杂问题它就敷衍。"
具体表现是,用户问"帮我对比一下这三个方案的风险",模型给一段两行的泛泛结论就收尾了;追问细节,它还是短。而同样的问题喂给微调前的版本,答案虽然啰嗦,但三个方案是逐条比过的。
复盘的时候他们抽查了标注数据,发现一件事:在那 6000 组偏好对里,标注员选中的答案平均比落选答案短 40%。标注指引写的是"选更好的那个",但标注员在没有明确判准时,系统性地倾向于选更简洁的。
模型学到的不是"更好",是"更短"。
这个故障不是 DPO 的 bug,它是后训练这件事的本质暴露:后训练是把某个信号压进权重。你压进去的是你实际标注的那个东西,不是你心里想要的那个东西。 而这一整条主线上的每一步——SFT、RLHF、DPO、GRPO——区别只在于你能拿到什么形态的信号,以及这个信号有多容易被钻空子。
「回答太啰嗦」的反馈
收 6000 组偏好对,跑一轮 DPO
标注指引只写「选更好的」断点
没给判准,全靠标注员当场感觉
chosen 平均短 40%
系统性偏置被原样压进权重
上线指标很好看
480 字降到 210 字,负反馈掉七成
两周后另一类投诉
问复杂问题它就敷衍,追问还是短
核心概念:先打比方,再给定义
把训练一个模型类比成培养一个新人。
预训练(pre-training):这个人把公司的所有文档、所有代码、所有邮件都读完了。他知道的东西极多,但你问他问题,他会接着你的话往下写,而不是回答你——因为他学的是"下一个词是什么",不是"该怎么应答"。
监督微调(SFT,Supervised Fine-Tuning):你给他看几万份"问题—标准答案"的范文,让他照着写。他很快学会了"这类问题该长成什么样"。SFT 学的是形式。
但范文教不了一件事:两个都合规、都像模像样的答案,哪个更好?你写不出标准答案,因为"更好"本身没有唯一形式。这时候你能给的只有比较——把两份答案摆在一起,说这份比那份好。
偏好对齐(RLHF / DPO):靠成对比较来教。学的是偏好。
再往上还有一层。有些任务的对错是能用程序判定的:这段代码跑不跑得过测试?这道数学题答案对不对?这个 JSON 抽取的字段和标注是否一致?这时候你不需要人来比较,你有一个客观判分器,而且可以判无数次。
可验证奖励强化学习(RLVR,Reinforcement Learning with Verifiable Rewards):靠自动判分器来教,主流算法是 GRPO。学的是能力。
于是整条主线可以压成一句话:
形式 → 偏好 → 能力,对应「给标准答案 → 给两两比较 → 给可判定的对错」三种监督信号。你手上能拿到哪种信号,决定了你的后训练能走到哪一档。
这句话是本章后面所有选型判断的地基,也是面试里最容易一句话拉开差距的地方。
照着写,很快学会这类问题该长成什么样
两份都合规、都像模像样时,他说不出哪份更好
继续做下一个 token 预测
训练数据换成(指令,回答)对,掩掉 prompt 部分,只在回答上算交叉熵
说这份比那份好,靠成对比较来教
教得出取向,教不出他原本就不会的那件事
在成对比较上做优化
同一件事的两种工程实现;天花板是标注员的判断力,偏置照单全收
原理拆解
(x, y*),掩掉 prompt 的 loss,只在回答上算交叉熵 —— 学的是形式成本:标注一份好答案很贵|上限:只知道「这样对」,永远不知道「那样错」;只给正例,压不住你不想要的行为(x, y_win, y_lose),走 RM + PPO 或直接偏好损失 —— 学的是偏好成本:比较比写答案便宜,但标注偏置会被原样学走|上限:天花板是标注员的判断力,不会凭空长出新本事(x, verify(y) → 0/1),组内相对优势,主流是 GRPO —— 学的是能力成本:判分器本身要写,采样极贵|上限:判分器判不了的东西,一律学不到;硬凑「大模型当判分器」通常更脆| 变体 | 修的是什么 |
|---|---|
| Dr. GRPO | 优势归一化里的长度偏置 |
| DAPO | 动态采样过滤掉零方差组 + 解耦 clip 上下界,训练更稳(报告 Qwen2.5-32B 在 AIME 2024 达到 50) |
| GSPO / DHPO | token 级更新与序列级奖励的错配 |
| ARPO | 多轮 agentic 场景下的信用分配 |
| VPO | test-time 采样多样性(best@k 场景) |
DPO 凭什么绕开奖励模型:「最大化奖励 + KL 惩罚」的最优策略与奖励函数存在闭式对应,于是奖励能用策略本身表达出来、代入 Bradley-Terry 消掉。显存里只剩 π_θ 和 π_ref;RLHF 那边要同时住四个:策略、参考、RM、critic。
GRPO 把 critic 换成同学的平均分:同题采 G = 8 ~ 16 份,用组内均值标准化当基线,省下一个和策略同规模的网络。代价是采样贵、零方差塌缩(整组全对或全错,优势全为 0)、长度偏置。
三种信号的形态
监督信号的三种形态 ┌────────────────────────────────────────────────────────────────┐ │ 形态 1 给标准答案 → SFT 学「形式」 │ │ 数据: (x, y*) 掩掉 prompt 的交叉熵 │ │ 成本: 标注一份好答案很贵 │ │ 上限: 只知道「这样对」,永远不知道「那样错」 │ ├────────────────────────────────────────────────────────────────┤ │ 形态 2 给两两比较 → RLHF / DPO 学「偏好」 │ │ 数据: (x, y_win, y_lose) RM+PPO 或 直接偏好损失 │ │ 成本: 比较比写答案便宜,但标注偏置会被原样学走 │ │ 上限: 天花板是标注员的判断力 │ ├────────────────────────────────────────────────────────────────┤ │ 形态 3 给可判定的对错 → RLVR(GRPO 系) 学「能力」 │ │ 数据: (x, verify(y) → 0/1) 组内相对优势 │ │ 成本: 判分器本身要写;采样极贵 │ │ 上限: 判分器判不了的东西,一律学不到 │ └────────────────────────────────────────────────────────────────┘
第一档:SFT 在做什么
SFT 就是继续做下一个 token 预测,只不过训练数据换成了(指令,回答)对,并且把 prompt 部分的 loss 掩掉——只在回答部分计算交叉熵。模型因此学会:看到这种输入,就产出这种形态的输出。
SFT 有个根本局限值得记牢:它只提供正例。 每一条样本都在说"这样答是对的",从来没有一条在说"那样答是错的"。所以 SFT 能把格式、语气、领域行话教得很好,却很难压住一个你不想要的行为——你没法用"给更多正例"的方式告诉模型"别这么干"。
这就是为什么需要第二档。
第二档 A:RLHF 的四步和四个模型
RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)的经典链路:
① SFT 得到初始策略 π_sft
② 收集偏好对,训练奖励模型 RM:
loss = -log σ( RM(x, y_win) - RM(x, y_lose) ) ← Bradley-Terry
③ PPO 优化策略,最大化 RM 打分,同时用 KL 拴住不许跑太远:
objective = E[ RM(x, y) ] - β · KL( π_θ ‖ π_ref )
④ 训练时显存里同时住着四个模型:
π_θ (策略) │ π_ref (冻结参考) │ RM (奖励) │ V (critic 价值网络)这里两个概念要给人话解释:
- KL 惩罚(Kullback-Leibler divergence,衡量两个概率分布差多远):拴狗绳。不加它,策略会为了骗高分把语言模型的基本能力搞坏。
- critic / 价值网络:PPO 需要知道"这个状态下平均能拿多少分"来做基线,否则每次更新方差极大。这个基线由一个和策略同规模的网络估计——这也是 PPO 最贵的地方。
三段式评价 RLHF:
- 解决什么:能用"比较"这种廉价信号做优化;在线采样,策略更新后重新采样,没有分布偏移问题。
- 代价是什么:四个模型的显存与调度,工程复杂度是所有方法里最高的;奖励模型本身会被奖励攻击(reward hacking,模型找到让 RM 给高分但人类并不满意的捷径,比如疯狂加免责声明、疯狂列小标题)。
- 什么时候不该用:你没有专职训练团队、也没有稳定的偏好数据流水线时。截至 2026-08,在推理类任务上它基本已被 GRPO 系取代;它还活着的地方主要是有稠密奖励模型、且需要在线纠偏的通用对齐。
第二档 B:DPO 凭什么绕开奖励模型
DPO 的核心是一个数学观察:RLHF 那个"最大化奖励 + KL 惩罚"的目标,其最优策略与奖励函数之间存在闭式对应关系。既然如此,就可以把奖励函数用策略本身表达出来、代入 Bradley-Terry 损失里消掉,得到一个直接在偏好对上算的普通损失函数。
# π_θ = 待训模型;π_ref = 冻结的 SFT 模型;β 控制离参考模型能跑多远
def dpo_loss(x, y_win, y_lose, beta):
# 每一项是「当前模型相对参考模型,对这个回答的偏好增量」
delta_w = logprob(pi_theta, x, y_win) - logprob(pi_ref, x, y_win)
delta_l = logprob(pi_theta, x, y_lose) - logprob(pi_ref, x, y_lose)
return -log_sigmoid(beta * (delta_w - delta_l))一句人话:让"模型相对参考模型更偏爱 win 而非 lose"这件事的对数几率变大。 训练形态和 SFT 几乎一样——一个 loss、一个反向传播,显存里只需要 policy 和 ref 两个模型。
三段式评价 DPO:
- 解决什么:把 RLHF 的工程复杂度砍掉一个数量级。不训 RM、不做在线采样、不要 critic。截至 2026-08,它是离线偏好优化的默认基线。
- 代价是什么:三条。第一,离线——偏好数据是固定的,不随策略更新重新采样,训到后期会有分布偏移(模型已经不产出那些样本了,还在用它们学)。第二,对偏好数据质量极度敏感,标注里的任何系统性偏置会被原样学进权重(开头那个故障就是这么来的)。第三,一个已知的实现级现象:DPO 常常在拉开 win/lose 差距的同时把两者的似然一起压低,表现为模型整体变得"不敢说话"、更容易拒答。
- 什么时候不该用:偏好数据是众包来的、没做过一致性检查时;以及你真正想要的是能力提升而不是风格取舍时——DPO 帮不了你把一道原本做不出来的题做出来。
第三档:GRPO 把 critic 换成了同学的平均分
GRPO(Group Relative Policy Optimization,组相对策略优化)的想法一句话说得清:PPO 需要一个 critic 网络来告诉它"这题平均能拿多少分",那我们干脆对同一道题多采几份答案,用这几份的平均分当基线。
for x in prompts:
ys = sample(pi_theta, x, n=G) # 同题采 G 份,典型 G = 8 ~ 16
rs = [verify(y) for y in ys] # 可验证奖励:跑测试 / 对答案 / 比字段
A = (rs - mean(rs)) / (std(rs) + eps) # 组内标准化,就是「优势」
update(pi_theta, clipped_ratio * A - beta * KL(pi_theta, pi_ref))于是 critic 网络没了——省下一个和策略同规模的模型。这就是 GRPO 在推理模型训练里迅速铺开的直接原因:同等效果下算力更省,而推理训练本来就极贵。
它和 RLVR 是天生一对:GRPO 需要 reward 被便宜地算很多次(每个 prompt 至少 G 次),而可验证奖励恰好是"跑一下就知道"的、几乎免费的。
三段式评价 GRPO:
- 解决什么:在有自动判分器的任务上,用比 PPO 低得多的成本拿到真实的能力增量。
- 代价是什么:采样成本高(每题生成 G 份,训练时间的大头在生成而非反向传播);零方差塌缩(一组答案全对或全错时,标准化后优势全是 0,这一组白跑);长度偏置(归一化方式会让长/短回答被系统性偏爱)。
- 什么时候不该用:你的任务写不出自动判分器时。硬凑一个"用大模型当判分器"的方案,本质上是把 reward hacking 的靶子从人换成了另一个模型,通常更脆。
这里是本章最好的进阶加分点:截至 2026-08,GRPO 已经被修补了一整代变体,每个变体对应上面一个毛病——
| 变体 | 修的是什么 |
|---|---|
| Dr. GRPO | 优势归一化里的长度偏置 |
| DAPO | 动态采样过滤掉零方差组 + 解耦 clip 上下界,训练更稳(报告 Qwen2.5-32B 在 AIME 2024 达到 50) |
| GSPO / DHPO | token 级更新与序列级奖励的错配 |
| ARPO | 多轮 agentic 场景下的信用分配 |
| VPO | test-time 采样多样性(best@k 场景) |
工程实践(截至 2026-08)
选型速查
| 你手上有 | 该走哪档 | 典型成本量级 |
|---|---|---|
| 几百到几千条(指令,好答案) | SFT(多半是 LoRA SFT) | 单卡到几卡,小时级 |
| 几千组人工比较过的偏好对 | DPO | 比 SFT 贵一档,形态相同 |
| 稳定的偏好数据流水线 + 训练团队 | RLHF / PPO | 四模型,工程最重 |
| 能写出自动判分器的任务 | GRPO 系(RLVR) | 采样为主,最贵 |
| 都没有 | 别微调,回去做 prompt 和评测集 | —— |
厂商侧现状(易变,务必现场核对)
- OpenAI:SFT 与 DPO 支持 gpt-4.1 / mini / nano(2025-04-14 版);强化微调 RFT 仅支持 o4-mini(2025-04-16 版)。更关键的是,OpenAI 已在官方弃用页宣布收缩自助微调:2026-05-07 起新组织不能创建微调任务,2026-07-02 起 60 天无推理的组织被关闭,2027-01-06 起存量客户也不能再创建新任务(已训好的模型可继续推理,直到基座下线)。
- Google:Vertex AI 的 SFT 仍在,但 Gemini 3.x 系尚未开放 SFT,而 2.5 Pro 已于 2026-06-17 下线。
- Anthropic:只有 Amazon Bedrock 上的 Claude 3 Haiku 微调这一条路径。
- 开源权重 + 国内云平台(百炼 / 方舟 / PAI 等):后训练全链路健在,是国内团队的实际主战场。
避坑清单
- 偏好数据先做一次"长度体检"。把 chosen 和 rejected 的平均长度、平均小标题数打出来。如果两组有系统性差异,你训出来的是那个差异,不是"好"。这是开头故障的直接补丁。
- DPO 的 β 不是可有可无的旋钮。β 太小 = 放任模型跑离参考模型,容易崩;太大 = 几乎没变化。先用默认值跑通,再在验证集上扫。
- SFT 之后一定要留一份 checkpoint 当参考模型。DPO 和 PPO 都要拿它当 π_ref,也是你回滚的锚点。
- 不要指望偏好对齐提升能力。DPO/RLHF 是在模型已有的输出分布里重新分配概率质量,不会凭空长出新本事。想提升能力,要么换基座,要么走 RLVR。
- GRPO 先看零方差比例。开训后统计"整组全对/全错"的 prompt 占比,超过一半说明题目难度和当前模型能力不匹配,这时候该换数据集而不是调超参。
| 你手上有 | 该走哪档 | 典型成本量级 |
|---|---|---|
| 几百到几千条(指令,好答案)起步这一档 | SFT(多半是 LoRA SFT) | 单卡到几卡,小时级 |
| 几千组人工比较过的偏好对 | DPO | 比 SFT 贵一档,训练形态相同 |
| 稳定的偏好数据流水线 + 训练团队 | RLHF / PPO | 四个模型,工程最重 |
| 能写出自动判分器的任务 | GRPO 系(RLVR) | 采样为主,最贵 |
| 都没有 | 别微调,回去做 prompt 和评测集 | —— |
- OpenAI 在收缩
- SFT/DPO 支持 gpt-4.1 系,RFT 仅 o4-mini;2027-01-06 起存量客户也不能再建新任务
- 另外三家
- Gemini 3.x 尚未开放 SFT、2.5 Pro 于 2026-06-17 下线;Anthropic 仅 Bedrock 的 Claude 3 Haiku
- 偏好数据先做长度体检
- 把 chosen 与 rejected 的平均长度、小标题数打出来;有系统性差异,训出来的就是那个差异
β不是可有可无的旋钮- 太小 = 放任跑离
π_ref容易崩,太大 = 几乎没变化;先跑默认再在验证集上扫 - SFT 后留一份 checkpoint
- DPO 和 PPO 都要拿它当
π_ref,它也是你唯一的回滚锚点 - GRPO 先看零方差比例
- 整组全对/全错的 prompt 超过一半,说明题目难度不匹配,该换数据集而不是调超参
面试视角
- 别按缩写平铺改用能拿到什么信号串一条线
- 三档各给一句标准答案→形式,两两比较→偏好,可判定对错→能力
- 落回自己的项目「我们属于第 X 档,因为……」
- 主动否掉那条错答案偏好对齐不长能力,只重排概率质量
- 「DPO 就是简化版的 RLHF,效果差不多」—— 三个缩写背一遍,没有线
- 「GRPO 就是去掉了 critic」—— 说不出去掉之后赔了什么
- 「我们做了 DPO,效果提升明显」—— 没体检过偏好数据就敢下结论
- 「RLHF 就是用人类反馈训练」—— 答不出显存里住着几个模型
- 「我们想用 DPO 提升推理能力」—— 2026 年的高频错误答案
- DPO 是离线的,训到后期有分布偏移,还容易把两侧似然一起压低
- 去掉 critic 换来采样贵、零方差塌缩、长度偏置,所以才有 Dr. GRPO 和 DAPO
- 上线前先体检偏好数据的长度分布 —— 标注员会系统性偏好短答案
- 说得出 RLHF 训练时显存里同住策略、参考、奖励、价值四个模型
- 偏好对齐只重新分配已有分布的概率质量;要提能力得有可验证奖励
面试官怎么问
一面二面通常从 Q4-01"SFT、RLHF、DPO 分别在做什么"进,这是送分题但也是筛人题——绝大多数人会把三个缩写背一遍,很少有人能给出一条主线。算法背景的面试官会顺势追到 Q4-02(DPO 凭什么绕开 RM),再往上是 Q4-03(GRPO)。
答题结构建议
不要按"SFT 是……RLHF 是……DPO 是……"平铺。用监督信号串:
"我一般按能拿到什么信号来分。给得出标准答案就 SFT,学的是形式;给不出标准答案但能两两比较,就走偏好对齐,RLHF 和 DPO 是同一件事的两种工程实现,学的是偏好;如果对错能用程序判,就能上 RLVR,主流是 GRPO 系,这一档学的才是能力。我们的项目属于第 X 档,因为……"
这个结构的好处是,它自带一个"我判断过我属于哪一档"的信号,面试官会立刻往你的项目上追。
分水岭信号
| 只读过 | 真做过 |
|---|---|
| "DPO 就是简化版的 RLHF,效果差不多" | "DPO 是离线的,训到后期有分布偏移;而且它容易把 chosen 和 rejected 的似然一起压低,模型会变得不敢说话" |
| "GRPO 就是去掉了 critic" | "去掉 critic 的代价是采样变贵,而且会遇到零方差塌缩和长度偏置,所以后面才有 Dr. GRPO 和 DAPO" |
| "我们做了 DPO,效果提升明显" | "我们上线前先体检了偏好数据的长度分布,因为标注员会系统性偏好短答案" |
| "RLHF 就是用人类反馈训练" | "RLHF 训练时显存里要同时放策略、参考、奖励、价值四个模型,这是它工程上最难的地方" |
| "我们想通过 DPO 提升模型的推理能力" | "偏好对齐不长能力,只重新分配已有分布的概率质量;要提能力得有可验证奖励" |
最后一行是本篇最锋利的一条。"用偏好对齐提能力"是 2026 年一个高频的错误答案,能主动否掉它的候选人,基本可以判定真跑过训练。
小结与延伸
- 后训练不是三个并列的缩写,是一条按监督信号形态排列的阶梯:给标准答案(SFT,学形式)→ 给两两比较(RLHF/DPO,学偏好)→ 给可判定的对错(RLVR/GRPO,学能力)。
- SFT 只给正例,所以压不住不想要的行为;这是偏好阶段存在的理由。
- DPO 用一个闭式推导把奖励模型消掉,换来工程上的巨大简化,代价是离线、对数据偏置极敏感、易压低整体似然。
- GRPO 用组内平均分替代 critic,是推理模型训练的当前中心;它的三个已知毛病(采样贵、零方差塌缩、长度偏置)各自催生了一代变体。
- 本篇最该记住的一句:后训练把你实际标注的那个东西压进权重,而不是你心里想要的那个东西。
延伸:下一篇 T4-2 讲这条主线在工程上真正落地的形态——参数高效微调(LoRA / QLoRA),以及那个几乎每场算法工程面都会问的显存估算。选型判断(什么时候根本不该走这条线)在 T4-3。
继续深入
本篇归属第 4 章「微调与对齐」,去做这一章的题。