先记住一句话
LLM post-training 的 RL 循环是“当前策略采样回答 → reward model 或 verifier 打分 → 用带 KL 约束的 policy update 提高高分回答概率”。
1. 把自回归生成写成 MDP
| RL 概念 | LLM 中的对应物 |
|---|---|
| 初始状态 | prompt 与 system/context |
状态 s_t | prompt + 已生成 token 前缀 |
动作 a_t | 下一个 token |
策略 πθ | softmax 后的语言模型分布 |
| episode | 直到 EOS/长度上限的一条 response |
| reward | 偏好分、规则验证分、任务成功或混合分数 |
环境转移很简单:把采样 token 拼到前缀。但每步都有几万维 action,且最终正确性常到回答结束才知道,因此 credit assignment 依旧困难。
2. 一条典型训练流水线
pretraining → supervised fine-tuning (SFT)
↓ initial policy / reference policy
prompts → online rollout → reward / verifier → advantage estimate
↑ ↓
└──── updated policy ← PPO / GRPO + KL
SFT 先给出合理语言与格式;RL 再重分配 probability mass。这里的 online 指回答由当前或近期策略生成,不一定意味着机器人那样与物理世界实时交互。
3. RLHF 与 RLVR
| RLHF | RLVR | |
|---|---|---|
| 监督信号 | 人类偏好比较,常先训练 reward model | 可自动验证的结果,如答案、单元测试、proof checker |
| 优点 | 能表达 helpfulness、style 等难写规则的目标 | 信号便宜、稳定、可规模化,通常更客观 |
| 风险 | 标注偏差、reward model 外推和被 hack | 只优化可测部分;格式漏洞、测试不完整、稀疏 reward |
实际系统常混合多种 reward:正确性、格式、安全、长度与风格。混合权重本身就是产品目标,不能把 reward 当作自然界给出的真理。
4. 为什么要 reference policy 与 KL
若只最大化 learned reward,policy 会快速离开 SFT 分布,发现 reward model 的漏洞。常见目标是在 reward 中逐 token 减去 reference KL 的样本估计:
r_total = r_task − β Σ_t [log πθ(a_t|s_t) − log πref(a_t|s_t)]β 大则更保守,小则允许更强改进。样本上的 log-ratio 可以为负,它不是单条 trajectory 的非负 KL;平均分布意义的 KL 才非负。reference 通常固定,而 rollout policy、训练 policy 和 reference 不是同一个角色。
5. PPO 在 LLM 上为什么很重
- actor:生成 token 并接受梯度;
- critic/value model:估计每个前缀的 value;
- reference:提供 KL 基准;
- reward model:给完整回答打分。
这些模型加上 optimizer state、KV cache 和多条 rollout,会同时消耗显存。PPO 的 critic 能提供细粒度 baseline,但 value training 也带来额外参数、loss balancing 和 stale rollout 问题。GRPO 的吸引力正是省去单独 critic。
6. Sequence reward 怎样回到 token
最简单做法是把同一个 outcome advantage 乘到该回答所有 token 的 log-prob gradient。它告诉模型“整条回答更好/更差”,却不知道哪一步推理负责。若有过程监督,可对中间步骤给 reward;否则只能靠大量对比样本和模型自身表示完成粗粒度 credit assignment。
7. Rollout 与 update 的工程边界
- 按 prompt sampling 分布取 batch,保存 old-policy token log-prob;
- 明确 temperature、top-p、最大长度和 stop 条件;
- 算 reward、长度、格式、KL,并正确 mask prompt/padding;
- 只用有限 epochs 更新,避免数据过旧;
- 用独立、不可见的 evaluation set 检查 reward hacking。
若生成时的概率、训练重算的 old log-prob 和 serving engine 精度不一致,importance ratio 会在更新前就偏离 1;这往往是系统 bug,不是算法取得进展。
8. 该监控什么
| 指标 | 能发现什么 |
|---|---|
| raw task reward / pass rate | 任务是否真变好,避免只看混合 reward |
| KL、entropy、clip fraction | 策略漂移、探索坍缩与 update 是否过猛 |
| response length / EOS rate | 长度投机、截断和不结束 |
| reward 各分量与相关性 | 某个 shaping 项是否支配训练 |
| held-out judge / executable eval | reward model 被 hack 后的真实性能 |
9. 四个 LLM RL 手算
例 1:completion log-prob
三个生成 token 的 policy probabilities=[0.5,0.4,0.2],sequence probability=0.5×0.4×0.2=0.04,log-prob=log0.5+log0.4+log0.2≈−3.219。
例 2:token-level KL penalty
三个 token 的 sampled log-ratios logπ−logπ_ref 为 [0.1,0.2,−0.05],和=0.25。β=0.04 时 trajectory penalty=0.04×0.25=0.01(实际 estimator/convention须与实现一致)。
例 3:reward 减 baseline
Verifier reward=1,prompt-conditioned baseline=0.6,则 advantage=0.4;另一回答 reward=0,advantage=−0.6。前者 token log-probs 被提高,后者被降低。
例 4:rollout token 预算
256 prompts,每 prompt 采 8 个 completions,平均 512 output tokens,总生成量=256×8×512=1,048,576 tokens。Critic-free 也不能省掉这部分 decode 成本。
“有可验证 reward”不代表目标完整。例如代码只通过公开测试,可能过拟合测试;数学 final answer 正确,也不代表 reasoning 忠实。RLVR 提供的是可靠的局部目标,不是自动解决 alignment。
自测
1. 为什么语言生成仍是序列决策?
每个 token 会改变之后可见的前缀和可选输出,最终 reward 依赖整条 action 序列。
2. reference model 的职责是什么?
给策略漂移提供固定基准,使 RL 改进不至于轻易破坏 SFT 得到的语言与行为。
3. reward 上升而真实能力不升,先查什么?
查 reward 分解、长度/格式投机、训练与评测泄漏,并用独立 verifier 或人工样本复核。
一手资料
InstructGPT 给出 SFT、偏好 reward model 与 PPO 的经典 RLHF pipeline;PPO 是 clipped policy update 的原始论文。