返回博客

/ Kimi

[Kimi-1] Kimi k1.5 技术报告:用 128K 长 CoT 扩展强化学习

系统解读 Kimi k1.5:从可验证 RL prompt、Long-CoT SFT、在线 mirror descent 策略优化,到长度惩罚、partial rollout、训推混合部署、多模态训练与 long2short。

18 minKimi · Reinforcement Learning · Long CoT · Test-Time Compute

Kimi k1.5 最容易被记住的是一组结果:长 CoT 模式在 AIME 2024 上达到 77.5、MATH-500 达到 96.2、Codeforces 达到 94 百分位、MathVista 达到 74.9;短 CoT 模式也在 AIME 2024 上达到 60.8。1

但这份报告真正值得拆解的,不是它在 2025 年初追平了哪些模型,而是它给出了一条非常明确的 reasoning scaling 路线:

把更长的输出上下文视为更多搜索步,用结果奖励训练模型在单条自回归轨迹中完成探索、反思、纠错和回退,再用系统优化把 128K rollout 的成本降下来。

这条路线刻意没有依赖 Monte Carlo Tree Search(MCTS)、value function 或 Process Reward Model(PRM)。它把显式搜索树“压平”进上下文,让模型自己学习隐式搜索;训练侧则用在线 mirror descent 变体、课程采样、长度惩罚和 partial rollout 支撑规模化 RL。1

本文基于 Kimi Team 发布的 《Kimi k1.5: Scaling Reinforcement Learning with LLMs》v4。需要先说明:报告公开了相当多的训练方法和系统设计,但没有披露模型参数量、RL prompt 总规模、总训练 token、算力成本等关键规模信息。因此,我们可以分析“方法怎样工作”,却不能仅凭报告复现 k1.5,也不能完整判断各项收益与成本。

1. 先看完整训练链路#

Kimi k1.5 不是从 base model 直接开始 RL。报告给出的链路包含四个主要阶段:1

多模态预训练
  -> Vanilla SFT
  -> 少量高质量 Long-CoT SFT warmup
  -> 长上下文 RL
  -> Long2short(可选,得到短 CoT 模型)

其中各阶段承担不同职责:

阶段主要目标关键做法
多模态预训练建立语言、知识、代码、数学和视觉基础三阶段预训练,最后激活 131,072 token 上下文
Vanilla SFT获得通用指令跟随能力约 100 万文本样本和 100 万图文样本
Long-CoT SFT给 RL 一个会展开推理的起点用 prompt engineering + rejection sampling 构造少量可验证长推理轨迹
长上下文 RL学会探索、纠错并提高最终答案正确率结果奖励、mirror descent 变体、采样策略、长度控制
Long2short把长推理能力压缩到更小 token 预算模型合并、最短拒绝采样、DPO、二阶段 RL

这里最重要的分工是:SFT 教模型“长推理大致长什么样”,RL 再通过成败反馈发现哪些推理行为真正有用。 如果完全依赖 SFT,模型只能模仿已有轨迹;如果从普通指令模型直接做超长 RL,探索空间又太大,昂贵 rollout 很可能被无效重复和错误路径占满。

2. 长 CoT 的本质:把搜索树压进上下文#

传统 planning 方法会显式维护搜索树。一个节点表示当前的部分解,critic 或 value model 评估节点质量,搜索算法再决定扩展、剪枝或回退哪个分支。

Kimi k1.5 提出另一种视角:思考、评价、反思和回退最终都可以表示成 token 序列,那么可以把搜索历史线性化到同一段上下文中:

显式搜索:状态树 + 节点评分 + 搜索调度器
 
隐式搜索:问题
          -> 尝试路径 A
          -> 发现矛盾
          -> 回顾错误
          -> 尝试路径 B
          -> 验证答案

上下文越长,模型在一次回答里可执行的“搜索步”就越多。报告将 token 数类比为 planning algorithm 的计算预算:模型仍然只做标准自回归生成,但生成的轨迹开始表现出规划、评估、反思和探索。1

这个观点很诱人,但要注意两个边界。

第一,长输出只是搜索预算,不保证搜索质量。模型可能把预算用于重复、绕路或自我确认。报告后面加入 repeat detection 和 length penalty,正说明“更多 token”与“更多有效搜索”不是一回事。

第二,线性轨迹不等价于真正的树搜索。一条 CoT 可以描述回退,却不能像 MCTS 那样并行保存、比较和重用大量分支。k1.5 证明的是:在一批可验证 reasoning 任务上,足够长的单轨迹配合 RL 已能达到很强的结果;它没有证明显式搜索从此没有价值。

3. RL 数据:奖励可验证比题目看起来难更重要#

k1.5 的目标可以简化为:给定问题 xx 和标准答案 yy^*,模型生成推理轨迹 zz 与最终答案 yy,再最大化最终答案奖励:

maxθ  E(x,y)D,(y,z)πθ[r(x,y,y)].\max_\theta\;\mathbb{E}_{(x,y^*)\sim D,\,(y,z)\sim\pi_\theta} \left[r(x,y,y^*)\right].

奖励通常是二值的:代码由测试用例执行判断;结构化数学答案可用规则或 reward model 判断。整条 CoT 不逐步打分,只看它最终是否导向正确答案。1

因此,RL prompt set 必须同时满足三件事:

属性为什么重要
覆盖多样防止策略只适应单一题型,数据覆盖 STEM、代码、通用推理以及图文任务
难度均衡过易题没有有效梯度,过难题又几乎采不到正确轨迹
可准确评测奖励一旦误判,模型会优化 verifier 漏洞,而不是推理能力

3.1 用模型自身通过率估计难度#

对每道候选题,SFT 模型以较高温度采样 10 次,以通过率作为难度代理。通过率越低,题目相对当前模型越难。这个定义不是在判断题目的绝对难度,而是在测量题目位于当前策略的能力边界何处。1

这使后续两种采样策略成为可能:

  • Curriculum Sampling:先训练较容易的问题,再逐渐转向难题;
  • Prioritized Sampling:跟踪每道题的成功率 sis_i,按 1si1-s_i 提高弱项的采样概率。

RL 数据不是一个训练开始后就固定不变的静态集合。模型能力变化后,原来的难题可能变容易,采样分布也需要随之调整。

3.2 先排除容易被“猜中”的奖励#

多选、判断和证明题被排除在主要 RL prompt set 之外,原因不是它们没有推理价值,而是最终答案太容易让 verifier 产生 false positive:模型可能过程完全错误,却碰巧猜中选项或结论。1

报告还采用了一个直接的过滤方法:要求模型不输出 CoT,直接猜答案;如果 8 次以内能猜中,就把题目视为容易 hack 并移除。

这揭示了结果奖励 RL 的一个基本约束:

奖励不只要客观,还必须让“绕过推理直接撞对答案”的概率足够低。

对自由形式数学答案,团队分别用约 80 万样本训练 Classic RM 和会读取推理过程的 CoT RM。内部人工 spot check 中,两者准确率分别为 84.4% 和 98.5%,最终 RL 使用 CoT RM。1 这不是公开 benchmark 成绩,但能解释为什么论文一面强调 outcome reward,另一面仍投入大量工作提高答案等价性判断:只在轨迹末尾打分,并不意味着 verifier 可以很弱。

4. 策略优化:为什么它看起来像 GRPO,却不是同一个公式#

k1.5 使用 online policy mirror descent 的一个变体。第 ii 轮把当前策略 πθi\pi_{\theta_i} 作为 reference,优化带 KL 正则的新策略:1

maxθ  E(x,y)DE(y,z)πθ[r(x,y,y)]τDKL ⁣(πθπθi).\max_\theta\; \mathbb{E}_{(x,y^*)\sim D}\mathbb{E}_{(y,z)\sim\pi_\theta} \left[r(x,y,y^*)\right] -\tau D_{\mathrm{KL}}\!\left(\pi_\theta\,\|\,\pi_{\theta_i}\right).

KL 项限制单轮更新幅度:新策略既要提高奖励,也不能一步偏离采样它的 reference 太远。论文从这个目标的闭式最优解出发,构造了一个平方误差形式的 surrogate loss。实际训练时,每个问题采样 kk 个回答,并用组内平均奖励

rˉ=1kj=1krj\bar r=\frac{1}{k}\sum_{j=1}^{k}r_j

近似难以直接计算的归一化项。最终梯度可以概括成两部分:

1kj=1k[θlogπθ(yj,zjx)(rjrˉ)θτ2(logπθ(yj,zjx)πθi(yj,zjx))2].\frac{1}{k}\sum_{j=1}^{k} \left[ \nabla_\theta\log\pi_\theta(y_j,z_j\mid x)(r_j-\bar r) -\nabla_\theta\frac{\tau}{2} \left(\log\frac{\pi_\theta(y_j,z_j\mid x)}{\pi_{\theta_i}(y_j,z_j\mid x)}\right)^2 \right].

第一项用组内相对奖励增加正确轨迹概率、降低错误轨迹概率;第二项用 log-ratio 的二次正则约束策略漂移。它和 GRPO 一样利用同题多样本及组内 baseline,但论文的推导起点、off-policy 解释与正则形式并不等同于直接套用 GRPO。1

每轮训练结束后,更新后的模型成为下一轮 reference,并重置 optimizer。这样每一轮实际上都在解一个 reference 不同的新优化问题。

4.1 为什么不训练 value network#

省掉 critic 最直接的收益是降低内存和训练成本,但报告给出的理由更有意思:传统 token-level credit assignment 可能过早惩罚“暂时走错”的推理分支。1

假设模型中途选择了错误步骤,但随后识别错误、回退并得到正确答案。局部 value function 可能给错误步骤负 advantage;只看最终结果的奖励却会保留整段经验,让模型学习完整的 trial-and-error 模式。

这个选择的代价同样明显:最终答案奖励非常稀疏,无法判断长轨迹中究竟哪些步骤有贡献。k1.5 的方案不是解决了 credit assignment,而是做了一个取舍:宁可接受粗粒度信用分配,也不让局部 critic 过早压制探索。

4.2 错误样本也必须产生负梯度#

报告将自身方法与 ReST 做了对比。ReST 反复拟合当前模型采出的最佳回答,却不显式降低错误回答概率;k1.5 的消融显示,引入错误样本的负梯度后,长 CoT 训练的 sample efficiency 更高。1

直觉上,只模仿正确轨迹回答的是“应该怎么做”;同时压低错误轨迹,才回答了“哪些探索模式应该避免”。在昂贵的长 rollout 中,后者尤其重要。

5. 长度惩罚:目标不是越短越好,而是正确前提下更短#

RL 训练中,回答长度与准确率一起增长。更多 token 给了模型更多探索机会,但也出现明显 overthinking:简单问题被反复验证,错误轨迹拖到最大长度,训练和服务成本迅速上升。1

对同一道题的 kk 个采样,记第 ii 个回答长度为 len(i)\operatorname{len}(i)。论文先将长度归一化成:

λi=0.5len(i)min_lenmax_lenmin_len.\lambda_i=0.5- \frac{\operatorname{len}(i)-\operatorname{min\_len}} {\operatorname{max\_len}-\operatorname{min\_len}}.

再根据答案是否正确定义长度奖励:

rlen(i)={λi,ri=1,min(0,λi),ri=0.r_{\text{len}}(i)= \begin{cases} \lambda_i, & r_i=1,\\ \min(0,\lambda_i), & r_i=0. \end{cases}

它表达了三个偏好:

  • 正确且更短的回答获得正奖励;
  • 正确但更长的回答被相对抑制;
  • 错误回答不会因为“短”而得到奖励,错误且很长则额外受罚。

如果一开始就施加强长度惩罚,模型可能还没学会解题就先学会提前结束。因此 k1.5 先进行一段不带长度惩罚的标准训练,再逐渐启用固定惩罚。这是典型的能力与效率分阶段优化:先让模型找到答案,再要求它少走弯路。

6. Partial Rollout:128K RL 真正的系统支点#

长 CoT 会给同步 RL 系统带来严重的 straggler 问题。同一批任务中,有的回答几百 token 就结束,有的可能持续数万 token;如果每轮必须等待最长轨迹完整生成,短任务完成后的 GPU 会持续空等。1

k1.5 为每轮 rollout 设置固定输出 token budget。轨迹超过预算时不丢弃,也不从头重采样,而是切开保存到 replay buffer,下一轮继续:

iteration n-2: [已有前缀 A] ----达到本轮预算----> 保存
iteration n-1: [复用前缀 A][新片段 B] -------> 保存
iteration n:   [复用 A+B][新片段 C][答案] ---> 完成并评分

只有当前迭代新生成的片段需要按当前策略计算;历史片段可以直接复用,部分片段也可不参与 loss。这样做有三个收益:

  1. 每轮 rollout 时间被固定预算约束,不再由极端长尾决定;
  2. 已生成的长前缀得到复用,不必每次从问题重新 decode;
  3. 异步 rollout worker 可以在部分 worker 处理长轨迹时继续接收短任务。

系统还会检测重复序列并提前终止,既节省生成成本,也可对重复行为施加额外惩罚。1

6.1 Partial rollout 带来的策略陈旧问题#

一条轨迹可能跨越多个 iteration。它的早期片段来自旧策略,最后片段来自更新后的策略,因此严格说整条轨迹并非由同一个 πθi\pi_{\theta_i} 采样。这也是论文强调其优化方法能利用 off-policy data 的现实背景。

不过,报告没有量化轨迹跨轮复用造成的 policy staleness,也没有给出 partial rollout 相对完整 rollout 的端到端吞吐提升。因此,更准确的表述是:它给出了可扩展长轨迹训练的工程机制,但公开数据不足以判断这一机制的收益上限。

7. 训推混合部署:同一批 GPU 在 Megatron 与 vLLM 间切换#

k1.5 使用同步迭代式 RL:rollout worker 生成轨迹,reward service 评分,trainer worker 更新权重,然后新权重进入下一轮 rollout。系统组件包括 central master、replay buffer、多类 reward model、代码执行服务以及训练和推理 worker。1

为了减少独立训练集群和推理集群互相等待,论文让 Megatron 与 vLLM 以 sidecar 形式共置在同一 Kubernetes pod,并共享 GPU:

训练阶段:Megatron onload -> 更新参数 -> offload 显存
                                       |
                                       v
权重转换:Megatron checkpoint -> HF shard -> RDMA 传输
                                       |
                                       v
推理阶段:启动 vLLM -> 加载新权重 -> rollout -> 终止 vLLM

训练权重需要处理 pipeline parallelism 和 expert parallelism,再转成只保留 tensor parallelism 的 Hugging Face shard;节点间通过 Mooncake over RDMA 传输。报告称训练切换到推理少于 1 分钟,推理切回训练约 10 秒。1

这里选择“终止并重启 vLLM”,而不是仅做显存 offload,是因为 CUDA Graph、NCCL buffer 和 driver 等资源不容易彻底释放。这个设计牺牲了一部分启动开销,换取更干净的显存回收与故障隔离。

7.1 代码奖励背后是一套沙箱服务#

代码 RL 不能只比较输出字符串,而要实际编译和运行。k1.5 的 sandbox 基于 Kubernetes 调度,通过 HTTP 服务接入 MultiPL-E、DMOJ Judge Server、Lean、Jupyter Notebook 等不同执行镜像,支持在线判题与 repo-level editing。1

系统用 crun 代替 Docker runtime、复用预创建的 cgroup,并把 overlay filesystem 的 upper layer 放到 tmpfs。论文的 16 核内部测试中,容器启动时间从 0.12 秒降到 0.04 秒,最大启动率从 27 提升到 120 containers/s;报告没有给出更多硬件和压力测试条件,因此这些数字更适合用来说明优化方向,而不是当成通用性能承诺。1

对于没有公开测试用例的题目,团队让 base model 调用 CYaRon 生成 50 个 test case,再用 10 份 ground-truth submission 交叉验证。单个 case 至少要有 7/10 提交结果一致才有效;最终至少 9/10 ground-truth submission 通过整个测试集,题目才进入训练集。在抽样的 1,000 道竞赛题中,614 道不需要 special judge,最终有 323 道进入训练集。1

这组数字说明,“可验证奖励”并不等于奖励天然存在。构造可靠 verifier 本身就是一条数据与基础设施流水线。

8. 多模态不是后挂视觉适配器#

k1.5 从预训练、SFT 到 RL 都包含视觉数据。预训练分为三个阶段:1

  1. Vision-language pretraining:先建立语言基础,再逐步混入多模态数据;
  2. Cooldown:提高精选和合成数据占比,强化 reasoning 与知识;
  3. Long-context activation:把序列长度扩到 131,072 token。

报告称 Vanilla SFT 包含约 100 万文本样本;其明确列出的分项是 50 万通用问答、20 万代码、20 万数学与科学、5 千创意写作、2 万长上下文任务,合计 92.5 万,因此“100 万”应视为近似总量。另有约 100 万图文样本,覆盖图表、OCR、visual coding、视觉推理和带图数学/科学问题。1

训练先在 32K 序列长度进行 1 个 epoch,再在 128K 进行 1 个 epoch。RL prompt 也同时包含纯文本和图文问题。这意味着 k1.5 的视觉 reasoning 不是在文本 reasoning 模型完成后临时嫁接,而是共用同一套长上下文训练与结果奖励框架。

9. Long2short:把搜索能力压回有限 token 预算#

长 CoT 追求能力上限,但生产系统更关心 accuracy-per-token。k1.5 给出四种 long2short 方法:1

方法做法特点
Model Merging直接平均 long-CoT 与 short-CoT 模型权重无需继续训练,成本最低
Shortest Rejection Sampling同题采样 8 次,选最短正确答案做 SFT简单,但生成数据成本较高
DPO最短正确答案作 positive,更长回答作 negative显式学习长度偏好
Long2short RL从性能/效率折中 checkpoint 继续 RL,增强长度惩罚并缩短 rollout 上限最贴近最终 token 预算

DPO 的负样本不仅包括错误长回答,也包括长度达到所选正确答案 1.5 倍以上的正确回答。它优化的不是“正确 vs. 错误”,而是“同样能答对时,哪一种推理更紧凑”。

论文的 Figure 7 显示,long2short RL 在 MATH-500 和 AIME 2024 的准确率—token 长度前沿上表现最好。更值得注意的是,这并不是普通 knowledge distillation:teacher 提供的不只是最终答案,还提供了经过 RL 发现的搜索与纠错先验;short model 的任务是把这些行为压缩成更短的路径。

10. 实验结果应该怎样读#

10.1 Long-CoT:强项与短板同时存在#

先统一评测口径:Codeforces 的 94 百分位不是单次生成的 pass@1,而是对 long-CoT 生成的代码做 majority voting,并使用同一模型生成的测试用例筛选;表中的 o1 百分位则取自 OpenAI 发布会。Long-CoT 的 LiveCodeBench 使用 2024-12 至 2025-02 的 v5,短 CoT 使用 2024-08 至 2024-11 的 v4,两组数字不能直接纵向比较。1

BenchmarkKimi k1.5OpenAI o1论文中更强者
MATH-50096.294.8Kimi k1.5
AIME 202477.574.4Kimi k1.5
Codeforces percentile9494持平
LiveCodeBench62.567.2OpenAI o1
MathVista-Test74.971.0Kimi k1.5
MMMU-Val70.077.3OpenAI o1
MathVision-Full38.6未报告Kimi k1.5

因此“匹配 o1”应该理解为多个重点 reasoning benchmark 上总体有竞争力,而不是所有任务全面领先,也不是所有条目都采用完全相同的推理与评测协议。尤其在 LiveCodeBench 和 MMMU 上,表中 o1 仍明显更高。1

10.2 Short-CoT:长推理训练能迁移到常规输出#

短 CoT 模型在 MATH-500 达到 94.6、AIME 2024 达到 60.8、LiveCodeBench 达到 47.3、MathVista 达到 70.1。其中 AIME 60.8 是 8 次运行的平均值,平均输出 3,272 tokens。相较论文表中的 GPT-4o,AIME 从 9.3 提升到 60.8;报告所称“最高 +550%”来自这种相对增幅口径。1

不过,这个百分比容易制造夸张印象:低基线上的相对提升天然很大。更有信息量的是绝对差值,以及 long2short 后使用了多少平均输出 token;遗憾的是,论文没有在主结果表中为所有对比模型统一列出 token 成本。

10.3 消融支持了三条趋势,但不是完整归因#

报告的消融给出三项主要观察:1

  • 随 RL 推进,平均回答长度和困难 benchmark 准确率同步提高;最终训练扩展到 128K 后仍看到收益;
  • 小模型借助更长 CoT 可以接近大模型,但大模型通常 token efficiency 更高、能力上限也更高;
  • 课程采样优于始终均匀混合难易题,带错误样本负梯度的方法优于只拟合最佳样本的 ReST。

这些图支持“上下文长度是 RL scaling 的一条轴”,却还不是严格的 scaling law。报告没有给出跨多个模型尺寸、多个固定计算预算的幂律拟合,也没有把长上下文训练与单纯增加 rollout 数、采样温度或 best-of-NN 的收益完全解耦。

11. 把算法与系统连起来看#

k1.5 的各部分不是互相独立的技巧列表,而是一条闭环:

可可靠判分的高难 prompt
          |
          v
结果奖励允许自由探索整条轨迹
          |
          v
长上下文提供更多隐式搜索步
          |
          v
partial rollout 控制长尾与重复生成成本
          |
          v
mirror descent 变体利用跨轮、略微 off-policy 的数据
          |
          v
长度惩罚 + long2short 回收推理效率

任何一环缺失都会改变系统性质:

  • verifier 不可靠,长探索只会发现更多 reward hacking 路径;
  • 没有长上下文,模型缺少展开、失败和恢复的空间;
  • 没有 partial rollout,128K 轨迹会拖慢整个同步训练周期;
  • 没有长度控制,性能增长会被训练与服务成本吞噬;
  • 没有 long2short,长 CoT 的能力很难进入低延迟场景。

所以,Kimi k1.5 的真正贡献不是某一个新 loss,而是证明了结果奖励、长上下文与 RL 基础设施可以共同形成一条可工作的 reasoning scaling 路线

12. 报告没有回答什么#

读这份报告时,至少要保留以下问题:

  1. 模型规模未知。 没有参数量、MoE 配置或训练 FLOPs,难以与其他路线做 compute-matched 比较。
  2. 数据规模未知。 RL prompt 数量、各领域比例、去重策略和污染检查没有完整披露。
  3. 128K 的利用率未知。 报告展示长度与能力相关,但没有说明实际轨迹长度分布以及多少样本真正接近 128K。
  4. 系统收益缺少对照。 Partial rollout 的吞吐、GPU 利用率、跨轮 staleness 与完整 rollout baseline 没有定量表格。
  5. 消融仍不完整。 Long-CoT SFT、不同 reward model、长度惩罚和各采样策略对最终模型的独立贡献没有系统拆开。
  6. 基准可比性有限。 不同模型的采样次数、输出预算和评测实现未必完全一致,测试时计算量也没有统一。

这些缺口不抹杀报告的价值,但决定了它更像一份高价值的训练实践总结,而不是可以逐项复刻的完整 recipe。

13. 怎样概括 Kimi k1.5#

如果只保留四个结论,可以记住:

  1. Reasoning scaling 可以沿输出上下文继续扩展。 更长 CoT 为探索、反思与回退提供了计算预算。
  2. 不一定需要显式搜索树和过程奖励。 在可验证任务上,最终答案奖励配合长轨迹已经能学出一部分隐式 planning 行为。
  3. 128K RL 首先是系统问题。 Partial rollout、replay buffer、权重快速切换、代码沙箱和 reward service 与算法同等重要。
  4. 能力与效率必须分阶段优化。 先用长 CoT 找到能力上限,再用长度惩罚和 long2short 把它压回可部署预算。

Kimi k1.5 留下的最重要问题也很直接:如果上下文长度是一条新的 RL scaling 轴,那么下一步不只是继续把 128K 拉长,而是提高每个 token 承载的有效搜索量。真正稀缺的最终不是 token 本身,而是不重复、会回退、能验证的推理步骤

参考资料#