Open R1 更新3 在代码领域使用R1的教训

在过去的几周里,我们主要致力于复现 DeepSeek-R1 配方中 competitive programming(代码推理)的部分。 从 R1 轨迹训练代码模型中获得的经验教训 在创建 OlympicCoder 模型时,我们进行了大量的 SFT 实验,以了解应用于 CodeForces 数据集的各种过滤器的作用。我们发现 open-r1/codeforces-cots 的以下子集给出了最佳的整体性能: solutions:R1 根据问题陈述生成的解决方案。 solutions_w_editorials:R1 根据问题陈述和解释(解释了正确的解决方案)生成的解决方案。 请注意,我们只关注了 C++ 解决方案,但如果混合使用 Python 解决方案,可能会进一步提高性能。我们使用 LiveCodeBench 作为我们模型的试验平台,然后通过更难的 IOI 基准测试运行性能最佳的检查点。我们测试了各种超参数配置来训练我们的模型,并确定了以下配置: 模型:Qwen2.5 Coder Instruct 7B 和 32B Epochs: 10 Effective batch size: 128 Learning rate: 4e-5 Scheduler: Cosine with a decay to 10% of the peak learning rate Context size: 32,768 tokens for 7B 和 22,528 tokens for 32B 下面我们分享一些从在 R1 推理轨迹上调整 Qwen2.5 Coder 模型中获得的经验教训。 ...

March 12, 2025 · 小茄墩

R1-Omni:基于强化学习的可解释全方位多模态情感识别

摘要 在这项工作中,我们首次将具有Verifiable Reward 的强化学习 (RLVR) 应用于 Omni-多模态大语言模型,用于情感识别。情感识别是一项视觉和音频模态都起着关键作用的任务。我们利用 RLVR 来优化 Omni 模型,从而显著提高其在三个关键方面的性能:推理能力、情感识别准确性和泛化能力。RLVR 的引入不仅提高了模型在分布内数据上的整体性能,而且在分布外数据集上进行评估时也表现出卓越的鲁棒性。更重要的是,改进的推理能力能够清晰地分析不同模态(特别是视觉和音频信息)在情感识别过程中的贡献。这为多模态大语言模型的优化提供了宝贵的见解。 介绍 随着 DeepSeek R1 的问世,强化学习 (RL) 的潜力越来越受到从事大语言模型研究人员的关注。DeepSeek R1 引入的一项关键创新是具有可验证奖励的强化学习 (RLVR),它利用基于规则的奖励机制,以高效且可靠的方式优化模型。 即使在训练数据有限的情况下,这种方法在增强大语言模型 (LLM) 的能力方面也表现出了显著的成功。最近的研究已将这种方法扩展到多模态大语言模型 (MLLM),进一步展示了其多功能性。 例如,R1-V 已应用于几何推理和视觉计数等任务,在这些任务中,使用 RLVR 训练的 MLLM 不仅表现出强大的推理能力,而且在领域内测试中实现了与监督微调 (SFT) 相当的性能,同时在分布外 (OOD) 评估中显著优于 SFT 模型。 在另一项值得注意的工作中,Visual-RFT 的作者验证了 RLVR 在图像分类和目标检测等经典计算机视觉任务中的有效性。 他们的结果表明,RLVR 在几乎所有类别中都始终优于 SFT,突显了其广泛的适用性和稳健性。 尽管取得了这些进展,但迄今为止,RLVR 与大语言模型(LLM)的集成主要局限于图像-文本模态。据我们所知,之前的研究尚未探索将 RLVR 应用于基于视频的多模态模型,这些模型整合了更丰富的信息来源,例如音频和动态视觉内容。为了弥合这一差距,我们首次探索了 RLVR 与视频全模态模型的结合,重点关注情感识别任务——在这个领域,视觉和音频模态都为准确的预测提供了关键线索。在这项研究中,我们以 HumanOmni 为基础,这是一个首个为以人为中心的场景理解而设计的开源全模态模型。通过将 RLVR 应用于 HumanOmni,我们旨在研究其在提高情感识别性能方面的潜力。我们的研究结果揭示了几个关键见解: 增强的推理能力:R1-Omni 展示了卓越的推理能力,能够更清楚地理解视觉和音频信息如何促进情感识别。 改进的理解能力:与 SFT 相比,RLVR 显著提高了情感识别任务的性能。 更强的泛化能力:RLVR 模型表现出明显更好的泛化能力,尤其是在分布外场景中表现出色。 基于可验证奖励的强化学习 $$ R(q, o) = \begin{cases} 1, & \text{如果 } o = \text{基本真值}, \\ 0, & \text{否则}. \end{cases} $$$$ \max_{\pi_\theta} \mathbb{E}_{o \sim \pi_\theta(q)} \left[ R_{\text{RLVR}}(q, o) \right] $$$$ R_{\text{RLVR}}(q, o) = R(q, o) - \beta \cdot \text{KL}[\pi_\theta(o|q) \| \pi_{\text{ref}}(o|q)]. $$ 这里,$\pi_{\text{ref}}$ 表示优化之前的参考模型,$R(q, o)$ 是可验证的奖励函数,$\beta$ 是一个超参数,用于控制最大化奖励和通过 KL 散度正则化保持与参考模型接近程度之间的权衡。 ...

March 11, 2025 · 小茄墩

Open R1 项目 第二周总结与展望

摘要 我们现在已经进入了 Open R1 项目 的第二周,该项目旨在重建 DeepSeek R1 缺失的部分——特别是训练管道和合成数据。 分享 OpenR1-Math-220k 的构建:这是我们首个用于数学推理的大规模数据集! 介绍社区在策划用于微调的小型、高质量数据集方面取得的一些令人兴奋的进展,以及关于如何在训练和推理阶段控制推理模型的思维链长度的见解。 OpenR1-Math-220k 数据集 DeepSeek R1 的主要优势之一是它能够通过知识蒸馏将高级推理能力迁移到较小的模型。 DeepSeek 团队通过生成 60 万个推理轨迹并微调一系列 Qwen 和 Llama 模型证明了这一点,表明直接从 R1 进行知识蒸馏可以在无需强化学习的情况下实现具有竞争力的推理性能。 值得注意的是,DeepSeek-R1-Distill-Qwen-7B 在 AIME 2024 上取得了 55.5% 的成绩,超过了像 QwQ-32B-Preview 这样更大的模型。 然而,用于蒸馏的推理轨迹尚未公开,这促使社区独立地重新创建类似的数据集。到目前为止,社区已经发布了多个开放数据集,包括 OpenThoughts-114k、Bespoke-Stratos-17k、Dolphin-R1 和 LIMO。 🐳 隆重推出 OpenR1-Math-220k,这是一个大规模的数学推理数据集,它利用 512 个 H100 在本地生成,且每个问题都对应多个答案。为了创建 OpenR1-Math-220k,我们与 Numina 展开合作,他们开发了广受欢迎的 NuminaMath-CoT 数据集的全新版本。 与现有数据集相比,OpenR1 数据集的新特性:80 万条 R1 推理轨迹:我们使用 DeepSeek R1 为 40 万道问题生成了两个答案。经过筛选的数据集包含 22 万道问题,并带有正确的推理轨迹。 本地运行 512 个 H100: 我们没有依赖 API,而是利用 vLLM 和 SGLang 在我们的科学集群上本地运行生成,每天生成 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 的性能。 通过展示可扩展的、高质量的推理数据生成,我们希望这个流程可以扩展到数学以外的领域,例如代码生成。 ...

February 11, 2025 · 小茄墩

使用 Unsloth 训练您自己的 R1 推理模型

今天,我们很高兴地介绍 Unsloth 中的推理功能!DeepSeek 的 R1 研究揭示了一个“顿悟时刻”,在这个时刻,R1-Zero 通过使用群体相对策略优化(GRPO)自主学习分配更多的思考时间,而无需人类反馈。 我们增强了整个 GRPO 过程,使其使用的 VRAM 比 Hugging Face + FA2 少 80%。这使您能够仅使用 7GB 的 VRAM 和 Qwen2.5(1.5B)重现 R1-Zero 的“顿悟时刻”。 尝试我们的免费 GRPO notebook:Colab 上的 Llama 3.1(8B) 有关其他模型(如 Phi-4)的 GRPO 笔记本,请访问我们的文档 💡 主要细节 使用 15GB VRAM,Unsloth 允许您将任何模型(最多 15B 参数)转换为推理模型,例如 Llama 3.1(8B)、Phi-4(14B)、Mistral(7B)或 Qwen2.5(7B) 最低要求:仅需 7GB VRAM 即可在本地训练您自己的推理模型。 Tiny-Zero 的出色团队展示了您可以使用 Qwen2.5(1.5B)实现自己的“顿悟时刻——但这需要 2xA100 GPU(160GB VRAM)。现在,使用 Unsloth,您只需一台 7GB VRAM 的 GPU 就可以实现同样的“顿悟时刻”。 之前,GRPO 仅支持完全微调,但我们已使其与 QLoRA 和 LoRA 一起工作。 请注意,这并不是微调 DeepSeek 的 R1 蒸馏模型或使用 R1 的蒸馏数据进行微调,Unsloth 已经支持。这是将标准模型转换为完整的推理模型,使用 GRPO。 ...

February 8, 2025 · 小茄墩

R1-Zero类训练中可能没有顿悟时刻 —— 一项初步研究

DeepSeek-R1-Zero最鼓舞人心的结果之一是通过纯强化学习(RL)出现的“顿悟时刻”。在顿悟时刻,模型学习到自我反思等新兴技能,这有助于它进行上下文搜索以解决复杂的推理问题。 在R1-Zero发布后的几天内,几个项目独立地在较小的规模(例如,1B到7B)上“再现”了R1-Zero类训练,并且都观察到了顿悟时刻,这通常伴随着响应长度的增加。我们遵循他们的设置来仔细审查R1-Zero类训练过程,并在本博客中分享以下发现: 💡 a) R1-Zero类训练中可能没有顿悟时刻。 相反,我们发现顿悟时刻(例如自我反思模式)出现在第0个周期,即基础模型。 b) 我们发现基础模型的响应中存在表面自我反思(SSR),在这种情况下,自我反思不一定导致正确的最终答案。 c) 我们通过RL对R1-Zero类训练进行了更深入的观察,发现响应长度增加的现象并不是由于自我反思的出现,而是RL优化良好设计的基于规则的奖励函数的结果。 1. 顿悟时刻出现在第0个周期 1.1 实验设置 基础模型。我们调查了由不同组织开发的广泛的基础模型系列,包括Qwen-2.5, Qwen-2.5-Math, DeepSeek-Math, Rho-Math, 和 Llama-3.x。 提示模板。我们直接使用在R1-Zero和SimpleRL-Zero中应用的模板来提示基础模型: 模板1(与R1-Zero相同) A conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within <think> </think> and <answer> </answer> tags, respectively, i.e., <think> reasoning process here </think> <answer> answer here </answer>. User: {Question} Assistant: ...

February 7, 2025 · 小茄墩

cuda层面实现kernel的库Liger Kernel

看到一个cuda层面实现kernel的库Liger Kernel,速度极快。 ==直接一行调用GRPO loss:== grpo_loss = LigerFusedLinearGRPOLoss() 以下为Liger Kernel库简介: Liger Kernel 是一个专门为大语言模型(LLM)训练设计的 Triton 内核集合。它可以有效提高多 GPU 训练的吞吐量 20%,并减少 60% 的内存使用。我们已经实现了与 Hugging Face 兼容的 RMSNorm、RoPE、SwiGLU、CrossEntropy、FusedLinearCrossEntropy 等功能,未来还会增加更多。该内核开箱即用,支持 Flash Attention、PyTorch FSDP 和 Microsoft DeepSpeed。 我们还添加了优化的训练后内核,为对齐和蒸馏任务节省高达 80% 的内存。我们支持 DPO、CPO、ORPO、SimPO、JSD 等多种损失函数。 只需一行代码,Liger Kernel 就可以提高 20% 以上的吞吐量,并减少 60% 的内存使用,从而实现更长的上下文长度、更大的批量大小和更大的词汇表。 注意: 基准测试条件:LLaMA 3-8B,批量大小 = 8,数据类型 = bf16,优化器 = AdamW,梯度检查点 = True,分布式策略 = FSDP1,使用 8 个 A100 GPU。 Hugging Face 模型在 4K 上下文长度时开始出现内存不足(Out of Memory, OOM),而 Hugging Face + Liger Kernel 可以扩展到 16K。 ...

February 5, 2025 · 小茄墩

s1: simple test-time scaling

摘要 test-time scaling 利用额外的测试时计算来提高性能。最近,OpenAI 的 o1 模型展示了这种能力,但没有公开分享其方法,这导致了许多复制尝试。 我们寻求实现测试时缩放和强大推理性能的最简单方法。首先,我们策划了一个==小型数据集 s1K==,其中包含 1000 个问题,并配有推理过程的轨迹,这些轨迹基于我们通过消融实验验证的三个标准:难度、多样性和质量。其次,我们开发了==预算强制方法来控制测试时计算,具体做法是强制终止模型的思考过程,或者在模型尝试结束时通过多次附加“等待”来延长其思考过程。这可以引导模型仔细检查其答案,通常会修正不正确的推理步骤==。在对 s1K 上的 Qwen2.5-32B-Instruct 大语言模型进行监督微调,并为其配备预算强制后,我们的模型 s1-32B 在竞赛数学问题上的表现比 o1-preview 高出 27%(MATH 和 AIME24)。此外,使用预算强制缩放 s1-32B 允许在没有测试时干预的情况下将其性能外推:在 AIME24 上从 50% 提高到 57%。 引言 DeepSeek R1 成功地复制了 o1 级别的性能,也采用了通过数百万样本和多个训练阶段的强化学习。然而,尽管有大量的 o1 复制尝试,但没有一个公开复制了清晰的测试时缩放行为。 因此,我们提出问题:==实现test-time scaling和强大的推理性能的最简单方法是什么?== 我们证明,仅使用1000个样本进行下一个 Token 预测训练,并通过一种简单的测试时技术(我们称之为预算强制)来控制思考时长,可以得到一个强大的推理模型,其性能随着测试时计算量的增加而扩展。具体来说,我们构建了 s1K,它包含1000个精心策划的问题,这些问题与从 Gemini Thinking Experimental 中提取的推理轨迹和答案配对。我们对一个现成的预训练模型在我们的少量数据集上进行了监督微调(SFT),仅需在 16 个 H100 GPU 上训练 26 分钟。训练后,我们使用预算强制来控制模型在测试时花费的计算量: (I) 如果模型生成的思考 Token 超过了期望的限制,我们将通过附加一个思考结束 Token 分隔符来强制结束思考过程。以这种方式结束思考会使模型过渡到生成答案。 (II) 如果我们希望模型在问题上花费更多的测试时计算量,我们会抑制思考结束 Token 分隔符的生成,而是将“等待”附加到模型当前的推理轨迹中,以鼓励更多的探索。 有了这个简单的配方——在 1000 个样本上进行 SFT 和测试时预算强制——我们的模型 s1-32B 表现出测试时扩展。此外,s1-32B 是最节省样本的推理模型,并且优于像 OpenAI 的 o1-preview 这样的闭源模型 。我们进行了广泛的消融实验,目标是 (a) 我们选择的 1000 个 (1K) 推理样本和 (b) 我们的测试时扩展。对于 (a),我们发现将难度、多样性和质量度量共同纳入我们的选择算法非常重要。随机选择、选择具有最长推理轨迹的样本或仅选择最大多样性的样本都会导致性能显著下降(在 AIME24 上平均下降约 ->30%)。在我们包含 59K 个示例的完整数据池(s1K 的超集)上进行训练,并不能比我们的 1K 选择提供实质性的提升。这突出了仔细数据选择的重要性,并呼应了先前关于指令微调的发现。对于 (b),我们为测试时扩展方法定义了期望,以比较不同的方法。预算强制导致最佳的扩展,因为它具有完美的控制性,并且具有清晰的正斜率,从而带来强大的性能。 ...

February 3, 2025 · 小茄墩

DeepSeek-R1技术报告详解

几个要点 数据层面 a. 大规模人工标注还是太麻烦了,==探索无需人工标注的方法== -> 跳过SFT直接上RL b. a步骤基础上加上一点人工标注作为==冷启动==,会好很多 -> 小小SFT一下,还是不错 训练层面 a. RL模型:==Group Relative Policy Optimization== b. 奖励:==准确性奖励+格式化奖励==。试过当红的过程奖励和MTCS,最终都放弃 c. 振奋人心的自我进化时刻和==顿悟==时刻! c. SFT冷启动一下效果会更好。也就是==pretrain+SFT+RLHF的pipeline依旧是上限最高的== d. 对小模型来说,==从大模型蒸馏依旧是天花板最高的方案== 模型开源 a. DeepSeek-R1-Zero: DeepSeek-V3-Base作为基础模型+RL b. DeepSeek-R1: DeepSeek-V3-Base+SFT冷启动+RL c. 一堆蒸馏的小模型 方法 概述 先前的研究严重依赖大量的监督数据来提升模型性能。在本研究中,我们证明了即使不使用监督微调(SFT)作为冷启动,通过大规模强化学习(RL)也可以显著提高推理能力。此外,通过加入少量冷启动数据,性能可以得到进一步提升。在接下来的章节中,我们将介绍: (1)DeepSeek-R1-Zero,它直接将强化学习应用于基础模型,无需任何SFT数据; (2)DeepSeek-R1,它从使用数千个长链式思考(CoT)示例进行微调的检查点开始应用强化学习。 (3)将DeepSeek-R1的推理能力提炼到小型密集模型中。 DeepSeek-R1-Zero: 基于基础模型的强化学习 收集监督数据非常费劲,希望探索没有任何监督数据情况下的能力,重点关注通过纯粹的强化学习过程进行的自我进化。 强化学习算法 Group Relative Policy Optimization 为了节省强化学习的训练成本,我们采用了组相对策略优化(GRPO),它放弃了通常与策略模型大小相同的评论家模型,而是从组得分中估计基线。 $$ \begin{equation} \begin{split} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}{[q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{old}}(O|q)]} \\ & \frac{1}{G}\sum_{i=1}^G \left( \min \left( \frac{\pi_\theta(o_i |q)}{\pi_{\theta_{old}}(o_i |q)} A_i, \text{clip} \left( \frac{\pi_\theta(o_i |q)}{\pi_{\theta_{old}}(o_i |q)}, 1 - \epsilon, 1 + \epsilon \right) A_i \right) - \beta \mathbb{D}_{KL}\left(\pi_{\theta} || \pi_{ref}\right)\right) , \end{split} \label{eq:GRPO-obj} \end{equation} $$$$ \begin{equation} \mathbb{D}_{KL}\left(\pi_{\theta} || \pi_{ref}\right) = \frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)}- \log\frac{\pi_{ref}(o_i|q)}{\pi_{\theta}(o_i|q)} - 1, \end{equation} $$$$ \begin{equation} A_i = \frac{r_i - {\mathrm mean(\{r_1, r_2, \cdots, r_G\})}}{{\mathrm std(\{r_1, r_2, \cdots, r_G\})}}. \end{equation} $$ ...

February 2, 2025 · 小茄墩

Group Relative Policy Optimization

从 PPO 到 GRPO 近端策略优化(PPO)是一种 actor-critic 强化学习算法,广泛应用于大语言模型(LLM)的强化学习微调阶段。具体而言,它通过最大化以下替代目标来优化大语言模型: 其中,$\pi_{\theta}$ 和 $\pi_{\theta_{old}}$ 分别是当前策略模型和旧策略模型,$q$ 和 $o$ 分别是从问题数据集和旧策略 $\pi_{\theta_{old}}$ 中采样的问题和输出。$\varepsilon$ 是 PPO 中引入的用于稳定训练的裁剪相关超参数。$A_t$ 是优势值,它通过应用广义优势估计(GAE)计算得出,基于奖励 $\{r_{\ge t}\}$ 和一个学习到的价值函数 $V_{\psi}$。因此,在 PPO 中,需要与策略模型一同训练一个价值函数。为了减轻对奖励模型的过度优化,标准做法是在每个 token 的奖励中添加来自参考模型的每个 token 的 KL 散度惩罚,即: 其中 $r_\varphi$ 是奖励模型,$ \pi_{ref} $ 是参考模型,通常是初始的 SFT 模型,而 $ \beta $ 是 KL 惩罚的系数。 由于 PPO 中使用的价值函数通常是与策略模型大小相当的另一个模型,因此会带来大量的内存和计算负担。此外,在强化学习(RL)训练期间,价值函数被视为计算优势以减少方差的基线。 然而,在大语言模型(LLM)的背景下,通常只有最后一个 Token 会被奖励模型赋予奖励分数,这可能会使在每个 Token 上都准确的价值函数的训练变得复杂。为了解决这个问题,我们提出了组相对策略优化(GRPO),它无需像 PPO 那样进行额外的价值函数近似,而是使用针对同一问题生成的多个采样输出的平均奖励作为基线。更具体地说,对于每个问题 $q$,GRPO 从旧策略 $ \pi_{\theta_{old}} $ 中采样一组输出 $ \{o_1, o_2, \cdots, o_G\} $,然后通过最大化以下目标来优化策略模型: ...

February 2, 2025 · 小茄墩