AI 原生系列 · 强化学习
概率的熔炉
一分钟读完——你能带走什么
策略梯度不会给模型灌输一个事实——它只是在 重新分配概率质量。把有效的那部分概率调高,其余部分就都会相应压低一点。就这一句话,能让整个算法家族变得清晰易懂,因为它揭示了它们真正争论的那件事:我们本该有多惊讶? 奖励一条走运的轨迹,你只会让运气本身变得更容易发生。先减去一个预期值,你奖励的才只是那部分超出预测的表现。REINFORCE 一概不减。RLOO 减去的是同批「兄弟」轨迹的平均值。actor-critic 用第二个模型来学习这个预期值。GRPO 把那个模型开除了,改用群体本身。 去掉基线并不会让估计器出错——它依旧是无偏的,只是变贵了,而方差问题不会报错——这正是这件事花了整个领域好几年、而非一个下午才想明白的原因。
有一件事听起来像技术细节,实际上却是整篇文章的核心。
一次策略梯度参数更新,并不会在模型里安装一个事实。它做的是重新分配概率质量。一次轨迹采样进展顺利,你就提高了产生它的那些词元的概率——而由于整个分布必须始终归一为一,其余所有词元的概率都会随之略微下降。
这种框架立刻带出了这个领域最古老的问题。假设一个模型十次里只能正确解决一次,而你拿这次成功来训练。你未必教会了它方法,你可能只是让那一条走运的特定路径变得更有可能出现了。
唯一的核心想法:减去你原本该预期到的值
这一集要讲的全部内容,其实是同一种修补方式,用五种方式各做了一遍。
这个结果,是否好过我们原本该预期到?
的水平?奖励原始回报,你奖励的是运气。奖励回报与其预期值之间的差,你奖励的才只是那部分超出预测的表现。这个差值有个名字——优势值——而下面每一种算法,都是对「这个预期值从哪里来」这个问题给出的不同答案。
REINFORCE [1] 一概不减。它无偏、诚实,只是抖动明显。 RLOO [2] 针对同一个提示词采样多个补全结果,用其余结果的平均值作为预期值——「兄弟」轨迹就是基线。 Actor–critic 请来另一个网络专门预测这个预期值。 GRPO [3] 解雇了这第二个网络,转而回到用同组轨迹估计——内存开销更低,而且正如第 4 期会展示的,也换来了一整套新的失败方式。
五个名字,一个术语。
再往下挖一层机制:问题不在偏差,而在方差
这一点我曾经理解错了很久,值得说清楚。
去掉基线并不会让梯度估计器出错。减去任何不依赖于动作的量,估计器依然是无偏的——期望的参数更新结果不变。变的是这次参数更新的方差。
而方差问题从不会主动报警。没有报错,没有 NaN,没有断言失败。你看到的只是一条本该平滑却变得锯齿状的学习曲线,两个随机种子的结果对不上,还有一次跑了四倍样本量才到达同样效果的训练。这些现象每一条都会被当成运气不好或者超参数没调好,所以这个修正才花了整个领域好几年时间,而不是一个下午。
读下去之前,先猜一猜
在一个简单任务上跑两遍策略梯度——一次带均值基线,一次不带——种子相同,其他一切都相同。不带基线的那一组会怎样?
(a) 学不会。(b) 学会了,但最终分数更差。(c) 学到了同样的结果,只是更慢、更不稳定。
答案是 (c),也是最令人不安的一个,因为一个无偏但噪声很大的方法,在任何小到可以硬算的问题上,看起来都像是一个管用的方法。本期的实验会把这一点亲眼呈现出来:要看的是方差带,而不是最终的那个数字。
调速器:PPO 为何存在
一旦你能估计优势值,第二个问题就冒出来了:你采样得到的行为,来自旧的策略,而你想用这些数据做好几次参数更新。可第一次参数更新之后,生成这些数据的策略,已经不再是你正在改进的那个策略了。
重要性采样比率衡量的,正是策略之间已经走远了多少。PPO 的贡献是一个调速器:把这个比率截断,这样单个批次就永远不可能把策略推得超出信任域允许的范围。仅此而已。这个截断后的替代目标函数,就像是给一台原本会在自己过时数据上疯狂超转的机器,硬装上的一个调速器。
注意这些缩写各自在争什么:REINFORCE、RLOO 和 GRPO 争的是期望值该怎么估。PPO 争的是一次参数更新能走多远。它们不是竞争对手,而是装在不同位置的螺栓。
代价是什么,说实话
「一次减法」这个框架是一种压缩,它确实丢掉了一些真实的东西。
GAE 不在其中。 广义优势估计(GAE)本质上是跨时间步的偏差—方差旋钮,把它简化成「期望值」,就掩盖了它本来要暴露的那个权衡。
两种不同的 KL 被混为一谈。 旧策略和参考策略是两个各司其职的不同对象——一个约束参数更新的幅度,一个约束模型偏离初始状态的程度。把两者都叫「KL」,正是人们最终把正则化项导向错误目标的原因。
而且无偏不等于安全。 一个估计量可以是无偏的,却仍然能在你的评估体系察觉之前,把概率抢先集中到某个走运的区域上。
自己动手跑一遍,大约十五分钟
这个实验在同一任务、同一随机种子上跑三组:无基线、均值基线,以及——如果你愿意扩展——一个学习出来的基线。它画出的是参数更新的方差,而不只是回报本身。
关于你自己做扩展实验,有一点提醒,适用范围远不止这个实验:如果你只用三个随机种子对比几组结果、发现没有差异,那你了解到的是自己的算力预算,而不是基线本身的效果。 方差方面的结论,需要足够多的随机种子才能检测出你声称的效应。动手之前,先算一算自己需要多少个种子。
接下来会讲到什么
这里的每一种算法优化的都是某个人选定的数字,但它们谁都无法告诉你,这个数字选得对不对。
第 3 集要讲的是:当记分牌本身出了错,会发生什么——一位经济学家早在 1975 年就描述过这种失效模式,比任何人训练出奖励模型都要早半个世纪。
第 2 集,出自《智能工程历险记》第一季——因果引擎(The Consequence Engine)。本系列文章中的论断均按类别标注——定义、推导、证据、工程取舍、开放问题——比喻可以用来引出一个论断,但绝不作为该论断的证据。每一集都配有可在 CPU 上运行的实验代码。本文不含任何雇主或客户的资料。—— Paul Jialiang Wu ·agentic-portfolio-lovat.vercel.app
参考文献
- Williams, R. J. (1992). Simple statistical gradient-following algorithms for connectionist reinforcement learning.《Machine Learning》。这是最初的 REINFORCE。 link.springer.com/article/10.1007/BF00992696
- Ahmadian, A. et al. (2024). Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs. 面向 LLM 反馈学习的留一法(leave-one-out)基线。 arxiv.org/abs/2402.14740
- Shao, Z. et al. (2024). DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 提出了 GRPO。 arxiv.org/abs/2402.03300
- Schulman, J. et al. (2017). Proximal Policy Optimization Algorithms. 裁剪代理目标函数。 arxiv.org/abs/1707.06347
- Schulman, J. et al. (2015). High-Dimensional Continuous Control Using Generalized Advantage Estimation. GAE,以及偏差与方差之间的调节旋钮。 arxiv.org/abs/1506.02438
- Sutton, R. & Barto, A. (2018). Reinforcement Learning: An Introduction,第 2 版。incompleteideas.net/book/the-book-2nd.html