新智元报道
编辑:编辑部 JYs
【新智元导读】o3一举拿下IOI 2024金牌,跻身全球TOP 18顶尖程序员之列!OpenAI团队48页新作揭秘原理:强化学习+Scaling测试时计算,让o3逐渐从「编程菜鸟」进阶到拿下奥赛金牌!
这次,o3在IOI 2024竞赛中取得惊人的394分(满分600),一举夺得金牌,实力相当于全球第18名赛级选手。
不仅如此,在世界级编程竞赛CodeForces上,o3位居全球Top 200之列,堪比人类顶尖程序员。
早在去年8月,OpenAI团队便开始全力准备让o系模型参赛IOI 2024,o1作为第一个代表上阵。
为了提升AI性能,他们当时用尽了几乎所有的技巧——微调、基于测试用例进行过滤、提示模型生成额外的测试用例、基于相似度对解决方案进行聚类、对聚类进行排序等等。
谁曾想,那个「苦涩的教训」依然和往常一样苦涩......
而o3却在无人启发的情况下,通过强化学习中自己摸索出了一些技巧,就比如,用随机测试用例对比暴力解来测试代码。
o3通过「思维链」来scaling测试时计算的能力是多么强大。 当我们检查思维链过程时,我们发现模型自主发展出了自己的测试时策略。其中一个有趣的策略是:模型会 1)先写一个简单的暴力解决方案,然后 2)用它来验证一个更复杂的优化方案。
这些关键发现,现如今已全部公开了。
本月初,OpenAI团队在arXiv发表了一篇,超全48页推理模型参与竞争性编程的研究。
论文链接:https://arXiv.org/pdf/2502.06807
论文中,他们展示了LLM如何从「菜鸟」进阶到全球Top程序员,甚至拿下了IOI金牌的全过程!
最新研究,重点强调了「推理」在编程任务中的重要性,详细呈现了o系推理模型在编程方面的进展,以及在各类竞赛编程、编码基准测试中评估方法和结果。
其中,关键亮点有以下四个:
展示了CoT推理的强大作用:从竞赛编程基准到复杂软件工程难题,编程表现都有提高
同时增加强化学习训练和测试时计算资源,能持续提升模型表现,几乎达到世界顶尖人类水平
利用CodeForces、IOI等多个权威平台及数据集,全面验证模型在竞赛和实际任务中的表现
发现LLM通过强化学习可超越特定领域模型,证实CoT推理提升模型性能
半个月前,奥特曼曾在采访中剧透,「OpenAI内部的一个推理模型已跃升至全球第50名,而且很可能在年底前霸榜」。
用不了多久,AI真的要踏平编程界了么。
AI拿下IOI金牌,卷趴顶尖程序员
竞技编程,被广泛认为是评估推理和编程能力的具有挑战性的基准。
从文档字符串合成程序,OpenAI早期某模型的正确率为28.8%,而GPT-3对这类问题甚至完全无能为力。
解决复杂的算法问题,需要高级的计算思维和问题解决技巧。此外,这些问题还具有客观的可评分性,使其成为评估AI系统推理能力的理想试验平台。
AlphaCode通过大规模代码生成和推理过程中的启发式方法,成功解决了竞赛编程任务。随后推出的AlphaCode2,几乎使AlphaCode的解决问题数量翻倍,并使其在CodeForces平台上跻身前15%。
论文地址:https://www.science.org/doi/10.1126/science.abq1158
这两种系统都在问题上大规模采样,最多生成一百万个候选解决方案,然后通过手工设计的测试策略选择前10个提交结果。
自那时以来,利用强化学习提升大规模语言模型(LLM)推理能力取得了显著进展。这促使了大规模推理模型(LRM)的出现:这些语言模型通过强化学习进行训练,以「推理」和「思考」复杂的思维链。
一个尚未解决的问题是,领域特定的手工设计推理策略与模型自主生成并执行的学习方法相比,效果如何?
为了解决这个问题,团队希望从o1、o1-ioi和o3的早期checkpoint中获得灵感。
OpenAI o1使用通用方法来提升编程性能。而o1-ioi是一个针对2024年国际信息学奥林匹克(IOI)竞赛进行微调的系统,采用了类似于AlphaCode系统的测试时策略。与o1-ioi或AlphaCode不同,o3不依赖于由人工定义的特定编码的测试时策略。
值得注意的是,o3在2024年IOI中赢得了金牌,并获得了与人类顶尖选手相当的CodeForces评级。
o1:推理模型先锋
o1通过强化学习训练的大型语言模型,利用CoT将复杂任务分解为易于处理的部分,用于处理复杂的推理任务。
此外,o1能够使用外部工具,特别是在安全环境中编写和执行代码,让o1能够验证生成的代码是否能编译、能否通过测试用例并满足其他正确性检查。
通过测试和优化其输出,o1在单次样本过程中不断改进其解决方案。
CodeForces是一个举办实时编程竞赛的网站,吸引了世界上顶尖的竞赛程序员。
为了评估模型在竞赛编程中的能力,模拟了与实际比赛条件非常相似的CodeForces竞赛,包括使用每个问题的完整测试集,并为解决方案设定适当的时间和内存限制。
o1与非推理模型gpt4o和早期的推理模型o1-preview进行了比较。如图1显示,o1-preview和o1的表现远远超越了gpt-4o,突显了强化学习在复杂推理中的有效性。
o1-preview模型在CodeForces上的评分为1258(第62百分位),相比之下,gpt-4o的评分为808(第11百分位)。进一步的训练使o1的评分提高到1673(第89百分位),为AI在竞赛编程中的表现设立了新的里程碑。
图1:在CodeForces上不同大语言模型OpenAI o1-preview、o1与GPT-4o的表现
o1-ioi:为竞赛「量身定制」
o1-ioi起源
在开发和评估OpenAI o1的过程中,发现增加强化学习(RL)计算量和测试时间推理计算量,都能持续提高模型性能。
图2:更多的强化学习训练/测试时计算资源提升了竞赛数学表现
基于这些洞察,研究团队创建了o1-ioi系统,用于参加2024年国际信息学奥林匹克(IOI)。
除了针对编程任务进行的持续强化学习训练,o1-ioi还结合了专门为竞赛编程设计的测试时推理策略。
编程任务的强化微调
第一步是扩展OpenAI o1的强化学习阶段,重点聚焦于编程任务。
通过将额外的训练计算资源投入到编程问题中,我们增强了模型规划、实现和调试更复杂解决方案的能力。具体来说:
从OpenAI o1的checkpoint恢复了强化学习训练
特别强调了具有挑战性的编程问题,帮助模型提升C++代码生成和运行时检查能力
引导模型生成符合IOI提交格式的输出
这种额外的编程训练使得o1-ioi在推理过程中能够编写并执行C++程序。通过反复运行和优化解决方案,模型在推理过程中不断改进其推理能力,从而增强了编程和解决问题的技能。
o1-ioi测试时策略
从整体上看,测试时策略将每个IOI问题分解成多个子任务。
对于每个子任务,从o1-ioi中采样了10,000个解决方案,然后采用基于聚类和重新排序的方法,来决定从这些解决方案中提交哪些结果。
问题设定
o1-ioi选择单独解决每个问题的各个子任务,因为IOI的评分是基于每个子任务进行的,并且每个选手的最终得分是所有子任务中最佳尝试的得分。
因此,将每个IOI问题分解为其组成的子任务(根据每个问题的评分指南中的划分)。具体做法是为每个子任务创建一个版本的文档,删除其他子任务的信息。
聚类
基于模型生成的测试输入的输出,对生成的解决方案进行了聚类。
对于每个子任务,首先让模型根据问题规格和子任务要求生成随机的C++测试输入生成器。研究团队使用这些生成器生成256个随机测试输入。
为了确保这些测试输入的有效性,接着让模型编写C++的测试输入验证器,检查每个测试输入是否满足子任务的约束条件。
最终,只接受通过至少75%验证器检查的测试输入。对于每个子任务,生成了256个这样的随机测试输入,并基于这些测试输入的输出进行了聚类。所有在所有测试输入上输出相同的程序将被归为同一类。
重新排序
接着,研究团队实现了测试时计算策略中的重新排序核心部分。根据以下几个方面,对每个解决方案进行了评分:
根据学习得来的评分函数评估解决方案的质量
在模型生成的测试输入上出现的错误
未通过提供的公共测试用例
每个聚类都被赋予了一个分数,该分数定义为该聚类中包含的样本的平均分数减去每次从该聚类提交样本时所受到的惩罚。所有这些惩罚的权重是通过对过去几年IOI问题的解决方案进行随机搜索调整的,具体方法是通过直接模拟提交过程来进行调优。
模拟提交
随后以轮询的方式提交了最多50个解决方案(这是人类参赛者允许的最大提交次数),从最难的子任务开始,覆盖所有子任务。
研究团队为每个子任务选择排名靠前的集群中的最高排名解决方案。
当某个子任务被解决(即获得了最高分)时,停止对该子任务的采样。
在提交任何严格包含已解决子任务的子任务的解决方案时,会过滤掉那些与已解决子任务的测试输入输出不匹配的解决方案,从而通过剔除几乎肯定会在较简单子任务上失败的解决方案,快速缩小较难子任务上的候选解决方案范围。
CodeForces基准测试
研究团队再次模拟了CodeForces竞赛,以评估o1-ioi的编程能力,竞赛条件与实际比赛高度一致,包括每个问题的完整测试集和适当的时间与内存限制。
图3显示,o1-ioi达到了1807的CodeForces评分,超越了93%的竞争者——这清楚地展示了通过在编程任务上进行额外强化学习训练所带来的改进。
当应用简单的筛选器,拒绝任何未通过公共测试的解决方案时,评分提高到了2092(第96百分位)。完整的测试时策略进一步提升了性能,达到了2214的评分(第98百分位)。
这些结果验证了领域特定的强化学习微调与先进的选择启发式方法相结合,可以显著提升竞赛编程的成果。
图3:通过对OpenAI o1进行编码任务的进一步训练并结合测试时策略,可以提升性能
CodeForces维护着一个全球活动参与者的排行榜。研究团队直接将o3在测试竞赛中的解题率与其他参赛者进行比较。
图10展示了这两种比较,展示了他们在参赛的竞赛中的平均解题率与他们的评分,并标出了关键绩效水平的评分阈值。
其中,每个点代表至少参加了8场测试竞赛的参赛者。水平线表示全球CodeForces活跃竞争者排行榜上的表现阈值。
尽管最顶尖的人类参赛者仍然远远强于o3,他们的解题率超过85%,但评分和解题率都表明,o3可以位列全球前200名活跃参与者之中。
图10:o3位居全球Top 200竞赛程序员之列
IOI 2024
o1-ioi系统在与人类参赛者相同的条件下参加了2024年国际信息学奥林匹克竞赛(IOI)。它有10小时的时间解决六个高难度算法问题,每个问题最多允许提交50次。
在竞赛期间,系统为每个问题生成了10,000个候选解决方案,并使用设计的测试时选择策略从中挑选50个提交方案。
该策略根据提交方案在IOI公开测试用例、模型生成的测试用例以及学习得到的评分函数上的表现进行优先级排序。该模型最终得分213分,位列竞赛的第49百分位。
相比之下,随机选择50个提交方案的平均得分仅为156分,这表明选择策略在竞赛的限制条件下额外贡献了近60分。
当每个问题的提交限制放宽到10,000次时,模型的表现显著提升。在不采用任何测试时选择策略的情况下,其得分达到了362.14分,超过了金牌门槛。
图4:o1-ioi在IOI 2024竞赛中的表现
o3:自主推理新SOTA
o3在o1和o1-ioi的基础上,进行了更具创新性的探索。它致力于仅依靠强化学习训练,摆脱对人工设计测试时策略的依赖,挖掘模型自主推理的极限。
研究人员获取了o3的早期checkpoint,在编程竞赛任务上对其进行评估。
在CodeForces基准测试中,o3的表现堪称惊艳。进一步的RL训练让o3相较于o1和o1-ioi有了质的飞跃。
o3的评分从o1-ioi的2214(98百分位)提升至 2724(99.8百分位),这一巨大的提升反映出o3在解决复杂算法问题的能力有了显著增强,可靠性更高,在CodeForces平台上的实力已经接近顶尖人类选手。
o3在推理过程中展现出更具洞察力和深度思考的思维链。
对于验证过程较为复杂的问题,o3会采用一种独特的策略:先编写简单的暴力解法,牺牲一定效率来确保正确性,然后将暴力解法的输出与更优化的算法实现进行交叉检查。
这种自我验证机制有效地帮助o3发现潜在错误,提高了解决方案的可靠性。
在2024年IOI基准测试中,研究人员对o3在相同的6个IOI问题上进行了回溯评估。o3采用了与o1-ioi不同的采样和选择策略。
o3从包含原始问题陈述的单个提示中采样,每个问题仅采样1000个解决方案,选择策略也更为简洁,即从1024个样本中选取测试时计算得分最高的50个解决方案。
即便采用如此简化的方法,o3依然能够生成强大的解决方案,覆盖大部分甚至全部子任务,而无需像o1-ioi那样依赖子任务特定的提示、手动分区或复杂的提交策略。
最终,o3在仅提交50次的情况下,得分达到395.64分,超过了金牌分数线,而o1-ioi在相同提交次数下仅得到213分,提交次数增加到10000次才超过金牌分数线。
这充分证明了o3无需依赖特定领域的启发式方法或基于聚类的复杂策略,仅靠大规模强化学习训练就能实现卓越的编码和推理性能。
编程中的「实战」表现
编程竞赛虽然能展示AI的能力,在实际的软件开发任务中,模型的表现又如何呢?
研究人员通过HackerRank Astra和SWE-bench Verified这两个数据集,对模型进行了进一步的测试。
HackerRank Astra数据集包含65个编码挑战,旨在模拟现实世界的软件开发任务。
这些挑战涵盖了React.js、Django和Node.js等多种框架,要求开发者在复杂的多文件、长上下文场景中解决问题,并且不提供公共测试用例。
测试结果显示,o1-preview相较于GPT-4o,首次尝试完成任务的概率(pass@1)上提高了9.98%,平均得分提升了6.03分。
经强化学习微调后的o1表现更优,pass@1达到63.92%,平均得分达到75.80%,相比o1-preview又有了进一步提升。这表明o1能够有效地应对复杂的软件开发任务。
SWE-bench Verified是OpenAI对SWE-bench进行人工验证后的子集,用于更可靠地评估AI模型解决实际软件问题的能力。
在这个数据集上,o1-preview相较于GPT-4o有8.1%的性能提升,经过更多强化学习训练的o1进一步提升了8.6%,o3相较于o1更是实现了22.8%的显著提升。
这些结果说明,LLM的强大推理能力不仅在编程竞赛中表现出色,在实际的软件工程任务中同样具有重要价值。
思维链推理对于提升编码任务的性能有巨大威力。
从CodeForces和IOI等编程竞赛基准测试,到SWE-bench和Astra等复杂的软件工程挑战,增加强化学习训练计算量和测试时计算量,能持续推动模型性能提升,使其接近甚至超越世界顶尖人类选手的水平。
参考资料:
https://x.com/arankomatsuzaki/status/1889522974467957033
https://arXiv.org/abs/2502.06807