热闻岛
返回全网热点

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样

3小时前9 阅读
图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图
面试官问:“SFT 之后还要训练什么?”只回答“RLHF”并不完整。更重要的是讲清楚三件事:谁来判断回答好不好、这个判断怎样变成训练信号、模型最后怎样被更新。 可以把大模型想成一名刚读完很多书的新人。预训练让它见多识广,SFT 教它按照指令
图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

面试官问:“SFT 之后还要训练什么?”只回答“RLHF”并不完整。更重要的是讲清楚三件事:谁来判断回答好不好、这个判断怎样变成训练信号、模型最后怎样被更新。

可以把大模型想成一名刚读完很多书的新人。预训练让它见多识广,SFT 教它按照指令答题,但它还不一定知道哪种答案更受欢迎,也不一定能稳定处理安全边界、事实不确定和复杂要求。Post-Training 做的,就是继续纠正和塑造它的回答习惯。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

先记住一句话:Post-Training 不是一种算法,而是一套组合方法

面对一堆缩写,不用先背公式。只要顺着下面三个问题看,就不会混乱。

谁来打分:是人类、另一个更强的 AI,还是程序规则?

训练数据怎么来:直接写标准答案、比较一好一坏两个答案,还是一次生成很多答案再挑好的?

模型怎么学:继续像做练习册一样模仿好答案,还是边生成、边拿奖励、边更新?

所以,这些名词并不在同一层。RLAIF 主要回答“谁来反馈”;DPO、PPO、GRPO 主要回答“模型怎么更新”;拒绝采样主要回答“怎样从很多候选中挑出好数据”。真实训练流程通常会把它们组合起来。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

一、SFT 之后,模型究竟还差什么?

从广义上说,预训练之后的训练都可以叫 Post-Training,SFT 也包括在内。不过在面试和工程讨论里,大家常把重点放在“SFT 之后还要做什么”,因此本文主要讲偏好学习、强化学习和数据迭代。

SFT 的做法很像老师给学生看标准答案:模型看到“问题—答案”样本后,学习怎样组织语言、遵守格式和完成任务。它擅长模仿,却不会自动总结出一套稳定的“好答案排序规则”。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

同一个问题往往不止一种正确答案。有的简洁,有的更完整;有的会诚实说明不确定,有的语气很肯定却夹着错误;还有些答案虽然看似有用,却越过了安全边界。SFT 数据没有明确展示这些差别时,模型很难自己学会取舍。

用一句话区分:SFT 教模型“答案应该长什么样”,后续的偏好训练和强化学习再教它“多个答案里应该优先选哪一个”。

二、RLHF:最经典,也最重的一条路线

RLHF 的中文意思是“基于人类反馈的强化学习”。经典流程可以理解成三步:先用 SFT 打好基础;再让人类比较多个回答,训练一个会打分的奖励模型;最后用 PPO 让大模型逐渐生成更高分的回答。

1. 奖励模型:把“我更喜欢这个回答”变成分数

训练奖励模型时,人类通常不必纠结“这个回答到底是 82 分还是 85 分”。更简单的方式是:同一道题给出两个或多个回答,只判断哪个更好。奖励模型据此学习,让好回答的分数高于差回答。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

最直观的目标:好回答的奖励分数 > 差回答的奖励分数

不过,奖励模型不是裁判真理,它只是学会了模仿标注偏好。假如标注数据总是偏爱长答案,它可能把“字多”误认为“质量高”;假如某类危险问题几乎没出现过,它也可能判断失误。

2. PPO 阶段为什么看起来像同时养了四个模型?

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

Policy 模型:真正要训练的模型,负责生成回答。

Reference 模型:冻结不动的旧版本,用来提醒新模型“别改得太过头”。

Reward Model:像评委一样,给完整回答打分。

Value Model:像赛前估分器,帮助判断这次结果比预期好还是差。

PPO 不是让模型只顾着刷高分。它还会比较新模型与参考模型的差距:奖励提高是好事,但回答风格和语言能力不能突然跑偏。KL 约束就是这根“安全绳”。拉得太松,模型可能钻奖励漏洞;拉得太紧,模型又几乎学不到新东西。

优化直觉:最终得分 = 回答奖励 − 偏离原模型的惩罚

RLHF 的优势在于“边练边探索”。模型会用当前能力不断生成新答案,再根据奖励更新,因此可能找到训练数据里没有直接出现过的更好策略。缺点也很明显:要生成大量样本,还要同时维护多个模型,显存、速度、调参和系统复杂度都更高。

3. RLHF 常见问题:分数变高,不代表回答真的变好

奖励投机:模型抓住评分器的漏洞,分数上涨,真实体验反而下降。

越来越啰嗦:评审器如果偏爱长答案,模型可能把简单问题也写成小论文。

越训越跑偏:模型离原来的回答分布太远后,奖励模型面对陌生输出,评分会变得不可靠。

安全与有用打架:限制太严会动不动拒答,限制太松又可能提供危险内容。

因此,训练曲线上的 reward 上升只能说明“更会讨好评分器”。真正上线前,还要检查任务是否完成、事实是否可靠、回答是否安全、格式是否正确,以及真实用户是否更满意。

三、DPO:把偏好对齐变回监督学习

DPO 的中文意思是“直接偏好优化”。它把原本较复杂的 RLHF 目标,变成一种更像普通监督学习的训练方式:不用单独训练奖励模型,也不用在训练中反复在线采样和跑 PPO。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

每条 DPO 数据都很直观:一个问题、一条更好的回答和一条较差的回答。训练目标不是机械背诵好回答,而是让模型以后遇到相似问题时,更倾向于生成好回答,同时降低差回答的概率。

# 一条标准的 DPO 偏好数据
sample = {
"prompt": "为什么 MySQL 联合索引有时不会被使用?",
"chosen": "先看最左前缀、范围条件、函数操作和统计信息……",
"rejected": "因为优化器觉得全表扫描更快。"
}

L_DPO = −E[ log σ( β · ((log πθ(y⁺|x) − log πref(y⁺|x)) − (log πθ(y⁻|x) − log πref(y⁻|x))) ) ]

β 可以理解成“不要偏离旧模型太远”的力度。β 越大,约束通常越强,模型改动得更谨慎;β 太小则可能学得更激进。它没有一个适合所有任务的固定答案,需要结合偏好胜率、KL、长度和能力回归一起调。

用 Hugging Face TRL 跑一个最小 DPO 示例

下面代码使用真正的文本代码块,可以直接复制。示例只展示基本结构,实际训练时还要根据显存、模型大小、样本长度和数据格式调整参数。

from datasets import Dataset
from trl import DPOConfig, DPOTrainer

train_dataset = Dataset.from_list([
{
"prompt": [{"role": "user", "content": "解释缓存击穿。"}],
"chosen": [{"role": "assistant", "content": "热点 Key 失效时……"}],
"rejected": [{"role": "assistant", "content": "缓存坏了就叫击穿。"}],
}
])

args = DPOConfig(
output_dir="./outputs/dpo-demo",
learning_rate=5e-7,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
beta=0.1,
max_length=2048,
logging_steps=5,
report_to="none",
)

trainer = DPOTrainer(
model="Qwen/Qwen3-0.6B",
args=args,
train_dataset=train_dataset,
)
trainer.train()
图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

DPO 很省事,但不能把它理解成 PPO 的万能替代品

它主要从已有偏好数据里学习。数据没有覆盖到的新策略,DPO 通常不会主动探索出来。

“chosen 比 rejected 好”只代表相对更好,不代表 chosen 本身就完全正确。好样本质量不高,模型上限也会被压住。

偏好对太简单,模型学不到明显差别;偏好对太模糊,标注员都意见不一,训练信号又会很乱。

评估时不要只盯 loss。还要看模型选中好回答的比例、好坏回答的分数差、与参考模型的距离、回答长度,以及独立测试集上的真实效果。

四、GRPO:砍掉 Value Model,用组内相对奖励估计优势

GRPO 的中文意思是“组相对策略优化”。它可以看作 PPO 的一种改造:仍然让模型在线生成答案、根据奖励更新,但不再单独训练 Value Model,而是让同一道题的多个候选互相比较。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

具体做法是:同一个问题一次生成 G 个回答,每个回答都得到一个奖励分数,然后看它在这一组里高于还是低于平均水平。

优势值直觉:某个回答的分数 − 同组平均分,再除以同组分数波动

可以把它想成同一道题让 8 名学生同时作答。高于本组平均水平的答案得到正向鼓励,低于平均水平的答案被压低。这样便不必再养一个专门的 Value Model。数学、代码、SQL、工具调用等任务有明确对错时,还可以直接用单元测试、执行结果或规则来打分。

最小 GRPO 示例:让程序直接检查答案是否正确

import re
from datasets import Dataset
from trl import GRPOConfig, GRPOTrainer

train_dataset = Dataset.from_list([
{
"prompt": [{"role": "user", "content": "计算 17 × 23,只输出整数。"}],
"answer": "391",
}
])

def accuracy_reward(completions, answer, **kwargs):
rewards = []
for completion, target in zip(completions, answer):
text = completion["content"] if isinstance(completion, list) else completion
numbers = re.findall(r"-?\d+", text)
rewards.append(1.0 if numbers and numbers[-1] == target else 0.0)
return rewards

args = GRPOConfig(
output_dir="./outputs/grpo-demo",
learning_rate=1e-6,
per_device_train_batch_size=8,
num_generations=8,
max_completion_length=128,
logging_steps=1,
report_to="none",
)

trainer = GRPOTrainer(
model="Qwen/Qwen3-0.6B",
args=args,
reward_funcs=accuracy_reward,
train_dataset=train_dataset,
)
trainer.train()

现在的 TRL GRPOTrainer 可以接收一个或多个奖励函数,也可以使用模型评审。num_generations 表示每道题一次生成多少个候选;设置时要同时考虑有效批次大小和显存,不能只照搬示例参数。

GRPO 最常见的四个坑

一组答案全对或全错:大家分数都一样,几乎没有“谁更好”的比较信号。题目难度需要有梯度。

奖励规则有漏洞:例如只检查最后一个数字,模型可能前面胡说一通,最后碰巧写对。奖励规则必须同时检查正确性、格式和必要约束。

推理越来越长:长答案有时更容易撞到正确结果,也可能只是浪费 token。要同时统计正确率、长度和效率。

生成速度成为瓶颈:在线强化学习要为每个问题生成多条答案,真正耗时的往往不是反向传播,而是大量生成和验证。

五、拒绝采样:不做 RL,也能让模型一轮比一轮好

拒绝采样微调可以理解成“海选”。模型先对同一个问题生成很多候选,再由规则、人类、AI 评审器或奖励模型挑出最好的,把入选答案重新放进 SFT 数据里继续训练。整个过程没有策略梯度,核心就是“生成—筛选—再模仿”。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

它的优点是稳定、直观、容易排查问题。训练人员能直接看到哪些文本被选中,也不用同时维护价值模型和复杂的在线强化学习流程。因此,它经常被用来先把模型推到一个更好的起点,再接 DPO、PPO 或 GRPO。

它的限制也很直接:模型必须先“有能力生成好答案”,筛选器才能选出来;如果候选里一个好答案都没有,再强的评委也无能为力。筛选规则有偏差时,错误还会被当成新教材反复强化。

六、RLAIF:AI 可以当标注员,但仍然需要人类校准

RLAIF 的意思是“由 AI 提供反馈的强化学习”。这里真正变化的是评委:原来由人类比较回答,现在先让更强的模型完成大批量初审。AI 评审结果可以用来训练奖励模型、制作 DPO 偏好对,也可以在在线强化学习中直接提供分数。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

Constitutional AI 和 RLAIF 经常一起出现,但并不是同一个概念。Constitutional AI 会先写出一组明确的原则,让模型按原则自我批评、自我修改;RLAIF 则是一个更宽的说法,只要反馈主要由 AI 产生,都可以归到这条路线。

研究表明,在部分摘要和对话任务上,RLAIF 可以接近 RLHF 的效果。但这不等于“以后不用人工”。教师模型同样可能偏爱长答案、受位置影响或判断错误,而且一旦错了,可能一次性污染大量训练数据。

更稳妥的做法是:AI 负责大批量初审,人类用一小批高质量样本做校准,高风险和有争议的样本继续人工复核。

七、五类常见路线到底怎么选?

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

算力有限、手里已经有质量不错的偏好对,通常可以先从 DPO 开始;任务有明确可验证结果,而且希望模型自己探索新的推理方法,可以考虑 GRPO 或其他基于可验证奖励的强化学习;希望先建立稳定基线,可以先做拒绝采样再 SFT;完整的 PPO/RLHF 更适合奖励体系、评测系统和算力调度都比较成熟的团队。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

还有一个比算法名字更重要的问题:答案能不能可靠打分。新闻写作、客服语气、创意内容和安全边界很难写成一条死规则,通常需要人类或强模型评审;数学结果、单元测试、SQL 执行和工具调用成功率则更适合程序直接验证。奖励信号不可靠,再先进的算法也会把模型带偏。

八、两个公开训练案例:真正的方案往往是组合拳

案例一:Llama 2-Chat

Llama 2-Chat 的公开路线不是只用一种方法。它先做 SFT,再通过拒绝采样不断挑出高质量回答,后期又叠加 PPO 做强化学习。因此,把它简单说成“一个 DPO 模型”并不准确。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

案例二:DeepSeek-R1

DeepSeek-R1 更能说明多阶段组合的价值:先用少量冷启动数据把回答格式和可读性扶正,再进行推理强化学习;接着从大量生成结果里筛出高质量推理过程,和通用数据一起做 SFT;最后再做覆盖推理、帮助性和安全性的强化学习。

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

公开论文描述的拒绝采样阶段收集了约 60 万条推理样本和约 20 万条非推理样本,合计约 80 万条,再用于后续 SFT。这个流程很好理解:在线强化学习负责“探索新解法”,拒绝采样负责“挑出好解法”,SFT 负责“把好解法稳定学进去”。

九、落地关键:算法只占一半,数据与评测同样重要

图解大模型 Post-Training:从 SFT 到 RLHF、DPO、GRPO 与拒绝采样配图

1. 先把数据分成四个池,避免混在一起

SFT 数据:像教材答案,必须正确、清楚,并覆盖主要场景。

偏好数据:同一个问题配好回答和差回答,最好同时记录为什么更好、标注员有多确定。

Prompt-only 数据:只提供问题,让 PPO、GRPO 或拒绝采样流程自己生成候选。

冻结评测集:只用于考试,永远不能偷偷回流到训练集,否则模型只是背题。

2. 奖励不要只压成一个总分

可以把奖励拆成任务正确性、格式遵循、事实可靠性、安全性、简洁度和工具调用成功率。每个维度都保留原始分数,出了问题才知道到底是哪一项把模型带偏。多个奖励合并时还要统一量纲,防止“最容易刷的分数”盖过真正重要的目标。

3. 评测不能只看一个 Benchmark 平均分

能力回归:知识、推理、代码、工具调用和多轮对话有没有退步。

偏好胜率:和旧模型匿名对比,避免评审器只因为答案更长或排在前面就判它更好。

安全评测:越狱、隐私、诈骗、危险操作,以及是不是出现了过度拒答。

稳定性:同一问题多次生成是否忽好忽坏,格式失败率和长上下文表现怎样。

线上指标:用户是否频繁重试、是否更常转人工、任务是否真正完成、投诉有没有增加。

4. 每一轮训练都必须能解释,也必须能回滚

保存数据版本、奖励规则、初始模型、训练参数、随机种子、评测结果和代表性样本。上线时先做小流量灰度,一旦发现安全回退、格式异常或用户体验变差,就能快速切回旧版本。

所以,可靠的 Post-Training 不是“一次训练出一个更强模型”,而是一条持续循环的生产线:收集问题、生成数据、校准评分、训练模型、做离线测试、小流量上线,再把新出现的难题收回来。

十、面试时可以这样用大白话回答

SFT 让基础模型学会按指令回答,但它还不一定知道多个正确答案里哪个更好,也不一定有稳定的安全边界。所以,SFT 之后还会继续做偏好学习、奖励建模、强化学习和高质量数据迭代。

经典 RLHF 是先让人类比较答案,再训练奖励模型,最后用 PPO 优化大模型,并用参考模型限制它不要跑偏;DPO 直接使用“好回答—差回答”数据训练,省掉显式奖励模型和在线 PPO;GRPO 让同一道题的多个回答在组内比较,省掉 Value Model,特别适合数学、代码等容易验证对错的任务;拒绝采样是从很多候选里挑好答案,再拿去做 SFT;RLAIF 则是让 AI 参与打分,它可以和前面几种训练方法组合。

真实项目通常不会只选一种方法。Llama 2-Chat 把 SFT、拒绝采样和 PPO 串在一起;DeepSeek-R1 则组合了冷启动 SFT、推理强化学习、拒绝采样、再 SFT 和后续强化学习。最后怎么选,取决于任务能否可靠打分、偏好数据好不好、算力够不够,以及团队有没有成熟的评测和上线机制。

要点速读

面试官问:“SFT 之后还要训练什么?”只回答“RLHF”并不完整。更重要的是讲清楚三件事:谁来判断回答好不好、这个判断

  • 面试官问:“SFT 之后还要训练什么
  • ”只回答“RLHF”并不完整
  • 更重要的是讲清楚三件事:谁来判断回答好不好、这个判断