PG,TRPO,PPO,GRPO,DPO原理梳理

强化学习方法的分类

在这里插入图片描述

一、基础概念

  1. Policy Model(Actor Model):根据输入文本,预测下一个token的概率分布,输出下一个token也即Policy模型的“动作”。该模型需要训练,是我们最终得到的模型,并由上一步的SFT初始化而来。

  2. Value Model(Critic Model):用于预估当前模型回复的每一个token的收益。接着,还会进一步计算累积收益,累加每一个token的收益时不仅局限于当前token的质量,还需要衡量当前token对后续tokens生成的影响。这个累积收益一般是称为优势,用于衡量当前动作的好坏,也即模型本次回复的好坏,计算的方法一般使用GAE(广义优势估计,generalized advantage estimation))该模型同样需要训练

  3. Reward Model:对Policy Model的输出整体进行打分,评估模型对于当前输出的即时收益。该模型训练过程不进行更新。

  4. Reference Model:与 Policy Model是一样的模型,但在训练过程中不进行更新。其作用主要是与Policy Model计算KL散度(可以理解为两者的预测token概率分布差距)来作为约束,防止PolicyModel在更新过程中出现过大偏差,即每一次参数更新不要与Reference Model相差过于大。

二、PG(策略梯度)

策略梯度方法的核心思想是直接对策略函数(policy function)进行参数化,通过梯度上升(gradient ascent)的方法来优化策略参数,使得智能体在环境中获得的累积奖励最大化。

三、TRPO(Trust Region Policy Optimization)

在PG的基础上,加上了与参考模型的约束,限制策略的更新幅度。

优势函数 A(s,a) 衡量了在状态 s 下采取动作 a 相比于按照当前策略平均表现所能获得的额外奖励。
在这里插入图片描述

1.TRPO 在优化策略时加入了约束条件,即要求新旧策略之间的 KL 散度(衡量两个概率分布差异的指标)不超过某个阈值。

2.TRPO 的优化目标是在满足 KL 散度约束的条件下,最大化策略在优势函数下的期望值。它尝试在策略改进和策略变化幅度之间找到一个平衡,既让策略能够朝着获得更高奖励的方向更新,又不至于因更新幅度过大而破坏了策略的稳定性。

四、PPO(Proximal Policy Optimization)

在这里插入图片描述
PPO 的核心思想是在策略更新时,限制新旧策略之间的差异,防止更新幅度过大导致策略性能不稳定。为此,它提出了两种实现方式:PPO-penalty 和 PPO-clip。

PPO-penalty:在目标函数中添加了一个惩罚项,该惩罚项基于新旧策略之间的KL散度。
PPO-clip:对策略比率 进行裁剪,使其在 [1 - ϵ, 1 + ϵ] 范围内。这样可以限制新策略与旧策略的偏离程度,避免更新幅度过大。

TRPO 通过严格的数学推导来保证策略更新的稳定性,但其实现较为复杂,计算成本较高。因为不知道下一步的策略到底是什么。

PPO 则在保证策略更新稳定性的基础上,通过更简单的方式(惩罚项或裁剪策略比率)实现了类似的效果,同时提高了算法的效率和易用性。

4.1 流程

在这里插入图片描述

  1. 采样动作:在当前状态sₜ下(即未更新前的策略模型π旧和价值模型V旧),对一个样本的提示q,使用策略模型(Actor Model)进行一次采样生成动作aₜ,即一次“动作”。

  2. 计算即时奖励:使用奖励模型计算动作aₜ的分数,同时计算参考模型与当前策略模型的KL散度,将两者结合起来作为即时奖励r。

  3. 计算当前收益:使用价值模型(Critic Model)来计算每一个token的收益,记为V旧。

  4. 计算优势A:根据即时奖励和后续tokens的分数影响,计算本次采样的优势(累积收益)。优势A结合了当前token的分数和后续tokens的影响。

  5. 策略更新比例:策略模型对q进行一次新的生成π(aₜ|sₜ),计算与旧策略π旧相比的更新比例:rₜ(θ)=π(aₜ|sₜ)/π旧(aₜ|sₜ)。

  6. 调整更新比例:当优势A>0时,表示本次采样的动作是正收益的(质量较好),尽量提升rₜ(θ);反之当A<0时,尽量降低rₜ(θ)。

  7. 裁剪更新比例:为了避免训练不稳定,对rₜ(θ)进行裁剪,上下限控制在一个合理范围内(类似梯度裁剪):Lclip(πθ)=E[min(rₜ(θ)Aₜ,clip(rₜ(θ),1−ε,1+ε)Aₜ)]。

  8. 更新值函数:价值模型对新的采样π(aₜ|sₜ)进行价值评估V新,并使其尽量靠近参考奖励R=A+V旧。同样进行裁剪:L(Vφ)=E[max[(V新−R)², (clip(V新,V旧−ε,V旧+ε)−R)²]]。

  9. 更新模型:使用两个损失函数分别更新策略模型πθ和价值模型Vφ。

  10. 完成本轮训练:循环步骤5-9,完成本轮PPO训练:用新的策略模型和价值模型替换旧的,即π旧←πθ,V旧←V新。

  11. 进入下一批次训练:使用更新后的策略模型和价值模型开始下一批次的训练。

4.2 广义优势估计(GAE)

在这里插入图片描述
在估计下一步策略时,并不知道下一步到底是什么,目前有蒙特卡洛和时序差分方法,前者对每一步进行模拟,后者走一步看一步。
在这里插入图片描述
GAE通过引入参数 λ,将不同步数的优势估计进行加权求和,从而在方差和偏差之间取得平衡。当 λ=0 时,GAE退化为单步时序差分估计;当 λ→1 时,GAE接近蒙特卡洛估计。通过调整 λ 的值,可以在降低方差和增加偏差之间进行权衡。

在这里插入图片描述

4.3 RM的训练

在这里插入图片描述

五、GRPO(Group Relative Policy Optimization)

GRPO 的核心思想是通过组内相对奖励来估计基线(baseline),从而避免使用额外的价值函数模型。

在这里插入图片描述
策略函数跟PPO-clip一样。

5.1 流程

在这里插入图片描述
1.对一个样本的Prompt q,使用Policy Model进行G次生成

2.同样地,也进行G次生成,与Policy Model进行KL散度计算,KL散度可以理解为两者的预测token概率分布差距,跟其他方法都是类似作用,避免Policy Model训练不稳定

3.再使用Reward Model对Policy Model的这G次生成进行打分。参考DeepSeek-R1的做法,甚至可以不需要Reward Model,只需要奖励函数,比如代码问题,可以根据模型生成的代码是否能够运行,有标准答案的数学问题,从模型的生成中提取的答案是否正确,来给予一定的奖励分数

4.最后平均的KL散度和奖励分数作为Loss去更新Policy Model

六、DPO(Direct Preference Optimization)

在这里插入图片描述

  • 训练数据是与上述奖励模型一样的偏好对数据。
  • Policy Model的目标是尽量拉开chosen(preferred)样本与rejected(dispreferred)样本的token概率差距。
  • 同时Policy Model的概率差距与Reference Model的概率差距不要太过于大,避免训练不稳定。
  • Policy Model在DPO中,其实也是充当了Reward Model的角色,概率差可以认为是对应的应得奖励收益。

在这里插入图片描述

参考文献

【【大白话04】一文理清强化学习PPO和GRPO算法流程 | 原理图解】 https://www.bilibili.com/video/BV15cZYYvEhz/?share_source=copy_web&vd_source=29af710704ae24d166ca951b4c167d53
https://blog.csdn.net/Ever_____/article/details/139304624
https://mp.weixin.qq.com/s/UClxnbCMKP8IRa0OMWPPtw

### PPODPO GRPO 算法的区别与联系 #### Proximal Policy Optimization (PPO) Proximal Policy Optimization 是一种强化学习方法,旨在通过引入信任区域来稳定策略更新过程。该算法利用剪切函数限制新旧策略之间的差异,从而防止参数更新过大导致性能下降。PPO 结合了 TRPO 的稳定性以及简单易实现的特点,在实践中表现出良好的收敛速度鲁棒性[^1]。 ```python def ppo_update(policy_net, old_policy_net, optimizer, states, actions, rewards): advantages = compute_advantages(states, rewards) for _ in range(update_epochs): new_log_probs = policy_net.log_prob(actions) old_log_probs = old_policy_net.log_prob(actions).detach() ratio = torch.exp(new_log_probs - old_log_probs) surr1 = ratio * advantages surr2 = torch.clamp(ratio, 1.0 - clip_param, 1.0 + clip_param) * advantages loss = -torch.min(surr1, surr2).mean() optimizer.zero_grad() loss.backward() optimizer.step() ``` #### Direct Preference Optimization (DPO) Direct Preference Optimization 则是从人类反馈中直接优化模型的行为分布,而不需要显式的奖励信号。这种方法能够更高效地利用少量高质量的人类评价数据,并且可以避免传统基于奖励塑造的方法所带来的偏差问题。DPO 使用对比损失函数训练模型以最大化所选行为序列相对于未选行为的概率比值。 ```python def dpo_loss(selected_seq_logits, unselected_seq_logits): logits_diff = selected_seq_logits - unselected_seq_logits losses = F.softplus(-logits_diff) return losses.mean() for epoch in range(num_epochs): for batch in data_loader: selected_seq_logits, unselected_seq_logits = model(batch) loss = dpo_loss(selected_seq_logits, unselected_seq_logits) optimizer.zero_grad() loss.backward() optimizer.step() ``` #### Gradient Ratio Policy Optimization (GRPO) Gradient Ratio Policy Optimization 提出了调整正负梯度系数的概念,实验结果显示这能显著提升在线环境下的表现。特别是当采用细粒度步长感知型梯度比率时(即 GRPO+PS),其效果要好于仅考虑整体比例的情况(如 GRPO+OS)。这种机制允许更加灵活地控制不同阶段的学习速率变化趋势,有助于提高最终决策质量[^2]。 ```python class GRPOTrainer: def __init__(self, ...): self.positive_coefficient = ... self.negative_coefficient = ... def update(self, positive_gradients, negative_gradients): adjusted_positive_grads = positive_gradients * self.positive_coefficient adjusted_negative_grads = negative_gradients * self.negative_coefficient final_gradients = adjusted_positive_grads - adjusted_negative_grads apply_gradients(final_gradients) ``` 综上所述,虽然三种算法都属于强化学习领域内的改进方案,但各自侧重点有所不同:PPO 关注如何平稳有效地完成单次迭代;DPO 注重从有限数量的偏好样本里提取有用信息来进行指导;GRPO 则探索了动态调节梯度权重对于加速收敛的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵海之森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值