<think> 这篇博客的主要目的是整理强化学习中几个XPO的优化目标,包括比较经典的PPO、DPO,KIMI1.5中的MDPO以及DeepseekMath(R1)的GRPO。
Policy Gradient
首先从策略梯度(Policy Gradient)说起,广义的强化学习优化目标如下
简单来说就是如果当前轨迹
对于LLM场景,
指的就是模型本身, 则是它生成的一个句子。我们可以采样很多个句子 来估计期望(蒙特卡洛采样)
我们还可以对
而初始状态
这个就是策略梯度的最终形态了,之后我们可以看到PPO/GRPO都可以用从这个式子出发
PPO
PPO首先改造的是
刚刚提到的
于是这里引入了critic model和
critic model的损失函数其实就是
有人可能会觉得《critic model的损失函数其实就是
本身》,那优势 被优化到0了,我的策略模型岂不是没法更新了?事实上,如果 如果是0,说明此时做什么动作都不会影响到最后的奖励期望,那这个时候已经是最优策略 了,自然也没有必要做策略提升
此时的
所以PPO最终采用的是GAE,即权衡了偏差和方差的最终版本
当
是 的baselined版本,这里同样学了一个V(t),就不展开了 使用
时,critic model的损失就得换成 ,把广义优势当成损失
说完了
接下来再带入
那么优化目标也就是
这里
以上就是PPO的Policy优化目标啦,这里省略了对优势的裁剪操作(训练critic model的时候也可以对V做裁剪)。
KL那一项如果拿出来,作为
的约束条件,则是TRPO的做法 另外这里还省略了奖励模型的训练,
的设置,可以参考上一篇博客 关于奖励模型的优化目标,请见下一章DPO
DPO
PPO首先要训一个奖励模型,再逐步更新actor/critic model,显得太繁琐了。DPO的想法就是绕过奖励模型。
PPO的训练目标还可以写成以下这种广义的形式
第二项还是KL散度,而第一项在最大化采样句子
DPO则表示不急,还想继续推导一下
其中
现在我们得到了一个新的概率分布
另外
这时候我们可以得到给定
变换一下可以得到
接下来回顾一下奖励模型的优化目标是什么,OpenAI的RLHF-PPO的做法和这里一样(应该是DPO和PPO一样)
这里用Bradley-Terry刻画了概率
其中
这个优化目标只要求两者之间的相对关系,所以DPO训练的时候有可能出现两个句子采样概率都变低了,但是因为坏句子采样概率降低的更快,所以.......
OK,推导这一步,我们只需要把刚刚求的
注意这里的几个
GRPO
DeepSeek R1的Iterative GRPO最近关注度非常高,也有很多开源项目在follow。但是GRPO本身复现也有些争议,所以这里只简单介绍一下DeepseekMath里提到的公式。
说回最早的策略梯度,
GRPO则探索了另一个方向,首先设计容易验证的问题和答案,使用ruled-based的奖励模型(结果奖励模型)。
举个例子,我希望模型输出的内容包括思维链和最终答案,思维链被tag \<think> \<\think>包裹,如果模型生成的句子有这两个tag,就给一定的奖励。
现在奖励来源搞定了,但是怎么体现“优势”呢(之前讨论PPO的优势时我们还提到一个baseline的版本,一个相对奖励会更好优化些),GRPO的做法是采样多条路径
那么优化的目标就是
细心的小伙伴会发现这里多了一个
,这其实等效于 的值除以当前这个句子的长度,GRPO为什么要这么做呢?因为我们设计 的时候一个句子每个token(t)位置的奖励都是整个句子的奖励 ,所以这里可以认为是把整体奖励平均分给每个token。
我们再加上PPO里也用上的重要性采样,以及KL散度,就可以得到论文里的公式了
trl也实现了GRPOTrainer,但是实现和上面的式子不太一样,比如上式是off policy,而实现时用的是on policy,于是可以去掉clip,因为比值是1(但是这里为什么不直接用策略梯度的
对源码感兴趣的同学可以参考GRPO Trainer
另外,R1用的实际上是Iterative GRPO,
也会逐步更新,这里就不展开了 再补充一点,KL散度的计算采用了Schulman估计,之后可能会展开讲,估计的好处是方差比较小(尽管直接算
是无偏的)
MDPO-K1.5
MDPO是KIMI k1.5用到的RL方式,来自Mirror Descent Policy Optimization。它其实和GRPO有点相似,但是理论基础更多一点。
首先K1.5也使用ruled-based的奖励模型(结果奖励模型),简化了r的设计。
其次我们在DPO推导出了
目前
我们稍微规范一下符号(与论文中对齐),x为quesiton,y为ref model采样的response,
注意
换成了 ,这是因为这里的算法也是Iterative的,但是我们先只看一次迭代 另外注意这里采样句子的是
(ref model),而不是 或之前提到的重要性采样模型 ,我的理解是它这里从ref model采样句子是为了估计 。同时也是因为这个原因,ref model也需要迭代式的更新,来保证采样的句子和我们最后要的 生成的句子分布接近
继续考虑Z的估计,假设从
接下来重点来了,实际应用时
OK,最后我们得到了
开始求梯度!(先忽略掉两个期望值)
最后一步考虑了
后记
至此PPO/DPO/GRPO/MDPO-K1.5所有的公式推导基本都放在这里了,还有一些重要性采样(上篇博客介绍了),裁剪、Iterative的操作这里为了简洁就省略了。
回顾这几个算法的设计,可以看到从PRM到ORM的转变,从一个复杂的reward/critic model到ruled-based model,从policy-base和value-base结合的ppo到纯policy-base的grpo,整个强化学习的pipeline是不断在简化的。(又让我想起来经典的The bitter lesson)
KIMI1.5论文里介绍了PRM到ORM转变的原因:通过value去估计某个action的优势,可能会导致有些不那么错的action采样概率降低(比如
不管怎么讲,这篇博客到这就该结束了。这几天追热点确实很过瘾,但也愈发觉得自己的渺小,只能写点文字聊以慰籍,留下一些痕迹。
博客又何尝不是一种思维链呢(突然想起来之前博客被人爬了,会不会有某个LLM记得JJJYmmm🤣)
</think>
附录
Qingbin大佬指出PPO的
评论
期待反向KL散度和正向KL散度的下一篇
好!可能下周写(等我搞搞明白
无伤大雅的错误:)
\tau = {s_0, a_0, \dots, s_T, a_T} 哎呀~jjjymmm得了MVP🙌🏾🤪
最后一个s_T不需要做action了,所以没有a_T🙌🏾🤪
有一个疑问,PPO中,当 的时候,这个时候 当作 处理的吗?所以退化为
是的