后训练笔记 01:强化学习基础

大模型后训练里的 RL 和传统 RL 不太一样。传统 RL 常见场景是 agent 在环境里反复交互,比如机器人控制、游戏、推荐系统。LLM 后训练里的“环境”往往更窄:给一个 prompt,模型生成 response,然后由人类偏好、reward model、规则 verifier、测试用例或者答案匹配器给出反馈。

有一说一,传统RL学起来真有点烧脑子的😓

语言模型里的 policy 是什么

在 RL 里,policy 通常写成:

\[ \pi_\theta(a \mid s) \]

它表示在状态 \(s\) 下采取动作 \(a\) 的概率。

放到语言模型里,可以这样对应:

  • 状态(state):当前 prompt 加上已经生成的 tokens
  • 动作(action):下一个 token
  • policy:语言模型给下一个 token 的概率分布

如果把完整回答看成一个 token 序列:

\[ y = (y_1, y_2, ..., y_T) \]

那么模型生成这个回答的概率是:

\[ \pi_\theta(y \mid x) = \prod_{t=1}^{T} \pi_\theta(y_t \mid x, y_{<t}) \]

其中 \(x\) 是 prompt。

这也是为什么很多后训练算法会用 log probability:

\[ \log \pi_\theta(y \mid x) = \sum_{t=1}^{T} \log \pi_\theta(y_t \mid x, y_{<t}) \]

因为整段 response 的概率是 token 概率连乘,直接乘容易数值很小,取 log 后就变成求和。

Token-level action 和 response-level action

理论上,LLM 每一步生成 token 都是一个 action。

但很多 reward 是 response-level 的。比如数学题最后答案对不对、代码是否通过测试、回答是否更符合人类偏好,这些通常是整段回答生成完之后才知道。

这就带来一个 credit assignment 问题:

如果最终回答错了,到底是哪几个 token 造成的?

PPO 里会尝试用 value model 和 advantage estimation,把整段 reward 分摊到 token-level 更新上。

GRPO 里则常见做法是对同一个 prompt 采样多个 responses,再用组内 reward 相对大小得到 advantage。

DPO 更进一步,不显式做在线 RL,而是直接比较 chosen response 和 rejected response 的 log probability。

这些算法看起来差很多,但都绕不开同一个问题:训练信号怎样从“整段回答好不好”传回到模型参数。

Reward:后训练真正优化的目标

Reward 可以来自很多地方。

在人类偏好场景里,reward 可能来自 reward model:

\[ r_\phi(x, y) \]

它输入 prompt 和 response,输出一个标量分数。

在 reasoning / coding 场景里,reward 经常是 verifiable reward:

  • 数学题最终答案是否匹配
  • 代码是否通过单元测试
  • 格式是否满足要求
  • 工具调用是否成功

这类方法常被叫做 RLVR,也就是 reinforcement learning from verifiable rewards。

RLVR 的优势是 reward 更客观,不需要每个样本都人工标注偏好。

但它也有明显局限:reward 很稀疏。一个数学题只有最终答案对/错,模型并不知道中间哪一步推理值得奖励。

这也是为什么 reasoning model 训练里经常会关心:

  • 如何采样更多候选
  • 如何过滤高质量 reasoning traces
  • 如何避免只学会猜答案
  • 如何让 reward 不只看最终答案

Return、value 和 advantage

在一般 RL 里,return 是从当前时刻往后能拿到的累计 reward:

\[ G_t = \sum_{k=t}^{T} \gamma^{k-t} r_k \]

LLM 后训练里,很多任务只有最终 reward,所以可以粗略理解为整段回答的得分。

Value function 估计的是某个状态下未来能拿到多少 reward:

\[ V^\pi(s) = \mathbb{E}_{\pi}[G_t \mid s_t=s] \]

Advantage 衡量的是某个 action 比平均水平好多少:

\[ A_t = G_t - V^\pi(s_t) \]

这个量很重要。

如果一个回答得分是 0.8,不一定说明它很值得加强。也许这个 prompt 很简单,随便生成都能 0.8。

如果另一个回答得分是 0.6,也不一定差。也许这个 prompt 很难,大多数回答都是 0.1。

我认为Advantage 想表达的是:相对于当前状态的预期表现,这个 action / response 到底更好还是更差。

Policy gradient 的直觉

Policy gradient 的经典形式可以写成:

\[ \nabla_\theta J(\theta) = \underset{\pi_\theta}{\mathbb{E}}[\nabla_\theta \log \pi_\theta(a \mid s) A(s,a)] \]

放到 LLM 里,可以粗略理解成:

如果某个 response 的 advantage 为正,就提高它的生成概率;如果 advantage 为负,就降低它的生成概率。

但这里有两个细节点。

第一,提高的是整段 response 里 tokens 的 log probability,不是直接给最终答案加分。

第二,更新不能太大。语言模型是高维分布,一次更新如果把概率分布拉得太远,可能会破坏原来的语言能力。

这就引出 KL constraint。

KL constraint:防止模型跑远了

后训练里通常会保留一个 reference model,记作 \(\pi_{\mathrm{ref}}\)

它通常是 SFT 后的模型,或者训练开始前的 policy snapshot。

更新 policy 时,会惩罚当前模型和 reference model 的差异:

\[ D_{KL}(\pi_\theta || \pi_{\mathrm{ref}}) \]

直觉上,KL constraint 在说:

可以朝高 reward 方向走,但不要走到完全不像原来的模型。

没有 KL 约束会有什么问题?

模型可能为了骗 reward model 生成奇怪模式。比如 reward model 偏好长回答,模型就越来越啰嗦;reward model 偏好自信语气,模型就更容易胡说;verifier 只看最终答案,模型可能学会投机格式。

所以后训练不是简单最大化 reward,而是:

\[ \max_\theta \mathbb{E}[r(x,y)] - \beta D_{KL}(\pi_\theta || \pi_{\mathrm{ref}}) \]

这里 \(\beta\) 控制 reward 优化和保持原模型分布之间的平衡。

On-policy 和 off-policy

On-policy 指训练数据来自当前 policy。

Off-policy 指训练数据来自旧 policy、其他模型,或者离线数据集。

LLM 后训练里,这个区别非常关键。

如果模型训练时看到的是自己当前会生成的回答,那训练分布和推理分布更接近。这是 on-policy 的优势。

但 on-policy 代价高,因为训练过程中要不断采样新 responses。

Off-policy 成本低,可以直接用已有数据训练。但如果数据分布和当前模型差很多,模型学到的更新可能不稳定。

这就是为什么 PPO / GRPO / OPD 都强调 on-policy 或接近 on-policy。它们希望模型在自己的生成分布上学习,而不是只模仿静态数据。

为什么 reasoning model 更依赖 RL, RL和SFT本质上的区别是啥

我觉得应该这么理解,虽然SFT 可以让模型学会解题格式,但它本质上是模仿。 而在reasoning问题上,潜在的解题方式有很多,比如1+1=2可以通过一堆不一样的复杂公式来给出同样的结果,这种情况下的action space太大了,只靠SFT是模仿不完的。所以需要用RL来自己探索。

比如RLVR 可以直接优化最终正确率。比如同一个数学题,模型生成多个答案,只有正确答案拿到 reward。经过训练,模型会提高能得到正确答案的生成轨迹概率。只需要合理的设定reward(比如长度,步骤分之类的)确保模型最终答案正确,那我们可以让模型来自己探索出这个解题的action space。

这也是 DeepSeek-R1 这类 reasoning model 重要的地方:它不是只靠人工写好的 CoT,而是通过可验证 reward 强化推理行为。

不过这也带来风险。

如果 reward 只看最终答案,模型可能学到短路策略。比如中间推理不可靠,但答案格式正确;或者生成更长 reasoning 来提高偶然命中率。

后训练里的几个常见失败模式

第一,reward hacking。

典中典问题,模型学会利用 reward 的漏洞,靠作弊来拿分。

“Learning to Summarize with Human Feedback” (OpenAI) 在 RLHF 训练摘要模型时,明确观察到模型学会利用 reward model 的偏差。

第二,mode collapse。

模型输出变得单一,缺少多样性。

第三,length inflation。

模型生成越来越长,因为长回答更容易看起来努力,或者更容易覆盖答案。

第四,over-optimization。

训练集 reward 越来越高,但真实评估变差。

“Scaling Laws for Reward Model Overoptimization” (Anthropic) 定量研究了 reward model score 持续升高而真实人类偏好评分反而下降的现象,提出了 over-optimization 的标度律。

Goodhart’s Law: “当某个度量变成目标时,它就不再是一个好的度量。”

第五,distribution drift。

policy 离 reference model 太远,语言能力或安全边界受损。

参考资料