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

五算法原理、公式推导与场景选择——附完整数学细节


大模型训练通常分三个阶段:预训练(学知识)→ SFT(学对话)→ RL 对齐(学偏好)。前两步大家很熟了,而 RL 对齐这一步——也就是让模型学会"什么样的回答是好的"——是近年演进最快的领域。

本文沿着 PPO → DPO → SimPO → GRPO → RSPO 五条技术分支,把每个算法的目标函数、推导过程、核心公式、实现伪代码、以及它们之间的演进关系讲透。

目标读者:想要亲自实现 RLHF 或理解 DeepSeek-R1 训练原理的工程师。

一张图看发展脉络

2017

PPO — OpenAI (Schulman et al.)

通用 RL 算法。后被引入 ChatGPT RLHF,成为工业标准。

2023

DPO — Stanford (Rafailov et al.)

用 Bradley-Terry 偏好模型消除 Reward Model。RLHF 不再必须用 RL。

2024·05

SimPO — Princeton (Meng et al.)

以平均 log prob 替代 reference model。消除长度偏差,训练推理一致。

2024·09

GRPO — DeepSeek (Shao et al.)

组内标准化优势 + 在线采样。DeepSeek-R1 的核心训练算法。

2026

RSPO — Kuaishou (Xue et al.)

List-wise NDCG 优化。推荐/广告场景的生成式 RL 新范式。

一条清晰的演进方向:越来越少的外部依赖,越来越直接的优化目标。从需要 4 个模型到只要 1 个,从间接的 per-token reward 到直接的 list-wise NDCG。

一、PPO:一切开始的地方

1.1 背景:Policy Gradient 的不稳定性

强化学习的基本框架是:智能体在状态 s 下采取动作 a,获得奖励 r。策略 πθ(a|s) 是给定状态选择动作的概率分布。Policy Gradient 直接对策略参数 θ 求梯度:

▸ REINFORCE(最基础的 Policy Gradient)
θ J(θ) = 𝔼τ~πθ [ Σtθ log πθ(at|st) · Rt ]
Rt 是从时刻 t 到结束的累积奖励。方向:增加高回报动作的概率,减少低回报动作的概率。

问题在哪?想象你在调一个老式收音机旋钮。Policy Gradient 的更新等价于:往上次能得到好信号的方向拧一下。但拧多少?原始 REINFORCE 不控制步长——拧太少训练太慢,拧太多策略"崩了"(模型开始胡说八道)。PPO 的核心贡献就是给这个旋钮加了一个"阻尼器"。

1.2 两个关键技术前提

前提 1:Advantage 函数(GAE)

原始 REINFORCE 用累积奖励 Rt 作为优化信号,方差很大。PPO 改用 Advantage 函数 At:这个动作比"平均水平"好多少?

▸ GAE(Generalized Advantage Estimation)
AtGAE(γ,λ) = Σl=0 (γλ)l · δt+l
其中 δt = rt + γ · V(st+1) - V(st) 是 TD 误差
γ 控制远期奖励的衰减(通常 0.99),λ 控制偏差-方差的权衡(λ=1 等价于蒙特卡洛,λ=0 等价于一步 TD)。V(s) 是 Value Model 对状态价值的估计。

这也是为什么 PPO 需要 Value Model——它负责估计"当前状态大概能拿多少分",有了它才能算 advantage。

前提 2:重要性采样比率

PPO 是在线策略算法:模型自己生成数据,然后用这些数据更新自己。但更新后策略变了,旧数据的采样分布就不准了。解决方法是重要性采样比率

▸ 概率比率(Probability Ratio)
rt(θ) = πθ(at|st) / πθold(at|st)
新策略 vs 旧策略在同一动作上的概率之比。rt > 1 表示新策略更"喜欢"这个动作。

1.3 PPO-Clip:核心创新

有了 rt(θ) 和 At,最朴素的更新是 rt(θ) · At——好的动作放大,差的动作缩小。但没有任何限制,rt 可以跑到 100 甚至 1000,导致策略剧烈跳变。PPO 的做法是 clip 截断

▸ PPO-Clip Loss(最核心公式)
LCLIP(θ) = 𝔼t [ min( rt(θ) · At,   clip(rt(θ), 1-ε, 1+ε) · At ) ]
ε 通常取 0.1~0.2。min(·, ·) 的作用取决于 At 的符号,见下方分析。

这个 min(·, clip(·)) 结构是 PPO 的灵魂。分两种情况理解:

📐 情况分析——为什么 min + clip 能防止策略崩塌?

情况 1:At > 0(这个动作不错,想增加它)
min( rt · At,   clip(rt, 1-ε, 1+ε) · At )

因为 At > 0,clip 的上限生效:rt 最大被限制为 1+ε。也就是说,即使新策略对这个动作的偏好是旧策略的 10 倍(rt=10),loss 也只按 1+ε 计算,阻止策略对这个好动作过于激进地加码

情况 2:At < 0(这个动作不够好,想压它)
min( rt · At,   clip(rt, 1-ε, 1+ε) · At )

因为 At < 0,clip 的下限生效:rt 最小被限制为 1-ε。也就是说,即使新策略对这个动作的偏好降到旧策略的 0.01 倍(rt=0.01),loss 也只按 1-ε 计算,阻止策略完全遗忘这个动作

直观理解:把策略想象成一个天平。At > 0 的动作想往右移,At < 0 的动作想往左移。PPO 的 clip 机制给两边都画了一道"勿越"的红线——你可以调,但不能一次调太多。

1.4 PPO 在 RLHF 中的完整 Loss

在大模型 RLHF 中,PPO 通常有三个分量:

▸ PPO-RLHF 完整目标函数(InstructGPT 方案)
L(θ) = LCLIP(θ) - β1 · 𝔼[ KL(πθ || πref) ] + β2 · LPTX(θ)
项 1:PPO-Clip,使策略朝高 reward 方向优化
项 2:KL 散度惩罚,防止策略偏离初始 SFT 模型太远("遗忘"通用能力)
项 3:预训练损失(auxiliary PTX loss),保持语言建模能力

这就是 InstructGPT / ChatGPT 的训练方案。四项同时加载:策略模型、参考模型、Reward Model、Value Model——4 个模型,显存爆炸。但当时没有更好的方案。

1.5 PPO 实现伪代码

PPO for RLHF — 单步训练循环

for each iteration: // 1. 采样(用当前策略) prompts ← sample_batch(D) responses ← policy_model.generate(prompts) rewards ← reward_model(prompts, responses) // RM 打分 values ← value_model(prompts, responses) // Value 估计 // 2. 计算 Advantage(GAE) At ← GAE(rewards, values, γ=0.99, λ=0.95) // 3. 更新策略(PPO-Clip,多轮 epoch) for k = 1..K: // 通常 K=4 rt ← πθ(at) / πθ_old(at) // 重要性比率 Lclip ← min(rt·At, clip(rt, 1-ε, 1+ε)·At) Lkl ← KL(πθ || πref) L ← -Lclip + β₁·Lkl - β₂·Lptx θ ← θ - α · ∇θL // 4. 更新 Value Model value_model ← MSE(values, rewards)

1.6 PPO 的优缺点总结

✅ 优势

  • Clip 机制保证训练稳定,不易崩塌
  • 在线采样 → 策略可以自我探索,逐步改善
  • 理论上可以优化任意 reward function
  • 工业验证充分(ChatGPT / Claude 早期均基于此)

❌ 缺陷

  • 需要同时跑 4 个模型,工程复杂度极高
  • Reward Model 可能被"刷分"攻破(reward hacking)
  • 超参数多:clip ε、KL β、GAE (γ,λ)、学习率、epoch 数 K
  • 采样-训练-更新循环慢,迭代周期长

二、DPO:数学消除 Reward Model

2.1 核心洞察:Reward Model 可以被解出来

DPO 的作者做了一个关键的数学观察。RLHF 的优化目标是:

▸ RLHF 目标(PPO 的优化目标)
maxπ 𝔼x~D, y~π [ r(x, y) ] - β · KL( π(y|x) || πref(y|x) )
最大化期望奖励,同时用 KL 惩罚防止偏离参考策略太远。

这个带 KL 约束的优化问题有闭式解!最优策略 π* 的表达式中,reward 函数可以被反解出来。然后代入 Bradley-Terry 偏好模型(人类偏好概率模型),reward 项就神奇地消掉了。

2.2 完整推导

📐 DPO 推导四步走

Step 1:带 KL 约束的最优策略有闭式解
πr(y|x) = (1/Z(x)) · πref(y|x) · exp( r(x,y) / β )

其中 Z(x) 是配分函数(归一化常数)。

Step 2:反解出 reward
r(x,y) = β · log( πr(y|x) / πref(y|x) ) + β · log Z(x)

reward 可以完全用策略比率表达。

Step 3:代入 Bradley-Terry 偏好模型

Bradley-Terry 模型假设:人类偏好 yw 胜 yl 的概率为:

P(yw ≻ yl | x) = σ( r(x, yw) - r(x, yl) )

σ 是 sigmoid 函数。

Step 4:r 中的 Z(x) 在差值中对消
r(x, yw) - r(x, yl) = β · [ log(πr(yw|x)/πref(yw|x)) - log(πr(yl|x)/πref(yl|x)) ]

log Z(x) 消掉了!不需要知道它的值。

最终得到 DPO 的损失函数——它等价于优化 RLHF 目标,但不再需要 Reward Model!

▸ DPO Loss(最核心公式)
LDPOθ; πref) = -𝔼(x, yw, yl) [ log σ( β · ρθ ) ]

其中 ρθ = log πθ(yw|x)/πref(yw|x) - log πθ(yl|x)/πref(yl|x)
直觉:最大化好回答 (yw) 相对差回答 (yl) 的"概率优势"。
β 控制偏好强度——β 越小,偏好信号越弱(需要更多的偏好差异才能产生有效梯度);β 越大,偏好信号越强(但可能过拟合标注偏差)。

2.3 DPO 的梯度分析——模型实际学到了什么?

对 θ 求梯度,得到:

▸ DPO 梯度
θ LDPO = -β · 𝔼 [ σ(-β·ρθ) · ( ∇θ log πθ(yw|x) - ∇θ log πθ(yl|x) ) ]
权重 σ(-β·ρθ) 的直观含义:
· 当模型已经很好地偏好 yw 时(ρθ 很大),σ(-β·ρθ) → 0,梯度很小 → 不需要再学
· 当模型分不清 yw 和 yl 时(ρθ ≈ 0),σ(-β·ρθ) ≈ 0.5,梯度最大 → 重点学这些难的
· 当模型错误地偏好 yl 时(ρθ < 0),σ(-β·ρθ) → 1,梯度最强 → 需要纠正

这个自适应权重机制是 DPO 稳定好用的关键——它自动把训练资源集中在"分不清"和"分错了"的样本上。

2.4 DPO 实现伪代码

DPO 训练步骤

for each batch (prompt_x, chosen_yw, rejected_yl): // 前向计算 log prob(只加载策略+参考,两个模型) logp_w_θ ← policy_model.log_prob(prompt_x, chosen_yw) logp_l_θ ← policy_model.log_prob(prompt_x, rejected_yl) logp_w_ref ← ref_model.log_prob(prompt_x, chosen_yw) logp_l_ref ← ref_model.log_prob(prompt_x, rejected_yl) // 计算 DPO loss ρ ← (logp_w_θ - logp_w_ref) - (logp_l_θ - logp_l_ref) L ← -log(sigmoid(β · ρ)) // 反向传播,更新策略模型(参考模型不动) θ ← θ - α · ∇θL

2.5 DPO 的局限

三、SimPO:再砍掉 Reference Model

3.1 动机:DPO 里的 Reference Model 带来什么麻烦?

DPO 的目标中始终存在 log πθ(y)/πref(y) 这一项。两个问题:

  1. 显存:两个模型(策略 + 参考)同时驻留 GPU,限制了可训练的模型规模
  2. 长度偏差(Length Bias):DPO 已被大量实验证实会偏向生成更长的回答。原因在于:
▸ DPO 的长度偏差来源
πref 的 log prob 随序列长度递减(更长 = 更多 token,每个 token 的 log prob 都是负数,累加后绝对值更大)。但 πref 的衰减速度和 πθ 不一样,导致 log πθref 在不同长度下的行为不一致。DPO 倾向于给长序列更高的分数,即使质量一样。

3.2 SimPO 的核心设计

SimPO 的做法极其简洁:用策略自己生成回答的平均 log probability 作为 reward。不需要任何参考模型。

▸ SimPO 隐式 Reward
rSimPO(x, y) = (β / |y|) · Σt log πθ(yt | x, y<t)
除以 |y| 是关键——做了长度归一化。回答无论长短,比较的是"平均每个 token 的自信度"。

3.3 SimPO Loss

▸ SimPO Loss(最核心公式)
LSimPO = -𝔼 [ log σ( β · ( r(x, yw) - r(x, yl) - γ ) ) ]
γ 是 target reward margin——不仅要好回答分更高,还要高出至少 γ。这防止模型在"好和差差不多"的边缘情况上打转。
β 是 scaling factor,控制整体偏好信号的强弱。

对比 DPO 和 SimPO 的梯度:

▸ SimPO 梯度
θ LSimPO = -β · 𝔼 [ σ(-β · ( Δr - γ )) · ( ∇θ r(x, yw) - ∇θ r(x, yl) ) ]
其中 Δr = r(x, yw) - r(x, yl)
和 DPO 梯度结构类似,但 reward 的定义完全不同:SimPO 用的是平均 log prob,DPO 用的是相对参考模型的对数比率。
关键区别:SimPO 的梯度天然做了长度归一化,不会偏向长回答。

3.4 SimPO 的关键改进

改进点DPOSimPO
Reward 定义log πθref(相对参考模型)(1/|y|)·Σ log πθ(绝对平均 log prob)
GPU 模型数2 个(策略 + 参考)1 个(仅策略)
长度偏差存在,偏向长回答无,平均 log prob 天然校正
训练-推理一致不一致(训练时用 πref,推理时不用)一致(训练和推理用同一个 reward 定义)
Margin有(γ),要求好回答显著优于差回答
📊 实验效果:SimPO 在 AlpacaEval 2、MT-Bench 等基准上显著优于 DPO。最突出的改进是——它不会为了刷分而输出超长废话。在 AlpacaEval 2 上,DPO 的回答平均长度是 SFT 的 ~1.8 倍,而 SimPO 降到了 ~1.2 倍。

四、GRPO:组内互比,在线探索

4.1 动机:离线偏好数据的局限

DPO 和 SimPO 处理的都是离线偏好数据——需要事先标注好"A 比 B 好"的数据集。问题在于:

  1. 标注昂贵:高质量偏好标注需要专业人士,难以规模化
  2. 离线数据固定:训练中用的对比都是"别人的判断",模型无法自己探索
  3. 偏好信号弱:只有二元对比(好 vs 差),信息量有限

GRPO 回到在线 RL 的思路,但用了一个巧妙的 trick 绕过了 Value Model。

4.2 GRPO 的核心思想

PPO 需要 Value Model 是因为它要估计 advantage——"这个动作比平均水平好多少?" PPO 的答案是:训练一个神经网络(Value Model)来做这个估计。

GRPO 给了一个更简单的答案:同一个 prompt,生成 G 条 response,组内互相比较。不需要 Value Model,组内均值就是 baseline。

🎯 核心:对每个 prompt x,采样 G 条 response {o1, ..., oG},每组算均值 μ 和标准差 σ,每条的优势 = (reward - μ) / σ。这比 PPO 的 GAE 简单得多,而且不需要 Value Model!

4.3 GRPO 完整公式

▸ GRPO Loss(最核心公式)
LGRPO(θ) = - (1/G) · Σi=1..G (1/|oi|) · Σt [ min( ri,t(θ)·Âi,t,   clip(ri,t(θ), 1-ε, 1+ε)·Âi,t ) ]  + β·DKL

其中:
  ri,t(θ) = πθ(oi,t | x, oi,<t) / πθ_old(oi,t | x, oi,<t)   ← 重要性比率(和 PPO 一样)
  Âi,t = (Ri - μgroup) / σgroup   ← 组内标准化的优势(和 PPO 不同!)
Ri 是第 i 条 response 的总奖励(可用于 rule-based 或 model-based reward)
μgroup = (1/G)·ΣjRj,σgroup = std(R1, ..., RG)
DKL 是 KL 散度惩罚(可选,用于防止遗忘)

📐 GRPO vs PPO —— 关键差异

PPO 的 Advantage
AtPPO = GAE(r, V, γ, λ)  →  需要额外的 Value Model 来估计 V(s)
GRPO 的 Advantage
ÂiGRPO = (Ri - μgroup) / σgroup  →  只用组内统计量,无需 Value Model

GRPO 的做法本质上是用 多个 sample 之间的方差 替代了 PPO 中 Value Model 的方差估计。当 G 足够大(如 16~64),组内标准化就能提供稳定的优势信号。

类比:PPO 是你找了一个专业评委(Value Model)坐在场边实时打分。GRPO 是让同一组选手(G 条 response)比完赛,按排名发奖——第一名加分,最后一名扣分。不用评委,自己跟同龄人比。

4.4 GRPO 训练流程(DeepSeek-R1 方案)

GRPO 完整训练步骤(以推理增强为例)

// ===== 阶段 0:冷启动 SFT ===== πθ ← SFT(base_model, CoT_data) // 用几千条思维链数据微调 // ===== 阶段 1:GRPO 强化学习 ===== for each training step: // Step 1: 采样 G 条 response prompts ← sample_batch(D) // 抽样一批问题 for i = 1..G: // G=16 或 64 oi ← πθ_old.generate(prompt) // 相同 prompt,不同采样 // Step 2: 计算奖励(rule-based) for i = 1..G: Riacc ← accuracy(oi, answer) // 答案正确性(数学题) Rifmt ← format_check(oi) // 格式合规性(think/answer 标签) Ri ← Riacc + α·Rifmt // 加权求和 // Step 3: 组内标准化 μ ← mean(R1..G), σ ← std(R1..G) Âi ← (Ri - μ) / σ // Step 4: PPO-style clip 更新 for k = 1..K: // K=4 轮 epoch ri,t ← πθ(oi,t) / πθ_old(oi,t) Lclip ← Σi Σt min( ri,t·Âi, clip(ri,t, 1-ε, 1+ε)·Âi ) L ← -Lclip + β·KL(πθ || πref) θ ← θ - α · ∇θL
🔥 为什么 GRPO 火了?DeepSeek-R1 用它训练出了顶尖的推理能力,全程不需要 reward model。数学题用答案对错当 reward,代码题用测试用例通过率。这种 rule-based reward 天然避免了 reward hacking 问题——因为"答案对不对"是客观的,没法刷分。

4.5 GRPO vs DPO vs PPO 对比

特性PPODPOGRPO
Reward Model✅ 需要❌ 不需要(数学消除)❌ 不需要(但需 rule-based reward)
Reference Model✅ 需要(KL 约束)✅ 需要(DPO loss)可选(KL 惩罚可关)
Value Model✅ 需要(GAE)❌ 不需要❌ 不需要(组内标准化)
在线采样❌(离线数据)✅(G 路并行采样)
偏好数据需求少量(训练 RM)大量(所有训练数据)无(rule-based reward)
训练复杂度极高(4 模型 + 多轮循环)低(类似 SFT)中(G 路采样 + clip 更新)
最适合通用对齐偏好数据充足的对齐推理/数学/代码增强

4.6 GRPO 的局限

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

5.1 前面所有算法的共同盲区

PPO 优化 per-token reward。DPO/SimPO 优化 pairwise 偏好。GRPO 优化 group-wise 优势

但它们都在回答同一个问题:"这个回答/这个 item 好不好?"

在推荐系统和广告排序中,你面对的是完全不同的场景:

给定 500 个候选广告,请按 eCPM 排出 top 10。这 10 个 item 作为一个整体的收入,不是 10 个独立 item 的收入之和。因为位置决定了点击率——排第 1 的和排第 10 的,曝光量差一个数量级。

这就是 list-wise 优化——优化的不是"哪个 item 好",而是"这个列表排得对不对"。

5.2 RSPO 的前置知识:NDCG 和 LambdaRank

NDCG 是什么?

▸ NDCG(Normalized Discounted Cumulative Gain)
DCG@k = Σi=1..k ( 2reli - 1 ) / log2(i + 1)
NDCG@k = DCG@k / IDCG@k  (IDCG 是理想排序下的 DCG,用于归一化到 [0, 1])
reli 是第 i 位的相关性得分(如 0-5 分)。log2(i+1) 是位置衰减——排第 1 位权重最高,越往后折扣越大。
NDCG ∈ [0, 1],越大表示排序越好。

通俗例子:推荐 3 篇文章 A(5 分)、B(4 分)、C(1 分)。

NDCG 天然捕捉了"好 item 排前面更重要"这一直觉。

LambdaRank:排序学习的基石

NDCG 不可导怎么办?LambdaRank 的核心 trick:不用直接优化 NDCG,而是定义每对 item 的"交换代价"

▸ Lambda 权重
Δij = |ΔNDCGij|    (交换 i 和 j 后 NDCG 的变化量)
如果 i 和 j 的位置不重要(比如都是低分 item 排在靠后的位置),Δij ≈ 0,这对几乎不产生训练信号。
如果 i 是高分 item 排在后面、j 是低分 item 排在前面,Δij 很大 → 这对要重点优化。

5.3 RSPO:将 LambdaRank 融入 RL 对齐

RSPO 的关键贡献:把 LambdaRank 的 pairwise 交换代价,升维到 list-wise 的 RL 偏好优化中。

▸ RSPO Loss(最核心公式)
RSPOθ) = -𝔼x~D [ (1/n) · Σi=1..n ( 1 / |ŷ<i| ) · Σj: rj<ri Δij · log σ( β · ρij ) ) ]

其中:
  ρij = log πθ(yi|x) / πref(yi|x) - log πθ(yj|x) / πref(yj|x)   ← 和 DPO 结构一致
  Δij = |ΔNDCGij|   ← Lambda 权重,这是 RSPO 独有的
  ŷ<i = { y1, ..., yi-1 }   ← 已生成的序列前缀

📐 RSPO vs DPO —— 关键公式对比

DPO(pairwise)
LDPO = -log σ( β · ρw,l )   只有一个对比对 (w, l)
RSPO(list-wise)
LRSPO = -Σi Σj: rj<ri Δij · log σ( β · ρij )   对列表中所有 (i, j) 对加权求和

区别就一个:Δij。DPO 对所有对比对平等对待,RSPO 用 NDCG 变化量给每对区别对待。模型会把更多训练资源花在"错位代价大"的 item 对上。

直觉:回到 3 篇文章的例子。RSPO 会比 DPO 更"着急"地告诉我们:A(5 分) 排到第 3 位是灾难,但 B(4 分) 和 C(1 分) 的先后顺序没那么重要。DPO 只知道"A > B, A > C, B > C"三个对比,RSPO 额外知道"纠正 A<->C 的错位,比纠正 B<->C 的错位重要得多"。

5.4 Reference 门控机制

GR4AD 的训练数据来自多个异构管道。有些是模型自己生成的(分布内),有些来自其他推荐管道(分布外)。对所有数据都用 reference model 约束不合适。

▸ Reference 门控
ρij =
  log πθ(yi) / πref(yi) - log πθ(yj) / πref(yj),   if DKLθ || πref) < τ   分布偏移小 → 用 reference
  log πθ(yi) - log πθ(yj),   else   分布偏移大 → 退化到 SimPO 模式
τ 是阈值。当模型和 reference 偏差过大时,reference 提供的信号不可靠,此时退化为 reference-free 模式(类似 SimPO 去掉 reference model)。

5.5 RSPO 的理论保证

论文证明了 ℒRSPO 是 NDCGcost 的上界:

▸ 关键定理(附录 A.1 证明)
NDCGcost ≤ C · ℒRSPO    (C 是一个常数)
这意味着:最小化 ℒRSPO 就能保证 NDCG 损失不会太高。
而 PPO/DPO/GRPO 都没有这个性质——它们优化的目标和 NDCG 之间没有数学绑定关系。

5.6 VSL + RSPO 双目标动态平衡

GR4AD 中还有一个巧妙设计:

▸ 对齐分数 A(i)
A(i) = |rp - rv| / (n-1)
其中 rp 是模型预测的排名,rv 是价值模型给出的真实排名。
A(i) 大 → 偏差大 → 增加 VSL(监督学习)权重,先学会基本排序
A(i) 小 → 已对齐 → 增加 RSPO(RL)权重,进一步优化 NDCG

这就像教练教你投篮——姿势不对时先纠正姿势(VSL),姿势对了再让你加大训练量(RSPO)。

六、五算法全貌对比

维度PPODPOSimPOGRPORSPO
优化粒度per-tokenpairwisepairwisegroup-wiselist-wise
Reward 来源Reward Model无(数学消除)平均 log probRule-based / RMValue Model 排序
需 Reference✅ KL 约束✅ DPO loss可选门控(可选)
需 Value Model✅ GAE❌(组内标准化)
需 Reward Model❌(可 rule)
在线采样❌ 离线❌ 离线✅(异步)
核心创新Clip 稳定训练RM 数学消除Ref 消除 + 长度归一化组内标准化替代 ValueNDCG 直接优化
最适合通用 RLHF偏好数据对齐去长度偏差对齐推理/代码增强推荐/广告排序

七、实际场景怎么选?

🔹 通用对话模型对齐(ChatGPT 类)

推荐 DPO 或 SimPO。如果你有大量偏好标注数据,DPO;如果模型喜欢输出超长废话,SimPO。两条路都很成熟,训练像 SFT 一样简单。

🔹 数学/代码推理增强

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

🔹 推荐系统/广告排序

推荐 RSPO。当优化目标是 NDCG/收入这种 list-wise 指标时,PPO/DPO/GRPO 都力不从心。RSPO 是目前唯一专门为此设计的生成式 RL 算法。

🔹 资源受限,想快速实验

推荐 SimPO。只加载一个模型,loss 简单,超参少(基本只需要调 β 和 γ),结果是 SOTA 级别的。

八、演进趋势与思考

回头看这五个算法的演进,本质都在追求同一件事:用最少的外部依赖,做最直接的优化。

Step 1 · 稳定化

PPO 用 clip 机制解决 RL 训练中的不稳定性。代价是需要 4 个模型协同工作,工程极重。

Step 2 · 去 Reward Model

DPO 用 Bradley-Terry 模型的数学技巧把 RM 消除。但 reference model 还在,而且引入了训练-推理不一致。

Step 3 · 去 Reference + 消除偏差

SimPO 用平均 log prob 替代 reference model,同时解决了长度偏差问题。只加载一个模型,训练和推理终于一致。

Step 4 · 在线探索

GRPO 回到在线 RL,但用组内标准化绕过了 Value Model。让模型自己生成、自己比较、自己优化——自我博弈比离线学习更有效。

Step 5 · 升维优化

RSPO 将优化粒度从 pairwise/group-wise 升维到 list-wise,直接优化排序指标并给出理论保证。当你的业务目标是"一组 item 的整体排名质量"时,这是唯一正确的选择。

算法演进的根本驱动力,不是数学变得更复杂,而是我们越来越理解"到底要优化什么"。从"让模型变得更好"到"让排序更正确",从间接的 per-token reward 到直接的 list-wise NDCG——每一步都在逼近真实的优化目标。这个趋势不会停止。下一个要"砍掉"的外挂模型是什么?你的场景里还藏着什么没被直接优化的目标?

📎 相关论文:PPO (2017) · DPO (2023) · SimPO (2024) · GRPO / DeepSeekMath (2024) · RSPO / GR4AD (2026)