DeepSeek-R1 剖析:无需强化学习先验知识,理解 PPO 和 GRPO

社区文章 发布于 2025 年 2 月 7 日

1. 引言

在强化学习(RL)中,仅仅知道“你得了多少分”通常是不够的。**单纯追求高分**可能导致各种副作用,例如过度探索、模型不稳定,甚至出现偏离合理策略的“捷径”行为。为了应对这些挑战,RL 引入了几种机制,例如评论员(价值函数)、Clip 操作、参考模型以及最新的组相对策略优化(GRPO)。

为了使这些概念更直观,让我们打个比方:**将 RL 训练过程想象成小学考试场景。**我们(正在训练的模型)就像是努力考高分的学生,批改试卷的老师就像奖励模型,而根据我们的分数给零花钱的父母则类似于评论员。接下来,让我们一步步探讨为什么**仅仅最终分数**是不够的,评论员、Clip 和参考模型如何发挥作用,最后 GRPO 如何扩展这些思想。


2. 仅仅使用奖励的天真方法:有什么问题?

假设我和弟弟在同一个小学班级。老师批改我们的试卷,给出“绝对分数”。我通常考 100 分以上,而我弟弟通常在 30 分左右。然后我们直接拿着这些分数去找爸爸要零花钱——这意味着我们的“奖励”(用 RL 术语来说)就是我们的原始考试分数。谁分数高,谁就得到更多的零花钱。

乍一看,这似乎没什么问题。但很快就出现了两个大问题:

  • **不公平性**:如果我弟弟通过努力学习从 30 分提高到 60 分,他仍然无法与我通常的 80 多分相比。他得不到应有的鼓励。
  • **不稳定性**:我自己追求更高的分数可能会导致我采取极端的学习方法(例如,通宵突击,熬夜)。有时我可能考 95 分,有时只考 60 分,所以我的分数——以及奖励信号——波动剧烈。

结果是,**使用绝对分数作为奖励**会导致奖励波动大,我弟弟最终觉得小幅进步不值得尝试。

数学对应关系

在强化学习中,如果我们只做

Jnaive(θ)=E(q,o)(data,πθ)[r(o)], \mathcal{J}_{\text{naive}}(\theta) = \mathbb{E}_{(q, o) \sim (\text{data}, \pi_{\theta})}\big[r(o)\big],

这意味着“只优化最终奖励”,我们可能会遇到高方差和对部分改进激励不足的问题。换句话说,Actor 缺乏一个与自身当前水平相匹配的**基线**,这会阻碍训练效率。


3. 引入评论员:使用“预测分数线”来改进奖励

认识到这个问题后,爸爸意识到**“这不仅仅是关于绝对分数,而是关于你相对于自己当前水平的进步程度。”**

所以他决定:

  • 将我的“预测分数线”设为 80 分,我弟弟的设为 40 分。如果我们在考试中超过这些分数线,我们就会得到更多的零花钱;如果没有,我们就会得到很少或没有。

因此,如果我弟弟努力学习并从 30 分提高到 60 分,他比他的“预测分数线”高出 20 分,这意味着丰厚的奖励。同时,如果我保持在 80 分左右,增量收益会更小,所以我获得的奖励不一定会比他多多少。这种安排**鼓励每个人**从自己的基线出发进行改进,而不是纯粹比较绝对分数。

当然,爸爸很忙,所以一旦设定好分数线,它就不会一直保持不变——他需要随着我们的进步不断**“重新调整”**。如果我弟弟的水平提高到 60 分左右,那么 40 分的基线就不再公平了。同样,如果我一直徘徊在 85 分左右,爸爸可能也需要调整我的分数线。换句话说,**爸爸也必须学习**,特别是关于我和弟弟进步的速度。

数学对应关系

在强化学习中,这种“分数线”被称为**价值函数**,Vψ(s)V_{\psi}(s)。它作为一个基线。我们的训练目标从“仅仅奖励”演变为“我们比基线超出多少”,用优势表示为

At=rtVψ(st). A_t = r_t - V_{\psi}(s_t).

对于给定的状态 sts_t 和动作 oto_t,如果实际奖励超过评论员的预期,则表示该动作表现优于预测。如果低于预期,则该动作表现不佳。最简单的表述是,我们优化的是

Jadv(θ)=E[A(o)],where A(o)=r(o)Vψ(o). \mathcal{J}_{\text{adv}}(\theta) = \mathbb{E}\big[A(o)\big], \quad \text{where } A(o) = r(o) - V_{\psi}(o).

通过减去这个“分数线”,我们减少了训练中的方差,对超出预期的动作给予更高的梯度信号,并惩罚那些表现不佳的动作。

4. 添加 Clip 和 Min 操作:防止过度更新

即使有了“分数线”,也可能出现新问题。例如:

  • 如果我突然在一场考试中**突破**,考到 95 或 100 分,爸爸可能会给我一个巨大的奖励,促使我在下一次考试前采取过于激进的学习模式。我的成绩可能会在极端之间波动(95 分和 60 分),导致奖励波动巨大。

因此,爸爸决定限制我每一步学习策略的更新幅度——他不会因为我一次考得好就给我**指数级**的更多零花钱。如果给太多,我可能会走向极端探索;如果给太少,我就没有动力。所以他必须找到一个平衡点。

数学对应关系

在**PPO (Proximal Policy Optimization)** 中,这种平衡通过“Clip”机制实现。PPO 目标的核心包括:

min(rt(θ)At, clip(rt(θ,1ε,1+ε)At), \min \Big(r_t(\theta) A_t,\ \text{clip}\big(r_t(\theta), 1 - \varepsilon,\, 1 + \varepsilon\big)\,A_t\Big),

其中

rt(θ)=πθ(otst)πθold(otst), r_t(\theta) = \frac{\pi_{\theta}(o_t\mid s_t)}{\pi_{\theta_{\text{old}}}(o_t\mid s_t)},

代表新旧策略在该动作上的概率比。如果该比率偏离 1 太远,它就会被截断在 [1ε, 1+ε]\bigl[\,1-\varepsilon,\ 1+\varepsilon\bigr] 范围内,这**限制了**策略在一次更新中能改变多少。

简单来说:

  • 考 100 分会让我获得额外的奖励,但爸爸设定了一个“上限”,以免我得意忘形。他会在下一次考试中重新评估,保持稳定的方法,而不是助长极端的波动。

5. 参考模型:防止作弊和极端策略

即便如此,如果我只专注于高分,我可能会**采取可疑的策略**——例如,作弊或恐吓老师给我满分。显然,这违反了所有规则。在大型语言模型领域,类似的情景是生成有害或捏造的内容,以人为地提高某些奖励指标。

因此,爸爸又设定了一条规则:

  • “无论如何,你都不能偏离你最初诚实的学习方法太远。如果你的表现与你的基线相差太远,即使分数很高,我也会取消你的资格并扣留你的零花钱。”

这就像在学期开始时(即初始监督微调之后)划定了一条**“参考线”**。你不能偏离原始策略太远,否则将面临惩罚。

数学对应关系

在 PPO 中,这通过对**参考模型**(初始策略)添加 KL 惩罚来体现。具体来说,我们包含类似

βDKL(πθ πref) -\beta\, \mathbb{D}_{\mathrm{KL}}\big(\pi_{\theta}\,\|\ \pi_{\text{ref}}\big)

在损失中。这可以防止 Actor 偏离原始的、合理的策略太远,避免“作弊”或其他极端出格的行为。

6. GRPO:用“多个模拟平均值”取代价值函数

有一天,爸爸说:“我没时间一直评估你们的学习进度并划定新的分数线。为什么不先做五套模拟试卷,然后把它们的**平均分数**作为你的**预期分数**呢?如果你在真实考试中超过了这个平均分,就说明你表现超出预期,我会奖励你。否则,你就得不到多少。”我弟弟、我以及其他同学,都可以依靠一套个人模拟测试,而不是爸爸需要不断调整的外部“价值网络”。

到目前为止,我们已经看到 PPO 依赖于 Actor + Critic + Clip + KL 惩罚框架。然而,在大型语言模型 (LLM) 场景中,Critic(价值函数)**通常需要和 Actor 一样大**才能准确评估状态,这可能很昂贵,有时也不切实际——特别是当最终只有一个最终奖励时(例如最终答案质量)。

因此,**组相对策略优化 (GRPO)** 应运而生。其核心思想是:

  • **没有独立的价值网络**作为评论员,
  • 从旧策略中对相同问题或状态进行多次输出采样,
  • 将这些输出的平均奖励作为基线,,
  • 任何高于平均值的都产生“正优势”,任何低于平均值的都产生“负优势”。

同时,GRPO **保留了** PPO 的 Clip 和 KL 机制,以确保稳定、合规的更新。

数学对应关系

根据 DeepSeekMath 的技术报告,GRPO 目标(省略了一些符号)为

JGRPO(θ)=E[i=1G(min(πθ(oi)πθold(oi)Ai, clip(πθ(oi)πθold(oi),1ε,1+ε)Ai) β DKL(πθ  πref))], \begin{aligned} \mathcal{J}_{GRPO}(\theta) = \mathbb{E}\Bigg[ & \sum_{i = 1}^{G}\Bigg(\min \Bigg(\frac{\pi_{\theta}\left(o_{i}\right)}{\pi_{\theta_{\text{old}}}\left(o_{i}\right)} A_{i},\ \text{clip}\Big(\frac{\pi_{\theta}\left(o_{i}\right)}{\pi_{\theta_{\text{old}}}\left(o_{i}\right)}, 1-\varepsilon, 1+\varepsilon\Big) A_{i}\Bigg) \\ & \quad -\ \beta\ \mathbb{D}_{KL}\left(\pi_{\theta}\ \|\ \pi_{\text{ref}}\right)\Bigg) \Bigg], \end{aligned}

其中

Ai=rimean({r1,r2,,rG})std({r1,r2,,rG}) A_{i} = \frac{r_{i} - \mathrm{mean}(\{r_1, r_2, \cdots, r_G\})}{\mathrm{std}(\{r_1, r_2, \cdots, r_G\})}

通过对相同问题的多个输出来进行平均和归一化,从而计算出“相对分数”。通过这种方式,**我们不再需要专门的价值函数**,但仍然可以获得动态的“分数线”,从而简化训练并节省资源。

7. 结论:反思与展望

用小学的考试打比方,我们一步步从原始绝对分数,到PPO的完整机制(Critic、优势函数、Clip、参考模型),最后到GRPO(利用多个输出的平均分来消除价值函数)。以下是一些关键要点:

  • Critic 的作用:为每个状态提供一个“合理预期”,显著降低训练方差。
  • Clip & min 机制:限制更新幅度,防止对单一“突破性”考试反应过度。
  • 参考模型:阻止“作弊”或极端偏差,确保策略与初始状态保持合理一致。
  • GRPO 的优势:在大型语言模型中,它消除了对独立价值网络的需求,降低了内存和计算成本,同时与“比较式”奖励模型设计完美契合。

就像爸爸改用“让孩子们自己模拟多次考试,然后把他们的平均分作为基准”一样,GRPO 避免了维护一个庞大的 Critic,同时仍然提供相对奖励信号。它保留了 PPO 的稳定性和合规性特点,但简化了流程。

希望本文能帮助您自然地理解 PPO 和 GRPO。实际上,如果您对 Process Supervision 或 Iterative RL 等主题感兴趣,请关注我的博客以获取更多更新。

社区

感谢您的帖子。解释非常清晰,例子也很好 ;)

类比真的很酷!

一篇写得非常好的文章,解释清晰!

📻 🎙️ 嘿,我为这篇博客文章制作了一个播客,快来听听吧!

该播客由 ngxson/kokoro-podcast-generator 生成,使用了 DeepSeek-R1 和 Kokoro-TTS

非常有帮助,谢谢

哇,解释得太好了!谢谢您!

真的很有帮助。谢谢您!

你好。
我认为您的 PPO 描述中有一个错误,实际上,PPO 并没有明确惩罚与初始(参考)策略的 KL 散度。

注册登录 以评论