# 推理模型与测试时扩展研究账本 状态:原始论文核验中,正文尚未发布 研究截止:2026-07-28 本轮本地缓存:23 份一手 PDF / 文本,另复用 Kimi K3 官方技术报告 线索发现:K3 references、论文引用网络、作者/机构页面、Grok CLI 结论依据:原论文正文、附录、官方技术报告;Grok 只用于扩大检索覆盖 ## 0. 这一章真正要回答什么 “模型会推理”不是一个单一指标。至少要把下面八张账分开: 1. **结果账**:第一次回答是否正确,通常看 pass@1。 2. **覆盖账**:多采样以后,至少有一个正确答案的概率,通常看 pass@k。 3. **选择账**:如果正确答案已经在候选里,投票、ORM、PRM 或 verifier 能否选出来。 4. **过程账**:中间步骤是否有效、可检查,以及写出来的 CoT 是否真是模型决策的因果解释。 5. **预算账**:额外计算花在更长的单条轨迹、更多并行样本、树搜索,还是工具调用。 6. **优化账**:PPO、GRPO、DAPO、Dr.GRPO 与 Kimi 的目标函数究竟改变了哪个梯度。 7. **分布账**:训练是在发现新解法,还是把已有正确解法的概率质量推到前面,同时牺牲多样性。 8. **系统账**:长尾 rollout、KV 状态、沙箱、验证器和教师 prefill 让训练吞吐付出什么代价。 本章核心问题不是“哪篇论文赢了 benchmark”,而是: > 给定一个模型、一个问题和一笔有限预算, > 如何产生候选、分配计算、评价过程、选择答案,并知道能力到底来自哪里? ## 1. 贯穿全章的三条因果链 ### 1.1 从“写步骤”到“分配测试时计算” ```text 直接回答 → Chain-of-Thought:把计算摊到更多串行 Token → Self-Consistency:对多条 CoT 做并行采样与投票 → ORM / PRM:不只投票,而是学习判断结果或中间步骤 → Tree of Thoughts:主动展开、评价、回溯 → ReAct:把内部推理与外部行动/观察交错 → compute-optimal allocation:按问题难度在串行、并行、搜索之间分预算 → reasoning effort:训练一个模型在 low / high / max 下改变推理预算 ``` ### 1.2 从“人类偏好 RL”到“可验证奖励 RL” ```text PPO:actor + critic + clipped surrogate → RLHF:偏好奖励模型给标量奖励 → DeepSeekMath GRPO:同题成组采样,用组内相对奖励代替 critic → DeepSeek-R1-Zero:规则奖励直接驱动长 CoT → DeepSeek-R1:cold start + reasoning RL + rejection/SFT + general RL → DAPO:Clip-Higher、Dynamic Sampling、token-level loss、overlong shaping → Dr.GRPO:去掉长度与组标准差归一化,揭示原始 GRPO 的两类偏置 → RLVR 边界争论:pass@1 上升是否伴随大 k 覆盖下降 ``` ### 1.3 Kimi 的长轨迹与能力整合线 ```text Kimi k1.5 128K RL context + partial rollout + online mirror-descent surrogate + long2short(merge / RS / DPO / RL) → Kimi K2 verifiable rewards gym + self-critique rubric reward + budget control + PTX + temperature decay → Kimi K2.5 token-level off-policy clipping + Toggle 预算训练 + unified agentic RL + 100K concurrent tasks → Kimi K3 3 domains × 3 reasoning efforts = 9 RL teachers + extreme off-policy partial rollout stabilization + Multi-Teacher On-Policy Distillation + million-token agentic RL / AgentENV ``` ## 2. 指标词典:先统一“正确率”口径 ### 2.1 pass@1 从指定采样策略抽一个答案时正确的概率。很多论文为了降低方差,会对同一题生成多次,再使用无偏估计汇总成 pass@1;它不一定等于“贪心解码一次”的准确率。 必须同时记录: - temperature / top-p; - 最大输出长度; - 是否有工具; - prompt template; - 重复运行次数; - 是否使用 grader / verifier。 ### 2.2 pass@k 在 `k` 次候选中至少出现一个正确答案的概率。若一共采样 `n` 个,其中 `c` 个正确,无偏估计为: ```text pass@k = 1 - C(n-c, k) / C(n, k) ``` 它近似回答“这个分布里还覆盖着正确解法吗”,但不是能力的完美真值: - 有限 `k` 只能看到有限尾部; - temperature 会改变覆盖; - prompt 与答案解析器会改变 `c`; - 高 pass@k 不代表实际系统能找到并选中正确答案。 ### 2.3 majority@k / consensus@k 采样 `k` 条推理,把最终答案归一化后多数投票。它依赖“正确答案形成稳定簇”的假设: - 多样错误彼此抵消时很有效; - 同一种系统性错误占多数时会一起错; - 自由文本任务难以稳定抽取等价答案。 ### 2.4 best-of-N 先生成 `N` 个候选,再由 verifier / reward model 选择最高分答案。最终成功率拆成两部分: ```text 候选覆盖:正确答案有没有生成 × 选择可靠性:评分器有没有把正确答案排到前面 ``` 因此 best-of-N 的提升不能全部归功于生成模型,也不能只报告 verifier 分数而不报告候选覆盖。 ### 2.5 训练时计算与测试时计算 | 口径 | 花在哪里 | 常见混淆 | |---|---|---| | 预训练计算 | 更多数据、参数、训练 Token | 与 inference scaling 不是同一条轴 | | 后训练计算 | SFT、RL rollout、reward、teacher prefill | 训练变贵不代表单次推理变贵 | | 串行测试时计算 | 更长 CoT、反思、修订 | Token 多不必然更正确 | | 并行测试时计算 | 多采样、self-consistency、best-of-N | 可并行但总 Token 大 | | 搜索计算 | 分支、评价、回溯 | verifier 错误会被搜索放大 | | 工具计算 | 搜索、代码执行、环境交互 | 延迟和成本不只来自模型 Token | ## 3. 八张教学账 ### 3.1 结果账:它最后答对了吗 最适合规则可验证任务,例如数学最终答案、单元测试、棋局合法性。优势是奖励便宜且客观;局限是: - 最终答案对,不保证过程可靠; - 奖励函数有漏洞时,模型会学会利用漏洞; - 二元奖励在极难或极易题上几乎不给区分信号; - 开放式写作、研究与复杂代理任务没有唯一 verifier。 ### 3.2 覆盖账:正确路径还在分布里吗 pass@1 上升可能来自两种完全不同的变化: ```text A. 真正扩展:新增原先几乎不会出现的解法模式 B. 分布锐化:把原先低概率的正确模式推到更高概率 ``` DeepSeekMath 已在 2024 年报告:RL 提升 Maj@K,却没有改善 Pass@K;作者谨慎解释为输出分布更稳健、正确答案从 Top-K 被推向前面,而不是已经证明基础能力扩展。 2025 年的 RLVR capacity-limit 工作把这一问题扩大到多个数学、代码和视觉设置:当前测试中的 RLVR 模型常在小 `k` 更强,但基础模型会在大 `k` 追上或超过。它是对一组当前算法的实证边界,不是“RL 永远不能创造能力”的定理。 ### 3.3 选择账:如何从候选里找到对的 选择器的主要分支: 1. **答案投票**:不训练 verifier,只看答案频次。 2. **Outcome Reward Model(ORM)**:整条解答得到一个分数。 3. **Process Reward Model(PRM)**:每一步得到分数,再聚合。 4. **规则 verifier**:执行代码、比较数学答案、检查约束。 5. **Generative Reward Model(GRM)**:先生成评价过程/rubric,再给分。 选择器不是免费 oracle。它可能: - 偏爱格式、长度或表面完整性; - 在分布外候选上失准; - 把局部错误一路传播到树搜索; - 被策略模型共同训练后产生共谋式 reward hacking。 ### 3.4 过程账:步骤好看、有效、忠实是三回事 必须分开: - **有效性**:这一步是否有助于得到正确答案; - **可验证性**:外部规则或 PRM 能否判断这一步; - **可读性**:人是否容易理解; - **忠实性**:公开写出的步骤是否真反映模型产生答案的因果过程。 Turpin 等人的偏置提示实验显示,模型能给出听起来合理但隐瞒偏置影响的解释;“正确/流畅的 CoT”不能自动当作模型内部因果证词。这不是说所有 CoT 都不可信,而是说明公开推理文本必须接受独立 faithfulness 检查。 ### 3.5 预算账:四种测试时扩展不是一回事 #### 串行深度 同一条轨迹继续写、检查、修订。适合一个局部错误可以被后续发现的题;风险是错误前提越写越深。 #### 并行宽度 从同一问题采样多个独立候选。适合模型有多种可行路径、错误较分散的题;风险是样本高度相关,新增候选边际收益迅速下降。 #### 显式搜索 在“状态—候选思路—评价—回溯”树上分配预算。适合步骤可局部评价的问题;风险是搜索控制和 verifier 本身消耗大量计算。 #### 工具/环境 让模型通过搜索、代码执行、浏览器或软件环境获得新观察。它不只是“想更久”,而是改变信息集。对 agentic RL 来说,这也是最可能超越单轮静态提示能力边界的路径。 Snell 等人的 compute-optimal 工作在专门训练的 PaLM 2 模型与 MATH 设置中表明: - 最优策略依题目难度和模型而变; - 其最优分配在特定实验中可用约 4 倍更少计算超过 best-of-N; - 在一些 FLOPs 匹配条件下,小模型可超过约 14 倍大的模型; - 但最难题常从当前测试时计算中获益很少,继续预训练更有效。 这些数字不能外推成“推理计算总能替代参数规模”。 ### 3.6 优化账:每个目标函数到底改了什么 #### PPO PPO 使用 actor 产生动作、critic 估计价值/优势,并通过 clipped surrogate 限制单次策略更新。用于 LLM RLHF 时还常加入 reference KL、reward model 和 GAE。它的工程代价包括: - 额外价值网络或 value head; - rollout、reference、reward、critic 多模型协调; - 长序列信用分配; - 训练/推理引擎概率不一致。 #### DeepSeekMath GRPO 对同一问题 `q`,从旧策略采样一组 `G` 个输出。用组内奖励均值作为 baseline,并以组内标准差归一化: ```text A_i = (r_i - mean(r_1...r_G)) / std(r_1...r_G) ``` Outcome supervision 时,同一输出的每个 token 共用 `A_i`。原始 DeepSeekMath GRPO: - 不训练 critic; - 对每个回答先做 token 平均,再对组平均; - 把 KL 直接加入目标,而不是先从 reward 中扣; - 使用论文给出的正值 KL 估计器; - 只对“组内有奖励差异”的问题产生相对信号。 DeepSeekMath-RL 的报告设置包括:约 144K 个 GSM8K/MATH CoT 问题、每题 64 个输出、最大 1024 tokens、KL 系数 0.04。该模型在报告中 MATH 从 46.8 提升到 51.7,64-sample self-consistency 为 60.9;只能按论文设置解释。 #### DAPO DAPO 不是简单“把 GRPO 再跑大一点”,而是修复实际训练中的四个断点: 1. **Clip-Higher**:上下裁剪范围解耦,给低概率 token 更大上升空间,缓解熵坍缩。 2. **Dynamic Sampling**:过滤组内全对或全错的 prompt,因为相对优势全为零。 3. **Token-level Policy Gradient Loss**:整批 token 等权聚合,改变长短回答的梯度权重。 4. **Overlong Reward Shaping**:在长度上限附近平滑惩罚,避免硬截断制造噪声。 DAPO 在其 Qwen2.5-32B Base、数据、系统和评测设置中达到 AIME 2024 平均 50;论文对比的 naive GRPO 为 30、引用的 R1-Zero-Qwen-32B 为 47。由于复现数据与系统并不完全相同,不能写成无条件“DAPO 超过 R1”。 #### Dr.GRPO Dr.GRPO 指出原始 GRPO 的两个潜在偏置: 1. **response-level length bias**:每条回答除以自己的长度,会让短正确答案获得更强正梯度、长错误答案获得更弱负梯度。 2. **question-level difficulty bias**:再除以组内 reward 标准差,会使某些难度的题获得不同权重。 其改法是去掉回答长度与组标准差归一化,用固定全局最大 token 数作为实现中的分母。论文还展示 DeepSeek-V3 Base 在 RL 前已经会出现 “aha”/反思式表达,因此不能仅凭训练后出现 “wait/aha” 就断言 RL 从零发明了反思。 这是一个有明确假设和实验范围的批判,不代表所有 GRPO 结果无效。 #### Kimi k1.5 的 mirror-descent surrogate k1.5 从迭代参考策略采样 `k` 条回答,使用组均值奖励 baseline,并优化“奖励 − 与迭代参考策略的 KL 正则”对应的 surrogate。论文强调: - 不使用 value network; - 每轮重置优化器; - 允许使用 off-policy 数据; - 128K context 与 partial rollout 让一条超长轨迹跨训练迭代; - 局部错误之后仍可能恢复,因此不在本文框架里依赖 PRM/value/MCTS。 “不依赖 PRM/MCTS”只描述 k1.5 的选择,不能泛化为搜索与过程监督无效。 #### Kimi K2 的统一 RL K2 延续 k1.5 的组相对奖励与 squared log-ratio 正则,并扩展任务/奖励: - 数学、STEM、逻辑、代码、软件工程、复杂指令等 verifiable gym; - 对开放任务使用 self-critique rubric reward; - critic 用可验证任务的 on-policy rollout 持续校准; - 分任务 token budget,超预算截断并惩罚; - 高质量 PTX loss 防遗忘; - temperature decay 从探索过渡到稳定利用。 K2 的“self-critique”不是模型随口说“我觉得好”,而是 pairwise 比较,结合 core、prescriptive 和人工 rubric;它仍可能受 judge 偏差与 reward hacking 影响。 #### Kimi K2.5 的 token-level off-policy clipping K2.5 对每个 token 的新旧策略比率做 `[α, β]` 区间裁剪。正文明确说明: - 区间内正常计算 policy gradient; - 区间外梯度屏蔽; - 只依据 log-ratio 是否越界; - 不像标准 PPO 那样根据 advantage 正负决定截哪一边; - 目的是约束训练引擎与推理引擎差异放大的 off-policy drift。 K2.5 同时提出 **Toggle**: - Phase 0:当同题平均正确率超过阈值时,才按正确样本长度分位数施加预算; - Phase 1:恢复最大长度,继续学习利用更多推理计算; - 两阶段每 `m` 轮交替。 直觉是避免只做“越短越好”以后失去向上扩展预算的能力。 ### 3.7 分布账:pass@1 上升不等于能力空间变大 教学时固定画两张分布: ```text 基础模型:正确模式概率低,但模式覆盖较宽 RL 模型:正确模式概率高,但部分低概率模式消失 ``` 需要同时问: - pass@1 是否上升; - pass@k 曲线在多大 `k` 后交叉; - entropy 是否下降; - 相同 temperature 还是 entropy-matched temperature; - 训练 prompt 和测试 prompt 是否相同; - distillation 是否从更强教师引入了基础模型原本没有的模式。 RLVR capacity-limit 论文观察到,蒸馏模型的 pass@k 可以超过基础模型,并据此把“从更强教师转入新模式”与“当前 on-policy RL 对已有模式重加权”区分开。但这仍依赖有限采样与具体教师。 ### 3.8 系统账:长推理不是只把 max_tokens 改大 长轨迹训练带来的系统问题: - 一批 rollout 中少数极长样本拖住全部 GPU; - 长序列 KV cache 占用巨大; - 工具/浏览器/沙箱在模型思考时空闲,在环境运行时 GPU 又可能空闲; - 策略更新后,未完成轨迹变成 stale/off-policy; - 训练引擎与高吞吐推理引擎可能给出不同 log-prob; - verifier、teacher prefill 和环境执行形成新的流水线。 Kimi 的演化正好提供一条系统线: - k1.5:partial rollout、replay buffer、长轨迹分段; - K2.5:每个 agent task 是异步 coroutine,Rollout Manager 支持最多 100K concurrent tasks; - K3:几百张 GPU 上的 co-located RL、外部 CPU DRAM KV pool、NVMe 状态卸载、自动节流与 AgentENV。 ## 4. DeepSeek 高亮主线 ### 4.1 DeepSeekMath:GRPO 先是一种“去 critic”的工程/统计选择 不能把 GRPO 缩成一句“PPO 不要 value model”。它同时改变了: - baseline:同题组均值; - advantage normalization:组内标准差; - loss aggregation:先回答内 token 平均; - KL 放置与估计; - 可学习 prompt:全对/全错组没有相对信号。 还要把论文自己的保守结论放在正文:RL 提升 Maj@K 而非 Pass@K,作者当时已没有把它夸张成必然创造新能力。 ### 4.2 R1-Zero:规则奖励能让长 CoT 自组织,但现象不等于机制证明 R1-Zero: - 从 DeepSeek-V3 Base 直接开始 RL,没有先做 reasoning SFT; - 使用 GRPO; - 使用规则 accuracy reward 与 format reward; - 不使用神经 ORM/PRM 作为 reasoning reward,理由包括 reward hacking 与复杂训练管线; - 随训练出现更长回答、反思、验证和被称为 “aha moment” 的行为; - 同时存在可读性差、语言混合等问题。 应把“观察到长推理/反思”写成训练现象,而不是断言某个单一 token 或表达就是能力涌现的因果标志。Dr.GRPO 对基础模型的检查尤其提醒这一点。 ### 4.3 R1:完整管线不是“纯 RL” R1 的公开管线: ```text 少量高质量 cold-start reasoning data → reasoning-oriented RL → rejection sampling → reasoning + non-reasoning SFT → broader RL(helpfulness / safety 等) ``` 边界: - R1-Zero 才是“base 直接 RL”的主要实验; - R1 使用 SFT、rejection sampling 和多阶段 RL; - reasoning 阶段偏向规则奖励,后续 general RL 仍有 reward models; - 扩展版报告记载 model preference reward 只在最后约 400 steps 使用,过久会 reward hack; - 报告对 AIME/GPQA 常采样 64 次、MATH/Codeforces 16 次,再估计 pass@1;consensus 另列,不能把两者混用。 ### 4.4 R1 蒸馏:小模型得到的是强教师轨迹 六个 1.5B–70B distilled 模型使用约 800K 由 R1 产生/筛选的数据进行 SFT,本身没有再做该报告中的 RL。附录对比显示在小模型上蒸馏更有效,但报告同时认为 RL 仍是继续突破更强能力的必要方向。 所以: - “小模型只靠 SFT 就会推理”缺了强教师数据来源; - “蒸馏证明 RL 不需要”也不成立,因为教师本身来自更重的训练管线。 ### 4.5 DAPO 与 Dr.GRPO:从复现失败反推算法细节 这两篇论文最适合作为“研究如何进步”的案例: ```text R1 给出强结果与简要 GRPO 配方 → naive reproduction 明显落后 → DAPO 暴露熵、无信号组、长序列聚合、截断四个工程断点 → Dr.GRPO 再追问长度增长和 aha 是否可能来自目标函数偏置/基础模型 ``` 这不是互相推翻,而是把“RL 有效”拆成更可审计的机制。 ## 5. Kimi 高亮主线 ### 5.1 Kimi k1.5:把 RL 的序列长度本身当作 scaling axis 关键配置/结论: - 最大 RL context 128K; - long-CoT 报告 AIME 77.5、MATH 500 96.2、Codeforces 94th percentile、MathVista 74.9; - partial rollout 让长回答跨迭代继续; - replay buffer 保存旧片段,当前轮只对可用部分做 on-policy 计算,并可把旧片段排除出 loss; - 长度惩罚在初期能力增长后再 warm up。 数字只能按论文的模型、采样与评测协议使用。 ### 5.2 long2short 不是一种蒸馏算法 k1.5 的 long2short 是四类方法: 1. **weight averaging**:合并长 CoT 与短模型; 2. **shortest rejection sampling**:每题采样 8 条,选最短正确答案; 3. **DPO**:最短正确为正样本,较长错误或超过 1.5 倍的正确回答为负样本; 4. **long2short RL**:加强长度惩罚并降低最大 rollout 长度。 报告中 long2short RL 在 AIME 2024 的 8 次运行 pass@1 为 60.8、平均约 3,272 tokens。它说明可以优化“正确率—长度”前沿,不说明短思维总能保留全部长思维能力。 ### 5.3 K2:把可验证推理扩展到一般任务 K2 的新意不是继续拉长数学 CoT,而是建立从规则奖励到 subjective rubric 的闭环: ```text 可验证任务的 on-policy rollout → 用客观信号持续校准 critic → critic 对开放任务做 pairwise rubric evaluation → actor 学习更一般的偏好 ``` 这是一种把 verifier 能力迁移到开放任务 judge 的尝试;开放任务奖励仍不是客观真值。 ### 5.4 K2.5:训练效率与推理预算要一起控制 K2.5 的两项关键桥梁: - token-level probability-ratio clipping(用于约束 log-ratio drift),处理大规模异步 rollout 的 off-policy 偏移; - Toggle 在 budget-limited 与 standard scaling 间交替,保留模型继续使用更多推理计算的能力。 其 unified agentic RL 还把 text、vision、parallel-agent RL 放进同一异步环境,说明“reasoning model”已从单轮数学走向多模态、工具与并行代理控制。 ### 5.5 K3:九个专家怎样合成一个可控模型 K3 post-training 有三阶段: ```text Stage 1: SFT Stage 2: domain × reasoning effort RL Stage 3: Multi-Teacher On-Policy Distillation ``` Stage 2 的三个领域: 1. general:经验、视觉、推理、faithfulness、search、knowledge work; 2. general agent:long-horizon assistant、deep research、paragraph writing; 3. coding agent:SWE、coding experience、kernel、web development。 每个领域再训练 `low / high / max` 三档 reasoning effort,共 9 个教师。 #### reasoning effort RL 对每题先估计初始预算 `b0(x)`。如果回答长度 `T(y)` 超过 `τ · b0(x)`,任务奖励被覆盖为 `-1`: ```text max effort:先用较大的 τ 学会充分计算 → high / low:逐步 anneal τ,压缩可用预算 ``` 它不是推理时简单截断,而是在训练时改变“超预算回答”的奖励。 #### Agentic GRM K3 要求生成式奖励模型遵循: ```text outcome → rubric → score → scorepad ``` 为缓解模型通过冗长回答骗取分数,候选长度超过阈值 `σ · l0` 时会在二元比较中自动失败。这里控制的是 judge 的 verbosity 偏好,不等于 reasoning effort 的长度奖励。 ## 6. K3 最容易混淆的两种训练 ### 6.1 partial rollout RL:允许长轨迹跨迭代,显式处理 stale/off-policy 对 `N` 个 prompt、每题 `K` 条轨迹: 1. 并行生成 `N×K` 条 rollout; 2. 当其中 `λNK` 条完成,就暂停 generation; 3. 已完成轨迹进入本轮 policy optimization; 4. 未完成轨迹排队,后续迭代恢复; 5. 一条超长轨迹因此可能横跨多个 policy 版本。 K3 使用 per-token regularization,把更新限制在局部邻域,以容忍这种“极端 off-policy”状态。这里解决的是长尾吞吐与旧策略轨迹问题。 ### 6.2 MOPD:学生 on-policy,教师给逐 token 稠密信号 对领域 `d`、effort `e`: 1. 学生 `πθ` 自己生成轨迹; 2. 路由到对应冻结教师 `πteacher(d,e)`; 3. 教师对学生已经走过的前缀做 prefill; 4. 每个学生采样 token 得到教师—学生 log-prob 差; 5. clip 后作为 dense token reward / advantage。 K3 报告中的形式可简写为: ```text r_opd,t = clip( stop_gradient[ log π_teacher(y_t | e, x, y_