image-20250211082002788

摘要

我们现在已经进入了 Open R1 项目 的第二周,该项目旨在重建 DeepSeek R1 缺失的部分——特别是训练管道和合成数据。

  1. 分享 OpenR1-Math-220k 的构建:这是我们首个用于数学推理的大规模数据集!

  2. 介绍社区在策划用于微调的小型、高质量数据集方面取得的一些令人兴奋的进展,以及关于如何在训练和推理阶段控制推理模型的思维链长度的见解。

OpenR1-Math-220k 数据集

DeepSeek R1 的主要优势之一是它能够通过知识蒸馏将高级推理能力迁移到较小的模型。 DeepSeek 团队通过生成 60 万个推理轨迹并微调一系列 Qwen 和 Llama 模型证明了这一点,表明直接从 R1 进行知识蒸馏可以在无需强化学习的情况下实现具有竞争力的推理性能。 值得注意的是,DeepSeek-R1-Distill-Qwen-7B 在 AIME 2024 上取得了 55.5% 的成绩,超过了像 QwQ-32B-Preview 这样更大的模型。

然而,用于蒸馏的推理轨迹尚未公开,这促使社区独立地重新创建类似的数据集。到目前为止,社区已经发布了多个开放数据集,包括 OpenThoughts-114kBespoke-Stratos-17kDolphin-R1LIMO

🐳 隆重推出 OpenR1-Math-220k,这是一个大规模的数学推理数据集,它利用 512 个 H100 在本地生成,且每个问题都对应多个答案。为了创建 OpenR1-Math-220k,我们与 Numina 展开合作,他们开发了广受欢迎的 NuminaMath-CoT 数据集的全新版本。

与现有数据集相比,OpenR1 数据集的新特性:80 万条 R1 推理轨迹:我们使用 DeepSeek R1 为 40 万道问题生成了两个答案。经过筛选的数据集包含 22 万道问题,并带有正确的推理轨迹。

  • 本地运行 512 个 H100: 我们没有依赖 API,而是利用 vLLMSGLang 在我们的科学集群上本地运行生成,每天生成 18 万条推理过程
  • 基于 NuminaMath 1.5: 我们专注于数学推理过程,并为 NuminaMath 1.5 中的问题生成答案,NuminaMath 1.5 是 NuminaMath-CoT 数据集的改进版本。
  • 自动过滤: 我们应用 Math Verify 来仅保留至少有一个正确答案的问题。我们还利用 Llama3.3-70B-Instruct 作为一个判断器,以检索更多正确的例子(例如,对于答案格式错误,无法使用基于规则的解析器验证的情况)。
  • 我们通过在我们的数据集上微调 Qwen-7B-Math-Instruct 来匹配 DeepSeek-Distill-Qwen-7B 的性能。

通过展示可扩展的、高质量的推理数据生成,我们希望这个流程可以扩展到数学以外的领域,例如代码生成。

数据生成

为了构建 OpenR1-220k,我们使用 DeepSeek R1 大语言模型生成 NuminaMath 1.5 中 40 万个问题的解决方案。我们遵循模型卡的推荐参数,并在用户提示词前添加以下指令:“请逐步推理,并将最终答案放在 \boxed{} 中。”

我们将每次生成的 Token 限制设置为 16k,因为我们的分析表明,只有 75% 的问题可以在 8k Token 以下解决,而剩余的大部分问题需要完整的 16k Token。最初,我们使用 vLLM 进行推理,在每个 H100 上每小时实现 15 个生成的吞吐量,并在之前的更新和 OpenR1 repo 上分享了我们的生成脚本。最近,我们开始尝试 SGLang,并且我们能够在每个 H100 上每小时生成 25 个解决方案(速度提升近 2 倍!),这使我们能够在 512 个 H100 上每天生成 30 万个问题解决方案。这使我们能够在短短几天内生成 80 万个推理轨迹。我们为每个问题生成两个解决方案——在某些情况下,生成四个——以便在过滤和训练中提供灵活性。这种方法允许拒绝采样,类似于 DeepSeek R1 的方法,并且也使数据集适合诸如 DPO 之类的偏好优化方法。

数据生成的脚本位于此处:open-r1/tree/main/slurm

数据过滤

为了仅保留高质量、正确的推理轨迹,我们利用 Math Verify,这是一个强大的数学表达式评估系统,旨在评估大语言模型 (LLM) 生成的答案。我们从模型生成的结果中提取最终答案,并将其与数据集中的标准答案进行比较。

我们发现 55% 的问题至少有一个正确答案。然而,NuminaMath 1.5 中的一些标准答案是空的或格式不可验证的,这使得自动验证具有挑战性。虽然我们已经改进了 Math-Verify,以更准确地处理这些不太常见的输出格式(见下文 Math-Verify 的改进),但我们也探索了一种替代方法,从被拒绝的样本中恢复有效解:使用 Llama-3.3-70B-Instruct 作为评判者,对被拒绝问题的一个子集进行评估。在运行此验证步骤之前,我们会过滤掉不完整的样本或包含空标准答案的样本,确保只考虑格式良好且包含明确框定的最终答案的响应。此过程成功检索了之前被拒绝的 28,000 个问题。

我们使用以下提示词 Llama3.3-70B-Instruct

You are a mathematical answer validator. You will be provided with a mathematical problem and you need to compare the answer in the reference solution, and the final answer in a model's solution to determine if they are equivalent, even if formatted differently.

PROBLEM:

{problem}

REFERENCE SOLUTION:

{answer}

MODEL'S SOLUTION:

{generation}

Focus ONLY on comparing the final mathematical answer provided by the model while ignoring differences in:

- Formatting (e.g., \\boxed{{}} vs plain text)
- Multiple choice formatting (e.g., "A" vs full solution)
- Order of coordinate pairs or solutions
- Equivalent mathematical expressions or notation variations
- If the model's answer is nonsense, return "Verdict: AMBIGUOUS"

Start with a brief explanation of your comparison (2-3 sentences). Then output your final answer in one of the following formats:

- "Verdict: EQUIVALENT"
- "Verdict: DIFFERENT"
- "Verdict: AMBIGUOUS"

通过结合基于规则的验证(Math Verify)和基于大语言模型 (LLM) 的评估,我们在保持规模的同时提高了数据集质量。最终的数据集包含 22 万个带有验证推理过程的问题,使其成为训练推理模型的宝贵资源。为每个问题提供多个解决方案,使社区可以灵活地过滤更好的生成结果,并根据 NuminaMath 数据源和问题类型应用更有针对性的改进。

Image 48: image/png

该数据集有两个划分:

  • default(9.4 万个问题),在监督微调 (SFT) 之后实现了最佳性能。
  • extended(13.1 万个问题),其中包括额外的 NuminaMath 1.5 来源,如 cn_k12,提供更多的推理过程。但是,我们观察到,在此子集上进行监督微调 (SFT) 后的性能低于默认划分,这可能是因为与其他来源相比,cn_k12 包含更简单的问题。

对于具有多个正确答案的行,我们还尝试应用奖励模型 (RM) 作为最终过滤器来选择最佳响应。对于 R1 生成的每个具有多个正确答案的行,我们通过删除思考 Token (<think>…</think>) 来提取最终答案,然后将问题和提取的答案传递给使用 vLLM 提供的 Qwen/Qwen2.5-Math-RM-72B,以获得评分。使用这些评分,我们为每个包含多个正确响应的行构建了一个排名。选择排名第一的正确生成结果并将其包含在训练数据集中,但遗憾的是,训练消融实验表明,相对于随机选择一个正确生成结果,这种方法并不能有效提升模型性能。一个可能的改进方向是,在使用 RM 进行评分时,包含推理过程的完整轨迹,而不仅仅是最终答案。

与 DeepSeek-Distill-Qwen-7B 的性能比较

我们使用 5e-5 的学习率,在数据集的 default 分割上对 Qwen2.5-Math-Instruct 进行 3 个 epoch 的微调 (fine-tuning)。为了将上下文长度从 4k 扩展到 32k,我们将 RoPE 频率增加到 300k。训练遵循线性学习率计划,并有 10% 的 warmup 阶段。下表比较了 OpenR1-Qwen-7BDeepSeek-Distill-Qwen-7BOpenThinker-7B 使用 lighteval 的性能。

模型MATH-500AIME24AIME25
DeepSeek-Distill-Qwen-7B91.643.340
OpenR1-Qwen-7B90.636.740
OpenThinker-7B89.630.033.3

该数据集代表一个初始版本,为进一步改进提供了基础。社区可以探索其他过滤策略来提高性能,例如 DeepSeek R1 中使用的拒绝采样,以提高质量。

Math-Verify 改进

在检查验证结果时,我们发现了 Math-Verify 中的几个失败案例。为了解决这些问题,我们实施了重大的改进和修复。我们强烈建议更新到最新版本 (0.5.2) 以从这些增强功能中受益:

pip install math-verify==0.5.2

以下是最重要的改进摘要:

  • 改进了纯文本答案的解析和验证(例如 $\text{E}$ == $E$)
  • 改进了答案列表的解析(例如 $1$ and $2$ and $3$ == $1,2,3$)
  • 修复了单个 LaTeX 环境中多个带框答案的解析(例如 $\boxed{1},\boxed{2}$ == {1,2})
  • 引入了有序元组。推断列表是元组还是集合非常困难,因此我们使用标准答案来指导:
  • (1,2,3) ≠ {3,2,1}; 1,2,3 == {3,2,1}; {3,2,1} == {1,2,3}
  • 支持标准答案中的关系运算符(例如小于)和预测结果中的区间(例如 $1 < x < 2$ == $(1,2)$)

社区亮点


本周,社区从多个角度探索了 GRPO。同时,多个研究实验室表明,仅需约 1000 个高质量训练样本,就可能足以在现有开放模型中激发推理能力。

GRPO 在实践中

  • nrehiew 展示了,直接将 GRPO 应用于 Qwen2.5-0.5B 基础模型,在 GSM8k 基准测试中获得了约 51% 的准确率,这比 Qwen2.5-0.5B-Instruct 模型提高了 10 个百分点。 如此令人印象深刻的结果引发了许多关于指令数据在预训练中的作用的讨论,因为人们(尚未)能够在将 GRPO 应用于其他基础模型(如 Llama 3)时获得类似的收益。 特别是,Sea AI Lab (SAIL) 的研究人员表明,基础模型可以很容易地被提示以产生自我反思,并且 DeepSeek-R1 论文中的“顿悟”时刻可能更多的是基础模型的症状,而不是强化学习优化过程。
  • Unsloth 应用了他们的优化魔法,使得参数高达 15B 的模型能够仅用 15GB VRAM 🤯 通过 GRPO 进行训练。 这意味着您现在可以在 Google Colab 中免费使用 GRPO!
  • Wing Lian 来自 Axolotl 的研究表明,DoRA 的收敛速度比 LoRA 和全量微调更快
  • Alexander Doria 发现了一种为诗歌设计奖励函数的方法。 这一发现令人振奋,因为它提供了首批将 GRPO 应用于传统上不被认为是“可验证”领域的公开案例之一。

评估

本周发布了 AIME 2025 的第一部分,它由 15 个难度很高的数学问题组成,这些问题用于训练高中生参加国际数学奥林匹克竞赛。在过去的一年中,AIME 2024 一直是探测大语言模型数学能力的主要基准,社区非常兴奋地看到模型在新的一组未见过的问题上的表现如何:

大语言模型是否需要在自然语言中进行推理?

Image 49: image/png

一篇有趣的新研究论文表明,通过使用循环语言模型,可以在测试时通过在潜在空间中进行隐式推理来扩展计算能力。这类似于 Meta 的 Coconut 工作,该工作旨在潜在空间中训练语言模型,现在已被应用于推理任务。这些方法的优势在于其更高的计算效率:通过探索潜在空间,无需生成大量的“思考” Token 即可获得高性能。

转向更小、更高质量的推理数据?

虽然 DeepSeek R1 利用了 60 万条推理轨迹进行知识蒸馏,但最近的研究表明,复杂的推理能力可以在语言模型中涌现,并非通过大规模训练,而是通过少量精心策划的样本。

这种方法的一个例子是 s1K 数据集。它包含 1,000 个精心挑选的数学问题,以及来自 Gemini Flash 的知识蒸馏推理轨迹。选择方法侧重于难度、多样性和质量。作者在 s1K 上对 Qwen2.5-32B-Instruct 进行了微调,并成功地在竞赛数学基准测试中超过了 OpenAI 的 o1-preview,性能提升高达 27%。

另一个数据集 LIMO 进一步推进了这个想法,仅使用 817 个训练样本就在 AIME 和 MATH 基准测试上取得了强大的性能。作者假设,当模型在预训练期间已经获得了广泛的领域知识时,可能只需要少量结构良好的示例就可以解锁高级推理能力。

CoT 长度:预算强制与奖励塑造

使来自 s1K 数据集的微调 Qwen2.5-32B-Instruct 模型达到如此强大性能的一个重要因素是预算强制,这是一种测试时计算技术,它通过在模型生成内容后附加“等待”或思维结束 Token 分隔符来延长或截断推理过程。 该工具使作者能够调整思考时间,并得出结论:他们的模型表现出测试时缩放的特性,即随着思考时间的增加,在不同数学基准测试中的准确率也会提高。

Image 50: image/png

同样地,揭秘大语言模型中的长链式思考推理 (Yeo et al.) 也研究了思维链 (CoT) 长度对模型性能的影响。他们引入了余弦奖励——一种新颖的奖励函数,用于激励正确生成时使用较短的 CoT,错误生成时使用较长的 CoT——这稳定了强化学习训练,尤其是在模型具有相对有限的最大上下文大小并且平均响应长度可能爆炸时。当模型开始显示在难题上进行奖励机制利用的迹象时,也会采用重复惩罚,通过人为地增加 CoT 长度(通过重复)而不是尝试解决问题。

Image 51: image/png

下一步是什么?

现在 GRPO 已经在 TRL 中顺利运行,我们正在进行一系列广泛的实验,以了解哪些超参数和奖励函数对训练的影响最大。