deepseek-PPO和GRPO的区别,无强化学习基础也能看懂,适合小白

1. 简介

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

为了使这些概念更加直观,我们打个比方:将强化学习的训练过程想象成小学考试场景。我们(正在训练的模型,Actor)就像努力取得高分的学生,给我们考试评分的老师就像奖励模型,而根据我们的成绩发放零花钱的父母就像评论家(Ctritic)。接下来,让我们逐步了解为什么仅有期末成绩是不够的,评论家(Ctritic)ClipReference模型如何发挥作用,以及最后 GRPO 如何扩展这些想法。

2. 仅使用奖励的简单方法,会有什么问题?

假设我和弟弟在同一个小学班。老师给我们的考试打分,并给出一个“绝对分数”。我通常能得 80 分以上(满分 100 分),而弟弟通常只能得 30 分左右。然后我们直接拿着这些分数去找爸爸要零花钱——这意味着我们的“奖励”(在现实生活中)就是我们的原始考试成绩。谁的分数更高,谁就能得到更多的零花钱。

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

  • 不公平:如果我弟弟通过努力从 30 分提高到 60 分,他仍然比不上我平时的 80 多分。他得不到应有的鼓励。
  • 不稳定性:追求更高的分数可能会导致我采取极端的学习方法(例如,整天死记硬背,熬夜)。有时我可能会得到 95 分,有时只有 60 分,所以我的分数(以及奖励信号)波动很大。

因此,使用绝对分数作为奖励会导致奖励波动很大,而我的弟弟最终觉得不值得尝试以小幅度的方式提高。

数学公式

在 RL 中,如果我们简单地这样做:
J naive  ( θ ) = E ( q , o ) ∼ (  data  , π θ ) [ r ( o ) ] , \mathcal{J}_{\text {naive }}(\theta)=\mathbb{E}_{(q, o) \sim\left(\text { data }, \pi_{\theta}\right)}[r(o)], Jnaive (θ)=E(q,o)( data ,πθ)[r(o)],

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

3. 引入评价者:使用“预测分数线”来提高奖励

意识到这个问题后,爸爸意识到“这不仅仅关乎绝对的分数,还关乎你相对于现有水平进步了多少”。

因此他决定:

  1. 将我的“预计分数线”设为 80 分,将我弟弟的“预计分数线”设为 40 分。
  2. 如果我们的考试成绩超过这些分数线,我们就可以得到更多的零花钱;如果没有,我们得到的零花钱就很少甚至一分钱都没有。

因此,如果我弟弟努力学习,成绩从 30 分跃升至 60 分,那么他就比“预计分数线”高出 20 分,这意味着他可以获得丰厚的奖励。而如果我的成绩保持在 80 分左右,那么增量收益较小,因此我获得的奖励不一定比他多。这种安排鼓励每个人从自己的基准开始进步,而不是单纯比较绝对分数。

当然,爸爸很忙,所以一旦定下标准,它就不会一成不变——他需要随着我们的进步不断“重新调整”。如果我弟弟的水平上升到 60 分,那么 40 分的底线就不再公平了。同样,如果我一直在 85 分左右徘徊,爸爸可能也需要调整我的标准。换句话说,爸爸也需要学习,特别是了解我和弟弟进步的速度。

数学对应

在 RL 中,这个“得分线”被称为价值函数, V ψ ( s t ) V_{\psi}\left(s_{t}\right) Vψ(st),它充当 baseline。我们的训练目标从“公正的奖励”演变为“我们比基线表现得好多少”,用优势来表达:

A t = r t − V ψ ( s t ) A_{t}=r_{t}-V_{\psi}\left(s_{t}\right) At=rtVψ(st)

对于给定状态 s t s_{t} st 和行动 o t o_{t} ot ,如果实际奖励超过了评价者的预期,则意味着该操作的表现优于预期。如果低于预期,则该操作表现不佳。在最简单的公式中,我们优化了类似以下内容的内容:

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

通过减去这条“分数线”,我们减少了训练中的差异,对超出预期的行为给予更高的梯度信号,对未达到预期的行为进行惩罚。

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

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

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

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

数学对应

在PPO(近端策略优化)中,这种平衡是通过“Clip”机制实现的。PPO 目标的核心包括:
min ⁡ ( r t ( θ ) A t , clip ⁡ ( r t ( θ ) , 1 − ε , 1 + ε ) A t ) \min \left(r_{t}(\theta) A_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\varepsilon, 1+\varepsilon\right) A_{t}\right) min(rt(θ)At,clip(rt(θ),1ε,1+ε)At)
其中,
r t ( θ ) = π θ ( o t ∣ s t ) π θ old  ( o t ∣ s t ) r_{t}(\theta)=\frac{\pi_{\theta}\left(o_{t} \mid s_{t}\right)}{\pi_{\theta_{\text {old }}}\left(o_{t} \mid s_{t}\right)} rt(θ)=πθold (otst)πθ(otst)

表示该动作的新旧策略之间的概率比。如果该比率与 1 偏差太大,则将其限制在 [ 1 − ε , 1 + ε ] [1-\varepsilon, 1+\varepsilon] [1ε,1+ε],它限制了策略在一次更新中可以转变的程度。

简单来说:

考 100 分会给我带来额外的奖励,但爸爸会给我设定一个“上限”,这样我就不会考得太高。下次考试时,他会重新评估我的成绩,保持稳定,而不是加剧极端波动。

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

即便如此,如果我只执着于高分,我可能会采取一些可疑的策略——例如,作弊或恐吓老师给我满分。显然,这违反了所有规则。在大型语言模型领域,类似的情况是制作有害或虚构的内容来人为地提高某些奖励指标。

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

“不管怎样,你都不能偏离你原来诚实的学习态度太多。如果你偏离基准太远,即使你分数很高,我也会取消你的资格并扣留你的零花钱。”
这类似于从学期开始就划定一条“参考线” (即在最初的监督微调之后)。你不能偏离最初的策略太远,否则你会面临处罚。

数学对应

在 PPO 中,这通过对参考模型(初始策略)添加 KL 惩罚来体现。具体来说,我们在损失中包括以下内容:
− β D K L ( π θ ∥ π r e f ) -\beta \mathbb{D}_{\mathrm{KL}}\left(\pi_{\theta} \| \pi_{\mathrm{ref}}\right) βDKL(πθπref)

这可以防止 Actor 偏离原始的合理策略太远,避免“作弊”或其他严重越界的行为。

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

有一天,爸爸说:“我没时间一直评估你的学习进度,也无暇画新的分数线。为什么不先做五组模拟测试,然后取它们的平均分作为你的预期分数呢?如果你在真正的测试中超过了平均分,说明你比自己的预期表现更好,所以我会奖励你。否则,你得不到多少。” 我和弟弟,以及可能更多的同学,都可以依靠一套个人的模拟测试,而不是爸爸必须不断调整的外部“价值网络”

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

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

  • 评论家没有单独的价值网络,
  • 针对同一问题或状态,从旧策略中抽取多个输出样本,
  • 将这些输出的平均奖励视为baseline,
  • 任何高于平均水平的事情都会产生“正优势”,任何低于平均水平的事情都会产生“负优势”。

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

数学对应

根据DeepSeekMath的技术报告,GRPO目标(省略部分符号)是:
在这里插入图片描述

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

7. 结论:反思与未来展望

用小学考试的类比,我们从原始的绝对分数一步步发展到 PPO 的完整机制(Critic、Advantage、Clip、Reference Model),最后发展到GRPO(利用多个输出的平均分来消除价值函数)。以下是一些关键点:

  • Critic(批评家)的作用:为每个状态提供“合理期望”,显著减少训练差异。
  • Clip 和 Min 机制:限制更新幅度,防止对单次“突破性”检查反应过度。
  • Reference模型:不鼓励“作弊”或极端偏差,确保政策与初始状态保持合理一致。
  • GRPO 的优点:在大型语言模型中,它消除了对单独价值网络的需求,从而降低了内存和计算成本,同时与“比较”奖励模型设计很好地保持一致。

就像爸爸改用“让孩子们自己模拟多场考试,然后将他们的平均成绩作为基准”的方式一样,GRPO 避免了维持大量的批评,同时仍然提供相对的奖励信号。它保留了 PPO 的稳定性和合规性特征,但简化了流程。

<think>嗯,用户问的是DeepSeek-R1的GRPO中KL散度在图中是如何生成的。首先,我需要确认几个关键点:GRPO是什么,KL散度在这里的作用,以及图中的生成过程。可能用户指的是强化学习中的某种方法,因为GRPO听起来像是某种策略优化算法,比如PPO(Proximal Policy Optimization)的变种。 首先,GRPO可能是指某种改进的策略优化方法,结合了KL散度作为约束或正则项。在强化学习中,KL散度常用于衡量新旧策略之间的差异,防止更新过大导致策略不稳定。例如,PPO就使用了KL散度来限制策略更新的幅度。 接下来,用户提到“图中是如何生成的”,可能是指训练过程中KL散度的变化曲线图,或者是模型结构图中KL散度的应用位置。需要进一步分析。 假设GRPO是一种类似PPO的算法,那么在训练过程中,KL散度会被计算并作为损失函数的一部分,或者作为早停的指标。例如,在每次策略更新时,计算当前策略与旧策略在动作分布上的KL散度,如果超过某个阈值,就停止更新或调整学习率。这样,在训练曲线图中,KL散度会被记录下来,显示其随时间或训练步数的变化。 另外,可能的结构图中,KL散度可能出现在策略网络的损失函数部分,与策略梯度其他正则项一起构成总损失。这时候,图中可能会有KL散度的计算模块,连接策略网络损失函数。 但用户的具体应用场景可能不同,比如生成模型中的KL散度,如在变分自编码器(VAE)中,KL散度用于衡量潜在变量分布与先验分布的差异。不过结合GRPO,更可能是在强化学习场景。 需要确认GRPO的全称,但可能用户指的是某个特定论文或框架中的方法,比如DeepSeek-R1可能是某个模型或项目名称,而GRPO是其使用的算法。如果找不到公开资料,可能需要基于常见模式进行推测。 可能的步骤是:在策略优化过程中,每次迭代收集样本,计算新旧策略的KL散度,作为约束项加入目标函数,或者在图中展示该值的波动情况。生成图的时候,可能是在训练过程中记录每个epoch或step的KL散度值,然后用绘图库如matplotlib画出折线图,显示其变化趋势,帮助分析训练稳定性。 此外,用户可能想知道KL散度的具体计算方式,例如是否使用蒙特卡洛估计,或者解析解,这取决于策略的分布类型(高斯、分类等)。例如,对于高斯策略,KL散度可能有闭式表达式,直接计算均值方差的差异。 总结,回答需要涵盖GRPO中KL散度的作用,计算方式,以及在训练过程中如何被记录并可视化在图中,可能的实现步骤目的。</think>在DeepSeek-R1的GRPO(假设为一种策略优化算法,如基于KL散度的策略优化方法)中,KL散度的生成通常涉及以下关键步骤可视化逻辑: --- ### **1. KL散度的作用** KL(Kullback-Leibler)散度用于衡量**新旧策略之间的差异**,目的是约束策略更新的幅度,防止训练不稳定。在GRPO中,它可能作为: - **约束条件**:限制策略更新的最大步幅(如TRPO)。 - **自适应正则项**:动态调整学习率(如PPO的某些变体)。 --- ### **2. KL散度的计算** 假设策略模型输出动作的概率分布(如高斯分布或分类分布),KL散度的计算方式如下: - **输入数据**:新旧策略对同一状态的动作概率分布。 - **数学公式**: \[ KL(p_{\text{old}} \| p_{\text{new}}) = \mathbb{E}_{a \sim p_{\text{old}}} \left[ \log \frac{p_{\text{old}}(a|s)}{p_{\text{new}}(a|s)} \right] \] 实际实现中,常通过采样的动作批次进行蒙特卡洛估计。 --- ### **3. 图中的生成方式** 若用户指训练曲线图中的KL散度,其生成流程通常为: 1. **数据记录**:在每次策略更新时,计算当前批次数据的KL散度均值。 2. **可视化**:将KL值按训练步数/回合数绘制成曲线图(如使用TensorBoard或Matplotlib)。 3. **关键观察点**: - **上升趋势**:策略更新步幅过大,可能导致训练不稳定。 - **下降趋势**:策略趋于保守,学习速度可能过慢。 --- ### **4. 具体实现示例(简化代码逻辑)** ```python import numpy as np import matplotlib.pyplot as plt # 模拟训练过程中的KL记录 kl_values = [] for epoch in range(100): # 模拟KL计算(实际需通过策略网络输出分布) kl = np.random.uniform(0, 0.5) * (1 - epoch/100) # 假设KL逐渐下降 kl_values.append(kl) # 绘制KL曲线 plt.plot(kl_values, label='KL Divergence') plt.xlabel('Training Epoch') plt.ylabel('KL Value') plt.title('KL Divergence in GRPO Training') plt.legend() plt.show() ``` --- ### **5. 实际应用中的注意事项** - **阈值控制**:若KL超过预设阈值,可能触发早停或调整学习率。 - **分布类型**:连续动作空间(高斯分布)与离散动作空间(分类分布)的KL计算方式不同。 - **采样效率**:KL估计的准确性依赖于足够的样本量。 --- 通过上述过程,KL散度的变化图能够直观反映策略优化的稳定性,帮助调整超参数(如学习率、更新步长),是深度强化学习训练的重要监控指标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值