RL
大语言模型强化学习 (Reinforcement Learning, RL) 让当前策略生成回答或与环境交互,再根据奖励更新参数。它弥补 有监督微调 只能模仿既有答案的局限:当目标是「答案是否正确」「回答 A 是否优于回答 B」或「多步工具任务是否完成」时,奖励可以直接表达结果质量,并通过信用分配改变产生结果的 token 与动作概率。
本篇把偏好优化、RLHF、DPO、PPO、GRPO、DAPO、GSPO、可验证奖励和 Agentic RL 放在同一套记号下。需要先明确:RLHF 描述反馈来源,RLVR 描述奖励性质,PPO、GRPO、DAPO 与 GSPO 描述策略更新方法;DPO 使用固定偏好数据直接优化,通常不属于在线策略梯度 RL。
训练循环与符号约定¶
先在一个能可靠自动评分的小任务上跑通基本循环:
上线大规模训练前,必须验证:
- rollout 文本、token 与记录的旧策略 log-prob 对齐;
- 奖励方向、范围、解析失败与截断处理正确;
- response mask 不包含 prompt、padding 或环境 observation;
- 正优势提高对应动作概率,负优势降低对应动作概率;
- 奖励、KL、熵、长度、裁剪比例和任务指标都可监控;
- 同一 rollout 与模型版本可以重放并复算 loss。
以每个 prompt 采样 \(G\) 个回答的训练为例,统一形状如下:
| 张量 | 含义 | 形状 |
|---|---|---|
| \(X\) | prompt token | \([B,S_x]\) |
| \(Y\) | response token | \([B,G,L]\) |
| \(M\) | response 有效 token mask | \([B,G,L]\) |
| \(Z\) | 策略 response logits | \([B,G,L,V]\) |
| \(\log P_\theta\) | 采样 token 的新策略 log-prob | \([B,G,L]\) |
| \(\log P_{\text{old}}\) | rollout 策略 log-prob | \([B,G,L]\) |
| \(R\) | 回答级奖励 | \([B,G]\) |
| \(A\) | token 级优势 | \([B,G,L]\),或由 \([B,G]\) 广播 |
| \(V_\psi\) | critic 对每个状态的价值 | \([B,G,L]\) |
\(V\) 是词表大小,不应与价值函数 \(V_\psi\) 淆。实现可能先把前两维展平为 \(N=BG\),得到 \(Y:[N,L]\) 和 \(Z:[N,L,V]\);只要 reshape 前后索引和 mask 一致,数学含义不变。
阶段意义¶
从语言模型到策略¶
给定 prompt \(x\) 与已生成前缀 \(y_{<t}\),语言模型本身就是策略:
在单轮生成中,状态是 \((x,y_{<t})\),动作是下一个 token,完整回答是轨迹。多步 Agent 还会执行工具动作并接收环境观察:
SFT 问「专家在这个状态做了什么」,RL 问「这个动作最终带来了多大回报」。因此 RL 可以在没有唯一标准文本的情况下优化数学正确率、代码测试、安全偏好或完整任务成功率。
策略梯度¶
最基本的策略梯度把优势 \(A_{b,g,t}\) 作为采样 token log-prob 的权重:
\(\log P_\theta,A,M\in\mathbb{R}^{B\times G\times L}\),逐元素相乘后归约为标量。\(A>0\) 时,最小化 loss 会提高采样动作的概率;\(A<0\) 时会降低概率。奖励决定「结果多好」,优势估计减去基线并完成信用分配,策略目标再决定单次更新允许走多远。
奖励与偏好¶
标量奖励¶
奖励可以来自:
- 人类或 AI 偏好模型:适合有用性、风格和安全等主观目标;
- 规则验证器:适合数学答案、格式、编译和测试;
- 环境结果:适合搜索、代码修复、网页操作等多步任务;
- 过程监督:在中间步骤提供局部信号;
- 多目标组合:正确性、成本、安全和长度的加权和。
若原始奖励分量为 \(R^{(k)}\in\mathbb{R}^{B\times G}\),组合奖励可写为:
权重会改变训练目标本身。奖励尺度过大、解析器有漏洞或不同分量相互冲突,都会直接污染优势,因此必须分别记录原始分量,不能只保存最终总分。
奖励模型与 RLHF¶
基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF) 源于用人类偏好学习奖励的路线,并由 InstructGPT 规模化到语言模型。经典流程是:
对 batch 中的 chosen 与 rejected 回答,奖励模型输出:
其中 \(S[:,0]=s_w\in\mathbb{R}^{B}\),\(S[:,1]=s_l\in\mathbb{R}^{B}\)。Bradley–Terry 偏好概率与 loss 为:
奖励模型把稀缺比较转成可重复调用的标量,但它只是偏好数据的近似。策略可能利用长度、措辞或评分漏洞获得高分,因此在线阶段还要用固定参考策略 \(\pi_{\text{ref}}\) 限制漂移:
基于 AI 反馈的强化学习 (Reinforcement Learning from AI Feedback, RLAIF) 用 AI 按原则产生偏好或奖励,改变的是反馈提供者,不限定优化器。Constitutional AI 的监督式批评与修订仍是 SFT;用 AI 偏好训练奖励并更新策略时才进入 RLAIF。
Constitutional AI 的典型流程分为两段:监督阶段让模型依据书面原则批评并修订可能有害的回答,再用修订结果做 SFT;强化学习阶段对同一 prompt 生成多份回答,由 AI 依据原则给出偏好,用这些偏好训练奖励模型并优化策略。原则使判断标准可以批量复用,却不会自动消除反馈模型的偏差,最终仍需人工评估和红队测试。
偏好优化与 DPO¶
偏好优化用 \((x,y_w,y_l)\) 表达「回答 \(y_w\) 优于 \(y_l\)」。它既包括奖励模型加 RL,也包括不在线采样的直接方法。直接偏好优化 (Direct Preference Optimization, DPO) 从带 KL 约束的奖励目标推导出固定偏好对上的分类损失。
先计算每条回答的序列 log-prob。策略对每个 token 的 log-prob 形状为 \([B,L_w]\) 与 \([B,L_l]\),经过 response mask 求和后得到:
定义相对参考模型的 margin:
DPO loss 为:
该标量 loss 提高 chosen 相对 rejected 的隐式奖励差。标准 DPO 不需要在每轮更新时让当前策略生成新回答,因而是离线直接偏好优化,不是 PPO 一类在线策略梯度算法。它实现简单、训练稳定,但无法探索固定偏好集没有覆盖的行为,并对标签噪声、模板与长度偏差敏感。
PPO¶
近端策略优化 (Proximal Policy Optimization, PPO) 同时训练 actor 与 critic,并用新旧策略概率比的裁剪限制单次更新。
优势与价值 loss¶
critic 输出 \(V_\psi\in\mathbb{R}^{B\times G\times L}\)。时序差分误差与广义优势估计 (Generalized Advantage Estimation, GAE) 为:
将所有 batch 与 group 维保留后,\(r,\delta,\hat A,V_\psi\) 都可表示为 \([B,G,L]\);序列级奖励通常放在终止 token,其余位置为 0,再通过 GAE 向前传播。回报目标 \(\hat V\in\mathbb{R}^{B\times G\times L}\),critic loss 为:
裁剪策略 loss¶
采样 token 的重要性比为:
PPO 要最大化:
训练最小化 \(\mathcal{L}_{\text{actor}}=-J_{\text{PPO}}\),并可组合 \(\mathcal{L}_{V}\)、熵奖励和参考模型 KL。PPO clipping 约束当前策略相对 rollout 策略的更新,参考模型 KL 约束当前策略相对 SFT 锚点的漂移,两者不是同一项。
PPO 的主要成本是 actor、参考模型、奖励模型与体量相近的 critic 同时参与流水线;critic 不准时,优势方差也会增大。
GRPO¶
DeepSeekMath 提出的组相对策略优化 (Group Relative Policy Optimization, GRPO) 对每个 prompt 采样 \(G\) 条回答,用组内奖励统计量替代 critic。回答级奖励 \(R\in\mathbb{R}^{B\times G}\) 经过标准化:
同一回答中的 token 共享 \(\hat A_{b,g}\)。常见的 sample-level GRPO 目标为:
其中 \(L_{b,g}=\sum_t M_{b,g,t}\),内层先按每条回答长度归一化,因此每条回答权重相同。实际配方还可加入参考模型 KL。GRPO 省去 critic,却需要每个 prompt 生成多条回答;全组奖励相同,尤其全对或全错时,组内优势接近 0,该 prompt 几乎不产生学习信号。
GRPO 与可验证奖励强化学习 (Reinforcement Learning with Verifiable Rewards, RLVR) 不是同义词:GRPO 是更新方法,RLVR 表示奖励来自答案校验、代码执行或形式验证。两者经常组合,但 GRPO 也可使用模型奖励,RLVR 也可使用 PPO 或其他优化器。
DeepSeek-R1 的多阶段路线¶
DeepSeek-R1 展示了 RLVR 与 GRPO 在推理训练中的组合,但 R1-Zero 与正式 R1 的训练路线不同:
- R1-Zero 从基础模型直接进行大规模 RL,用于观察规则奖励能否诱发更长推理、反思和自校验;
- 正式 R1 先加入少量冷启动长推理数据,改善可读性和输出格式;
- 随后对数学、代码和逻辑任务进行推理 RL;
- 通过拒绝采样筛选推理样本,并与通用任务数据一起再次 SFT;
- 最后用覆盖有用性和无害性的综合 RL 完成对齐。
因此「推理模型完全不需要 SFT」不是从正式 R1 流程能够得到的结论。结果奖励也不天然保证过程正确:只验最终答案时,错误推理可能碰巧命中;代码只跑公开测试时,也可能利用覆盖不足。
DAPO¶
DAPO 的全称是解耦裁剪与动态采样策略优化 (Decoupled Clip and Dynamic sAmpling Policy Optimization)。它针对长推理 GRPO 的熵坍缩、无效 prompt、长度权重和截断奖励噪声,引入四项相互配合的修改。
DAPO loss 与形状¶
DAPO 仍使用 token 级概率比 \(\rho\in\mathbb{R}^{B\times G\times L}\) 和组相对优势 \(\hat A\in\mathbb{R}^{B\times G}\),但将上下裁剪范围拆成 \(\varepsilon_{\text{low}}\) 与 \(\varepsilon_{\text{high}}\),并按全 batch 的有效 token 归一化:
分子中每项形状为 \([B,G,L]\),mask 后归约为标量;训练 loss 为 \(-J_{\text{DAPO}}\)。这与上一节「每条回答先除以 \(L_{b,g}\)」不同:DAPO 的 token-level reduction 让每个有效 token 权重相同,长回答因此贡献更多 token 项。
Clip-Higher¶
令 \(\varepsilon_{\text{high}}>\varepsilon_{\text{low}}\),给低概率但正优势的探索 token 更大的上升空间,同时保留较严格的下界,避免动作概率快速被压到接近 0。它有意区分降低概率与提高概率两个方向,而非简单地把对称 \(\varepsilon\) 整体调大。
Dynamic Sampling¶
对于二值正确性奖励,若一个 prompt 的 \(G\) 条回答全对或全错,则 \(\operatorname{std}(R_{b,:})=0\),组相对优势没有区分度。DAPO 持续过采样 prompt,只把满足
的组装入训练 batch,直到有效组数达到目标。这样减少零梯度组,但采样量变成动态值;它也会改变实际训练 prompt 分布,因此必须记录过滤率与难度分布。
Token-Level Policy Gradient Loss¶
sample-level reduction 让每条回答总权重相同,于是长回答的单个 token 权重更小。DAPO 改用全局有效 token 分母 \(\sum M\),使相同模式在长短回答中获得相同 token 权重。这对长思维链训练重要,但也意味着长回答总贡献更大,需要同时监控长度分布和冗余模式。
Overlong Reward Shaping¶
粗暴地给所有截断回答相同负奖励,会把「推理合理但刚好超长」与「无意义重复」混为一谈。设最大长度为 \(L_{\max}\),缓冲区间为 \(L_{\text{cache}}\),DAPO 的软长度惩罚可写为:
\(R_{\text{length}}\in\mathbb{R}^{B\times G}\) 与正确性奖励相加后,再形成组内优势。另一种稳定化方式是直接屏蔽截断样本的策略 loss。无论采用哪种方式,都应单独统计截断率,避免模型通过缩短但不完成回答来规避惩罚。
GSPO¶
组序列策略优化 (Group Sequence Policy Optimization, GSPO) 认为「奖励施加在整条回答上,off-policy 校正与裁剪也应以整条回答为单位」。它不使用 GRPO/DAPO 的逐 token 重要性比来分别裁剪,而是先构造长度归一化的序列重要性比。
对回答 \((b,g)\),令有效长度 \(L_{b,g}=\sum_tM_{b,g,t}\),则:
token log-prob 差为 \([B,G,L]\),沿 \(L\) 维 masked mean 后得到 \(s\in\mathbb{R}^{B\times G}\)。长度归一化避免原始序列概率随长度指数变小,也让不同长度回答使用同一量级的裁剪范围。
GSPO 目标为:
\(s,\hat A\in\mathbb{R}^{B\times G}\),逐元素计算后归约为标量。只要一条回答被裁剪,该回答整体被裁剪;未裁剪时,\(\nabla\log s\) 会把同一个序列级权重均匀分配到该回答的有效 token。GSPO 论文据此强调优化单位与序列奖励单位对齐,并报告其对长回答与 MoE RL 的稳定性收益。
GSPO 的裁剪阈值不能直接照搬 token 级 GRPO,因为 \(s\) 的定义和数值范围不同。它解决的是 off-policy 权重与裁剪粒度问题,不会自动修复奖励错误、无效验证器或全组同奖。
方法对照¶
| 方法 | 数据是否在线 | 优势/监督 | 重要性比与裁剪单位 | 是否需要 critic |
|---|---|---|---|---|
| DPO | 否 | chosen / rejected margin | 无 PPO 式 ratio | 否 |
| PPO | 是 | critic + GAE | token | 是 |
| GRPO | 是 | 组内相对奖励 | token,sample-level reduction | 否 |
| DAPO | 是 | 组内相对奖励 | token,非对称 clip,token-level reduction | 否 |
| GSPO | 是 | 组内相对奖励 | 长度归一化 sequence ratio | 否 |
算法名称不能替代配置。实际系统还需说明 KL 实现、reward normalization、loss reduction、rollout 与训练策略版本差、每条 prompt 的采样数,以及截断样本如何处理。
Agentic RL¶
当模型需要搜索、执行代码、调用 API 或操作浏览器时,工具返回会改变后续状态,奖励也常延迟到几十步之后。Agentic RL 描述这种多步环境交互上的参数更新,不是某一个固定优化器。
| RL 要素 | 代码修复 Agent 中的含义 |
|---|---|
| 状态 | 问题、仓库、当前修改和测试历史 |
| 动作 | 读文件、编辑、执行命令、提交答案 |
| 观察 | 文件内容、编译错误、测试输出 |
| 结果奖励 | 隐藏测试通过率、功能正确性 |
| 过程约束 | 越权、超时、工具成本、安全违规 |
轨迹回报可写为 \(R(\tau)=\sum_t\gamma^t r_t\)。如果只有最终隐藏测试分数,早期搜索与编辑共享一个稀疏奖励,信用分配很难;过程奖励可评价非法调用或中间测试,但过度塑形也可能把代理目标变成刷步骤分。
训练环境必须可隔离、重置和回放。若允许修改测试,Agent 可能删除断言来骗取成功;若环境不重置,上一条轨迹的文件会污染下一条。完整记录应包含初始快照、工具输入输出、模型版本、采样参数、每步 log-prob 与奖励分量。
只有奖励经过信用分配并实际更新策略参数时,才属于这里的 Agentic RL。相关方法的边界如下:
| 方法 | 核心机制 | 是否更新参数 | 是否为参数更新型 RL |
|---|---|---|---|
| Toolformer | 自监督构造 API 调用数据并学习调用格式 | 是 | 否 |
| ReAct | 通过提示交替生成 Thought、Action 与 Observation | 否 | 否 |
| Reflexion | 把语言反馈写入情景记忆指导下一次尝试 | 否 | 通常否 |
| WebGPT | 浏览示范、偏好奖励、拒绝采样与 RL 实验 | 是 | 部分训练阶段是 |
| Agent Lightning | 把既有 Agent 事件经信用分配转成 RL 训练单元 | 是 | 是 |
WebGPT 把浏览动作、证据引用和人类偏好放入同一任务,但论文摘要中的最佳结果来自行为克隆模型结合奖励模型拒绝采样,不能把全部收益直接归因于在线 RL。Agent Lightning 解决的是 Agent 执行与 RL 训练的解耦和信用分配接口,不会自动修复环境或奖励设计。
数值案例¶
设 \(B=2\)、\(G=4\)、最大回答长度 \(L=512\)、词表大小 \(V=151936\):
- rollout token 为 \(Y:[2,4,512]\),response mask 为 \(M:[2,4,512]\);
- 策略原始 logits 为 \(Z:[2,4,512,151936]\),通常不会长期全部保存;
- gather 采样 token 后得到新旧 log-prob \([2,4,512]\);
- 验证器输出奖励 \(R:[2,4]\),GRPO/DAPO 优势为 \([2,4]\) 并广播到 \([2,4,512]\);
- PPO critic 输出 \(V_\psi:[2,4,512]\),GAE 也为 \([2,4,512]\);
- GSPO 把 token log-ratio 沿长度 masked mean,得到 sequence ratio \(s:[2,4]\);
- 任一策略目标最终都归约成标量 loss,才能调用
backward()。
这个形状检查能直接发现三类高频错误:把 prompt token 算进策略 loss;对 padding 求平均;把 \([B,G]\) 优势沿错误维广播。
评测与失败模式¶
训练不能只看 reward 曲线。至少同时报告任务成功率、独立人工或隐藏验证、KL、熵、回答长度、采样通过率、格式解析率、每步 token 与 wall-clock 成本。
| 失败模式 | 表现 | 对策 |
|---|---|---|
| reward hacking | 奖励升、真实质量跌 | 隐藏评测、反例与人工审查 |
| verifier hacking | 利用解析器或测试漏洞 | 隔离验证器、扩大测试覆盖 |
| entropy collapse | 输出快速同质化 | 检查 clip、温度、奖励和探索 |
| zero-variance group | 全组全对或全错 | 调整难度、探索或动态采样 |
| stale rollout | 新旧策略差距过大 | 缩短版本延迟、监控 ratio |
| length drift | 回答越来越长或过短 | 分离质量与长度奖励 |
| catastrophic forgetting | 专项提升、通用回退 | KL、混合数据与回归评测 |
| unsafe exploration | 产生真实副作用 | 沙箱、权限和预算上限 |