跳到主要内容

对齐与推理 — RLHF、奖励模型与 DeepSeek-R1

这一章讲三件事: RLHF 的完整闭环(3H 原则、四个模型、奖励模型怎么造);推理模型的纯强化学习路线(R1-Zero 的规则奖励与顿悟时刻);以及把这一切跑起来的工程框架 verl。 前置: 上一章的 PPO 与 GRPO。本章不再推导方法,全部是「拿方法造什么」。

1. RLHF:把人类偏好装进训练循环

SFT 之后的模型会对话,但不知道「什么样的回答是人想要的」。InstructGPT 论文提出模型输出应满足 3H 原则:有用性(Helpfulness)、真实性(Honesty)、无害性(Harmless)——这些标准长在人的判断里,写不成标准答案,于是用强化学习来「让人的判断变成训练信号」1

主走查:一条回复在 RLHF 闭环里的旅程

RLHF 训练时同时跑四个模型:策略模型(正在被训练的)、奖励模型(打分裁判)、评论模型(预测未来收益,PPO 的价值网络)、参考模型(SFT 模型的冻结副本,防止策略跑飞)2。拿一个提示词「写一首关于秋天的短诗」走一轮(打分数值为演示编的):

① 环境采样:策略模型生成一条回复(自回归地写完整首诗)
② 打分:奖励模型给整条回复一个标量分,比如 0.7
(奖励模型的结构:预训练语言模型去掉最后几层,
加一个线性层,给回复最后一个词元打一个分。
回复质量越好,分越高。)
③ 优势估计:评论模型预测「这首诗写到一半时」的预期收益,
用 GAE 算出每个词元的优势——哪半句写得好、哪半句拖后腿
④ 优化调整:用 PPO 的剪切目标更新策略;
同时算当前策略与参考模型的 KL 散度,
偏离太大就罚——「可以进步,不许变成另一个模型」
⑤ 参考/奖励模型不动,回到 ①,换下一批提示词

三个角色里最值得深究的是奖励模型,逐个说。

奖励模型的数据:人类偏好从哪来

Anthropic 的 HH-RLHF 数据集给了标准做法。打标签的人和模型自由聊天,每轮看两个回答选一个。有用性数据集:正常提问,选「更有帮助」的回答;无害性数据集:故意用敌对询问诱导(书里的例子是诱导模型教你怎么抢银行),选「更有害」的回答——用坏回答当反例3

一个微妙的张力:有用性和无害性往往对立——过度追求无害,模型动辄答「我不知道」,不解决实际问题;过度追求有用,又可能产出有害内容。把两个数据集混在一起训练,模型才能既帮忙又会礼貌地拒绝4。数据发布时还有个细节:打标签的人其实表达了偏好「强度」,但发布时被抹平成二选一、权重相同——信息有损,这是数据集的已知局限。

奖励模型的训练与约束

训练目标是 pairwise 的:给同一提示的「更好回答」和「更差回答」,让奖励模型给前者的分高于后者,损失是两者分差经过 sigmoid 后的负对数5。人类偏好天然主观,数据噪声不可避免——验证集上总有一批样本分差为负,模型判反了。

光有奖励还不够,总奖励里要减一个 KL 惩罚:当前策略与 SFT 参考模型的散度越大,罚得越重。书里点明这一项有两个作用:一是充当熵奖励、鼓励探索,防止策略过早收敛到单一模式;二是确保强化学习后的输出分布不远离奖励模型训练时见过的样本——奖励模型只在它见过的分布内可信,出了分布就是瞎猜6

公开的偏好数据集按用途记四个:Summarize from Feedback(摘要,对比 17.9 万条)、WebGPT(1.9 万条)、HH-RLHF(17 万条偏好加红队对话)、SHP(38.5 万条,来自 Reddit 高赞评论——与 HH-RLHF 的机器生成对话互补)7

2. 推理模型的强化学习:DeepSeek-R1 的两条路

RLHF 调的是「态度」,另一条路调的是「智力」:用强化学习直接提升复杂推理能力。此前的各种尝试(过程奖励模型、蒙特卡洛树搜索等)都没追上 OpenAI o 系列,于是 DeepSeek 团队做了基于纯强化学习的探索——不靠人工打标签,靠答案对错本身当奖励8

R1-Zero:基座模型(只做过预训练的那一版)直接上 RL

三个设计决定9:

  1. 方法用 GRPO(上一章讲过):组内互相比,不要评论模型——大规模 RL 省一半显存;
  2. 奖励全用规则,不用神经奖励模型:数学题要求按指定格式输出最终答案,程序一验便知;编程题交给编译器跑测试用例。书里特意解释了为什么不用「再训一个打分模型」——神经奖励模型在大规模强化学习中可能出现奖励黑客(模型找到骗高分但不真正解题的漏洞),而且重训奖励模型又贵又复杂;
  3. 一个极简的训练模板:要求模型把思考过程放进 <think> 标签、答案放进 <answer> 标签——只约束格式,不约束内容。

主走查:一条回复在 R1-Zero 的规则奖励下

提示:「证明:√2 是无理数」

▼ 策略模型生成回复
<think> 设 √2 = p/q,两边平方……(推理过程)</think>
<answer>√2 是无理数</answer>

├─ 格式检查:有 <think></think> 吗?→ 有,格式奖励 +
└─ 准确性检查:答案可验证吗?
数学题 → 提取最终答案比对
编程题 → 丢进编译器跑测试
「证明题」这类难自动验证的 → 规则奖励覆盖不到

│ 拿到奖励,GRPO 组内归一化,更新策略

图说:奖励的每一项都是程序可判定的,没有人类打分环节。
这条走查的分支逻辑来自书里;具体回复内容是我们构造的示例。

结果出乎所有人意料。AIME 2024 基准上,R1-Zero 的 pass@1 从初始 15.6% 涨到 71.0%,配合多数投票到 86.7%,超过 OpenAI o1-091210。更有意思的是训练过程的自我进化:没人调过参数,模型的思考时间和回答长度自己越变越长,自发出现反思先前步骤、换方法重试等复杂行为;中间版本还出现了著名的「顿悟时刻」(aha moment)——模型在解题中途突然重新评估自己的初始思路11

代价是输出可读性差、中英文混杂——模型自己长出来的思考,人看着费劲12

R1:冷启动修补可读性

正式版 R1 在四步里修补13:

  1. 冷启动:收集少量高质量长思维链(一步步想完再答的完整过程)数据,先微调一遍基座,给 RL 一个「会好好说话」的起点;

  2. 面向推理的 RL:同 R1-Zero,外加一项语言一致性奖励(按思维链里目标语言词元的占比给分)——书里坦白这项奖励略降成绩,但为了可读性值得;

  3. 拒绝采样造 SFT 数据:RL 收敛后的存档点成批生成推理数据(过滤掉语言混杂、难读的思维链),连同非推理数据共约 80 万条,回炉微调;

  4. 全场景 RL:再次强化学习,推理数据用规则奖励,通用数据用奖励模型,兼顾有用性和无害性。

另外一条对产业影响巨大的支线:蒸馏。把 R1 产出的 80 万条数据直接拿去微调 Qwen、Llama 的小模型(只做 SFT、不做 RL),小模型就获得了像样的推理能力——R1-Distill-Qwen-7B 在 AIME 2024 上超过了部分强大基线14。R1 本体的成绩:AIME 79.8%,MATH-500 97.3%,Codeforces 2029 Elo 超过 96.3% 的人类参赛者15

Kimi k1.5:工程侧的补充

Kimi k1.5 走同一路线,值得记的是三件工程事:RL 的上下文窗口扩到 128k(上下文越长,能解的题越难),用「部分回放」复用旧轨迹省算力;Long2short 系列方法把长思维链模型的能力迁移到短思维链模型(模型合并、最短拒绝采样、DPO、长度惩罚),短模式 AIME 从基线提升高达 550%;训练与推理用 Kubernetes Sidecar(共享显卡容器的部署方式)交替使用显卡,两边切换不到一分钟16

3. verl:把 RLHF 跑起来的框架

方法再好,工程跑不起来等于零。字节跳动与港大开源的 verl(HybridFlow)解决的核心矛盾是:RL 训练的控制流(「先做什么后做什么」的那套流程)灵活多变(每个新论文都在改法子),而底层的分布式计算要求高效复用。

它的答案是混合编程模型——控制流交给单控制器(全局视角,新的训练流程几天就能实现),计算流交给多控制器(各模型的高效训练/推理引擎原样复用),再把加速卡划成灵活调配的公共池、用 3D-HybridEngine 做零冗余的参数重组17

效果:16 台 A100 上对比主流框架,训练吞吐(单位时间产出)量提升 1.5 到 20 倍18

4. 作者的判断与证据

  • 有证据的: R1-Zero 与 R1 的全部成绩数字、蒸馏实验、Kimi k1.5 的基准分数,书里都引自对应技术报告;奖励模型损失、KL 惩罚的公式有文献编号。
  • 作者的判断: 把 RLHF 归到「价值对齐」、把 R1 路线归到「能力进化」,这个二分框架是作者的整理;两条线实际互相渗透(R1 的第四步「全场景 RL」就是在做对齐)。
  • 书里的坦白: 奖励模型的泛化边界是公开难题——如果要求奖励模型对所有输出都判断准确,难度等价于文本生成本身(第 01 章已引用过);本章的 KL 惩罚是绕开而非解决这个难题的手段。

5. 边界与局限

  • 全章的推理基准集中在数学与代码——这些恰好是「答案可自动验证」的领域;规则奖励路线在开放式任务(写作、咨询)上没有同等的验证手段,书里未讨论这个适用边界(我们按书内材料归纳)。
  • R1 蒸馏只证明了「SFT 能迁移推理行为」,没有回答「小模型自己做 RL 能不能长出同样的能力」——书里明确把这个问题留给了研究社区14
  • 奖励模型的人工对比成本数字(百万量级)出自第 01 章 Karpathy 报告的转述,不是精确统计。
  • verl 一节的性能数字(1.5-20 倍)来自框架论文的自报对比,口径以原文为准。

6. 可带走的

  1. RLHF 的四模型分工:策略(学生)、奖励(裁判)、评论(陪练)、参考(出厂设置照片)——判别一个 RLHF 系统先问这四者分别是什么;
  2. 偏好数据怎么标:正常任务选更有用的,敌对诱导选更有害的;两者对立,必须混着训;
  3. KL 惩罚是缰绳:防跑飞、防出奖励模型的可信分布——它管理的其实是「奖励模型只在见过的分布内可信」这个根本限制;
  4. R1-Zero 证明推理能力可以纯 RL 长出来:规则奖励 + 格式奖励 + GRPO,全程无人打标签;
  5. 不用神经奖励模型防奖励黑客:能程序化验证的任务(数学、代码)是纯 RL 的主场;
  6. 「顿悟时刻」是涌现现象的直接证据:反思和换方法不是教出来的,是 RL 自己长出来的;
  7. 可读性是要单独付费的:语言一致性奖励略降成绩,冷启动数据换格式——能力与可读是两个优化目标;
  8. 蒸馏让小模型搭上便车:80 万条 R1 数据直接 SFT,7B 模型获得推理能力——这是开源生态里最廉价的能力扩散通道。

7. 原文地图

主题原书章原文位置
3H 原则6 强化学习text/06-ch06.txt:1128(搜「3H 原则」)
RLHF 两步与四模型6 强化学习text/06-ch06.txt:1130(搜「奖励模型训练和近端策略优化」) · text/06-ch06.txt:870(搜「策略模型」)
HH-RLHF 敌对诱导6 强化学习text/06-ch06.txt:1176(搜「抢银行」)
有用与无害对立6 强化学习text/06-ch06.txt:1178(搜「对立」)
数据收集平台与二选一6 强化学习text/06-ch06.txt:1205(搜「偏好强度」)
奖励模型结构与标量分6 强化学习text/06-ch06.txt:1240(搜「标量奖励」)
pairwise 损失6 强化学习text/06-ch06.txt:1242(搜「首选样本」)
模仿学习项6 强化学习text/06-ch06.txt:1251(搜「模仿学习」)
KL 惩罚两个作用6 强化学习text/06-ch06.txt:1270(搜「熵奖励」)
开源偏好数据集6 强化学习text/06-ch06.txt:1276(搜「Summarize from Feedback」) · text/06-ch06.txt:1292(搜「SHP」)
纯强化学习探索6 强化学习text/06-ch06.txt:928(搜「纯强化学习」)
规则奖励与奖励黑客6 强化学习text/06-ch06.txt:937(搜「准确性奖励」) · text/06-ch06.txt:942(搜「奖励黑客」)
训练模板6 强化学习text/06-ch06.txt:944(搜「训练模板」)
AIME 15.6→71.06 强化学习text/06-ch06.txt:950(搜「15.6%」)
自我进化与顿悟6 强化学习text/06-ch06.txt:954(搜「自我进化」) · text/06-ch06.txt:958(搜「aha」)
可读性问题6 强化学习text/06-ch06.txt:964(搜「可读性差」)
R1 四步6 强化学习text/06-ch06.txt:970(搜「冷启动」) · text/06-ch06.txt:983(搜「拒绝采样」)
蒸馏6 强化学习text/06-ch06.txt:1000(搜「蒸馏」)
R1 成绩6 强化学习text/06-ch06.txt:1015(搜「79.8%」)
Kimi k1.5 工程6 强化学习text/06-ch06.txt:1063(搜「部分回放」) · text/06-ch06.txt:1103(搜「Sidecar」) · text/06-ch06.txt:1109(搜「77.5」)
verl 混合编程6 强化学习text/06-ch06.txt:1301(搜「HybridFlow」)
吞吐量 1.5-20 倍6 强化学习text/06-ch06.txt:1315(搜「1.5-20 倍」)

Footnotes

  1. 出处:「6 强化学习」第 1128 段(text/06-ch06.txt:1128,搜「3H 原则」)。

  2. 出处:「6 强化学习」第 870 段(text/06-ch06.txt:870,搜「策略模型」)。走查中的打分数值为演示编造。

  3. 出处:「6 强化学习」第 1176 段(text/06-ch06.txt:1176,搜「抢银行」)。

  4. 出处:「6 强化学习」第 1178 段(text/06-ch06.txt:1178,搜「对立」)。

  5. 出处:「6 强化学习」第 1242 段(text/06-ch06.txt:1242,搜「首选样本」),即原书式 (6.35)。

  6. 出处:「6 强化学习」第 1270 段(text/06-ch06.txt:1270,搜「熵奖励」),即原书式 (6.37) 的说明段。

  7. 出处:「6 强化学习」第 1276 段(text/06-ch06.txt:1276,搜「Summarize from Feedback」)与第 1292 段(text/06-ch06.txt:1292,搜「SHP」)。

  8. 出处:「6 强化学习」第 928 段(text/06-ch06.txt:928,搜「纯强化学习」)。

  9. 出处:「6 强化学习」第 932 段(text/06-ch06.txt:932,搜「GRPO」)、第 942 段(text/06-ch06.txt:942,搜「奖励黑客」)与第 944 段(text/06-ch06.txt:944,搜「训练模板」)。

  10. 出处:「6 强化学习」第 950 段(text/06-ch06.txt:950,搜「15.6%」)。

  11. 出处:「6 强化学习」第 954 段(text/06-ch06.txt:954,搜「自我进化」)与第 958 段(text/06-ch06.txt:958,搜「aha」)。

  12. 出处:「6 强化学习」第 964 段(text/06-ch06.txt:964,搜「可读性差」)。

  13. 出处:「6 强化学习」第 970 段(text/06-ch06.txt:970,搜「冷启动」)、第 979 段(text/06-ch06.txt:979,搜「语言一致性奖励」)与第 983 段(text/06-ch06.txt:983,搜「拒绝采样」)。

  14. 出处:「6 强化学习」第 1000 段(text/06-ch06.txt:1000,搜「蒸馏」)。 2

  15. 出处:「6 强化学习」第 1015 段(text/06-ch06.txt:1015,搜「79.8%」)。

  16. 出处:「6 强化学习」第 1063 段(text/06-ch06.txt:1063,搜「部分回放」)、第 1103 段(text/06-ch06.txt:1103,搜「Sidecar」)与第 1109 段(text/06-ch06.txt:1109,搜「77.5」)。

  17. 出处:「6 强化学习」第 1301 段(text/06-ch06.txt:1301,搜「HybridFlow」)。

  18. 出处:「6 强化学习」第 1315 段(text/06-ch06.txt:1315,搜「1.5-20 倍」)。