返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

Open R1 项目进展第二期

[复制链接]
链载Ai 显示全部楼层 发表于 1 小时前 |阅读模式 打印 上一主题 下一主题

原文发布于 2025 年 2 月 10 日

我们启动 Open R1 项目已经两周了,这个项目是为了把 DeepSeek R1 缺失的部分补齐,特别是训练流程和合成数据。

这篇文章里,我们很高兴跟大家分享一个大成果:,这是我们打造的第一个大规模数学推理数据集!

除此之外,我们还聊聊社区里一些让人兴奋的进展,比如怎么整理出小而精的高质量数据集来微调模型,以及如何在训练和推理时控制推理模型的“思考步数”。

一起来看看吧!

OpenR1-Math-220k 数据集

DeepSeek R1 的厉害之处在于,它能把高级推理能力“传授”给小模型。DeepSeek 团队生成了 60 万条推理记录,用来微调 Qwen 和 Llama 系列模型,结果证明,不用强化学习,直接从 R1 “蒸馏”出来的效果也很棒。比如,DeepSeek-R1-Distill-Qwen-7B 在 AIME 2024 上拿下了 55.5% 的成绩,比更大的 QwQ-32B-Preview 还强。

不过,这些推理记录没公开,这就促使社区自食其力,重新创建了几个类似的数据集。比如、、和。

?隆重介绍 OpenR1-Math-220k!这是一个用 512 台 H100 机器本地跑出来的大规模数学推理数据集,每个问题还配了好几个答案。我们跟合作,基于他们超受欢迎的数据集,推出了全新升级版。

这个 OpenR1 数据集跟其他的有啥不一样:

  • 80 万条推理记录: 我们用为 40 万道题各生成了两个答案,筛完后剩下22 万道题,每道题都有靠谱的推理过程。
  • 512 台 H100 本地跑: 没用 API,我们靠和在自家科学计算集群上搞定,每天能生成18 万条推理记录
  • 基于: 我们主攻数学推理,针对 NuminaMath 1.5 (的升级版) 里的题目生成答案。
  • 自动筛选: 用只留下至少一个正确答案的题目,还请当“裁判”,捞回更多靠谱答案 (比如有些答案格式乱了,规则解析器认不出来)。
  • 性能追平: 我们在数据集上微调,效果不输原版 DeepSeek-Distill-Qwen-7B。

我们希望这个可扩展、高质量的推理数据生成方法,不仅能用在数学上,还能拓展到代码生成等领域。

数据怎么来的

为了搞出 OpenR1-220k,我们让根据模型卡建议的参数去解 NuminaMath 1.5 里的 40 万道题。还在每道题的提示前加了句:

“请一步步推理,最后把答案写在 \boxed{} 里。”

每道题最多给 16k token ,因为我们发现 75% 的题 8k token 就能搞定,剩下的基本得用满 16k。一开始用 vLLM 跑推理,每台 H100 一小时能生成 15 个答案,脚本也在之前的更新和 Open R1里分享了。后来我们试了 ****,速度翻倍,每张 H100 一小时能搞 25 个答案!靠着 512 张 H100,我们一天能生成 30 万个答案,几天就攒了 80 万条推理记录。

每道题我们生成了两份答案,有些甚至四份,这样筛选和训练时更灵活。这种做法跟 DeepSeek R1 的拒绝采样差不多,还能支持 DPO 这种偏好优化方法。

生成脚本:

未筛过的数据集:

数据怎么筛的

为了确保只留下高质量、正确的推理过程,我们用来把关。这是个专门评测 LLM 答案的数学表达式评估系统,我们把模型给的最终答案跟数据集里的标准答案对比。

结果发现,55% 的题至少有一个正确答案。但 NuminaMath 1.5 里有些标准答案是空的,或者格式没法自动校验,挺麻烦的。虽然我们升级了 Math-Verify,让它能更好地处理这些怪格式 (后面会讲改进),但还是找了个备用方案: 用 Llama-3.3-70B-Instruct 当“裁判”,从被拒的答案里救回一些靠谱的。先把不完整或标准答案空的样本筛掉,只看格式 OK、答案框得清楚的,最后救回了 2.8 万道题。

我们给Llama3.3-70B-Instruct的指令是:

你是数学答案的检查员。给你一道题,你得对比标准答案和模型的最终答案,看看是不是一个意思,哪怕格式不一样。

题目:

{problem}

标准答案:

{answer}

模型答案:

{generation}

只看模型给的最终数学答案,别管这些差别:

- 格式 (比如 \boxed{} 和普通文本)
- 多选题形式 (比如 “A” 和完整答案)
- 坐标对或答案的顺序
- 等价的数学表达或符号差异
- 如果模型答案乱七八糟,就说“结果: 不确定”

先简单说两三句你的对比思路,然后给出结论,用这几种格式:

- “结果: 一样”
- “结果: 不一样”
- “结果: 不确定”

结合规则校验 (Math Verify) 和 LLM 判断,我们既保证了数据质量,又没牺牲规模。最终数据集有 22 万道题,推理过程都经过验证,是个训练推理模型的好资源。每道题多份答案也方便社区筛选更好的结果,或者根据 NuminaMath 的数据来源和题型再做调整。

数据集分两块:

  • default(9.4 万道题): SFT 微调后效果最好。
  • extended(13.1 万道题): 加了 NuminaMath 1.5 的其他来源,比如cn_k12,推理记录更多。但在这部分微调后效果不如default,可能是cn_k12的题太简单了。

对于多正确答案的题,我们还试了用奖励模型 (RM) 挑最好的。每道题如果 R1 给了好几个正确答案,我们去掉思考过程 (<think>…</think>),把问题和答案丢给打分,用 vLLM 跑。按分数排了个序,挑了第一名的答案放进训练集。可惜实验发现,这么挑跟随便选一个正确的没啥差别。以后可以试试评分时带上推理过程,别只看最终答案。

跟 DeepSeek-Distill-Qwen-7B 比比性能

我们用 5e-5 的学习率,在default数据集上微调了 Qwen2.5-Math-Instruct 三轮。为了把上下文长度从 4k 拉到 32k,我们把 RoPE 频率调到 300k。训练用的是线性学习率,前面 10% 是预热。下面是用比较、和的表现:

模型
MATH-500
AIME24
AIME25
DeepSeek-Distill-Qwen-7B
91.6
43.3
40
OpenR1-Qwen-7B
90.6
36.7
40
OpenThinker-7B
89.6
30.0
33.3

这版数据集只是个起点,社区还能再优化,比如用 DeepSeek R1 的拒绝采样法提高质量。

Math-Verify 升级了啥

我们在检查 Math-Verify 的结果时发现了一些问题,就做了大修。强烈建议大家升到最新版 (0.5.2),体验这些改进:

pip install math-verify==0.5.2

主要升级有:

  • 改进了纯文本答案的解析和验证 (比如和 算一样)。

  • 改进了答案列表的解析 (比如和 和 跟 等价)。

  • 修了个 bug,单个 LaTeX 里多个框的答案也能认了 (比如等于 {1,2})。

  • 加了有序元组。因为判断列表是元组还是集合非常困难,我们靠标准答案来定:

    • (1,2,3) ≠ {3,2,1}; 1,2,3 == {3,2,1}; {3,2,1} == {1,2,3}。
  • 支持标准答案的关系表达 (比如小于) 和预测的区间 (比如等价于)。

社区热点

这周社区从各种角度玩转了 GRPO,还有研究表明,只要 1000 个优质样本,就能让现有开源模型引发推理。

GRPO 的一些实践

  • nrehiew把 GRPO 用在 Qwen2.5-0.5B 基础模型上,在 GSM8k 测试中拿下 51% 的准确率,比 Qwen2.5-0.5B-Instruct 高了 10 个点。这成绩太亮眼,引发了大家对预训练中指令数据作用的。不过,把 GRPO 用到其他基础模型 (比如 Llama 3) 上还没啥大突破。发现,基础模型稍微提示一下就能自我反思,DeepSeek-R1 论文里的“开悟”可能更多是模型本身牛,而不是 RL 优化的功劳。
  • Unsloth 施展,让 15B 参数的模型只用 15GB 显存就能跑 GRPO ?。这下 Google Colab 免费也能玩了!
  • 的 Wing Lian 发现。
  • Alexander Doria 搞出了,这很酷,因为 GRPO 第一次公开跳出“可验证”领域。

测试表现

这周第一部分放出来了,有 15 道难题,是给高中生备战国际数学奥赛用的。过去一年,AIME 2024 是测 LLM 数学能力的主力,大家很期待 LLM 在新题上的表现:

  • 的研究人员测了一堆模型,发现远小于预期,只有 10-20 个百分点。

  • 但发现 AIME 2025 有几道题网上早就有了!这可能不小心泄了题,凸显了。

LLM 必须用自然语言推理吗?

一篇新挺有意思,用循环语言模型在潜在空间隐式推理,能扩展测试时的计算。这跟在潜在空间训语言模型有点像,但现在用在了推理上。好处是效率高,不用生成一堆“思考”token 也能出好成绩。

小而精的推理数据成趋势?

DeepSeek R1 用 60 万条推理记录搞蒸馏,但最近研究发现,不用海量训练,少量精心挑的样本也能让模型学会复杂推理。

比如数据集,只有 1000 道数学题,推理过程从蒸馏而来,挑题时看重难度、多样性和质量。作者用它微调 Qwen2.5-32B-Instruct,在竞赛数学测试中比 OpenAI 的 o1-preview 高了 27%。

另一个数据集更狠,只用 817 个样本就在 AIME 和 MATH 上表现抢眼。作者猜,如果模型预训练时已经学了很多领域知识,可能几百个好例子就够让它推理开窍。

控制思维链长度: 预算强制和奖励设计

微调的 Qwen2.5-32B-Instruct 这么牛,一个关键是预算强制。这招能在测试时调整推理时间,要么加个“Wait”让它多想,要么加个结束标记让它停。作者发现,模型有测试时扩展性: 多给点思考时间,数学测试的准确率就涨。

类似地,(Yeo 等人) 也研究了思维链 (CoT) 长度对效果的影响。他们搞了个 **余弦奖励 (Cosine Reward)**,正确答案鼓励短 CoT,错的推长 CoT,稳住了 RL 训练,尤其在上下文长度有限、回答容易爆炸时。还有个重复惩罚,模型要是为刷奖励在难题上重复废话,就罚它,逼它好好解题。

下一步干啥?

GRPO 在 TRL 里跑得挺顺,我们正在大干一场实验,看看哪些超参数和奖励函数最管用。想知道进展,可以去瞧瞧,下次更新会写详细报告!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ