新智元
整合编辑:太平洋科技
发布于:2025-03-13 16:08
Hugging Face的Open R1再度升级,新发布的7B和32B OlympicCoder在IOI挑战上超越了一众前沿模型。这款完全开源的DeepSeek-R1版本展现了惊艳性能,在CodeForces-CoTs数据集和IOI难题测试下表现出色。
|
Hugging Face的Open R1再度升级! Hugging Face的Open R1是一个社区驱动的项目,目标是创建一个完全开源的DeepSeek-R1版本。目前,已有模型如OlympicCoder-32B和数据集如codeforces发布,显示了项目的进展。 最新发布的7B和32B OlympicCoder,在IOI挑战上超越了一众前沿模型,比Claude 3.7 Sonnet还猛。 OlympicCoder已经成了代码推理界的「肌肉猛男」,有些模型规模比它大100倍,结果还是被它按在地上摩擦……
模型在2024年国际信息学奥林匹克竞赛(IOI)50次提交中的表现 而这一切,得感谢Open R1的一系列骚操作: CodeForces-CoTs数据集:近10万个高质量样本,提炼自DeepSeek-R1,专门训练C++和Python代码生成。 IOI基准测试:拿2024年国际信息学奥林匹克竞赛(IOI)的难题来虐AI,看看谁是真正的「代码战神」。 提交策略优化:模拟OpenAI的策略,让模型最大化得分,像真正的选手一样参加比赛。 我们来扒一扒它是怎么炼成的,以及Hugging Face团队踩过的那些坑。 (小心,可能会让你怀疑人生:AI连刷题都比你强了……) CodeForces-CoTs数据集 CodeForces作为编程竞赛的热门平台,其中的算法优化问题极具挑战性。 这使其成为一个有趣的数据集,用于提升和测试模型的代码推理能力。 此次发布的open-r1/codeforces包含了超过1万个问题,时间跨度从最初的竞赛一直到2025年,其中约3000个问题是DeepMind和CodeContests中没有的。 对于约60%的问题,数据集提供了竞赛组织者撰写的解题思路,这对理解原理至关重要。 同时,每个问题都从官方网站提取了3个正确解决方案。 open-r1/codeforces-cots数据集更是一大亮点,其中包含了DeepSeek-R1针对这些问题生成的近10万个思维链(CoT)样本,用C++和Python两种语言呈现。 研究团队在这个数据集上对Qwen2.5 Coder Instruct 7B和32B进行微调,得到了OlympicCoder-7B和OlympicCoder-32B模型。 代码可验证性危机虽然DeepMind和其他竞赛数据集都包含测试用例,并声称是可验证的,但这些通常只是竞赛网站上全套测试用例的一小部分。 特别是CodeForces,显示的测试用例上限约为500个字符,这意味着这些数据集只包含符合此限制的较短、较简单的测试用例。 例如,研究者选取了7个问题,R1生成的解决方案通过了全部公开测试用例,并将它们提交到CodeForces平台:
尽管这些方案通过了较短的测试,但均未通过完整测试集。这凸显了对新的可验证的编程竞赛数据集的需求。 国际信息学奥林匹克竞赛(IOI) 国际信息学奥林匹克竞赛(IOI)是全球顶尖的编程竞赛。 完整测试集遵循宽松的(CC-BY)许可发布,使其成为测试代码推理能力的理想数据集。 如果你熟悉美国数学邀请赛(AIME),IOI就相当于数学奥林匹克竞赛(IMO)的编程版,参加AIME的最优秀学生才有资格受邀参加IMO。 IOI的问题设计独特,每个问题细分为多个子任务,各子任务输入约束不同。 参赛者要解决子任务,提交的方案须在严格时限内通过所有测试用例。 最后子任务通常是完整复杂问题,而前面子任务相对简单、约束更多,参赛者常针对特定子任务拿部分分数,竞赛中得满分十分罕见。 团队整理了2020-2024年的IOI问题,将它们拆分为子任务,使每个提示都能解决一个特定的子任务,便于有针对性地训练和评估。 他们还在open-r1/ioi和open-r1/ioi-test-cases中发布了处理后的问题陈述、评分检查文件及测试用例,同时创建了自定义代码,用于运行解决方案并按IOI规则评分,代码可在https://github.com/huggingface/ioi上获取。 研究者对2024年IOI上40多个领先的推理模型进行了全面评估。 每个问题的提交次数限制为50次,采用与OpenAI类似的选择策略模拟得分。 评估结果显示,OlympicCoder模型表现出色。 OlympicCoder-32B在50次提交限制下,超越了o1-mini、DeepSeek-R1、Claude-3.7-Sonnet-thinking等模型。
模型在2024年国际信息学奥林匹克竞赛(IOI)50次提交中的表现 提交策略这种提交策略可能不利于非推理模型,像OlympicCoder-32B-Instruct和Qwen-2.5-Coder-32B-Instruct。 为模拟真实竞赛,团队采用类似OpenAI用于o1-ioi的循环提交策略。 首先提交针对最后一个子任务的解决方案,然后是倒数第二个子任务的方案,以此类推,只有选定提交时才评估解决方案。 若子任务已被之前选定的提交解决,就跳过针对该子任务的提交。 在每个目标子任务里,倾向于选择更长的生成内容,这对推理模型合理,对其他模型不太适用。 如果取消50次提交限制,并评估生成的所有提交,会得到以下结果:
国际信息学奥林匹克竞赛(2024年)无提交限制时模型的表现 基于R1轨迹训练的经验教训 在创建OlympicCoder模型时,研究者进行了大量SFT实验,以了解用于CodeForces数据集的各种筛选条件的作用。 发现open-r1/codeforces-cots的以下子集表现最佳:
请注意,这里只关注了C++解决方案,融入Python解决方案可能进一步提高性能。 用LiveCodeBench作为模型的测试平台,然后将表现最佳的checkpoints用于更具挑战性的IOI基准测试。 研究者测试了各种超参数配置来训练模型,最终确定如下: 模型:Qwen2.5 Coder Instruct 7B和32B 轮数:10 有效批大小:128 学习率:4e-5 调度器:余弦衰减至峰值学习率的10% 上下文长度:7B为32,768个token,32B为22,528个token 样本打包会损害推理性能样本打包是一种在训练中常用的加速方法,它将训练样本连接成大小相等的块,无需填充token。
打包后,样本可能会跨块边界重叠。不过,要是大部分样本比块小很多,这种重叠影响不大。 然而,对于从R1提取的推理轨迹,这可能会带来负面影响。 因为很多轨迹长,答案被截断的可能性高。这就导致训练时,它很难关注长上下文信息,尤其是问题和答案被分到不同块的时候。 如下图所示,打包会严重损害模型的性能。用打包时,模型几乎解不出LiveCodebench里的题;不用打包,性能在几个训练周期后趋于平稳。
这种差异可能是由于训练集仅包含C++解决方案,而LiveCodeBench仅评估Python的性能。 尽管如此,在所有分析过的数据集里,打包的效果都更差。 用较大的学习率获得最佳表现在用Qwen进行的大多数SFT实验中,2e-5的学习率通常足以获得强大的性能。 但是,当将带有推理数据的SFT用于现有指令模型时,将学习率大幅提高到4e-5,性能会显著提升。 如下图所示,学习率每提高一倍,在LiveCodeBench上的得分就会提高近10分!
纳入解题思路无助于提升性能在创建open-r1/codeforces-cots数据集中的solutions_w_editorials子集时,原以为给R1输入问题及解答,能获得更好的推理轨迹。 但出人意料的是,结果并非如此。训练时,直接从问题描述采样,反倒让性能有了一定的持续提升。
用 |
IT百科
网友评论
甄选好物
