从 PPO 到 RSPO:大模型 RL 对齐算法演进全解

原理、场景与一条未完的进化链


假设你是一个老师,你现在要给一个聪明但迷茫的学生打分。你有两个选择:

方案 A · 请评委打分

先训练一个"评委模型",让它学会判断答案好不好。学生每次答题,评委打分,学生根据评分调整策略。

方案 B · 直接比大小

不训练评委。让学生写两份答案,你直接说"左边比右边好"。学生自己琢磨为什么,调整策略。

这,就是大模型 RL 对齐的两条路线——PPO 路线(训练 reward model 打分)和DPO 路线(直接用偏好对比学习)。

本文沿着这条演化线索,把 PPO → DPO → SimPO → GRPO → RSPO 五个算法的原理、场景和关系讲清楚。不讲虚的,每个算法都用例子让你感受它解决的核心矛盾。

一张图看发展脉络

2017

PPO — OpenAI

通用 RL 算法,解决策略更新不稳定的问题。后被用于 ChatGPT RLHF。

2023

DPO — Stanford

干掉 reward model,直接用偏好数据优化策略。RLHF 从此不再必须用 RL。

2024·05

SimPO — Princeton

再干掉 reference model。以序列平均 log prob 作为隐式奖励。更简洁,更直接。

2024·09

GRPO — DeepSeek

组内相对优势,同一 prompt 多条 response 互相比。DeepSeek-R1 的核心训练方法。

2026

RSPO — Kuaishou

从 pairwise 升维到 list-wise,直接优化排序指标 NDCG。推荐/广告场景的 RL 新范式。

一条清晰的演进方向:越来越少的外部依赖,越来越多的直接优化。从"请个评委(reward model)"到"自己比(DPO)"到"组内互比(GRPO)"到"排序直接优化(RSPO)"。

一、PPO:一切开始的地方

它解决了什么问题?

在 PPO 之前,用 Policy Gradient 训练策略有个大问题:更新步长不好控制。

🎯 核心矛盾:策略更新太小 → 训练太慢;更新太大 → 策略"崩了",模型开始胡说八道。

想象你在调一个老式收音机旋钮。拧一点点没变化,拧多了直接跳台。PPO 做的就是给旋钮加了个"阻尼器"——不管你力气多大,每次只能转一点点。

PPO 怎么做的?

Step 1 · 训练 Reward Model

先找人标注数据:对同一个 prompt,人类说"回答 A 比回答 B 好"。用这些偏好数据训练一个 reward model,让它能给任何回答打分。

Step 2 · 策略优化(重点)

模型生成回答 → reward model 打分 → 计算 advantage(这个回答比平均好多少)→ 用 PPO 更新模型参数。PPO 的核心是 clip 机制

LCLIP(θ) = 𝔼ₜ [ min( rt(θ) · At, clip(rt(θ), 1-ε, 1+ε) · At ) ]

rt(θ) = 新策略概率 / 旧策略概率。如果新旧策略偏差超过 ε(通常 0.2),直接截断。这就是"阻尼器"。

Step 3 · KL 惩罚

额外加一个 KL 散度项,防止模型偏离原始预训练分布太远。这就是 PPO-ptx(InstructGPT 的做法)。

PPO 的优点

PPO 的痛点

❌ 需要训练 Reward Model

  • RM 本身会过拟合人类标注的偏好
  • RM 的 reward 信号可能被模型"刷分"攻破(reward hacking)
  • 训练和维护 RM 本身是一笔额外开销

❌ 需要同时跑 4 个模型

  • 策略模型(被训练的)
  • 参考模型(算 KL 的)
  • Reward Model(打分的)
  • Value Model(算 advantage 的)

4 个模型同时加载 → 显存爆炸 → 工程复杂度极高。这就是为什么开源社区对 PPO RLHF 又爱又恨。

二、DPO:砍掉 Reward Model

核心洞察

DPO 的作者发现了一件优雅的事:RLHF 的目标函数可以被重写,Reward Model 其实不需要显式存在。

🔑 关键公式——DPO 把 RLHF 的优化目标等价转换为一个简单的二元分类问题:
LDPO = -𝔼(x, yw, yl) [ log σ( β · (log πθ(yw|x)/πref(yw|x) - log πθ(yl|x)/πref(yl|x) ) ) ]

β 控制偏好强度,πθ 是当前策略,πref 是参考策略。本质上就是最大化"好回答与差回答的相对概率差"。

类比:PPO 是你请了个裁判站在场边给每个动作打分。DPO 是直接把两场比赛录像放在一起,告诉模型"左边这场打得更好",模型自己反推什么动作是对的。

为什么 DPO 成为主流?

维度PPODPO
需要 Reward Model✅ 必须❌ 不需要
同时加载模型数4 个2 个(策略 + 参考)
训练稳定性需要调 clip/kl/学习率类似监督学习,很稳定
数据要求偏好数据(训练 RM)+ 在线采样只需要偏好数据
代表应用ChatGPT RLHFLlama 3, Qwen 2, Mistral

DPO 的局限

💡 例子:DPO 知道"回答 A 比回答 B 好",但你做推荐时,你需要的是"100 个商品中,排名前 10 的集体质量"。pairwise 信号在这个场景力不从心。这个矛盾,要等到 RSPO 才能解决。

三、SimPO:再砍掉 Reference Model

DPO 还留了什么?

DPO 虽然干掉了 reward model,但 loss 里还有一个 πref(reference model)。这带来了两个问题:

  1. 显存:两个模型(策略+参考)同时加载
  2. 训练-推理不一致:训练时算的是 relative log prob(相对参考模型),但推理时直接输出 token。这个 mismatch 会导致模型对长度产生偏好偏差

SimPO 怎么做?

🎯 核心思想:直接用策略模型的平均 log probability 作为隐式 reward,把 reference model 整个丢掉。
rSimPO(x, y) = (1/|y|) · Σt log πθ(yt | x, y<t)

通俗理解:DPO 问的是"你的回答比参考模型强多少?"SimPO 问的是"你对自己的回答有多自信?"——用序列平均 log prob 直接当分数。

SimPO Loss

LSimPO = -𝔼 [ log σ( β · (r(x, yw) - r(x, yl) - γ) ) ]

γ 是 target reward margin,要求好的回答不仅要分高,还要高出一个"及格线"。

SimPO 解决了什么?

📊 效果:SimPO 在 AlpacaEval 2 上显著优于 DPO,尤其是在减少长度偏差方面——它不会为了刷分而输出超长废话。

四、GRPO:组内互比,不用外面找人

DPO/SimPO 还有什么问题?

DPO 和 SimPO 处理的都是离线偏好数据——需要事先标注好的"哪个回答更好"的数据集。但:

  1. 偏好数据标注贵:每条都需要人工对比
  2. 离线数据是固定的:模型训练中用到的对比,都是别人的判断,不是自己生成的
  3. 无法在线探索:模型不能自己尝试不同回答然后自我评估

GRPO 怎么做的?

🎯 核心思想:对于同一个 prompt,生成 G 个不同的 response,组内算出每个 response 的"相对优势",然后用这个优势来更新策略。不需要 reward model,不需要 reference model,自己和自己比

类比:DPO 是你对比"张三的回答 vs 李四的回答"。GRPO 是让同一个同学写 8 份答案,组里自己比——写得好的加分,写得差的扣分。

GRPO Loss

LGRPO = -𝔼 [ min( rt(θ)·Âi,t, clip(rt(θ), 1-ε, 1+ε)·Âi,t ) ] + β·KL

其中 Âi,t = (ri - μgroup) / σgroup,即组内标准化后的相对优势。

GRPO 的两阶段训练(DeepSeek-R1 的做法)

  1. 冷启动 SFT:先用几千条高质量的 Chain-of-Thought 数据微调
  2. GRPO 强化学习
    • 对每个 math/coding 问题,模型生成 16 条 reasoning path
    • 用基于规则的奖励(答案对错、格式合规)给每条打分
    • 组内标准化计算优势,更新模型
🔥 为什么 GRPO 火了?DeepSeek-R1 用 GRPO 训练出了顶尖的推理能力,而且全程不需要外部 reward model——数学题用答案对错当 reward,代码题用测试用例通过率当 reward。这种"基于规则"的奖励信号,彻底绕过了训练 RM 的麻烦。

GRPO vs DPO vs PPO

特性PPODPOGRPO
Reward Model✅ 需要❌ 不需要❌ 不需要
Reference Model✅ 需要✅ 需要❌ 不需要
在线采样❌ 离线数据
优势估计Value Model (GAE)无(pairwise 对比)组内标准化
适合的场景通用对齐通用对齐推理/数学/代码增强

GRPO 的局限

GRPO 虽然强大,但它仍有隐藏的"评委"——rule-based reward 需要明确的对错标准。数学题有对错,代码有测试用例,但"写一篇文章好不好"、"推荐这个商品合不合适"——这些开放场景的 reward 设计仍然困难。

另外,GRPO 和 DPO 一样,操作的是 成对或成组对比。当场景是"100 个候选中排出 top 10",pairwise 或 group-wise 信号无法直接刻画 list 的整体质量。

五、RSPO:从 Pairwise 到 List-wise 的升维

前面所有算法的共同盲区

PPO、DPO、SimPO、GRPO——它们优化的是什么?单个回答(或成对回答)的质量。

但在推荐系统和广告排序中,你面对的不是"这个回答好不好",而是:

"给定 500 个候选广告,请按 eCPM 从高到低排出前 10 个。这 10 个作为一个整体,它们能带来多少收入?"

这就是 list-wise 优化,也是 RSPO 诞生的原因。

🎯 RSPO = Ranking-guided Softmax Preference Optimization(排序引导 Softmax 偏好优化),出自快手 GR4AD 论文。

RSPO 如何做 list-wise 优化?

核心矛盾:推荐系统产出的是一个排序列表,优化目标是NDCG(衡量排序质量的指标),但现有 RL 算法(DPO、GRPO 等)只能优化 per-item 的 reward。

RSPO 的解决方案

Step 1 · Lambda 权重

对列表中的每一对 item (i, j),计算一个排序权重 Δij。如果 i 和 j 交换位置会大幅改变 NDCG,Δij 就大;如果换不换无所谓,Δij 就小。

Step 2 · Softmax 聚合

对每个候选 item,把所有排名低于它的 item 作为负样本,用 softmax 加权聚合。这样就得到了一个 list-level 的优化信号——不是"这个好不好",而是"它在这个列表里的位置好不好"。

Step 3 · Reference 门控

实际训练数据来自多个异构管道。对 GR4AD 自己产生的数据,用 reference model 做约束;对其他管道的数据,退化为 reference-free 模式(类似 SimPO 去掉 reference)。

📐 理论保证:论文证明了 ℒRSPO 是 NDCGcost上界。这意味着优化 RSPO loss 能保证优化排序质量,而不是隔山打牛。

一个例子感受区别

假设你要推荐 3 篇文章给用户:

文章真实相关度DPO 判断GRPO 判断RSPO 考虑
A5/5✅ 好A > B, A > C应该排第 1 位
B4/5✅ 好B > C应该排第 2 位
C1/5❌ 差C 最差应该排末位

DPO 只知道"A 比 C 好",但不知道 "A 和 B 谁更好?"。RSPO 关心的是完整的排序 A > B > C——而且每一步错误排序的代价不一样(A 掉到第 3 位的影响远大于 B 和 C 交换)。RSPO 通过 Lambda 权重精确捕捉了这个差异。

VSL + RSPO:双目标的动态平衡

GR4AD 中还有一个巧妙设计:对齐分数 A(i) = |rp - rv| / (n-1) 动态调节 VSL(监督学习)和 RSPO(强化学习)的权重:

这就像一个教练,看你投篮姿势不对就先纠正动作(VSL),姿势对了才让你加大训练量(RSPO)。

六、五算法全貌对比

算法Reward ModelReference Model优化粒度核心创新最好用的场景
PPO 需要需要per-token Clip 机制稳定训练 通用 RLHF、在线探索
DPO 不需要需要pairwise RM 数学等价消除 偏好转为对齐、SFT 增强
SimPO 不需要不需要pairwise 平均 log prob 作隐式奖励 偏好对齐、去长度偏差
GRPO 不需要不需要group-wise 组内标准化优势、在线采样 推理/数学/代码增强
RSPO 不需要可选(门控)list-wise NDCG 直接优化、排序损失 推荐/广告排序

七、实际场景怎么选?

🔹 场景 1:通用对话模型对齐(ChatGPT 类)

推荐 DPO 或 SimPO。训练简单,显存友好,效果够好。如果你发现模型喜欢输出超长废话,选 SimPO。

🔹 场景 2:数学/代码推理增强

推荐 GRPO。有明确的对错评判标准(答案对不对、测试过不过),rule-based reward 天然适配。DeepSeek-R1 已经证明了这条路。

🔹 场景 3:推荐系统/广告排序

推荐 RSPO。当你的优化目标是 NDCG/收入这一类 list-wise 指标时,PPO/DPO/GRPO 的 per-item 信号都不够用。RSPO 是第一个专门为此设计的 RL 算法。

🔹 场景 4:资源受限,想快速实验

推荐 SimPO。只加载一个模型,loss 简单,超参少,结果是 SOTA 级别。

八、演进趋势与思考

回头看这五个算法的演进,有一条清晰的逻辑链:

Step 1 · 稳定化

PPO 用 clip 机制解决 RL 训练中的不稳定性。这是工业级 RLHF 的基石。

Step 2 · 去 Reward Model

DPO 用数学技巧把 RM 消除掉。发现:偏好数据比想象中信息更丰富。

Step 3 · 去 Reference Model

SimPO 用平均 log prob 替代 reference。发现:模型自己比参考模型更了解自己。

Step 4 · 组内探索

GRPO 让模型对同一问题生成多条回答,组内互比。发现:自我博弈比对着别人的答案学更有效。

Step 5 · 升维优化

RSPO 将 pairwise/pointwise 升维到 list-wise。发现:有些场景的优化目标天然是排序,你不能拆成单点去搞。

算法演进的本质,是不断逼近"用最少的外部依赖,做最直接的优化"。从需要 4 个模型到只要 1 个,从间接的 per-token reward 到直接的 list-wise NDCG。这个趋势不会停。

📎 相关论文:PPO · DPO · SimPO · GRPO (DeepSeekMath) · RSPO (GR4AD)