DeepSeek R1 论文解读:从 Reward 设计到 AlphaGo 的启示
等待许久,DeepSeek R1 的论文终于发布。第一时间拜读后,整篇论文的实验设计和理论架构给我一种简洁而优雅的感觉,这与 DeepSeek-V3 那篇论文的风格截然不同。在阅读过程中,我不禁想起了曾经研究过的 AlphaGo 系列算法。以下是我对这篇论文的一些浅显看法和技术分析。
Reward 设计:规则驱动的奖励模型
读完这篇论文,R1 的 Reward 模型设计给我留下了深刻印象:它采用了基于规则的奖励模型(Rule-based Reward Model)。
为何放弃 PRM?
R1 在文中明确解释了未使用过程奖励模型(Process Reward Model, PRM)的原因:
- 细粒度界定困难:在一般推理任务中,明确界定每一个细粒度的推理步骤非常困难。推理过程往往是跳跃性的,难以像数学证明那样严格分步验证。
- 中间步骤判断难:判断当前推理中间步骤是否正确极具挑战性。使用模型进行自动标注效果差强人意,而手动标注则不利于数据规模的扩大。
- 奖励劫持风险:引入基于模型的 PRM 不可避免地会带来奖励劫持(Reward Hacking)问题。动态重训奖励模型的资源开销巨大,且容易引发模型利用漏洞刷高分的行为。
我非常认同这一观点。从事大语言模型(LLM)之初,我首先负责的是预训练工作,因此一个方法能否 Scaling Up 成为了评估其最终能否上线的重要维度。事实证明,可规模化的方法通常更稳健。虽然目前有许多通过 Monte Carlo (MC) 构造数据训练 PRM 的方法试图解决规模化问题,但近期 Qwen 数学推理的论文也指出,MC 方法容易产生幻觉,不如 LLM as Judge,更不如人类标注。R1 索性不用 PRM,甚至为了避免 Reward Hacking,直接抛弃了基于模型的输出奖励模型(ORM),这体现了极大的技术魄力。尽管许多研究表明稠密 Reward 优于稀疏 Reward,但在可控性和安全性面前,稀疏的规则 Reward 往往更可靠。
模型训练策略:多阶段演进
对于模型主体的训练,R1 采用了一个清晰的多阶段策略:
第一阶段:R1 Zero
首先利用 Base 模型 + 特定 Prompt + Rule-based Reward,跳过监督微调(SFT)直接上 GRPO(Group Relative Policy Optimization)强化学习。目标是让 Reward 提升,即提升做题准确率。在这个过程中,模型的输出长度不断变长,开始学会自我反思,但这个阶段的推理过程往往难以理解,被称为 R1 Zero。
第二阶段:拒绝采样与 SFT
第二步利用 R1 Zero 生成的数据进行拒绝采样(Rejection Sampling, RS),筛选出推理过程正常、逻辑清晰的样本。再混合一些非推理数据,对 Base 模型进行 SFT,最后再次上强化学习,得到最终的 R1 版本。
技术细节分析
- Base 模型直接 RL:直接在 Base 模型上进行强化学习并不意外。现在的趋势是将 SFT 数据加入 Pretrain 阶段。例如 Qwen 系列的 Pretrain 模型,调整 Prompt 后基本的指令遵循能力已经具备。模型越贴近 Pretrain 分布,幻觉越少,这一点支持了这种做法。
- 自然涌现的反思:看到模型自然产生反思也不意外。在我进行的 RLHF 实验中,只要模型输出能够变长,经常能看到自然的反思出现。不过早期的反思大多最终导向错误结果。我猜测是因为如果模型有输出变长的趋势,在输出完答案后,自然会利用剩余的'额度'去检查答案对不对。但这背后的根本问题是:为什么强化学习能在采样过程中采出这种 Response?以及为什么模型学会了这种类型而没有学别的?探索稳定训练的症结所在,正是当前研究的重点。
- GRPO 中的 KL Loss:关于 GRPO 使用的 KL Loss,它与 PPO 不同,不是加在 Reward 里乘在概率上,而是单独减去这个 KL Loss。并且这个 KL Loss 使用了近似估计,而不是直接用蒙特卡洛估计。
KL Loss 的方差问题
在做 RLHF、蒸馏、自约束等需要 KL Loss 的方法时,我发现当使用乘性 KL 时(将 KL 蕴含在 Reward 分数里,乘在动作的对数概率上),可以采用蒙特卡洛估计的 KL,允许 KL 估计值为负:
Loss = -E[log_prob * (Reward - KL)]
但是当最终 Loss 使用加性 KL 时:
Loss = E[-log_prob * Reward] + KL(P || Q)
一旦不是计算全词表 KL,而是采样计算 KL,基本都需要确保 KL 非负来降低方差,不能再使用蒙特卡洛估计。可以使用 GRPO 中的 K3 估计器,甚至直接上个绝对值或者平方都比蒙特卡洛估计要好。这是因为采样带来的噪声在加法项中会直接叠加到 Loss 上,导致梯度不稳定;而在乘法项中,KL 作为 Reward 的一部分,其波动会被 Reward 的尺度影响,相对容忍度更高。
为什么想起了 AlphaGo
其实我不是在读到 R1 后面说从 AlphaGo 汲取灵感,使用 MCTS 但是失败了这里想到的 AlphaGo。我是看到 R1 Zero 到 R1 这里想起 AlphaGo 到 AlphaZero。这正好是一个相反的过程。
AlphaGo 用模仿学习 + 强化学习训出了一个极强的 AI,然后抛弃人类,直接自我博弈产生了 AlphaZero。我记得之前听一些下围棋的同学说过,他们看 AlphaZero 的开局看不懂,不建议跟 AlphaZero 学围棋。
DeepSeek 使用 Zero 进行冷启,但是 Zero 的思考过程难以理解,所以从 Zero 生成的数据中拒绝采样,留下一部分规整的数据 SFT+RL 产出正式版 R1。
所以我这里擅自猜测,DeepSeek 会不会是先用 SFT+RL 训了一版,然后再训出的 Zero,发现 Zero 效果喜人才拿来做 RS 训出正式的 R1。另一种可能是,Zero 代表了纯粹的探索能力,而 R1 代表了经过人类偏好对齐后的收敛能力。
另一个点是 GRPO、RLOO 这种采样多次作为 baseline 的做法,相比于贪婪采样和一次采样 + value function,更像 AlphaGo 的 MCTS(蒙特卡洛树搜索)。不过可惜的是 DeepSeek 的探索失败了,MCTS 在连续文本空间中的计算成本过高,无法像棋盘状态那样高效剪枝。
结论与展望
读完论文,其实我唯一的疑惑就是:不在 600B 这么大规格的模型上,而是在 100B 甚至更小的模型上,能否走通这个路线。小参数模型是否具备足够的容量来承载复杂的推理链和反思机制?
不过不管怎么说,R1 这篇论文都是对我的极大鼓舞,起码后面多了一个比较明确的尝试方向。未来我们可以关注以下几点:
- 小模型推理能力:验证规则 Reward 在小模型上的有效性。
- KL Loss 优化:进一步研究采样 KL 的无偏估计方法。
- 混合训练策略:探索更多类似 Zero->R1 的冷启动方案。
这篇论文不仅展示了 DeepSeek 的技术实力,也为整个社区提供了宝贵的工程实践参考。希望后续能有更多关于具体实现细节的开源代码或技术报告,帮助开发者更好地复现和优化相关模型。