5.4 PPO :一场小心翼翼的拔河
一个看似简单的计划
上一节结束时,我们手里有了一个会打分的奖励模型。接下来的计划看起来简单得不像话:
让模型可劲儿生成回答,奖励模型打分,往高分方向调参数——完事。
方向也熟悉:这不就是 0.4 节的梯度下降换了个方向吗?损失要下山,奖励要上山,一步步爬就是了。
真按这个计划跑三个月,你大概率会得到一个怪物:满嘴「当然可以!这真是一个非常棒的问题!!」的马屁精,每个回答不灌到八百字不罢休,通篇正确的废话,自信得像什么都懂,其实什么都没说。
学生没变好,它只是摸透了裁判
出问题的不是优化算法——优化算法工作得太好了。问题出在裁判身上。
奖励模型是从人类偏好里学出来的,而人类的偏好带着系统性的小毛病。你在上一节的标注实验里亲手见过两个:第 2 组里,更长、信息更多的回答看起来更「丰富」(哪怕混进了编造);第 5 组里,顺着用户说的回 答更「讨喜」。几十万条标注平均下来,这些偏差被奖励模型忠实地继承,再被强化学习疯狂放大:
- 裁判略偏爱长回答 → 学生把每个回答灌水到极限;
- 裁判略偏爱自信语气 → 学生戒掉了「可能」「我不确定」;
- 裁判略偏爱附和 → 学生变成职业马屁精。
这个现象有个名字:奖励钻空子。记住它的形状:只要评分标准有漏洞,一个足够强的优化器就一定会找到并利用它——刷的是分数,不是能力。这不是大模型特有的毛病,考试应试、KPI 造假,都是同一个故事。
解法:在拔河的另一头拴根橡皮筋
既然放任优化会跑偏,那就别让它跑远。办法朴素得可爱:给模型拴一根橡皮筋,另一头系在原来的它(SFT 模型)身上。
模型每偏离原来的说话方式一分,就从奖励里扣一分。这根橡皮筋叫 KL 惩罚,整场拔河的目标变成:
是橡皮筋的松紧:拉太紧,模型不敢改进;放太松,马屁精卷土重来。于是优化的含义变成——在「别变得面目全非」的前提下,尽量讨裁判喜欢。灌水八百字、句句感叹号的文风离 SFT 模型太远,橡皮筋会把它拽回来。
PPO:连每一步都要小心
橡皮筋管住了「总体别跑偏」,PPO 则把「每一步别迈太大」也做进了算法里。它的全名是「近端策略优化」——「近端」二字直译过来就是别走远:每次参数更新都被夹在一个安全范围内,涨得太猛就截断(很有 0.4 节「学习率太大会飞出山谷」的既视感)。
代价是工程上的沉重。一次 PPO 训练要在显存里同时伺候四个模型:被训练的模型、用来算橡皮筋的参考模型、打分的奖励模型,还有一个估计「这个回答比平均水平好多少」的价值模型。又贵、又娇气、超参数难调——RLHF 因此成了大厂的特权游戏。这份沉重,正是下一节各种「捷径」诞生的理由。
本节给的是 PPO 的直觉骨架,不是全貌:强化学习的细节(优势估计、采样效率、训练稳定性技巧)水很深,跳过了整整一门课的内容。另外「四个模型」是经典配置,不同实现有变体——有的把奖励模型和价值模型合并,有的用冻结技巧省显存。方向对了就好,细节请以论文和代码为准。
小结
- 只追奖励必出事:评分标准的任何漏洞都会被优化器找到并放大(reward hacking)。
- KL 惩罚是拴向 SFT 模型的橡皮筋:在「别变得面目全非」的前提下讨裁判喜欢。
- PPO 的「近端」= 每步更新都被夹在安全范围内,稳但工程沉重(四个模型同时在显存)。
- 裁判的偏差来自人类标注的偏差——你在 5.3 实验里亲手见过它们的源头。
延伸阅读
- InstructGPT 论文(2022)——RLHF 三阶段的定义之作,附录里就有 reward hacking 的一手记录。
- Hugging Face:图解 RLHF(中文版)——带流程图的工程视角梳理。
- 下一节 5.5 DPO、GRPO 与推理强化学习:PPO 太贵太娇气?看看 2023 年之后大家找到的捷径。