第13讲 · CS224N:推理(下)——推测解码、离策略漂移、长上下文与推理时扩展
Stanford CS224N/Ling284《深度学习自然语言处理》2026 年官方讲义 · 中文重构 本书是一次补充讲次:电子书系列此前没有覆盖这一讲的完整内容,本讲依据 CS224N 2026 官方讲义幻灯片补全。 本讲行程(讲义第 3 / 20 / 27 / 35 / 53 页反复给出同一份 Lecture Plan):推测解码(20 分钟)→ 离策略漂移与同策略蒸馏(20 分钟)→ 长上下文扩展(25 分钟)→ 推理时扩展(15 分钟)。
| 原始标题 | Lecture 13: Reasoning 2/2 |
| 授课教师 | Yejin Choi。 |
| 讲义来源 | cs224n-2026-lecture13-reasoning-part2.pdf(课程讲义幻灯片,共 59 页) |
| 课程主页 | https://web.stanford.edu/class/cs224n/ |
| 材料版权 | 课程材料版权归 Stanford University 及授课教师所有,本书仅供学习 |
对应讲次:第13讲(Stanford CS224N 自然语言处理)
制作模型:deepseek-flash(vb compose,据 run.log)
一、推测解码(Speculative Decoding)
1.1 问题与直觉
🖼️ 第 1 页幻灯片 · Natural Language Processing
问题:用大语言模型(Large Language Model, LM)生成一个序列要花很长时间。
直觉:并非所有 token 都同样难生成——文本里大量 token 是"顺理成章"的(模板、重复片段、固定搭配),只有少数位置才真正需要大模型的能力。
🖼️ 第 2 页幻灯片 · Announcement
思路:用一个小模型的生成结果来辅助大模型生成(讲义第 4 页)。
这个想法被两家独立提出:
- Google Research,Leviathan 等人,2022 年 11 月;
🖼️ 第 3 页幻灯片 · Lecture Plan
- DeepMind,Chen 等人,2023 年 2 月。
1.2 一步步看它是怎么跑的
讲义第 5–9 页用一组具体的概率把整个过程演了一遍。设 draft 模型(1B)的下一 token 分布为 $p$,target 模型(100B)的下一 token 分布为 $q$:
| dogs | love | chasing | after | cars | |
|---|---|---|---|---|---|
| Draft model(1B) $p$ | 0.8 | 0.7 | 0.9 | 0.8 | 0.7 |
| Target model(100B) $q$ | 0.9 | 0.8 | 0.8 | 0.3 | 0.8 |
🖼️ 第 4 页幻灯片 · Speculative decoding
生成过程(讲义第 7–9 页给出的中间状态):
- 第 1 步之后,生成结果:
dogs - 第 3 步之后,生成结果:
dogs love chasing(假设chasing以 $0.8/0.9$ 的概率被接受)
编者说明:幻灯片把两行概率分别画在两个模型下方,文字提取后只剩下数字串
0.8 0.7 0.9 0.8 0.7 / 0.9 0.8 0.8 0.3 0.8,哪一行属于哪个模型并没有明写。上表按"draft 在前、target 在后"排列,这个读法可由第 8 页那句 $0.8/0.9$ 反推验证:接受概率取 $\min\!\big(1, q(x)/p(x)\big)$,只有当 $p(\text{chasing})=0.9$、$q(\text{chasing})=0.8$ 时,这个比值才恰好是 $0.8/0.9$。若把两行对调,比值会大于 1,接受概率应直接写成 1。
🖼️ 第 5 页幻灯片 · Speculative decoding
1.3 为什么这样采样仍然等于"从大模型采样"
讲义第 10 页给出一条关键注释:
这个采样过程虽然是从小模型($p_i$)采样,但效果等同于从目标模型($q_i$)采样。形式化证明见 Chen 等人(2023)的附录 I。
幻灯片用 Case 1 / Case 2 / Case 3 三个分支图示了这个结论,但图示内容没有进入文字层。
编者拓展|三种情形与残差分布:下面按 Chen 等人(2023)的原始算法把 Case 1/2/3 补全,并给出"输出分布恰好是 $q$"的一行代数验证。
设 draft 分布为 $p$,target 分布为 $q$,候选 token 为 $x$:
- Case 1($q(x) \ge p(x)$):从 $p$ 采出 $x$ 后无条件接受,因为 $\min(1, q(x)/p(x)) = 1$。
- Case 2($q(x) < p(x)$):以概率 $q(x)/p(x)$ 接受,以 $1 - q(x)/p(x)$ 拒绝。
- Case 3(被拒绝):不从 $p$ 重采,而是从残差分布重采
$$p_{\text{res}}(x) = \frac{\max\big(0,\ q(x)-p(x)\big)}{\sum_{x'}\max\big(0,\ q(x')-p(x')\big)}$$
验证输出分布确实是 $q$: - 接受分支的贡献是 $p(x)\cdot\min\!\big(1, \tfrac{q(x)}{p(x)}\big) = \min\big(p(x), q(x)\big)$; - 拒绝的总概率是 $1-\sum_{x'}\min\big(p(x'),q(x')\big) = \sum_{x'}\max\big(0, q(x')-p(x')\big)$(两个求和式恒等); - 拒绝后再采到 $x$ 的贡献是 $\Big(\sum_{x'}\max(0,q-p)\Big)\cdot p_{\text{res}}(x) = \max\big(0, q(x)-p(x)\big)$。
两路相加:$\min(p,q) + \max(0, q-p) = q$。$\square$
flowchart TB
A["当前上下文 x"] --> B["draft 模型 p:自回归采样 γ 个候选 token<br/>(lookahead 窗口)"]
B --> C["target 模型 q:对这 γ 个位置<br/>做一次并行前向,得到各自的 q 分布"]
C --> D{"逐位置判定"}
<div class="video-card screenshot-card">
<img src="images/slide_006.png" alt="第 6 页幻灯片 · Speculative decoding" loading="lazy">
<p class="video-caption">🖼️ 第 6 页幻灯片 · Speculative decoding</p>
</div>
D -->|"q ≥ p(Case 1)"| E["无条件接受"]
D -->|"q < p(Case 2)"| F["以概率 q/p 接受"]
D -->|"拒绝(Case 3)"| G["从残差分布<br/>norm(max(0, q−p)) 重采样一个 token"]
E --> H["接受的最长前缀 +(若拒绝)重采样 token<br/>= 本轮输出"]
F --> H
G --> H
H --> A
1.4 拒绝采样视角与实测加速
讲义第 11 页把话说得更一般:
- 推测采样(speculative sampling)是拒绝采样(rejection sampling)的一种形式;
- 目的是:从易于采样的分布 $p$(小模型)出发,去采样一个更复杂的分布 $q$(大模型);
- 用 60M 的 T5-small 作 draft、11B 的 T5-XXL 作 target,可以得到 2~3 倍加速,且输出完全相同(identical outputs)。
编者拓展|为什么"一次验证多个 token"几乎不额外花钱:自回归解码的性能瓶颈主要在显存带宽——每生成一个 token,都要把整个模型的权重从显存读一遍。而"验证 γ 个候选"只增加计算量、不增加权重读取次数,因此一次前向能给 γ 个位置打分,代价接近生成 1 个 token。这就是推测解码能加速的物理原因。
🖼️ 第 7 页幻灯片 · Speculative decoding
在"每个候选以相同概率 $\alpha$ 被接受"的简化模型下,一轮期望产出的 token 数是
$$\sum_{i=1}^{\gamma}\alpha^{i} + 1 = \frac{1-\alpha^{\gamma+1}}{1-\alpha}$$
(前 $\gamma$ 项是接受的前缀,最后 $+1$ 是被拒绝后重采样得到的那个 token)。$\alpha$ 越大、$\gamma$ 越大,加速越明显;但 $\gamma$ 太大时尾部候选的接受率会下降,这就是下面"动态 lookahead"要解决的问题。
1.5 两个重要的变体
动态推测解码(Dynamic speculative decoding)(讲义第 12 页):用一个轻量分类器或置信度阈值,在每一轮迭代中自适应地调整 lookahead 大小(候选 token 的数量),即在线决定 draft 模型应当继续起草,还是立刻交给 target 模型验证。参见 Mamou 等人(2024)以及 Hugging Face 的博客 https://huggingface.co/blog/dynamic_speculation_lookahead。
🖼️ 第 8 页幻灯片 · Speculative decoding
通用推测解码(Universal speculative decoding)(讲义第 12 页):
- 原始推测解码要求 draft 与 target 使用相同的分词(tokenization);
- 分词方式异构的模型之间,可以通过重新编码(re-encoding)与对齐(alignment)技术来支持;
- 参见 https://huggingface.co/blog/universal_assisted_generation。
1.6 各家推理引擎的支持情况
讲义第 13 页与第 19 页给出了同一张引擎支持表:
| 算法 | vLLM | TRT-LLM | HF TGI | HF Transformers | SGLang |
🖼️ 第 9 页幻灯片 · Speculative decoding
|---|---|---|---|---|---| | EAGLE-3 | ✅(原生) | ✅(可选) | ❌ | ⚠(手工 head) | ✅ | | SuffixDecoding | ✅(Arctic) | ❌ | ❌ | ❌ | ✅(Beta) | | Medusa | ✅ | ✅ | ✅(SOTA) | ✅(Pipeline) | ✅ | | Draft-Target | ✅ | ✅ | ✅ | ✅(Universal) | ✅ | | DFlash(2026) | ⚠(Fork) | ✅(Custom) | ❌ | ❌ | ⚠(Fork) |
讲义的结语是:更好的推测解码算法正在快速迭代,你常用的推理引擎都已经支持其中好几种。
编者说明:表中"✅(Arctic)/(SOTA)/(Pipeline)/(Universal)"之类的括号是讲义原文的标注,讲义并未解释它们的含义;Medusa 与 DFlash 在本讲中也没有展开。
🖼️ 第 10 页幻灯片 · Speculative decoding
1.7 EAGLE-3:让 draft 模型"读心"
EAGLE-3(Extrapolation Algorithm for Greater LM Efficiency,讲义第 14–15 页)的三代关键思想:
- Eagle-1:让 draft 模型"读 target 模型的心"——潜入目标模型的内部表示,在特征层面(features-level)做推测;
- Eagle-2:上下文感知的动态 draft 树(dynamic draft trees);
- Eagle-3:跨不同层级的融合特征(fused features)。
编者说明:第 14、15 页的架构图未进入文字层,讲义正文只留下上面三条 bullet;图片致谢为 https://docs.jarvislabs.ai/blog/speculative-decoding-vllm-faster-llm-inference。
1.8 Suffix Decoding 与 EAGLE-3 的对比
Suffix Decoding: Extreme Speculative Decoding(Oliaro 等人,2025;讲义第 16–17 页标题 + 第 18 页对比表)的机制细节在讲义中只通过这张对比表体现:
| 维度 | SuffixDecoding(2025/2026) | EAGLE-3(2025/2026) |
|---|---|---|
| 机制 | 无模型(Model-Free):用后缀树(suffix tree)缓存并匹配 prompt 与历史输出中的重复序列 | 有模型(Model-Based):用一个小型、训练过的 Transformer head 预测目标模型未来的隐特征 |
| 计算位置 | CPU 侧:推测在 CPU 上跑,GPU 专心做目标模型的验证 | GPU 侧:draft head 跑在 GPU 上,与主模型共享显存 |
| 起草速度 | 约 $20\ \mu\text{s}$ 每 token(极快) | 更慢(需要一次 GPU 前向) |
| 最佳场景 | 高度重复的任务(写代码、Agentic 循环、RAG、SQL 生成) | 开放式任务(创意写作、通用闲聊、不可预测的推理) |
| 训练需求 | 零。是一个"即插即用"的数据结构 | 需要在目标模型的特征空间上训练一个小型辅助 head |
编者拓展|两种推测的取舍:这张表其实画出了一条很清晰的工程分界线——当"下一个 token"能被历史文本匹配出来时(代码、SQL、检索问答),一个 CPU 上的后缀树就够用;当输出不可预测时,才值得花 GPU 去训练一个特征级的 draft head。这也解释了为什么 SuffixDecoding 的训练需求是零:它把"推测"降级成了一个缓存查找问题。
二、离策略漂移与同策略蒸馏
2.1 四个必须分清的术语
🖼️ 第 11 页幻灯片 · Speculative decoding
讲义第 21 页给出的定义:
- Online RL(在线强化学习):智能体在训练期间可以与环境交互。
- Offline RL / Batch RL(离线强化学习):学习严格发生在预先录制好的数据集上(人类日志或此前智能体的记录)。智能体不能"探索"或试新动作。
- On-Policy RL(同策略强化学习):训练所用的数据完全由当前策略(current policy)生成。策略一旦更新,旧策略产生的旧数据就被当作"陈旧(stale)"丢弃。
- Off-Policy RL(异策略强化学习):智能体从任意策略产生的数据中学习(更旧的策略、别的策略,甚至人类)。经验被存进回放缓冲区(Replay Buffer)反复使用。
典型代表:REINFORCE、PPO、GRPO 属于 on-policy;DQN(Deep Q-Network)属于 off-policy。
🖼️ 第 12 页幻灯片 · Dynamic speculative decoding
2.2 两个正交的坐标轴
讲义第 22 页强调,这是两个不同的问题:
- Online vs Offline RL:智能体能不能与环境交互;
- On-policy vs Off-policy RL:用于训练的 rollout 是不是来自最新的策略。
由此得到两个组合:
Online + Off-Policy RL?——非常常见。
- 智能体与环境/模拟器交互(Online),但把一切都存进 replay buffer 以后再学(Off-Policy),DQN 就是这样;
🖼️ 第 13 页幻灯片 · Algorithm
- 异步 RL(Asynchronous RL);
- 由于 RL 基础设施优化而带有 "off-policy 漂移(off-policy drift)"的 PPO。
Offline + On-Policy RL?——不存在真正的离线同策略 RL(除非把定义拉伸得比较牵强)。
2.3 漂移在实践中从哪里来
异步 RLHF(Asynchronous RLHF,Noukhovitch 等人,2024;讲义第 23 页):
🖼️ 第 14 页幻灯片 · EAGLE-3 (Extrapolation Algo for Greater LM Efficiency)
- 动机(Why):经典 RLHF 是同步(synchronous)的,会浪费 GPU 吞吐。
PipelineRL:飞行中的权重更新(in-flight weight updates,Piché 等人,2025;讲义第 24 页):
- 生成引擎会在生成过程中收到新的模型权重——短暂暂停、加载新权重,然后继续生成尚未完成的序列。这会产生混合策略序列(mixed-policy sequences):前面的 token 由较陈旧的策略生成,后面的 token 由较新鲜的策略生成。
为什么 rollout 会变"陈旧"(讲义第 25 页):
- 有意的异步 RL;
- 每个 batch 上做多步梯度更新;
- 使用很大的 replay buffer;
- 生成与训练分离部署在不同集群(一个集群为推理优化,另一个为梯度计算优化),集群之间需要传输权重,这引入了延迟。
flowchart LR
A["异步 RL<br/>梯度步 / batch > 1<br/>大 replay buffer<br/>生成与训练分属不同集群(权重传输有延迟)"] --> B["rollout 变陈旧<br/>训练数据 ≠ 当前策略的数据"]
<div class="video-card screenshot-card">
<img src="images/slide_015.png" alt="第 15 页幻灯片 · 15" loading="lazy">
<p class="video-caption">🖼️ 第 15 页幻灯片 · 15</p>
</div>
B --> C["off-policy 漂移"]
C --> D["梯度估计有偏"]
C --> E["重要性权重爆炸"]
C --> F["reward hacking 被放大"]
D --> G["缓解手段"]
E --> G
F --> G
2.4 为什么 off-policy 是问题,怎么缓解
讲义第 26 页把两侧并列:
为什么 off-policy 是问题
- 梯度估计有偏(biased gradient estimates);
- 重要性权重爆炸(importance weight explosion);
🖼️ 第 16 页幻灯片 · Suffix Decoding: Extreme Speculative Decoding (Oliaro et al., 2025)
- 奖励攻击(reward hacking)被放大。
缓解策略
- PPO 的裁剪(clipping);
- 对参考策略(reference policy)的 KL 惩罚;
- 使用不带 critic / advantage 的算法(从而缩小 off-policy 漂移的窗口),例如 GRPO 或 REINFORCE;
- 更少的 epoch;
- SGLang / vLLM 的连续批处理(continuous batching)配合权重流式传输(weight streaming);
- PipelineRL 的飞行中权重更新。
编者拓展|重要性权重为什么会爆炸:把 off-policy 数据修正成 on-policy 梯度,靠的是重要性采样(importance sampling)。目标梯度里会出现比率 $\rho = \pi_\theta(a|s) / \mu(a|s)$($\mu$ 是产生数据的旧策略)。策略每更新一次,$\rho$ 就可能偏离 1;而 $\rho$ 的方差会随轨迹长度指数级放大,于是少数样本主导了整个梯度。PPO 的 clipping 就是强行把 $\rho$ 关进 $[1-\epsilon, 1+\epsilon]$,KL 惩罚则是从"别偏离参考模型太远"这个角度上双保险。至于 reward hacking 被放大:奖励模型是在旧策略的分布上训练的,一旦策略漂移到该分布的支撑集之外,高奖励就越来越不代表"当前策略真的做对了"。
2.5 同策略蒸馏(On-policy Distillation)
讲义第 28 页:
- 同策略蒸馏(on-policy distillation)又叫广义知识蒸馏(generalized knowledge distillation);
🖼️ 第 17 页幻灯片 · Suffix Decoding: Extreme Speculative Decoding (Oliaro et al., 2025)
- 最早由 Gu 等人(2023) 与 Agarwal 等人(2023) 提出,后来由 Qwen3 的技术报告和 Thinking Machines 的博客(https://thinkingmachines.ai/blog/on-policy-distillation/)进一步放大;
- 此前的蒸馏方法是"教师中心"的(teacher-centric),因此对学习者而言是 off-policy 的;
🖼️ 第 18 页幻灯片 · Feature
- 同策略蒸馏是"学生中心"的(student-centric),因此对学习者而言是 on-policy 的。
2.6 前向 KL 与反向 KL
讲义第 29 页的标题是"KL 散度:$Q$ 与目标 $P$ 有多不同":
前向 KL——"均值寻求(Mean-seeking)"或"质量覆盖(mass-covering)"
- 由 $P(x)$ 加权:在 $P$ 有质量而 $Q$ 没有的地方惩罚 $Q$;
- $Q$ 必须覆盖 $P$ 的所有众数 → 高估支撑集(over-estimates support);
- 用于变分推断(ELBO)。
反向 KL——"众数寻求(Mode-seeking)"或"众数坍塌(mode-collapsing)"
- 由 $Q(x)$ 加权:在 $Q$ 有质量而 $P$ 没有的地方惩罚 $Q$;
- $Q$ 集中到 $P$ 的某一个众数上 → 低估支撑集(under-estimates support);
- 用于 RLHF:KL 惩罚让策略贴近参考模型。
编者拓展|两个方向写成公式就是这样:
$$D_{\mathrm{KL}}(P\|Q) = \sum_x P(x)\log\frac{P(x)}{Q(x)} \quad\text{(前向 KL:求和权重是 } P\text{)}$$
$$D_{\mathrm{KL}}(Q\|P) = \sum_x Q(x)\log\frac{Q(x)}{P(x)} \quad\text{(反向 KL:求和权重是 } Q\text{)}$$
关键区别就在求和权重取谁:前向 KL 里,只要 $P(x)>0$ 而 $Q(x)\to 0$,惩罚就 $\to\infty$,所以 $Q$ 不敢漏掉 $P$ 的任何一个众数(mass-covering);反向 KL 里,只要 $Q(x)>0$ 而 $P(x)\to 0$,惩罚就 $\to\infty$,所以 $Q$ 宁可不覆盖、也不去碰 $P$ 没有质量的地方(mode-seeking)。
🖼️ 第 19 页幻灯片 · Algorithm
2.7 四种范式的横向对照
讲义第 30 页用三块面板点出关键差异(loss = 前向 KL / loss = NLL / loss = 反向 KL,对应 off-policy / off-policy / on-policy),第 31 页给出完整表格:
| | loss | context(上下文由谁产生) | Hard vs soft | 学习风格 |
🖼️ 第 20 页幻灯片 · Lecture Plan
|---|---|---|---|---| | SFT | 对 gold 输出做 NLL | Ground-truth context | 硬标签 | — | | KD | 前向 KL | Ground-truth context | 软分布 | Mass-covering | | SeqKD | 对教师输出做 NLL | Teacher-generated context | 硬标签 | Mass-covering | | GKD | 反向 KL | Student-generated context | 软分布 | Mode-seeking |
(表出自 Agarwal 等人 2023。)
2.8 反向 KL 带来什么
讲义第 32 页指出反向 KL 的两个含义:
- 上下文来自学生自己的生成;
- 这消除了训练—测试不匹配(train-test mismatch),也就是曝光偏差(exposure bias):学生学会从自己的错误中恢复;
- 反向 KL 的众数寻求性质,鼓励学生对自己的最佳行为尖锐而自信,而不是弥散地覆盖教师的所有众数。
2.9 与 RL 的对比:两全其美
讲义第 33 页:
| 采样 | 奖励信号 | GPU 需求 | |
|---|---|---|---|
| 监督微调(SFT) | Off-policy | dense(稠密) | light(轻) |
| 强化学习(RL) | On-policy | sparse(稀疏) | heavy(重) |
| 同策略蒸馏(On-policy distillation) | On-policy | dense | light |
讲义的结论是:同策略蒸馏可以被看作 SFT 与 RL 各自优点的"两全其美"。
2.10 用例:领域自适应
讲义第 34 页给出了一个很有意思的实用案例:
- 同策略蒸馏最适合的场景之一是开源模型的领域自适应,例如在某个公司的内部文档语料上微调 Qwen-8B——这可以看作一种 midtraining;
- 如果天真地做(在一个已经 post-train 过的开源模型之上直接做 midtraining),会造成此前 post-training 获得的能力(例如指令遵循)退化;
- 而同策略蒸馏(在指令微调数据上,占比 30%)能够在通过 midtraining(占比 70%)获得新领域知识之后,把指令遵循能力恢复回来。
编者拓展|为什么"知识进来了、能力丢了"是可以预期的:midtraining 的目标是语言建模损失,它把参数往"预测领域文档的下一个词"上推,而指令遵循能力则依赖于 post-training 阶段学到的"按指令组织输出"的分布。两者在同一组参数上竞争,前者数据量大(70%),自然会把后者的行为风格挤掉。同策略蒸馏之所以能补回来,是因为它的上下文是学生自己生成的(on-policy),损失是逐 token 稠密的(dense),因此不需要像 RL 那样依赖稀疏奖励去重新搜索行为,成本也低得多。
三、长上下文扩展
3.1 推理能力的扩展要求上下文的扩展
🖼️ 第 21 页幻灯片 · 21
讲义第 36 页:当应用需要极长上下文窗口(10 万到 200 万 token)时:
- 需要理解整个代码仓库的软件工程任务;
- 需要仔细审阅数百页文档的法律分析;
- 以长期交互历史为条件的个性化聊天;
- 求解极难的数学题——需要在不同解题策略之间做漫长的试错。
🖼️ 第 22 页幻灯片 · 22
3.2 长上下文难在哪里
讲义第 37 页给出三条限制:
- 数据限制:互联网上的大多数文档不够长,无法支撑超长上下文窗口的预训练;
- 算力/内存限制:标准注意力需要二次方($O(n^2)$)计算;
🖼️ 第 23 页幻灯片 · Asynchronous RLHF (Noukhovitch et al., 2024)
- 位置嵌入的泛化限制:在较短序列上训练的模型,无法很好地泛化到更长的序列。
3.3 互联网数据的真实长度
讲义第 38 页:
| 来源类型 | 典型长度(约,token 数) | 说明 |
|---|---|---|
| Common Crawl(网页) | 600 – 1,200 | 包含博客、新闻、落地页。许多"文档"高度碎片化 |
| Wikipedia | 500 – 1,500 | 虽然有条目很长,但中位数文章相当简短 |
| 科学论文(arXiv) | 5,000 – 10,000+ | 是多数数据集中最长的"自然"文档之一 |
| 书籍(Project Gutenberg) | 50,000 – 100,000+ | 数据中的"长尾";稀少,但对长程依赖至关重要 |
| GitHub(代码) | 100 – 5,000 | 代码文件差异极大;很多脚本很短,而库很长 |
编者说明:这张表直接解释了 3.2 的第一条——如果预训练语料的中位数长度只有几百到一两千 token,模型就几乎没有机会在训练中"见过"10 万 token 级别的依赖结构。
3.4 第一代:正弦位置编码(Sinusoidal Positional Embeddings)
讲义第 39、41 页给出 Vaswani 等人(2017)的正弦位置编码(第 40 页给了一张示意图,来源 https://erdem.pl/2021/05/understanding-positional-encoding-in-transformers),但正文 bullet 未进入文字层。
编者拓展|正弦编码的公式:对维度 $i$ 与位置 $pos$,
$$PE_{(pos,\,2i)} = \sin!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right),\qquad
🖼️ 第 24 页幻灯片 · PipelineRL: in-flight weight updates 🛫 (Piché et al., 2025)
PE_{(pos,\,2i+1)} = \cos!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
不同维度对应不同频率的三角函数,相当于用一组"时钟指针"给每个位置做二进制式的编码。它是加性的:直接加到第一层的输入 embedding 上。
3.5 第二代:可学习位置嵌入(Learned Positional Embeddings)
🖼️ 第 25 页幻灯片 · Why off-policy situations arise in practice
讲义第 42 页:
- 随机初始化,再通过反向传播学习;
- 在 LLM 早期被广泛使用:BERT、RoBERTa、GPT-2、GPT-3、ALBERT、ELECTRA、BART;
- 无法为未见过的新位置定义位置嵌入;
- 也无法泛化到训练时没见过的位置之外;
- 但让模型自己学位置编码时性能更好;
- 然而这成为长上下文扩展的主要瓶颈,因此近期的 LLM 已不再使用。
3.6 第三代:RoPE(Rotary Position Embedding)
RoPE 由 Su 等人(2021) 提出。讲义第 43 页的要点:
- 旋转只施加于 query 和 key 向量,不施加于 value 向量!
- 回忆注意力机制;
- 带 RoPE 的注意力:在 query 和 key 向量算出来之后,把它们乘上旋转矩阵。
第 44 页给出 RoPE 完整的旋转矩阵形式:
编者拓展|RoPE 的旋转矩阵:
$$R_{\Theta,m}^{d}=\begin{pmatrix}
R_{\theta_1,m} & & \ & \ddots & \ & & R_{\theta_{d/2},m} \end{pmatrix},\qquad
🖼️ 第 26 页幻灯片 · Off-policy mitigations
R_{\theta_i,m}=\begin{pmatrix} \cos(m\theta_i) & -\sin(m\theta_i)\ \sin(m\theta_i) & \cos(m\theta_i)
🖼️ 第 27 页幻灯片 · Lecture Plan
\end{pmatrix}$$
其中 $\theta_i = 10000^{-2(i-1)/d}$。也就是说,把 $d$ 维向量切成 $d/2$ 个二维平面,每个平面按自己特有的频率 $\theta_i$ 旋转 $m\theta_i$ 角度。这正是讲义所谓"在二维平面里旋转 query 和 key 向量"的含义,也是第 45 页"回忆旋转矩阵"以及第 46 页所略去的具体形式。
带 RoPE 的注意力:
$$q_m = R_{\Theta,m}^{d}\,W_q x_m,\qquad k_n = R_{\Theta,n}^{d}\,W_k x_n$$
3.7 RoPE 的关键性质:相对距离
讲义第 47 页:
- 带 RoPE 的注意力;
- 相对距离;
- 因为转置的 $R$ 会反向旋转,我们有
$$q_m^\top k_n = \big(R_{\Theta,m}W_q x_m\big)^\top\big(R_{\Theta,n}W_k x_n\big) = x_m^\top W_q^\top R_{\Theta,n-m}\,W_k x_n$$
🖼️ 第 28 页幻灯片 · On-policy distillation (aka, generalized knowledge distillation)
- 虽然 $q$ 与 $k$ 各自的旋转矩阵都不同,但在 $q$ 与 $k$ 相乘的那一刻,旋转角度变得完全相同;
- 因此:位置 10、11 上的 "Taylor" 和 "Swift",与位置 100、101 上的 "Taylor" 和 "Swift",会得到完全相同的结果。
编者拓展|这一步为什么重要:上式右端只通过 $R_{\Theta,\,n-m}$ 依赖 $m,n$,也就是说注意力分数只取决于相对距离 $n-m$,与绝对位置无关。这带来两个直接好处:(1)相对位置信息是"干净"地出现在 QKV 注意力计算里的,不是被加性编码搅浑的;(2)既然分数只跟距离有关,那么把位置索引整体压缩(Position Interpolation)就变成一个语义上说得通的操作——这正是下一节所有长上下文扩展技术的地基。
🖼️ 第 29 页幻灯片 · KL Divergence: how Q differs from the target P
3.8 RoPE 与原始正弦编码的对比
讲义第 48 页:
| 特征 | 原始正弦编码(2017) | RoPE(LLaMA、PaLM 等) |
|---|---|---|
| 集成方式 | 加性:在第一层之前加到输入 embedding 上 | 乘性:在每一个注意力层作用于 $Q$ 和 $K$ |
| 范数保持 | 增加 token embedding 的范数 | 保持 token embedding 的范数 |
| 相对距离 | 数学上可捕获,但由于是加性集成,等到计算 QKV 注意力时信息已经被搅浑 | 通过旋转角在数学上捕获,且在计算 QKV 注意力时干净可得 |
| 外推 | 非常吃力 | 允许"位置插值(Position Interpolation)""NTK scaling""YARN"等额外长上下文扩展技术 |
3.9 长上下文扩展的四类实践
讲义第 49–52 页把工程做法归成四类。
1. 位置编码修改(Position Encoding Modifications)——截至 2026 年,RoPE 缩放是最主流的一族:
- 线性插值 / 位置插值(Linear interpolation, Position Interpolation):把位置索引按一个因子缩小,让模型看到的都是熟悉的相对位置。由 Meta 提出,用于把 LLaMA 从 2K 扩到 32K+。需要轻量微调。
- NTK-aware 插值:不去线性压缩位置,而是调整旋转基频(rotary base frequency),更好地保留高频成分。也有"dynamic NTK"变体,在推理时依据序列长度自适应地调整缩放。
- YaRN(Yet another RoPE extensioN):把 NTK 缩放与注意力温度校正以及一个斜坡函数(ramp function)结合起来,对不同频段区别对待——低频做插值、高频做外推。
🖼️ 第 30 页幻灯片 · On-policy distillation vs standard knowledge distillation
2. 渐进式 / 分阶段训练(Progressive / Staged Training)——一个常见配方(LongLLaMA、LongAlign、Llama 3.1 等都用过):
- 从基础模型出发(例如 4K–8K 上下文);
- 施加位置编码修改;
- 在长文档上做持续预训练(continual pretraining),序列长度逐步增加(例如 8K → 32K → 64K → 128K),用的数据量相对很小(几十亿 token,而不是几万亿);
- 再在长上下文指令数据上微调;
- 关键洞见:你不需要完整的预训练预算——通常只要原预训练 token 数的 0.1%–1% 就足以完成适配。
flowchart LR
A["基础模型<br/>4K–8K 上下文"] --> B["修改位置编码<br/>PI / NTK / YaRN"]
B --> C["持续预训练<br/>8K → 32K → 64K → 128K<br/>数据量:原预训练的 0.1%–1%"]
C --> D["长上下文指令微调"]
D --> E["可用的长上下文模型"]
3. 数据工程(Data Engineering):
- 在持续预训练的数据混合中上采样长文档(书、代码仓库、长文、把相关文档拼接起来);
- 合成长上下文任务:大海捞针(needle-in-a-haystack)检索、长程问答、多文档摘要;
- LongAlign 式的指令微调:任务本身就必须用到铺满整个上下文的信息;
- 面向长上下文的自指令(self-instruct):用能力强的模型生成"长上下文指令—回答"数据对。
4. 注意力架构修改(Attention Architecture Modifications):
- 稀疏 / 滑动窗口注意力配合全局注意力 token(Longformer 式,https://arxiv.org/abs/2004.05150);
- Flash Attention(以及 FlashAttention-2/3):把训练时的显存从 $O(n^2)$ 降到 $O(n)$;
- 分组查询注意力(Grouped Query Attention, GQA)或多查询注意力(Multi-Query Attention, MQA):降低 KV cache 的显存占用,从而在推理时支持更长的上下文(GQA: https://arxiv.org/abs/2305.13245)。
编者说明:讲义把第 4 类放在"长上下文扩展"名下,但它和前三类的性质不同——前三类是"让模型看得更长",第 4 类主要是"让更长的上下文跑得动"。两者通常一起用。
四、推理时扩展(Test-Time Compute Scaling)
4.1 一个概念的时间线
🖼️ 第 31 页幻灯片 · loss
讲义第 54 页:
- 这个概念由 OpenAI 在 2024 年 9 月发布 O1 时被大规模推广;
- 但它其实被 Google DeepMind 2024 年 8 月的论文更早提出;
- 更早还以不那么明确的形式出现在 2023 年 5 月的《Let's verify step by step》(Lightman 等人) 中。
编者说明:讲义此页没有给出"2024 年 8 月 GDM 论文"的标题。按内容(下面 4.2、4.3 页的策略清单与结论)看,它应当就是 Snell 等人 2024 年 8 月的 Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters——但这是编者的推断,讲义本身未点名,请以课程板书为准。
🖼️ 第 34 页幻灯片 · On-policy distillation for domain-specific adaptation 🥳
4.2 核心主张
讲义第 55 页用一个反问把思路讲透:
与其只扩展训练时的计算,何不扩展测试时的计算? 与其训练得更多,何不让模型想得更久?
🖼️ 第 35 页幻灯片 · Lecture Plan
第 56 页给出论文的论点:
- 该论文挑战了 LLM 开发中的主导范式,证明智能地扩展测试时计算,能带来比单纯扩展模型参数更大的性能增益;
- 在固定的推理预算下,采用聪明测试时计算策略的小模型可以胜过采用标准解码的大模型;
- 要达到计算最优(compute-optimal)的分配,需要在两者之间寻求最优平衡:
🖼️ 第 37 页幻灯片 · Scaling reasoning requires scaling long-context
- 模型规模(预训练 FLOPs);
- 生成的样本数或修订步数(测试时 FLOPs)。
4.3 被评估的策略与验证方法
讲义第 57 页列出了完整的清单。
测试时计算扩展策略:
- Best-of-N 采样:生成 N 个独立解,用验证器选出最好的;
🖼️ 第 38 页幻灯片 · Typical document lengths of internet data
- 加权 Best-of-N(Weighted Best-of-N):从计算最优的温度分布中采样;
- 顺序修订(Sequential revisions):用模型自我批判(self-critique)迭代精炼单个解;
- 带 PRM 的束搜索:维护多个候选解,依据步骤级(step-level)奖励进行剪枝;
- 多样化束搜索(Diverse beam search):鼓励在不同解题路径上探索。
🖼️ 第 40 页幻灯片 · https://erdem.pl/2021/05/understanding-positional-encoding-in-transformers
验证方法:
- 结果监督奖励模型(Outcome-supervised Reward Models, ORMs):训练来预测解的最终正确性;
- 过程监督奖励模型(Process-supervised Reward Models, PRMs):训练来评估每一步推理的正确性;
- 领域专用验证器:针对解可校验的问题(例如执行代码)。
编者说明:第 58 页只有一张图,没有正文文字,内容未进入文字层。
编者拓展|Best-of-N 与 PRM 的分工:Best-of-N 的收益来自"覆盖 + 选择"——N 次独立采样提高至少一次答对的概率,验证器负责把对的挑出来。因此它的天花板由两个因素共同决定:采样器能不能采到正确答案(覆盖),验证器能不能认出来(选择)。ORM 只看最终答案,方差大、信号稀疏;PRM 在每一步打分,相当于给搜索过程提供了中间反馈,这既让束搜索能提前剪掉走错的路径,也让"哪一步出错了"变得可定位——这正是下面"PRM 让计算效率提高 4–8 倍"那条结论的来源。
4.4 关键发现与实务结论
讲义第 59 页:
关键发现
- 在 MATH-500 上,一个 14B 参数模型配合优化后的测试时计算,追平甚至超过了 4 倍大的模型;
- 在他们的实验设定下,计算最优策略把 FLOPs 大致平均分配给预训练和推理;
- 顺序修订策略在需要精修与纠错的任务上表现出特别强的扩展性;
- 相比"ORM + 束搜索",PRM 让计算使用效率提高了 4–8 倍。
实务启示
- 不要默认选最大的模型!
- 投资于验证(verification)!
- 高质量的奖励模型——尤其是 PRM——能够显著改善测试时扩展的效果。
附:参考与延伸阅读
编者补充
🖼️ 第 45 页幻灯片 · RoPE: Rotary Position Embedding (Su et al., 2021)
- Agarwal 等人(2023)
- Chen 等人,2023 年 2 月
- DQN
- Flash Attention
- GRPO
- Gu 等人(2023)
- HF TGI
- HF Transformers
- Leviathan 等人,2022 年 11 月
- Lightman 等人
- LLaMA
- PPO
- SGLang
- Su 等人(2021)
- T5-small
- TRT-LLM
- vLLM
- YaRN
已知疑点
- 头信息块的出处适配:本电子书的模板头信息是为另一门课(UC Berkeley EECS 189/289A)设计的,但本次讲义的实际来源是 Stanford CS224N/Ling284 2026 年 Lecture 13。本讲按真实来源填写课程主页与讲义链接,未沿用模板中的 EECS 189 字样,以免产生错误归属。
🖼️ 第 55 页幻灯片 · Test time compute scaling 🚀
- 推测解码概率表的行序:讲义第 6–9 页只留下数字串
0.8 0.7 0.9 0.8 0.7 / 0.9 0.8 0.8 0.3 0.8,未标明哪一行属于 draft、哪一行属于 target。本讲按"第 8 页接受概率写作 $0.8/0.9$(即 $\min(1,q/p)=q/p$)"反推,认定 draft 行在前、target 行在后。这是推断,不是讲义原文。 - 第 10 页 Case 1/2/3 的图示内容缺失:幻灯片只有标题与一句注释,三个分支的具体条件未进入文字层。1.3 节的"编者拓展"是按 Chen 等人(2023)原始算法补写的,属于编者引入的外部知识。
- EAGLE-3 / Suffix Decoding 的架构细节缺失:第 14、15、16、17 页基本只有图片;EAGLE-3 只留下三条一句话 bullet,Suffix Decoding 只留下标题与第 18 页的对比表。因此本讲对两者的描述完全依赖讲义给出的文字,未补充架构细节。
- 引擎支持表中的括号标注:
✅(Arctic)、✅(SOTA)、✅(Pipeline)、✅(Universal)、⚠(Manual head)等标注讲义未做解释,本讲按原样保留。 - Medusa 与 DFlash(2026) 只出现在支持表里,讲义没有展开介绍;本讲也未补充。
- "2024 年 8 月的 GDM 论文"未点名:讲义第 54 页只说"GDM 的 2024 年 8 月论文"。4.1 节的编者说明给出了一个推断性的对应论文(Snell 等人),但这属于外部知识,不是讲义原文。
- 第 58 页无文字:该页只有一张图,"关键发现"就出现在其后的第 59 页。图中内容无法转述。
- 公式为编者补出:正弦位置编码(3.4)、RoPE 的旋转矩阵与相对距离推导(3.6、3.7)在讲义中都只有标题与一句提示(例如"Recall the rotation matrix"),具体公式是本讲按 Vaswani 等人(2017)与 Su 等人(2021)的原始论文补出的,属于「编者拓展」。
- 论文链接的编者补充:讲义只给出"Gu 等人 2023""Agarwal 等人 2023""Su 等人 2021""Leviathan 等人 2022""Chen 等人 2023""Oliaro 等人 2025"这样的作者—年份,本讲为其中几篇补了 arXiv 链接,属于编者添加,若链接有出入请以课程阅读清单为准。
🖼️ 第 59 页幻灯片 · Test time compute scaling 🚀
- 术语译法:"off-policy drift"译作"离策略漂移","on-policy distillation"译作"同策略蒸馏","exposure bias"译作"曝光偏差","mode-seeking / mass-covering"译作"众数寻求 / 质量覆盖"。这些中文译名目前尚无统一标准,保英文原词在括注中一并给出以便对照。
附录:课堂未展示的幻灯片
🖼️ 第 32 页幻灯片 · On-policy distillation
🖼️ 第 33 页幻灯片 · On policy distillation vs RL
🖼️ 第 36 页幻灯片 · Scaling reasoning requires scaling long-context
🖼️ 第 39 页幻灯片 · Sinusoidal positional embeddings (Vaswani et al., 2017)
🖼️ 第 50 页幻灯片 · Long context extension practices 🧵
🖼️ 第 49 页幻灯片 · Long context extension practices 🧵
🖼️ 第 48 页幻灯片 · RoPE: Roterary Positional Embedding (Su et al., 2021)
🖼️ 第 47 页幻灯片 · RoPE: Rotary Position Embedding (Su et al., 2021)
🖼️ 第 46 页幻灯片 · RoPE: Rotary Position Embedding (Su et al., 2021)
🖼️ 第 44 页幻灯片 · RoPE: Rotary Position Embedding (Su et al., 2021)
🖼️ 第 43 页幻灯片 · RoPE: Rotary Position Embedding (Su et al., 2021)
🖼️ 第 42 页幻灯片 · Learned positional embeddings
🖼️ 第 41 页幻灯片 · Sinusoidal positional embeddings (Vaswani et al., 2017)
🖼️ 第 54 页幻灯片 · Test time compute scaling 🚀
🖼️ 第 53 页幻灯片 · Lecture Plan
🖼️ 第 52 页幻灯片 · Long context extension practices 🧵
🖼️ 第 51 页幻灯片 · Long context extension practices 🧵
🖼️ 第 58 页幻灯片 · 58
🖼️ 第 57 页幻灯片 · Test time compute scaling 🚀
🖼️ 第 56 页幻灯片 · Test time compute scaling 🚀