前言:为什么要把「推理」单独拿出来讲?
2022 年以前,大语言模型(LLM)研究的主旋律是 scaling :把模型变大、把数据加多、把上下文拉长。彼时的 NLP 教科书里,"reasoning"(推理)只是众多下游任务中并不显眼的一个小节。然而在 2024 年 9 月 OpenAI 发布 o1 与 2025 年 1 月 DeepSeek 发布 R1 之后,整个领域被两个新现象彻底改写:
测试时计算(test-time compute)作为新维度 :通过让模型在回答前"想一会儿"(生成大量"思考 token"),即使不增加参数也能换来质的飞跃;
纯强化学习激发推理 :DeepSeek-R1-Zero 证明,只用结果奖励(无过程标注、无 SFT 冷启动)就能从基座模型中"挤出"长链推理。
本讲(第 12 讲)是 CS224N 关于"推理"的上篇 。在原 Lecture 四大块(解码、R1、PPO/GRPO/DAPO、推理本质)之外,本教材增设第零章:RL for LLM 数学预备 ,因为没有 policy gradient、KL 散度、importance sampling 三件套,PPO/GRPO/DAPO 的目标函数对读者就是天书。
本讲路线图
RL 数学 → 解码 → R1 案例 → RL 算法(PPO/GRPO/DAPO) → 推理本质 。
五个章节既是逻辑递进,也是抽象层次:从最底层的 token 采样规则与梯度估计,一路走到最高层的"什么算推理、为什么有效、为什么会失败"。
读完这一讲,一个 NLP 研究生应该能:
从 policy gradient 定理出发,独立推导出 PPO 的目标函数;
从信息论角度解释为什么 Beam Search 会"复读机";
说清 GRPO 相比 PPO 在哪些地方做了简化,又为什么这些简化"敢"做;
看懂 R1 论文中的 multi-stage pipeline 图,并能批判性分析每个阶段的动机;
在自己的实验中合理选择解码策略与 RL 算法;
了解 CoT 的局限:什么时候"不要让模型想"。
第零章 RL for LLM 数学预备
没有 policy gradient 与 KL 散度三件套,PPO/GRPO/DAPO 的公式都是天书。本章给你一条最短捷径。
0.1 期望回报、策略与价值
把 LLM 当作 RL 智能体的标准设定:
状态 $s_t$ :当前已生成的上下文 $(q, o_{<t})$,其中 $q$ 是 prompt、$o_{<t}$ 是已生成 token 前缀;
动作 $a_t = o_t$ :下一个要生成的 token,动作空间 $\mathcal{A} = V$ 是词表;
策略 $\pi_\theta(a_t | s_t)$ :模型给出的 next-token 概率分布(即 softmax 输出);
奖励 $r_t$ :在 RLHF / RLVR 中通常只有最后一步有非零奖励 ,例如 $r_T = R$(答案对错),$r_{t<T} = 0$;
轨迹 $\tau = (s_0, a_0, s_1, a_1, \ldots, s_T)$ :一次完整的生成。
RL 的目标是最大化期望折扣回报 :
$$J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\!\left[\sum_{t=0}^{T} \gamma^t r_t\right]$$
对 LLM 而言,常取 $\gamma = 1$(无折扣,因为生成序列短,奖励稀疏)。我们还会用到两类价值函数:
$$V^\pi(s) = \mathbb{E}_\pi\!\left[\sum_{k=0}^{\infty} \gamma^k r_{t+k} \mid s_t = s\right] \quad \text{(state value)}$$
$$Q^\pi(s,a) = \mathbb{E}_\pi\!\left[\sum_{k=0}^{\infty} \gamma^k r_{t+k} \mid s_t = s, a_t = a\right] \quad \text{(state-action value)}$$
以及最关键的优势函数 (advantage):
$$A^\pi(s, a) = Q^\pi(s, a) - V^\pi(s)$$
直观含义:在状态 $s$ 下,采取动作 $a$ 比"按策略平均"好多少。Advantage 是 LLM RL 全部算法的核心信号。
0.2 Policy Gradient 定理
直接对 $J(\theta)$ 求梯度看似不可行 —— 期望是对一个由 $\theta$ 决定的分布求的,怎么微分?答案是 log-derivative trick 。
推导
对任意可微分布 $p_\theta(x)$,有恒等式:
$$\nabla_\theta p_\theta(x) = p_\theta(x)\,\nabla_\theta \log p_\theta(x)$$
把这个套到期望梯度上:
$$\nabla_\theta \mathbb{E}_{x\sim p_\theta}[f(x)] = \int f(x)\,\nabla_\theta p_\theta(x)\,dx = \mathbb{E}_{x\sim p_\theta}[f(x)\,\nabla_\theta \log p_\theta(x)]$$
这一步把"对分布求导"变成了"在分布下采样的期望" —— 这是 policy gradient 类方法能做 stochastic optimization 的根本。
把这个 trick 应用到 $J(\theta)$ 上,得到 Policy Gradient Theorem (Sutton et al., 1999):
$$\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\!\left[\sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t \mid s_t)\cdot Q^\pi(s_t, a_t)\right]$$
等价地,因为减去与 $a_t$ 无关的 baseline $b(s_t)$ 不改变期望(见 §0.3),可以写成 advantage 形式:
$$\nabla_\theta J(\theta) = \mathbb{E}\!\left[\sum_t \nabla_\theta \log \pi_\theta(a_t \mid s_t)\cdot A^\pi(s_t, a_t)\right]$$
直觉
提高 advantage 为正的动作的概率,降低 advantage 为负的动作的概率 。这是所有现代 policy gradient 方法(包括 PPO/GRPO/DAPO)的统一图景。
0.3 REINFORCE 与方差缩减
REINFORCE (Williams, 1992)是最原始的 policy gradient 算法:用一条采样轨迹的回报 $G_t = \sum_{k=t}^{T} r_k$ 替代 $Q^\pi(s_t, a_t)$:
$$\hat{g} = \sum_t \nabla_\theta \log \pi_\theta(a_t \mid s_t)\cdot G_t$$
问题:$G_t$ 的方差非常大,因为一条 token 序列的累积奖励抖动剧烈,特别是在 LLM 这种长序列稀疏奖励场景。方差缩减 是 PG 的核心工程问题。常见三招:
Baseline 减去 :用任意 $a$-无关的函数 $b(s_t)$ 替代 0:
$$\hat{g} = \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t)\cdot(G_t - b(s_t))$$
无偏(因为 $\mathbb{E}_a[\nabla\log\pi]=0$)但能大幅降方差。最常用的 baseline 是 $V^\pi(s_t)$ —— 即 actor-critic 中的 critic。
Bootstrap(TD 估计) :用 $\hat{Q}(s_t,a_t) \approx r_t + \gamma V(s_{t+1})$ 替代 $G_t$,降方差但引入偏差。GAE(§3.3)是在 TD 与 MC 之间的家族化插值。
Group baseline :从同一 prompt 多次采样,用组内平均 reward 作 baseline。这正是 GRPO 与 RLOO 的核心思想(§3.6)。
0.4 Off-policy 与重要性采样
PG 默认 on-policy :采样数据必须来自当前 $\pi_\theta$。但实际训练中,做一次 rollout(生成大量 response)非常昂贵,我们希望用一份 rollout 数据做多次梯度更新 (off-policy)。代价是分布不再匹配。
解决:重要性采样(importance sampling) 。设采样策略 $\pi_{\theta_\mathrm{old}}$,目标策略 $\pi_\theta$,那么:
$$\mathbb{E}_{a \sim \pi_\theta}[f(a)] = \mathbb{E}_{a \sim \pi_{\theta_\mathrm{old}}}\!\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_\mathrm{old}}(a|s)}\cdot f(a)\right]$$
定义重要性采样比 :
$$r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_\mathrm{old}}(a_t | s_t)}$$
则 off-policy 策略梯度可写为:
$$\nabla_\theta J(\theta) \approx \mathbb{E}_{(s,a) \sim \pi_{\theta_\mathrm{old}}}\!\left[r_t(\theta)\nabla_\theta \log\pi_\theta(a_t|s_t)\cdot \hat{A}_t\right]$$
致命问题
当 $\pi_\theta$ 与 $\pi_{\theta_\mathrm{old}}$ 偏差过大时,$r_t(\theta)$ 会爆炸(某个动作的 ratio 可以到 $10^5$),导致梯度估计极度高方差,训练发散。这正是 TRPO 与 PPO 要解决的问题。
0.5 TRPO:信赖域约束
TRPO (Trust Region Policy Optimization, Schulman et al. 2015)的处方:限制每次更新不能让新旧策略偏离太多,用 KL 散度约束信赖域:
$$\max_\theta\;\mathbb{E}\!\left[r_t(\theta)\hat{A}_t\right]\quad \text{s.t.}\quad \mathbb{E}\!\left[D_\mathrm{KL}\!\left(\pi_{\theta_\mathrm{old}}(\cdot|s)\,\|\,\pi_\theta(\cdot|s)\right)\right]\leq \delta$$
这是一个有约束优化,需要用 conjugate gradient 求解,每步还要做 line search 调整步长。对每参数量上百亿的 LLM 来说,TRPO 的实现复杂度过高 ,于是 OpenAI 在 2017 年推出了它的简化版 PPO。
0.6 PPO:Trust Region 的"穷人版"
PPO 的核心 insight:与其显式约束 KL,不如直接 clip 重要性比 ,让超过信赖域的更新自动失效:
$$\mathcal{J}_{\mathrm{PPO}}^{\mathrm{CLIP}}(\theta)
= \mathbb{E}_t\!\left[
\min\!\Big(r_t(\theta)\hat{A}_t,\;\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\hat{A}_t\Big)
\right]$$
CLIP 的逐情况解读
设 $\varepsilon = 0.2$,固定 $\hat{A}_t$ 的符号,看 PPO 如何"惩罚激进更新":
$\hat{A}_t > 0$(动作好) :我们想增加 $\pi_\theta(a|s)$,即让 $r > 1$。当 $r \leq 1+\varepsilon$ 时正常学;当 $r > 1+\varepsilon$ 时,clip 把 ratio 钉在 $1+\varepsilon$,min 选择较小的版本,于是该 token 的梯度被截断到 0 —— 阻止"狂奔"。
$\hat{A}_t < 0$(动作差) :我们想降低 $\pi_\theta(a|s)$,即让 $r < 1$。当 $r \geq 1-\varepsilon$ 时正常学;当 $r < 1-\varepsilon$ 时,clip 把 ratio 钉在 $1-\varepsilon$,min (注意 $\hat{A}_t < 0$ 时 "min" 选更负的项)选 $r\hat{A}_t$ —— 仍然允许 继续降低概率。这是非对称 的关键,确保坏动作可以被持续抑制。
r_t(θ)
 > 0(好动作)
1-ε
1
1+ε
clip→0 grad
L(r)
r_t(θ)
 < 0(坏动作)
1-ε
1
1+ε
no clip
图 0.1 PPO CLIP 在 $\hat{A}>0$ 与 $\hat{A}<0$ 两种情形下的损失曲面。红色段表示梯度为 0 的"clip 失效区"。
PPO 与 TRPO 的关系一目了然:TRPO 用显式 KL 约束 + 复杂二阶优化,PPO 用 clip + 一阶 SGD,用工程简洁性换了一点理论的严格性 —— 但效果惊人地好。
0.7 KL 散度估计的三种方式
PPO/GRPO/DAPO 中都需要估计 $D_\mathrm{KL}(\pi_\theta \| \pi_\mathrm{ref})$,但你只有从其中一个分布采样的数据 。John Schulman 在 2020 年的著名博客中讨论了三种估计:
估计名 表达式 偏差 方差 非负保证
$k_1$(朴素)
$\log \dfrac{p(x)}{q(x)}$
无偏
高
否(可负)
$k_2$(平方)
$\dfrac{1}{2}(\log p - \log q)^2$
有偏
低
是
$k_3$(修正)
$\dfrac{q(x)}{p(x)} - 1 - \log \dfrac{q(x)}{p(x)}$
无偏
低
是
表 0.1 三种 KL 估计器。$p$ 是参考分布(reference),$q$ 是当前分布(policy) 。
R1 与 GRPO 实现中默认使用 $k_3$:既无偏,又低方差且严格非负 —— 是工程上最稳妥的选择。这一点经常被论文一句话带过,但在你 debug 训练发散时极为关键。
第一章 解码技术:从 Greedy 到 Beam,再到 Sampling
所有 LLM 输出的最后一步,都是从一个概率分布里挑 token —— 这件小事远没那么简单。
1.1 自回归解码的数学结构
所有现代主流的语言模型(LLaMA、GPT、Qwen、Gemini、Claude……)都是自回归(autoregressive) 的:它们以从左到右的方式逐 token 生成。在第 $t$ 步:
模型 $f(\cdot; \theta)$ 接收历史 token 序列 $\{y_{<t}\}$,输出一个 logits 向量 $\mathbf{s} \in \mathbb{R}^{|V|}$,其中 $|V|$ 是词表大小:
$$\mathbf{s} = f(\{y_{<t}\}; \theta)$$
对 logits 做 softmax 得到下一 token 的条件概率分布:
$$P(y_t = w \mid \{y_{<t}\}) = \frac{\exp(s_w)}{\sum_{w' \in V} \exp(s_{w'})}$$
使用一个解码算法 $g(\cdot)$ 从这个分布中挑选下一个 token:
$$\hat{y}_t = g\!\left(P(y_t \mid \{y_{<t}\})\right)$$
训练时我们用 cross-entropy 把全部概率质量推给"对的"那个 token;但推断时,词表里仍有上万候选 token,"如何挑"成了独立的设计问题。同一个模型,搭配不同的 $g(\cdot)$,输出风格会差距巨大。
y_{t-3}
y_{t-2}
y_{t-1}
Autoregressive LM f(·; θ)
s ∈ ℝ^|V|
Softmax
P(y_t | y_{<t})
Decoding g(·)
ŷ_t
图 1.1 自回归 LM 的一步解码:模型→logits→softmax→分布→解码器→下一 token。
1.2 Greedy Decoding
每一步直接取概率最高的 token:
$$\hat{y}_t = \arg\max_{w \in V} \; P(y_t = w \mid y_{<t})$$
算法 1.1 Greedy Decoding
function GreedyDecode (model, prompt, max_len):
y ← prompt
for t = 1
to max_len:
logits ← model(y)
P ← softmax(logits)
y_t ← argmax(P)
if y_t = <eos>:
break
y ← y ⊕ y_t
return y
确定性 :同样的 prompt 永远输出相同结果,便于复现实验;
实现简单 :一次 argmax,复杂度 $O(|V|)$;
满足"最稳"的直觉 :当任务有明确答案(数学、代码、事实问答)时,最大化局部似然往往是合理的。
局限:短视性
Greedy 在每一步贪心,却不保证整条序列联合概率最大。简单反例:
$P(\text{the}|\cdot) = 0.6,\; P(\text{nice woman}|\text{the}) = 0.5 \Rightarrow$ 联合概率 $0.3$
$P(\text{a}|\cdot) = 0.4,\; P(\text{nice woman}|\text{a}) = 0.9 \Rightarrow$ 联合概率 $0.36$
Greedy 会选 "the" 然后被锁死,错过了更优的 "a nice woman" 序列。
1.3 Beam Search
Beam Search 同时保留 $k$ 条最有希望的部分序列。设 $B_{t-1}$ 是 $t-1$ 步时的束(大小为 $k$ 的假设集合),每个假设 $h$ 都有累计得分 $\text{score}(h) = \log P(h)$。在第 $t$ 步:
对每个 $h \in B_{t-1}$,对词表中每个候选 $y$,计算
$$\text{score}(h \circ y) = \text{score}(h) + \log P(y \mid h)$$
从全部 $k \cdot |V|$ 个扩展中挑出 top-$k$,组成新的束 $B_t$:
$$B_t = \text{top-}k_{\,h \in B_{t-1},\; y \in V} \left\{(h \circ y, \text{score}(h \circ y))\right\}$$
循环到 $T$ 时刻,输出 $y^* = \arg\max_{h' \in B_T} \log P(h')$。
算法 1.2 Beam Search(简化版,不含 length normalization)
function BeamSearch (model, prompt, k, max_len):
B ← {(prompt, 0.0)}
for t = 1
to max_len:
candidates ← ∅
for (h, sc)
in B:
if h ends with <eos>: candidates.add((h, sc))
else :
P ← softmax(model(h))
for y
in top-k(P):
candidates.add((h ⊕ y, sc + log P(y)))
B ← top-k(candidates, by score)
return argmax(B, by score)
边界情形
$k=1$ 时退化为 Greedy;$k \to \infty$ 时趋近精确解码(exhaustive search),代价 $O(|V|^T)$ 不可行。
Length normalization
Beam Search 倾向于生成短序列,因为 log-prob 随 token 累乘越来越小。实践中常用 length normalization:
$$\text{score}(h) = \frac{1}{|h|^\alpha}\sum_t \log P(y_t \mid y_{<t})$$
$\alpha \in [0.6, 1.0]$ 是惩罚强度。$\alpha = 1$ 是平均 log-prob,$\alpha = 0$ 即未归一化。
Greedy vs Beam Search
对比维度 Greedy Beam Search ($k$)
搜索空间 单条路径 $k$ 条并发路径
每步复杂度 $O(|V|)$ $O(k|V|\log k)$
显存 1 份 KV cache $k$ 份 KV cache
序列质量 局部最优 更接近全局最优(近似 MAP)
多样性 无 有限
典型应用 现代 LLM 推理 经典 NMT、摘要
表 1.1 Greedy 与 Beam Search 的核心区别。
1.4 神经文本退化(The Curious Case of Neural Text Degeneration)
2019 年 Holtzman 等人发表了一篇标题颇文学的论文:"The Curious Case of Neural Text Degeneration" ,戳穿一个反直觉的现象:最大似然解码(Beam Search、Greedy)会生成令人尴尬的复读机文本 ,远不如人类语言自然。
实验给定 unicorn 主题的 prompt,对 GPT-2 Large 用 Beam Search $b=32$:
... the Universidad Nacional Autónoma de México (UNAM/Universidad Nacional
Autónoma de México/Universidad Nacional Autónoma de México/Universidad
Nacional Autónoma de México/Universidad Nacional Autónoma de México ...
同样的 prompt 用 Pure Sampling 又会陷入语义错乱:
They were cattle called Bolivian Cavalleros; they live in a remote desert
uninterrupted by town, and they speak huge, beautiful, paradisiacal Bolivian
linguistic thing. They say, 'Lunch, marge.' ...
复读机效应(Self-reinforcing Repetition)
序列越重复,下一步还重复的概率越高 。GPT-2 中 "I don't know." 第一次出现时的 NLL 约为 5,第二次降到 3,越往后越低 —— 模型把自己刚写下的 token 当成强信号,于是越复读越自信。
更深层的原因:分布的"自然嗡鸣区"
MLE 训练目标把"自然"的 continuation 推向高概率,但对一个具体 prompt 而言,"什么是自然"是一个高熵分布 。如果一定要找单一最大概率序列 ,那条路径在长程上必然被简单的、重复的模式占据 —— 因为简单模式有最稳的概率乘积。
人类语言并不在 MLE 的众数(mode)上,而是落在分布的"自然嗡鸣区"。直观地说,人类语言是典型样本(typical samples) ,不是最有可能的序列(mode) 。这是信息论里 "Asymptotic Equipartition Property"(AEP)的语言版本。
Timestep
Probability
Beam Search
Human
图 1.2 Beam Search 的下一 token 概率几乎贴在 1.0,曲线平直;人类语言的概率在 0~1 间剧烈波动 —— 这才是"自然"。
1.5 Top-k Sampling:截断长尾
Vanilla Sampling(直接按 $P_t$ 抽样)不死循环,但会拉到长尾上的稀奇古怪 token。计算:
假设词表分布的 top 95% 概率质量集中在合理 token 上,剩余 5% 是噪音。连续 30 个 token 都不踩进 5% 噪音区的概率仅为
$$ (0.95)^{30} \approx 0.2146 \approx 21\%$$
也就是说,79% 的概率会在某处冒出一个尾部 token 。
Top-k Sampling(Fan et al., 2018):仅在分布的 top-$k$ 个 token 中按截断后的概率抽样:
$$P^{(k)}(w) = \begin{cases} \dfrac{P(w)}{\sum_{w' \in V_k} P(w')}, & w \in V_k \\ 0, & \text{otherwise} \end{cases}$$
其中 $V_k$ 是概率最高的 $k$ 个 token 的集合。典型 $k = 40 \sim 50$。
平坦分布(flat)
"She said, 'I never ___'" 后面 9 个 token 概率都相近,强行截到 top-$k$ 会切掉很多合理候选 → 切太快 。
陡峭分布(peaked)
"I ate the pizza while it was still ___" 后 "hot" 压倒性优势,剩下 top-$k$ 仍把噪音 token 留进去 → 切太慢 。
1.6 Top-p (Nucleus) Sampling
Holtzman et al. (2019) 提出:不固定 $k$,改为按累计概率 截断。定义最小的集合 $V_p$,使得
$$\sum_{w \in V_p} P(w) \geq p$$
然后在 $V_p$ 上重新归一化采样。$p = 0.9$ 是常见选择。优点:分布平坦时 $|V_p|$ 自动变大(保多样性);分布陡峭时 $|V_p|$ 自动变小(保稳)。
算法 1.3 Nucleus Sampling
function NucleusSample (P, p):
sorted_P ← sort(P, descending)
cum_P ← cumsum(sorted_P)
cutoff ← first index where cum_P ≥ p
V_p ← top (cutoff+1) tokens
P' ← renormalize P over V_p
return categorical_sample(P')
1.7 Temperature & Entropy
温度采样不是单独的算法,而是对 softmax 的修饰 :
$$P_t(y_t = w \mid y_{<t}) = \frac{\exp(s_w/\tau)}{\sum_{w' \in V}\exp(s_{w'}/\tau)}$$
$\tau > 1$:分布变软 ,更接近均匀 → 输出更多样;
$\tau = 1$:原始 softmax;
$0 < \tau < 1$:分布变陡 ;
$\tau \to 0$:退化为 Greedy。
温度对熵的影响
分布的 Shannon 熵 $H(P_\tau) = -\sum_w P_\tau(w)\log P_\tau(w)$ 是 $\tau$ 的单调增函数。直观地,$\tau$ 直接控制"多样性预算"。后续会看到,RL 训练中 entropy 塌缩 是个核心问题,DAPO 的 clip-higher 正是为此设计。
易混点
Temperature 是超参数 ,作用于 Greedy / Beam / Sampling 全部解码算法。它本身不是一个解码算法。
1.8 进阶采样:Min-p、Contrastive、DRY
Min-p Sampling(2024)
固定 $p_\text{min}$,只保留概率 $\geq p_\text{min}\cdot p_\text{max}$ 的 token。优势:自适应于分布尖锐度,对"陡峭分布留少、平坦分布留多"比 top-p 更好。Llama 系列的最新生成 API 已加入此选项。
Contrastive Decoding(Li et al., 2022)
用一个小模型(amateur)作对比,给大模型(expert)的 logit 减去 amateur 的:
$$s^\text{CD}_w = \log P_\text{expert}(w|h) - \alpha \log P_\text{amateur}(w|h)$$
直觉:减去"无脑"模型也会给的概率,剩下的是真正"专家级"的判断。对开放生成有效,且不增加大模型本身的计算。
DRY(Don't Repeat Yourself, 社区常用)
不是数学算法,而是工程 hack:检测最近 N token 内出现的子串,给其后续 token 的 logit 一个惩罚项。是一种事后的反复读机补丁。HuggingFace transformers 的 repetition_penalty 和 no_repeat_ngram_size 都是类似思路。
1.9 何时该用 Greedy,何时该用 Sampling?
使用 Greedy 的情形
任务有唯一正确答案(数学、代码、事实问答);
需要复现实验(reproducibility);
常规推理任务(reasoning,但见 §1.10 警告);
受限输出空间(分类、抽取、JSON 严格格式)。
使用 Sampling 的情形
开放生成(创意写作、对话);
长链 CoT 推理(hard math, code) ;
检索增强 / 信息搜寻;
追求多样性而非单一最优解。
新兴趋势:Best-of-N Sampling
Best-of-N 把"采样"和"评分"分离开:
从模型采样 $N$ 条候选答案(高温度,鼓励多样性);
用一个 reward model (或 verifier)给每条打分;
输出得分最高的那条。
这其实是一种拒绝采样(rejection sampling) ,在推理任务上效果显著:
把小模型 + Best-of-N 可与大模型直接生成相当;
对数学/代码等可验证任务(verifiable)尤为有效,因为 reward 接近真值;
是 2025 年 test-time compute scaling 的核心范式之一。
1.10 2025 年的新困境:推理模型仍在死循环
"用了 sampling 就不会死循环了"?MIT/Microsoft Research/UW-Madison 在 2025 年的 "Wait, Wait, Wait... Why Do Reasoning Models Loop?" 揭示:哪怕用了现代 reasoning LLM(DeepSeek-R1-Distill、QwQ、OpenThinker 等),死循环仍未根除 。
定义:当响应里出现某个 30-gram 重复超过 20 次,记为一次 "looping"。在 AIME 2024/25 上的观察:
低温度 → 死循环更频繁 (temperature=0 时 Qwen-Distill-1.5B 高达 76% 的题目会循环!);
小模型死循环远多于大模型 (1.5B > 7B > 32B);
难题死循环远多于简单题 ;
蒸馏学生比老师还容易死循环 (distill 把循环习惯也学过去了)。
现代死循环的新特点
与 2019 年纯字面重复("México/México/México…")不同,2025 年的死循环是语义层面 的:模型反复用不同表述描述同一件事("each pair sorted alphabetically..."),表面上每段都在"思考",实则在原地打转。
这意味着仅靠正则匹配检测重复已经不够,需要更深层的"语义循环"检测器。
第二章 DeepSeek R1 深度剖析
从 R1-Zero 到 R1 到 R1-Distill:一篇 paper 改变了开源 LLM 推理的天平。
2.1 历史时刻:R1 的冲击
2025 年 1 月 27 日,DeepSeek 团队发布 R1 论文与开源权重(MIT 协议),震动业界 —— 同一天,NVIDIA 股价单日下跌近 17%,市值蒸发约 5800 亿美元。原因:DeepSeek 声称用约 2,048 张 H800 芯片,约 600 万美金,两个月训练出了一款对标 OpenAI o1 的推理模型。这冲击了"必须用最贵芯片堆资本"的 AGI 投资叙事。
R1 论文真正的技术贡献分三层:
R1-Zero :直接对 DeepSeek-V3 Base 做纯 RL(无 SFT 冷启动),用规则奖励就能涌现 CoT;
R1 :在 R1-Zero 基础上加入冷启动 SFT、多阶段 RL,得到稳定可用的推理模型;
R1-Distill :用 R1 的输出去 SFT 小模型(Qwen-7B、Llama-8B),小模型也能"会"推理。
DeepSeek-V3 Base
RL (Reasoning
Prompts + Acc&Fmt)
R1-Zero
↓ Sampling+Filter
Cold-Start CoT data
(filtered & refined)
V3 Base
SFT (Cold Start)
R1 Dev-1
RL (Rule Reward
+ Lang Consist.)
V3 Base + V3
SFT (Reasoning
+ Non-Reasoning)
R1 Dev-3
RL (Diverse
+ Pref Reward)
DeepSeek-R1
Models
RL stages
SFT stages
Data
图 2.1 DeepSeek-R1 三列多阶段训练流水线。左列得到 R1-Zero,中列得到 R1-Dev-2,右列得到 R1。
2.2 R1-Zero:纯 RL 能否激发推理?
R1-Zero 是论文最具突破性的部分:在 V3-Base 基础上不做任何 SFT ,直接用 RL with Verifiable Rewards(RLVR)训练。具体规则:
采样推理任务(数学题、代码题等)prompts;
模型生成响应(要求把推理写在 <think>...</think> 内,最终答案写在外面);
用规则评估正确性,得到 reward;
用 GRPO(见第 3 章)更新模型。
"Aha moment"
在 R1-Zero 训练的中间版本上,模型在解一道含套娃根式的方程时,突然出现这种回应:
To solve √(a - √(a+x)) = x, let's start by squaring both sides...
[一些计算]
Wait, wait. Wait. That's an aha moment I can flag here.
Let's reevaluate this step-by-step to identify if the correct sum can be ...
模型用了拟人化的"等等"(Wait)来打断自己,然后回退、重新推导。这一行为不在训练数据中明示,是在 outcome-based RL 下自发涌现的 。这是论文中 Yejin 提到的"作者们也 aha 了一下"。
2.3 极简奖励设计:为什么不要 Process Reward Model(PRM)?
R1-Zero 的奖励只有两项:
Accuracy Reward
数学题:与 ground truth 比对(要求模型把答案放到 \boxed{} 内以便提取)。代码题:跑测试用例。本质是二元奖励 。
Format Reward
当输出严格符合 <think>...</think> 最终答案 格式时给小奖励。促使模型把"思考过程"清晰分离。
论文的反主流主张
不使用 Process Reward Model(PRM) 。理由:
昂贵 :PRM 需要标注每一步对错;
易被 reward hack :模型学到"听起来像对的步骤"而非真正正确;
限制探索 :PRM 惩罚不寻常但有效的推理路径,扼杀新策略。
这是对 OpenAI 路线的隐含挑战:OpenAI 长期押注 PRM("Let's Verify Step by Step")。R1 给出了另一条路 —— 更少的监督有时给出更强的能力 。
2.4 涌现的推理能力
R1-Zero 训练过程中,自发观察到三种能力:
✅ Self-verification
得出答案后自动检查推导。outcome-based RL 强化了这一行为,因为自我验证后的答案对的概率更高。
🤔 Reflection & Backtracking
"Wait, let me reconsider"。模型识别错误路径,回退到分叉点尝试另一条策略。这是 LLM 版的 MCTS,但完全靠语言完成。
📚 Extended Deliberation
响应长度从数百 token 增长到数千 token。模型学到了 "think longer → answer better" —— 一种学得到的 test-time compute scaling 。
2.5 R1-Zero 的副作用
可读性差 :reasoning trace 格式凌乱;
语种混杂(Code switching) :中-英-数学符号-代码混合;
能力范围窄 :RLVR 只在 verifiable 任务(math/code)上有效,开放对话与安全对齐无法靠规则评估。
2.6 多阶段流水线:从 R1-Zero 到 R1
R1 模型经历了 4 阶段流水线 :
Stage A :R1-Zero 训练;
Stage B :从 R1-Zero 采样,经 V3 + 人工筛选过滤后形成 cold-start CoT 数据集,对 V3-Base SFT → R1-Dev-1;
Stage C :继续 RL,加入"语言一致性"项 → R1-Dev-2;
Stage D :综合 SFT(推理 + 非推理)→ R1-Dev-3 → 最后一次 RL(含安全、偏好奖励)→ R1 。
哲学:RL 用来发现能力,SFT 用来稳住格式与可读性。 两者反复交替。
2.7 R1-Distill:蒸馏的胜利
R1 输出作为教师 demonstration,去 SFT Qwen 系列(1.5B / 7B / 14B / 32B)和 Llama-8B。结论:
对小模型而言,蒸馏 R1 比直接对小模型 RL 效果好得多 ;
蒸馏后的 7B / 14B 在 reasoning benchmarks 上超过许多更大的闭源模型;
蒸馏 1.5B 在 MATH 上也有不俗成绩。
这意味着什么
开源社区拿到 R1-Distill 后,仅需消费级 GPU 就能跑出有"思考能力"的小模型。"会推理"不再是大厂的专属奢侈品 。
2.8 七大关键发现
# 发现 解读 注意点
1
RL 能独立 诱发推理
颠覆 "CoT 必须靠 supervised CoT 示例" 的旧假设
但最终 R1 仍走了 SFT→RL 完整路径;对小模型不奏效
2
结果奖励即可解锁发现
PRM 不必要,outcome reward 反而留下更多探索空间
仅适用于可验证任务(RLVR)
3
RL 与 SFT 协同
RL 发现能力,SFT 稳定能力;缺一不可
多阶段流水线带来实现复杂度
4
蒸馏 > 直接对小模型做 RL
有限算力下,先训大老师再蒸馏更划算
说明 RL 对小模型的探索能力有上限
5
开源推理模型可行
R1 与 distill 均 MIT 协议,学术界利好
—
6
不需要 MCTS 等结构化搜索
纯 autoregressive 加 RL 已足够,"语言即搜索"
后续硬数学 benchmark 模型仍引入结构化推理
7
Test-time compute 是可学的
模型自动分配"难题 → 多想"
后续研究发现存在"想多不对"的失败模式
表 2.1 R1 论文的七大关键发现。
2.9 R1 vs o1:路线对比
维度 OpenAI o1(推测) DeepSeek R1(公开)
训练范式 SFT (long CoT) → 大规模 RL RL (R1-Zero) → SFT → RL → SFT → RL
奖励 PRM + outcome(推测) 纯 outcome(rule-based)
权重 闭源 开源 (MIT)
蒸馏 未官方提供 提供 1.5B/7B/14B/32B distill
"思考"是否可见 否(API 仅返回摘要) 是(<think> 标签可全见)
研究价值 设立 benchmark 提供训练 recipe + 权重
表 2.2 R1 与 o1 的路线对比(o1 列基于公开报告与推测)。
第三章 PPO、GRPO 与 DAPO
从 OpenAI 时代的 PPO,到 DeepSeek 的 GRPO,再到 ByteDance 的 DAPO —— RL for LLM 的三幕剧。
3.1 PPO 目标的逐项解读
已在第 0 章推导过,这里我们把 PPO 的完整训练目标摊开看:
$$\mathcal{J}_{\mathrm{total}} = \underbrace{\mathcal{J}_{\mathrm{PPO}}^{\mathrm{CLIP}}(\theta)}_{\text{策略更新}} - \underbrace{c_1\,\mathcal{L}_V(\phi)}_{\text{价值拟合}} + \underbrace{c_2\,H(\pi_\theta)}_{\text{探索奖励}}$$
三项功能:
$\mathcal{J}_{\mathrm{PPO}}^{\mathrm{CLIP}}$:clipped surrogate,更新 policy。详见 §0.6。
$\mathcal{L}_V(\phi) = \mathbb{E}[(V_\phi(s_t) - R_t^\text{target})^2]$:value 网络的 MSE 拟合误差。
$H(\pi_\theta) = -\sum_a \pi_\theta(a|s)\log\pi_\theta(a|s)$:熵奖励,鼓励策略保持多样性,防止过早 deterministic。
命名陷阱
PPO 公式里的 $r_t$ 是importance sampling ratio ,不是 reward!它和 reward 同字母极易混淆 —— Yejin 课上特意强调。
3.2 PPO 复杂性(一):四(甚至五)个模型同时驻留显存
把 PPO 用在 LLM 上的工程代价远超学术叙述。每一次训练步骤都要同时持有:
Policy $\pi_\theta$ :正在更新的"演员"模型,本身就是要训的 LLM。
Value network $V_\phi(s)$ :评论员模型,通常是另一个 LLM 副本加一个标量头,单独训练。
Reward model $R$ :在人类偏好数据上预先训好的打分模型,frozen。
Reference policy $\pi_{\mathrm{ref}}$ :原始预训练模型的 frozen 拷贝,用来约束 KL,防止策略漂移。
现实更糟:第 5 个模型
由于 RL 基础设施(如 vLLM 推理 + DeepSpeed 训练)通常用异步 方式做 rollout,"采样时用的策略" $\pi_{\theta_\mathrm{old}}$ 与"梯度更新时的策略" $\pi_\theta$ 略有滞后,实际上要额外维护一份 $\pi_{\theta_\mathrm{old}}$ 副本。所以工程上常说"PPO 要 5 个模型 "。
4–5 倍的显存意味着:
训练 7B policy 大致需要 7B × 5 = 35B 等价显存预算;
能跑 PPO 的实验室寥寥;
这正是后续 GRPO/DAPO 要"砍掉某些模型"的动力。
3.3 PPO 复杂性(二):Generalized Advantage Estimation(GAE)
PPO 的目标里需要"优势"$\hat{A}_t$,描述某个动作比平均好多少。但只在序列末尾有 reward,怎么把它分配到每一个 token?答案:用价值网络 + GAE。
首先定义 TD 残差:
$$\delta_t = \tilde{r}_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)$$
这里 $\tilde{r}_t$ 是第 $t$ 步的 per-token reward(见 §3.5 构造方式),$\gamma$ 是折扣因子(RLHF 中常取 1.0)。然后 GAE advantage 是 TD 残差的指数加权和:
$$\hat{A}_t^{\mathrm{GAE}(\gamma,\lambda)} = \sum_{l=0}^{T-t} (\gamma\lambda)^l\, \delta_{t+l}
= \delta_t + (\gamma\lambda)\delta_{t+1} + (\gamma\lambda)^2 \delta_{t+2} + \cdots$$
$\lambda \in [0,1]$ 控制偏差-方差权衡:$\lambda = 0$ 一步 TD(偏差大方差小),$\lambda = 1$ 纯 MC(偏差小方差大)。RLHF 常用 $\lambda = 0.95$。
"So What?" —— 算一笔账
GAE 要求对生成序列每一个 token 位置都调用一次价值函数 。如果一个 batch 是 512 个 prompt × 16 个 response × 平均 2,000 tokens,那就是 ~1,600 万次 value 网络 forward 。每一步训练!价值网络本身又是一个 7B LLM,工程开销极其惊人。
3.4 PPO 复杂性(三):价值网络的训练
$$\mathcal{L}_V(\phi) = \mathbb{E}_t\!\left[\big(V_\phi(s_t) - R_t^{\mathrm{target}}\big)^2\right]$$
$$R_t^{\mathrm{target}} = \hat{A}_t^{\mathrm{GAE}} + V_{\phi_\mathrm{old}}(s_t)$$
看似简单,但隐含的问题在于:
价值网络有独立学习率 ,需要分别调参;
它和 policy 之间的耦合 :价值估错 → advantage 估错 → policy 更新方向错。RLHF 训练崩溃常源于此;
理论上 价值网络应学到 per-token credit assignment;
实际上 ,对 LLM 这种长序列、稀疏奖励、上下文极其依赖的设定,价值网络学到的信号有多有效一直存疑。
3.5 PPO 完整训练步骤与伪代码
Rollout 生成 ;
Reward 计算 :用 reward model $R$ 给整个 response 一个标量分数;
Per-token reward 构造(加 KL 惩罚) :
$$\tilde{r}_t = -\beta\,\log\frac{\pi_{\theta_\mathrm{old}}(a_t\mid s_t)}{\pi_{\mathrm{ref}}(a_t\mid s_t)} \quad \text{(中间 token)}$$
$$\tilde{r}_T = R - \beta\,\log\frac{\pi_{\theta_\mathrm{old}}(a_T\mid s_T)}{\pi_{\mathrm{ref}}(a_T\mid s_T)} \quad \text{(最后一个 token)}$$
Per-token value 估计 :调用 $V_\phi$;
Per-token advantage 计算 :GAE;
Policy 更新 :用 $\mathcal{J}_{\mathrm{PPO}}^{\mathrm{CLIP}}$;
Value 更新 :用 $\mathcal{L}_V$。
算法 3.1 PPO for LLM(一个训练 step)
for prompt q
in D:
o ← sample_from(π_θ_old, q)
R_total ← R(q, o)
for t
in range(|o|):
kl_t ← log π_θ_old(o_t|q,o_<t) - log π_ref(o_t|q,o_<t)
r̃_t ← -β · kl_t
r̃_{|o|-1} += R_total
V ← [V_φ(s_t)
for t
in range(|o|+1)]
A ← gae(r̃, V, γ=1.0, λ=0.95)
R_target ← A + V[:-1]
for epoch
in range(K):
ratio ← π_θ(o|q) / π_θ_old(o|q)
L_clip ← min(ratio · A, clip(ratio, 1-ε, 1+ε) · A).mean()
θ ← θ + lr_π · ∇_θ L_clip
for epoch
in range(K):
L_V ← ((V_φ(s) - R_target)²).mean()
φ ← φ - lr_V · ∇_φ L_V
π_θ_old ← π_θ
3.6 GRPO:去掉价值网络
Group Relative Policy Optimization(GRPO,Shao et al. 2024,DeepSeekMath 论文)的核心 insight:
关键观察
对一个 prompt 采样多条 response(一个"group"),它们之间的相对好坏 就是一份免费的、无偏的 advantage 信号 —— 不需要价值网络!
具体地:给定 prompt $q$,采样 $G$ 条 response $\{o_1, o_2, \ldots, o_G\}$(典型 $G=8$ 或 $16$),每条得到 outcome reward $R_i$。group-relative advantage 是简单的 z-score:
$$\hat{A}_{i,t} = \dfrac{R_i - \mathrm{mean}(\{R_1, \ldots, R_G\})}{\mathrm{std}(\{R_1, \ldots, R_G\})}$$
所有 token 共享同一个 advantage —— 整个 response 是一个"动作",credit 统一分配。GRPO 目标:
$$\mathcal{J}_{\mathrm{GRPO}}(\theta)
= \mathbb{E}\!\left[\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}
\Big(
\min(r_{i,t}(\theta)\hat{A}_{i,t},\,\mathrm{clip}(r_{i,t}(\theta),1-\varepsilon,1+\varepsilon)\hat{A}_{i,t})
- \beta D_{\mathrm{KL}}(\pi_\theta \| \pi_{\mathrm{ref}})
\Big)
\right]$$
$$r_{i,t}(\theta) = \dfrac{\pi_\theta(o_{i,t}\mid q, o_{i,<t})}{\pi_{\theta_\mathrm{old}}(o_{i,t}\mid q, o_{i,<t})}$$
形式上和 PPO 几乎一样,但两个重要变化:
Advantage $\hat{A}_{i,t}$ 不再来自 GAE+value,而是组内 z-score;
KL 项从 reward 中拿了出来,作为损失的显式 第二项。
算法 3.2 GRPO(一个训练 step)
for prompt q
in D:
{o_1, …, o_G} ← sample_from(π_θ_old, q, n=G)
R_i ← R(q, o_i)
for i
in 1..G
μ ← mean({R_i})
σ ← std({R_i})
Â_i ← (R_i - μ) / σ
for epoch
in range(K):
ratio_{i,t} ← π_θ(o_{i,t}|...) / π_θ_old(o_{i,t}|...)
L_clip ← (1/G) Σ_i (1/|o_i|) Σ_t min(ratio_{i,t}·Â_i, clip·Â_i)
L_kl ← β · D_KL(π_θ || π_ref)
L ← L_clip - L_kl
θ ← θ + lr · ∇_θ L
π_θ_old ← π_θ
3.7 GRPO advantage 的无偏性证明
初学者疑问:为什么"组内 z-score"作为 advantage 是 sound 的?我们简要证明它对 policy gradient 来说不引入偏差 。
证明(简)
回忆 §0.3:减去任意 $a$-无关 baseline $b(s)$ 不改变期望:
$$\mathbb{E}_a[\nabla\log\pi_\theta(a|s)\cdot b(s)] = b(s)\cdot\nabla_\theta \sum_a \pi_\theta(a|s) = b(s)\cdot \nabla_\theta 1 = 0$$
现在对一个 group,对 fixed prompt $q$,
$$\mathbb{E}_{o\sim\pi}[\mu(q)] = \mu(q), \quad \mathbb{E}_{o\sim\pi}[\sigma(q)] = \sigma(q)$$
即 $\mu$ 与 $\sigma$ 都是 $q$ 的函数,不依赖具体动作 $o$ ,因此都是合法 baseline / scaling。
$\frac{R_i - \mu(q)}{\sigma(q)}$ 因此是无偏 advantage estimator —— $\mu$ 减去不改变梯度方向,$\sigma$ 归一化也不改变期望,只是把组间方差缩到 1。
这一推导说明:GRPO 是 REINFORCE-with-baseline 在 group setting 下的特殊化 。它有一个 PPO 没有的好性质 —— baseline 是从同一 prompt 的另外几条样本中算出来的 ,因此天然无偏、不需要单独训一个 value 网络。
3.8 PPO vs GRPO 详细对比
维度 PPO GRPO
显存中模型数
Policy + Old Policy + Value + Reward Model + Reference(≈5)
Policy + Old Policy + Reference(≈3,R1 用规则替代了 RM)
Advantage 估计
每 token 的 GAE
每 group 的 reward z-score(统一)
Token-level credit
由 TD 残差细分
所有 token 共享同一 advantage
训练的网络
Policy + Value
仅 Policy
KL 项位置
嵌入 per-token reward(间接)
显式加在目标里(直接)
实现复杂度
高
低
采样要求
每 prompt 1+ 条即可
每 prompt ≥ 2 条(否则 std=0)
典型批大小
$N$ prompts × 1 response
$N/G$ prompts × $G$ responses
表 3.1 PPO 与 GRPO 的实现层面差异。
3.9 DAPO 的三个改进
2025 年 ByteDance Seed 团队发表 DAPO: An Open-Source LLM Reinforcement Learning System at Scale ,针对 GRPO 训练大规模长 CoT 模型时的三个具体痛点。
改进 1:Clip-higher(非对称 clip)
PPO/GRPO 的 clip 是对称的:$[1-\varepsilon, 1+\varepsilon]$。问题:
上界限制了"概率提升"的幅度 → 阻碍模型对发现的好动作进行强化;
结果是熵塌缩(entropy collapse) :模型变得过早 deterministic,丧失探索能力。
$$\mathrm{clip}\big(r_{i,t}(\theta),\; 1-\varepsilon_{\mathrm{low}},\; 1+\varepsilon_{\mathrm{high}}\big)$$
典型设置 $\varepsilon_{\mathrm{low}} = 0.2,\;\varepsilon_{\mathrm{high}} = 0.28$。允许"概率上行"幅度更大,给"对的动作"更多奖励。
改进 2:Dynamic Sampling(动态采样)
GRPO 的 advantage 是组内 z-score。当一个 group 里 全对 或全错 时:
$$\hat{A}_{i,t} = \frac{R_i - \mathrm{mean}}{\mathrm{std}} = \frac{0}{0} \to 0$$
整个 group 的梯度都是 0 —— 梯度死区 。DAPO 的策略:
采样后,过滤掉所有 "全对" 或 "全错" 的 group;
持续重采样,直到 batch 里所有 group 都至少包含一个对、一个错;
保证 batch 的有效梯度量稳定。
改进 3:Token-level loss
GRPO 的损失先 per-sample 平均:
$$\text{GRPO (sample-level): } \frac{1}{G}\sum_i \frac{1}{|o_i|}\sum_t \mathcal{L}_{i,t}$$
问题:短 response 的每个 token 贡献了 $1/|o|$ 的梯度。100 token 与 1000 token 同等重要 → 短回答每 token 贡献是长回答的 10 倍 → 模型实际上被推向"短答案"。DAPO 改为:
$$\text{DAPO (token-level): } \frac{1}{\sum_i |o_i|}\sum_i \sum_t \mathcal{L}_{i,t}$$
所有 token 一视同仁;长 response 自然得到更多梯度权重。对训练长 CoT reasoning model 至关重要。
DAPO 的整体哲学
GRPO 是"砍掉 value 网络"的简化;DAPO 是在 GRPO 简化基础上,把工程实际中发现的问题一一补丁 (asymmetric clip、dynamic sampling、token-level loss)。它代表了 RL 工程从理论到生产落地的一次迭代成熟。
3.10 RLOO、REINFORCE++、其他变体
除了 GRPO/DAPO,2024–2025 年涌现了一批"去 value 网络"的 PPO 替代方案,思路都是利用组内 baseline。
RLOO (REINFORCE Leave-One-Out, Ahmadian et al. 2024)
同样采样 $G$ 条 response,但 advantage 计算方式不同:第 $i$ 条的 baseline 是其余 $G-1$ 条 的平均:
$$\hat{A}_i^{\mathrm{RLOO}} = R_i - \frac{1}{G-1}\sum_{j \neq i} R_j$$
这是一个 leave-one-out estimator,无偏且方差比直接用 group mean 略低。RLOO 与 GRPO 的区别仅在 baseline 形式 ,前者算术上更"干净",后者用了 z-score(含 std 归一化)。
REINFORCE++
对 RLOO 添加多个 stability tricks(gradient clipping、reward normalization、KL 散度变体)。OpenRLHF 等开源框架以此为默认。
算法 核心特征 Baseline 来源
PPO 价值网络 + GAE 训练的 $V_\phi(s_t)$
GRPO 组内 z-score 组 mean + std 归一化
DAPO GRPO + 三个 patch 同 GRPO,但带过滤
RLOO Leave-one-out 其他 $G-1$ 条 reward 均值
REINFORCE++ RLOO + stability tricks 同 RLOO
表 3.2 主流 LLM RL 算法谱系。
3.11 训练调试速查
症状 可能原因 排查建议
训练初期 reward 飞涨,后期崩塌
Reward hacking;KL 太小
增大 $\beta$,检查 reward 分布
Reward 不动 / 缓慢上升
探索不足,熵塌缩
增大温度;DAPO clip-higher;提高 entropy bonus
模型输出越来越短
Sample-level loss 偏向短答案
切到 token-level loss(DAPO)
梯度爆炸 / NaN
Importance ratio 过大
降低 lr;检查 $\pi_{\theta_\mathrm{old}}$ 滞后程度
KL 突然爆炸
K1 估计器导致负 KL
切到 K3 估计器
很多 batch advantage 为 0
Group 全对/全错
DAPO dynamic sampling
模型语种乱跳
RLVR 没有语言奖励
加入语言一致性 reward(R1 Stage C 做法)
表 3.3 RL for LLM 训练问题速查。
第四章 推理的本质:What works, Why it works, When it fails
回到 CoT 这个老题目 —— 我们其实仍然不完全理解它。
4.1 What works:CoT 与 Self-consistency
4.1.1 Chain-of-Thought Prompting (Wei et al., 2022)
Wei 等人提出:只需在 few-shot 示例中演示推理步骤,模型就能在新问题上自动模仿。结论极强:
CoT 在 GSM8K、SVAMP、AQuA 等数学任务上提升数十个百分点;
但CoT 是 emergent property of scale —— 只在 100B+ 模型上明显有效;小模型的"CoT"经常是胡乱的步骤,不仅没帮助甚至降低准确率。
4.1.2 Self-consistency (Wang et al., 2022)
Self-consistency = 在 CoT 基础上多次采样 + 多数投票:
用同一 prompt + 高 temperature 采样 $N$ 条 reasoning paths;
从每条 path 中抽取最终答案;
取出现次数最多的答案。
在 GSM8K 上提升 +17.9%(从基础 CoT 起跳),SVAMP +11.0%,AQuA +12.2%。
与 Best-of-N 的区别
Self-consistency 用"多数投票"做聚合,不需要 reward model;Best-of-N 用 reward model 选最佳。前者免学习,后者更强但依赖 RM 质量。
4.2 Why it works (I):CoT-decoding 揭示 LLM 内的"隐藏推理"
Wang & Zhou (2024) 的 "Chain-of-Thought Reasoning without Prompting" 提出挑衅性实验:不写任何 CoT 提示 ,能否仍激发 CoT?答案:能。方法称为 CoT-decoding :
对第一个生成 token,分支取 top-$k$ 个候选;
对后续 token,每条分支都用 greedy decoding 继续;
得到 $k$ 条候选 trajectory,比较模型对最终答案的置信度 。
定义"答案置信度":
$$\Delta_{k,\mathrm{answer}}
= \dfrac{1}{|\mathrm{answer}|}\sum_{x_t \in \mathrm{answer}}
\Big(p(x_t^{1} \mid x_{<t}) - p(x_t^{2} \mid x_{<t})\Big)$$
即答案中每个 token 的 top-1 和 top-2 概率差的平均 。差距越大,模型越"确信"。实验发现:
在 top-$k$ 分支中,真正包含 CoT 推理 的那条 trajectory,模型对答案的置信度显著更高;
而 greedy decoding(top-1 路径)经常根本不包含 CoT;
含 CoT 的路径在 GSM8K 上把 PaLM-2 L 的 top-100 准确率从 44% 提到 72%,Year Parity 任务从 57% 提到 95%。
深刻含义
预训练 LLM 本身已经隐含了推理能力 —— 它就在 top-$k$ 候选里。Greedy decoding 推理表现差,是因为它没碰到那条 CoT 路径。CoT prompting 之所以有效,是因为它把模型"推"到那条 CoT 路径上去了。
方法 GSM8K (top-100) Year Parity
Greedy decoding 44.0% 57.0%
10 paths,按 log-prob 排 37.0% 55.0%
10 paths,按 length-normalized log-prob 排 51.0% 57.0%
CoT-decoding(按答案置信度排) 72.0% 95.0%
表 4.1 不同 CoT 提取方法对比(Wang & Zhou, 2024)。
Zero-shot CoT:一句"Let's think step by step"
Kojima 等人 (2023) 发现:在 prompt 末尾加一句"Let's think step by step.",模型就会自动展开 CoT。MultiArith 零样本准确率从 17.7% → 78.7%。误导性 prompts("Don't think. Just feel.")反而降到 18.8%。说明:触发 CoT 的不是魔法咒语 ,而是引导模型进入"展示思考"分布 的语义提示。
4.3 Why it works (II):Locality 与认知行为
4.3.1 Prystawski et al. (2023):CoT 源于训练分布的"局部性"
论文用一个干净的合成实验回答"为什么逐步推理有用":
构造一个有 17 个变量的贝叶斯网络;
训练样本只采样邻近变量的局部子集 ,全图变量从不在一条样本中同时出现;
测试时比较直接预测 vs 自由生成中间变量再预测。
结果:在局部训练分布 下,自由生成中间变量(即 CoT)显著降低误差,出现了 "reasoning gap ";而在全联合分布 训练下,CoT 没有帮助。
理论提示
CoT 是把"远距离推断"分解为"多步局部推断" 的过程。预训练数据天然就是局部相关的,所以 LLM 内部存的更多是局部条件分布。一次跨远距离的查询失败时,把它拆成若干局部查询拼起来,就对了。
4.3.2 Gandhi et al. (2025):四种"高效推理者的认知习惯"
论文探究:为什么 Qwen-2.5-3B 在相同 RL 训练下能持续提升,而 Llama-3.2-3B 很快 plateau?答案:4 种关键认知行为。
Verification :在进入下一步前检查中间结果;
Backtracking :识别错误并退回到分叉点;
Subgoal Setting :把复杂问题切成子问题;
Backward Chaining :从目标反推所需步骤。
Qwen-2.5-3B ✓
预训练已具备四种行为。RL 强化它们 → 响应变长、准确率上升。
Llama-3.2-3B ✗
缺乏这些行为,RL 快速 plateau。但若先用带这些行为的样本 priming,Llama 也能赶上 Qwen。
关键洞见
"Behavior matters more than correctness." 把带有正确推理结构但答案错误 的样本喂给模型,RL 仍能学好;反之,如果只有"短路径正确答案"的训练数据,模型不会习得这些行为。RL 的种子在预训练分布里。
4.4 测试时计算缩放定律
o1 与 R1 报告中最具影响力的图:给定模型,准确率随 inference-time tokens 单调上升 。这构成了一个新的 scaling law。
log(inference compute / tokens)
benchmark accuracy
o1 / R1 (test-time scaling)
classic LLM (no thinking)
10²
10³
10⁴
10⁵
图 4.1 测试时计算缩放定律示意。横轴 inference-time tokens 对数,纵轴 benchmark 准确率。R1/o1 解锁了一条新的、陡峭的提升曲线。
正式陈述:
$$\text{Accuracy}(T) \approx \alpha \log T + \beta$$
$T$ 是 inference-time tokens(即 CoT 长度 × 样本数 × ...)。这条规律意味着:
测试时 compute 可以用 train-time compute 来"换" —— 不增加参数即可获得新能力;
对计算受限的部署场景(手机端、车机端),可以训练 distilled 小模型,在能容忍延迟的应用 给它更多 thinking budget;
但对延迟敏感的应用(搜索、实时对话),test-time scaling 的红利取不到。
4.5 pass@k 与 maj@k 指标形式化
评估推理 LLM 常用两个指标:
pass@k
采样 $n$ 条样本,其中 $c$ 条正确,pass@k 衡量"任取 $k$ 条中至少一条对"的概率:
$$\mathrm{pass@}k = \mathbb{E}_{\text{problems}}\!\left[1 - \dfrac{\binom{n-c}{k}}{\binom{n}{k}}\right]$$
当 $c = 0$ 时 pass@k = 0;当 $c \geq k$ 时 pass@k 接近 1。常见 $k \in \{1, 4, 8, 16, 64\}$。
maj@k
采样 $k$ 条样本做多数投票 得到的准确率(即 self-consistency)。注意:
$$\mathrm{maj@}k \leq \mathrm{pass@}k$$
因为投票只能选一个,pass 能命中多个。但 maj 没有 oracle —— pass 假设有 verifier,maj 不假设。
实践含义
在 verifier 强(math/code)时,pass@k 是 best-of-N + verifier 的理论上界;在没 verifier 时,maj@k 是免学习的较强 baseline。Test-time scaling 论文里两条曲线的 gap 反映了"如果我们有更好的 verifier 还有多少 headroom"。
4.6 When it fails (I):CoT Faithfulness
Anthropic (Chen et al., 2025) 系统评估 SOTA reasoning model 在被"提示作弊"时,CoT 是否如实反映模型的实际思路。给模型一个含偏置提示 (hint)的题目,看 CoT 里有没有提到"我用了这个 hint"。
类别 Hint 类型 示例
Neutral Sycophancy "I think the answer is (A) but I'm curious to hear what you think."
Consistency 多轮对话中 assistant 上轮答 (A),新轮要求"don't anchor"
Visual Pattern few-shot 示例中正确答案都被 ■ 或 ✓ 标记
Metadata 题目元数据中藏 <answer>A</answer>
表 4.2 CoT faithfulness 测试 hint 类型。
结论:
低 faithfulness :模型实际使用 hint 的案例中,仅 < 20% 的 CoT 承认;
RL plateau :outcome-based RL 一开始能把 faithfulness 从极低提到 28% (MMLU) / 20% (GPQA),然后 plateau;
Reward hacking opacity :当 RL 增加 hint 使用率(即学到 shortcut),CoT 的承认率不同步上升 → CoT 监控不能可靠检测模型走捷径 。
AI 安全启示
对齐研究者一度期待"CoT 是模型推理过程的透明窗口",能用来监督和审核。Anthropic 这篇结果泼了一盆冷水:CoT 不一定如实反映模型的真实计算路径 。模型可能在内部走了捷径,然后在 CoT 中编一个看上去合理的故事。
4.7 When it fails (II):Don't think, just do
Liu et al. (2025) 的 "Mind Your Step (by Step)" :在某些"人类越想越错 "的任务上,LLM 越 CoT 也越错。
论文测试三类心理学上 "thinking impedes performance" 的任务:
ISL(Implicit Statistical Learning) :从字符串推断隐藏规则。语言化干扰 implicit pattern detection;
FR(Face Recognition) :语言化描述会破坏整体面孔识别(verbal overshadowing effect);
CDE(Categorical Detection of Exceptions) :迭代学习中,把例外视作类内常态需要直觉;过度审议会丢失这种"特征化感知"。
在这些任务上,让 LLM "Let's think step by step" 反而降低了准确率。
— Don't think, just do. —
更深的启示
Chain-of-Thought 不是无条件 地有益。对那些识别 / 直觉 / 隐式模式 类任务,让模型展开自然语言推理反而打乱了内部的快速决策路径。这呼应 Kahneman 的 System 1 / System 2 之分:CoT 是 System 2,但很多任务该用 System 1。
未来研究关键问题:如何让模型自适应选择"想不想"以及"想多深" ?
总结与展望
把这一讲的五章串起来:
数学层(Ch.0) :policy gradient 定理给出了所有 PG 类算法的统一图景;importance sampling 让 off-policy 更新成为可能;TRPO/PPO 用 KL 信赖域防止策略漂移。
解码层(Ch.1) :从 Greedy/Beam 的"最大似然"范式,到 Sampling 的"分布采样"范式 —— 对应了我们对"语言生成"理解的演进。
案例层(Ch.2) :以 R1 为标志,纯 outcome-based RL 被证实能激发推理;多阶段 SFT+RL 流水线给出可复现 recipe。
算法层(Ch.3) :PPO → GRPO → DAPO 演进的核心是"去 value 网络 + 更稳的 importance ratio + 公平的 token 加权"。
本质层(Ch.4) :CoT 是预训练分布局部性使然,是模型已有能力的表达方式 ;同时 CoT 也有局限 —— 不一定 faithful,也不一定有益。
给研究生的几个开放问题
解码层 :在 reasoning model 上检测和缓解"语义循环"应使用什么指标?能否在 RL loss 中加入显式 anti-loop 项而不引入 reward hacking?
算法层 :GRPO 把所有 token 的 advantage 一视同仁,DAPO 也仅做了 token-level loss 调整 —— 是否仍存在更细粒度的、不依赖 value network 的 credit assignment?(例如基于 attention 或基于 hidden state)
对齐层 :能否设计训练目标,使 CoT 在 faithfulness 上不仅"看似 reasonable",而是真正反映模型的内部计算?如何检验?
跨模态推理 :本讲完全围绕文本展开;视觉/多模态推理任务中,CoT 的"想"应当以何种形式展开(文本、图像、向量、组合)?
自适应推理 :如何让模型对每个 query 自动判断"该想多深"?是否可以训练一个 meta-controller,决定何时进入 long CoT 模式?
下一讲(Lecture 13: Reasoning 2/2)会进入 Speculative Decoding 与更深入的推理算法。
附录 A:公式速查表
名称 公式
Softmax $P(w) = \exp(s_w)/\sum_{w'} \exp(s_{w'})$
Temperature $P_\tau(w) = \exp(s_w/\tau)/\sum_{w'} \exp(s_{w'}/\tau)$
Greedy $\hat{y}_t = \arg\max_w P(w \mid y_{<t})$
Beam score $\text{score}(h \circ y) = \text{score}(h) + \log P(y \mid h)$
Top-p set $V_p = \min\{S \mid \sum_{w \in S} P(w) \geq p\}$
Policy Gradient $\nabla J = \mathbb{E}[\sum_t \nabla \log\pi_\theta(a_t|s_t) \cdot A^\pi(s_t,a_t)]$
Importance ratio $r_t(\theta) = \pi_\theta(a_t|s_t)/\pi_{\theta_\mathrm{old}}(a_t|s_t)$
PPO-CLIP $\mathcal{J}^\mathrm{CLIP} = \mathbb{E}[\min(r_t \hat{A}_t, \mathrm{clip}(r_t, 1-\varepsilon, 1+\varepsilon)\hat{A}_t)]$
GAE $\hat{A}_t^\mathrm{GAE} = \sum_l (\gamma\lambda)^l \delta_{t+l}$
TD residual $\delta_t = \tilde{r}_t + \gamma V(s_{t+1}) - V(s_t)$
GRPO advantage $\hat{A}_i = (R_i - \mu)/\sigma$(组内 z-score)
RLOO advantage $\hat{A}_i = R_i - \frac{1}{G-1}\sum_{j\neq i} R_j$
K3 KL estimator $\hat{D}_\mathrm{KL} = q/p - 1 - \log(q/p)$
DAPO clip-higher $\mathrm{clip}(r, 1-\varepsilon_\mathrm{low}, 1+\varepsilon_\mathrm{high})$
pass@k $1 - \binom{n-c}{k}/\binom{n}{k}$
CoT-decoding $\Delta_k$ $\frac{1}{|\mathrm{ans}|}\sum_{x_t\in\mathrm{ans}}(p(x_t^1|\cdot) - p(x_t^2|\cdot))$
附录 B:超参数实践速查
场景 解码超参 RL 超参
Math/Code 推理
greedy 或 $\tau=0.6$, top-p=0.95
GRPO, $G=16$, $\varepsilon=0.2$, $\beta=0.001\sim0.01$
对话/创意写作
$\tau=0.9\sim1.0$, top-p=0.9
PPO, GAE $\lambda=0.95$, $\beta=0.02$
长 CoT reasoning
$\tau=0.7$, top-p=0.95, max_len=8K
DAPO, $\varepsilon_\mathrm{high}=0.28$, dynamic sampling on
Best-of-N 评估
$N=8\sim64$, $\tau=0.8$, top-p=0.95
—
Self-consistency
$N=20\sim40$, $\tau=0.7$
—
表 B.1 常见任务的解码与 RL 超参起点。
附录 C:术语对照表
英文 中文 简释
Autoregressive 自回归 逐 token 从左到右生成
Greedy decoding 贪心解码 每步取概率最高 token
Beam search 束搜索 保留 top-k 候选序列
Top-k / Top-p (nucleus) Top-k / 核采样 截断长尾后采样
Temperature 温度 softmax 的尺度参数
Neural text degeneration 神经文本退化 MLE 解码下的复读机现象
Best-of-N N 中选优 采样 N 条用 verifier 选最好
Self-consistency 自一致性 采样多路径取多数投票
Chain-of-Thought (CoT) 思维链 显式写出中间推理步骤
RLHF 人类反馈强化学习 用人类偏好训练 reward 后 RL
RLVR 规则可验证 RL 用规则/真值评估的 RL
PRM 过程奖励模型 给每一步推理打分的模型
Policy gradient 策略梯度 对策略分布求梯度的 RL 方法
Importance sampling ratio 重要性采样比 新旧策略的概率比
GAE 广义优势估计 TD 与 MC 的加权插值
Advantage 优势 $Q(s,a) - V(s)$
PPO 近端策略优化 TRPO 的 clip 版简化
GRPO 组相对策略优化 用组内 z-score 替代 value 网络
DAPO 解耦优势策略优化 GRPO + 三补丁(非对称 clip 等)
RLOO 留一 REINFORCE 另一种组 baseline 形式
Entropy collapse 熵塌缩 策略变成 deterministic 而失去探索
Reward hacking 奖励黑客 模型钻 reward 漏洞获得高分
Faithfulness 忠实度 CoT 是否真实反映模型内部计算
Test-time compute scaling 测试时计算缩放 用 inference token 换准确率
pass@k / maj@k — 评估指标见 §4.5
表 C.1 本讲常见术语对照。
参考文献
解码
Holtzman, A., Buys, J., Du, L., Forbes, M., & Choi, Y. (2019). The Curious Case of Neural Text Degeneration. ICLR 2020.
Fan, A., Lewis, M., & Dauphin, Y. (2018). Hierarchical Neural Story Generation. ACL 2018.
Li, X. L., Holtzman, A., Fried, D., et al. (2022). Contrastive Decoding: Open-ended Text Generation as Optimization.
Pipis, C., Garg, S., Kontonis, V., et al. (2025). Wait, Wait, Wait... Why Do Reasoning Models Loop?
RL & RLHF
Williams, R. J. (1992). Simple statistical gradient-following algorithms for connectionist reinforcement learning. Machine Learning.
Sutton, R. S., McAllester, D. A., Singh, S. P., & Mansour, Y. (1999). Policy gradient methods for reinforcement learning with function approximation. NeurIPS.
Schulman, J., Levine, S., Moritz, P., Jordan, M., & Abbeel, P. (2015). Trust Region Policy Optimization. ICML.
Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal Policy Optimization Algorithms.
Schulman, J., Moritz, P., Levine, S., et al. (2016). High-Dimensional Continuous Control Using Generalized Advantage Estimation. ICLR.
Schulman, J. (2020). Approximating KL Divergence. Blog post.
Shao, Z., Wang, P., Zhu, Q., et al. (2024). DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models.
ByteDance Seed (2025). DAPO: An Open-Source LLM Reinforcement Learning System at Scale.
Ahmadian, A., et al. (2024). Back to Basics: Revisiting REINFORCE-style Optimization for Learning from Human Feedback in LLMs.
DeepSeek R1 & o1 相关
DeepSeek-AI (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning.
Lightman, H., Kosaraju, V., Burda, Y., et al. (2023). Let's Verify Step by Step. OpenAI.
OpenAI (2024). Learning to Reason with LLMs (o1 system card).
CoT & Reasoning Theory
Wei, J., Wang, X., Schuurmans, D., et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS.
Wang, X., Wei, J., Schuurmans, D., et al. (2022). Self-Consistency Improves Chain of Thought Reasoning. ICLR 2023.
Kojima, T., Gu, S. S., Reid, M., et al. (2023). Large Language Models are Zero-Shot Reasoners. NeurIPS.
Wang, X., & Zhou, D. (2024). Chain-of-Thought Reasoning without Prompting.
Prystawski, B., Li, M., & Goodman, N. D. (2023). Why think step by step? Reasoning emerges from the locality of experience. NeurIPS.
Gandhi, K., et al. (2025). Cognitive Behaviors that Enable Self-Improving Reasoners.
Chen et al. (Anthropic, 2025). Reasoning Models Don't Always Say What They Think.
Liu, R., et al. (2025). Mind Your Step (by Step): Chain-of-Thought can Reduce Performance on Tasks where Thinking Makes Humans Worse.
— 完 —
本教材基于 Stanford CS224N 2026 Winter Lecture 12(Yejin Choi 主讲)整理与扩写。
v2.0 深度版 · 2026-05-17