PPO、GRPO、DAPO、GSPO、DCPO 对比
PPO(Proximal Policy Optimization)
多采用 off policy 训练
数据要求
- 原始数据集:只需要准备 prompt。
- 中间采样:需要利用 old model 进行 response 采样。
涉及模型
- reward model [不训、及时奖励]
- reference model [不训、计算 KL 散度、降低训偏风险]
- critic/value model [训练、状态价值,是否生成人类偏好的评估,也是动作的期望估计]
- actor/policy model [训练、目标模型,优化其按照人类偏好生成能力]
采样过程【单一采样】
- 利用 old model 对每个 prompt 采样单个 response,没有特殊要求限制
计算
-
reward: RM 打分,通常用在 last token 的打分 [主流]。也有用所有 token 的平均值作为分值。[模型打分 ] 利用人类偏好数据,提起训练好的 RM 模型,通常为 0-1 分值。分值越大代表生成结果更符合人类偏好
-
Value: [预期收益] critic/value model 对 response 的每一个 token 进行打分,目的是评估每个 token 状态下的价值,同时估计每个 token 生成时的动作价值期望。【模型打分 】
-
优势函数 :表示当前动作产生的实际价值估计 [ ] 与当前状态下执行所有可能动作的期望价值 当大于 0,表明当前动作产生的价值高于平均值,所以当前动作更有价值,更应该鼓励,当小于 0 时,说明当前动作产生的价值低于平均值,所有当前的动作价值不大,不应该鼓励。这样优化下可以在每步朝着最优的动作进行选择
-
return: [实际收益] 采用 AGE 的思想,利用后续 N 步的实际结果反推当前状态的实际收益,而非估计收益。结果更接近当前的收益。 这部分值是不会随着 off policy 过程中改变,主要是为了训练 critic。
-
KL 散度: 防止模型训偏,分为两部分:
-
在采样数据时根据 old model 和 ref model 之间构建 KL,结合 "rewards" 合并,并将其做为 rewards 的 token_level_rewards
-
在 off policy 训练过程中计算 new model 和 ref model 之间的 KL,随着训练进行计算。
注: 可以利用参考比如”use_kl_loss“来控制是否使用 KL。比如 trl 中利用直接使用第一种而不使用第二种。verl 中利用”use_kl_loss“来控制是否使用 [同时使用]。同时利用超参 [如 kl_loss_coef] 控制 KL 的占比
PPO 中需要计算 value、return,常采用第一种方式将其作为 rewards 的一部分
-
-
重要性采样:off policy 训练时,训练时的输入不是当前模型的实时结果,是 old 模型的提前生成的结果,是用 old 的生成来训练新的模型,为了降低训练时 new 的偏差,需要使用重要性采样计算。
-
Clip 处理:重要性采样虽然能解决 new 的偏差问题,但是无法解决采样过程中导致的方差变大问题,为了降低方差,当两者分布差距比较大时,采取丢弃数据不训练 actor。 [token 维度 clip, 不区分 token,固定对称 clip 范围]
off policy 过程中,只更新对应的 和
经典参数:
Loss
-
critic loss: 优化 critic model. 目的是为了使 critic 对每个状态价值更准确的预测,即使实际价值与预测价值越接近越好,也就是优势函数 A 越小越好。所用 MSE loss 即可。同样为了对 actor 对齐,也会对 value 进行 clip 裁剪处理即
-
actor loss: 优化 actor model。 目的是每次采取的动作能够产生更多的价值,即如果当前的动作价值高于平均期望值,环境话说就是当前产生的实际价值高于期望价值, 即 时,应该鼓励 actor 模型多产生这样的动作,相反,如果当前的动作价值低于评价期望值,即 ,应该尽量让 actor 模型少产生这样的动作。所以此时比较适用交叉熵作为损失函数。即
注意,这里的 Loss 没有 KL 散度,是因为将 KL 散度放在了 A 中
- 最终 backward 时 loss
- 联合 loss:一种是讲 critic loss 以一定权重 [如 ] 将加入到 actor loss 上进行联合优化,这样 actor loss 也会优化 critic ,同样 critic loss 也会优化 actor。【如 verl 的实现】
- 分别优化: 即两个 loss 分别进行 backward,将对方的值作为其中的常量处理。即 critic loss 只优化 critic model 参数。 actor loss 只优化 actor model 参数。【如 trl 的实现】
在 off policy 过程中,只更新对应 new 的 p 和 value,其中 A、R、return、KL 都不会变化
GRPO(Group Relative Policy Optimization)
数据要求
- 原始数据集:只需要准备 prompt【同 PPO】
- 中间采样:需要利用 old model 进行 response 采样。每次每条 prompt 在 PPO 只需采样一个,但在 GRPO 每次每条 prompt 要采样更多的 response,用来计算优势函数。
采样过程:【多采样】
- 利用 old model 对每个 prompt 采样一组 G > 1 个 response,没有特殊要求限制。【PPO 是单个 response 即可】
涉及模型
相对 PPO,无需 critic/value model,只需要训练 actor/policy model 即可。
- reward model [不训、及时奖励]、
- reference model [不训、计算 KL 散度、降低训偏风险]、
- actor/policy model [训练、目标模型,优化其按照人类偏好生成能力]
计算
-
reward: 多采取 rule 打分的 reward,同时也可以用 PPO 中 RM 的打分模型。因为涉及到优势函数的计算,所有对 reward 对要求更高。同时采用 多种打分规则加权 获得最终的 reward 结果。【如 trl 中实现】
## Apply weights to each reward function's output and sum
rewards = (rewards_per_func * self.reward_weights.to(device).unsqueeze(0)).sum(dim=1) -
Value【无】: GRPO 作者认为,value 模型的效果好坏制约 critic 的训练效果,也限制模型潜力的发掘。所有在训练过程中丢弃了 Value model 的使用,所有 GRPO 中不存在 Value 值。
-
return【无】: 没有 Value, 自然没有 return 值
-
优势函数: GRPO 是利用多个采样结果进行投票仲裁的方式进行计算,当前 response 的奖励相对均值的大小进行估计,而不是 PPO 的 value 等反推逻辑进行计算 【只考虑当前 step 生成的 response 簇,当 reward 相同时,优势值为 0, 无效更新模型】
表示每个 prompt 的采样 G 条 response 后对应第 条的 rewards
-
KL 散度: 相对 PPO 有部分存在差异。PPO 中常用的 K1 方式,且 DPO 采用的 K3.