image-20250212124819911

摘要


我们展示了应用于大语言模型(LLM)的强化学习能够显著提升在复杂编码和推理任务上的性能。此外,我们将两个通用推理模型——OpenAI o1 和 o3 的早期检查点——与一个特定领域的系统 o1-ioi 进行比较,后者使用为参加 2024 年国际信息学奥林匹克竞赛(IOI)而手工设计的推理策略。我们使用 o1-ioi 参加了 2024 年 IOI 的现场比赛,并使用手工制作的测试时策略,placed in the 49th percentile。在放宽比赛限制的条件下,o1-ioi 获得了金牌。然而,在评估像 o3 这样的后期模型时,我们发现 o3 在没有手工制作的特定领域策略或放宽限制的条件下获得了金牌。我们的研究结果表明,尽管像 o1-ioi 这样的专门流程产生了可靠的改进,但扩展的通用 o3 模型超越了这些结果,而无需依赖手工制作的推理启发式方法。值得注意的是,o3 在 2024 年 IOI 上获得了金牌,并在 [CodeForces]上获得了与精英人类竞争者相当的评分。总的来说,这些结果表明,扩展通用强化学习,而不是依赖于特定领域的技术,为在推理领域(如Competitive Programming)中实现最先进的 AI 提供了一条稳健的道路。

介绍

Competitive Programming被广泛认为是评估推理和编码能力的一个极具挑战性的基准。解决复杂的算法问题需要高级的计算思维和问题解决技能。此外,这些问题也是可以客观评分的,使其成为评估 AI 系统推理能力的理想试验平台。最近关于使用大语言模型进行程序合成的研究表明,即使是参数规模从 2.44 亿到 1370 亿的相对通用的模型,也可以从自然语言指令生成简短的 Python 脚本。重要的是,性能随着模型规模的增加呈对数线性增长,并且微调可以显著提高准确性。与此同时,Codex,一个早期以代码为中心的大语言模型,擅长 Python 程序生成,并为 GitHub Copilot 提供支持。进一步的进展来自 AlphaCode,它使用大规模代码生成和推理时的启发式方法来解决Competitive Programming任务,以及随后的 AlphaCode2,其改进使 AlphaCode 解决的问题数量几乎翻倍,并使其在 [CodeForces]平台上达到第 85 个百分位。在选择前 10 个提交的解决方案之前,两个 AlphaCode 系统都使用了大规模采样,每个问题最多生成一百万个候选解决方案,并采用手工设计的测试时策略。

自那以后,在利用强化学习来提高大语言模型(LLM)的推理能力方面取得了显著进展。这促使了大型推理模型(LRM)的出现:这些语言模型通过强化学习进行训练,以“推理”和“思考”延长的思维链。特别是,OpenAI 的 o1 及其即将发布的继任者 o3 使用思维链推理来处理复杂的任务,如数学和编码。

DeepSeek-R1 和 Kimi k1.5 的工作分别说明了学习思维链如何提高在数学和编程挑战中的表现。一个悬而未决的问题是,领域特定的、手工设计的推理策略与模型自主生成和执行的学习方法相比如何。我们有三个系统可以阐明这个问题:o1、o1-ioi 和 o3 的早期版本。OpenAI o1 是第一个大型推理模型,它使用通用方法来提高编程性能。在此基础上,o1-ioi 是一个经过微调的系统,专门为参加 2024 年国际信息学奥林匹克竞赛(IOI)而设计,并使用了类似于 AlphaCode 系统中使用的测试时策略。这种专业化导致在 2024 年 IOI 和 CodeForces 平台等Competitive Programming平台上的性能得到了显著提高。

随后的进展导致了 o3 的开发,它极大地提高了 AI 模型的推理能力。与 o1-ioi 或 AlphaCode 不同,o3 不依赖于人类定义的特定于编码的测试时策略。==相反,我们发现复杂的测试时推理策略自然地从端到端强化学习中涌现出来==,从而在Competitive Programming基准测试中实现了前所未有的性能。

本报告概述了推理在编码任务(例如竞技编程)中的重要性、OpenAI 的大型推理模型在编程能力方面的进展,以及我们在各种竞技编程和编码基准测试上的评估方法和结果。

OpenAI o1

我们从 OpenAI o1 开始,这是一个使用强化学习训练的大语言模型,旨在解决复杂的推理任务。通过在回答之前生成一个扩展的内部思维链,o1 类似于一个有条不紊地逐步解决具有挑战性问题的人。强化学习改进了这个思维链过程,帮助模型识别和纠正错误,将复杂的任务分解为可管理的部分,并在一种方法失败时探索替代的解决方案路径。这些上下文推理能力大大提高了 o1 在各种任务中的整体性能。

此外,OpenAI o1 经过训练可以使用外部工具,特别是用于在安全环境中编写和执行代码。[^2] 这种能力使 o1 能够验证其生成的代码是否可以编译、通过提供的测试用例以及满足其他正确性检查。通过测试和改进其输出,o1 在单个样本的过程中迭代地改进其解决方案。

[CodeForces] 基准测试

[CodeForces]是一个举办在线竞赛的编程竞赛网站。它在国际上具有很强的竞争力,并且经常有世界上顶尖的竞技程序员参与。 为了评估我们模型的竞技编程能力,我们模拟了 [CodeForces]竞赛,模拟条件与真实比赛高度相似。 这包括使用每个问题的完整测试套件,并对解决方案强制执行适当的时间和内存限制。

我们的评估侧重于 2024 年和 2023 年 12 月的 Division 1 竞赛,以确保所有测试竞赛都在预训练和强化学习 (RL) 的数据截止日期之后进行。 此外,我们进行了一项污染检查作为健全性验证,利用 OpenAI 嵌入 API 来验证测试问题在训练期间是否未被见过。

image-20250212131043716

图1

我们比较了 o1 与一个非推理的大语言模型 (gpt-4o) 和一个早期的推理模型 (o1-preview)。图1显示,o1-preview 和 o1 的表现均显著优于 gpt-4o,突显了强化学习在复杂推理方面的有效性。o1-preview 模型在 [CodeForces] 上的评分为 1258(第 62 百分位),高于 gpt-4o 的 808(第 11 百分位)。进一步的训练将 o1 的评分提升至 1673(第 89 百分位),为 AI 智能体在Competitive Programming领域的性能树立了新的标杆。

OpenAI o1-ioi

在 OpenAI o1 的开发和评估过程中,我们发现增加强化学习(RL)计算量和测试时推理计算量都能持续提高模型性能。

image-20250212131101497

图2

如图2所示,扩展强化学习训练和测试时推理带来了显著的提升,突出了优化这两个计算维度以将性能推向超出传统大语言模型预训练的重要性。

基于这些见解,我们创建了 o1-ioi 系统,用于参加 2024 年国际信息学奥林匹克竞赛(IOI)。除了针对编码任务的持续强化学习训练外,o1-ioi 还结合了专为算法竞赛设计的专业测试时推理策略。

Coding RL Fine-tuning

我们的第一步扩展了 OpenAI o1 的强化学习阶段,专注于编码任务。 通过将额外的训练计算资源投入到编程问题中,我们增强了模型规划、实现和调试更复杂解决方案的能力。 具体来说:

  1. 我们从 OpenAI o1 检查点恢复了 RL 训练。
  2. 我们特别强调具有挑战性的编程问题,帮助模型改进 C++ 生成和运行时检查。
  3. 我们引导模型以 IOI 提交格式生成输出。

这种对编码的额外关注使得 o1-ioi 能够在推理期间编写和执行 C++ 程序。 该模型通过迭代运行和改进解决方案来提高其推理能力,从而加强其编码和解决问题的能力。

o1-ioi Test-time Strategy

从宏观层面来看,我们将每个 IOI 问题分解为若干个组成子任务,从 o1-ioi 中为每个子任务抽取 10,000 个解决方案样本,然后采用基于聚类和重新排序的方法来决定从该集合中提交哪些解决方案。

问题建模

对于 o1-ioi,我们选择尝试分别解决每个问题的各个子任务,因为 IOI 的评分是基于子任务进行的,并且给予每个参赛者在每个子任务的所有尝试中的最高分。 为了做到这一点,我们将每个 IOI 问题分解为它的组成子任务(使用每个问题的评分指南中列出的划分)。 这是通过简单地为每个子任务创建一个文档版本来完成的,该文档版本删除了有关其他子任务的信息。

聚类

我们基于生成解在模型生成的测试输入上的输出来对生成解进行聚类。对于每个子任务,我们首先提示模型根据问题规范和子任务,使用 C++ 编写随机测试输入生成器。我们使用这些生成器来生成 256 个随机测试输入。为了确保这些测试输入的有效性,我们接着提示模型使用 C++ 编写测试输入验证器,以检查给定的测试输入是否满足子任务的约束条件。最后,我们接受至少通过 75% 验证器的测试输入。对于每个子任务,我们生成 256 个这样的随机测试用例输入,然后基于它们在这些测试用例上的输出来进行聚类。在所有测试输入上输出完全一致的程序将被归入同一个集群。

重新排序

接下来,我们实现了测试时计算策略中的重新排序核心部分。 我们基于以下几点对每个解决方案进行评分:

  • 依据学习到的评分函数,评估解决方案的质量。
  • 模型生成的测试输入上出现的错误。
  • 未能通过提供的公开测试用例。

每个集群获得的分数定义为:该集群所包含样本的平均分数,减去每次从该集群尝试提交样本时所受到的惩罚。 所有这些惩罚的权重,都是通过对往年国际信息学奥林匹克竞赛 (IOI) 问题的解决方案进行随机搜索来调整的,通过直接模拟提交过程来实现。

提交

然后,我们以循环赛的方式,在各个子任务上提交最多 50 个(人类竞争者允许的最大数量)解决方案,从最难的子任务开始。对于每个给定的子任务,我们选择排名最高的集群中排名最高的解决方案。当一个子任务被解决(即获得最高分)时,我们停止在该子任务上进行采样。当向任何子任务提交解决方案时,如果该子任务是已解决子任务的严格超集,我们会过滤掉任何与已解决的组成子任务的测试输入输出不匹配的解决方案。这使我们能够通过排除那些几乎肯定会在较容易的子任务上失败的解决方案,从而快速缩小较难子任务上的候选解决方案范围。

[CodeForces] 基准测试

我们再次模拟了 [CodeForces] 竞赛,以评估 o1-ioi 的编码能力,完全模拟了竞赛条件,包括每个问题的完整测试套件以及针对解决方案的适当时间和内存限制。

image-20250212131122921

图3

3显示 o1-ioi 的 [CodeForces] 评级达到 1807,超过了 93% 的竞争者 — 表明通过对编码任务进行额外的强化学习训练,能力得到了明显的提高。当我们应用一个简单的过滤器,拒绝任何未能通过公共测试的解决方案时,评级上升到 2092(第 96 个百分位)。我们完整的测试时策略进一步提升了性能,达到了 2214 的评级(第 98 个百分位)。这些结果证实,特定领域的强化学习微调与高级选择启发法相结合可以显著提高竞技编程的结果。

IOI 2024 现场比赛

image-20250212131140801

图4

o1-ioi 系统在 2024 年国际信息学奥林匹克竞赛 (IOI) 中,以与人类参赛者相同的条件参加了比赛。它有十个小时的时间来解决六道具有挑战性的算法问题,并且每个问题最多允许提交 50 次。我们在图4中展示了结果。

在比赛期间,我们的系统为每个问题生成了 10,000 个候选解决方案,并使用我们的测试时选择策略选择了 50 个提交。该策略根据提交在 IOI 公共测试用例、模型生成的测试用例和学习的评分函数上的表现来优先考虑提交。该模型获得了 213 分,在比赛中排名第 49 个百分位。

相比之下,选择 50 个随机提交的平均得分仅为 156 分,这表明在比赛的约束条件下,选择策略贡献了近 60 个额外积分。

当每个问题的提交限制放宽到 10,000 个时,模型的性能显著提高。在不采用任何测试时选择策略的情况下,它获得了 362.14 分,超过了金牌门槛,并展示了该模型的潜力。

基于从 o1 和 o1-ioi 中获得的洞见,我们探索了仅通过强化学习 (RL) 训练所能达到的极限,而不依赖于人工设计的测试时策略。尽管 o1-ioi 通过将额外的 RL 微调与精心设计的测试时推理流程相结合,取得了显著的成果,但其成功很大程度上依赖于人为干预来定义和实施这些策略。我们试图进一步探索,通过 RL 训练的模型,在能够自主开发和执行其自身的测试时推理策略的情况下,所能达到的性能极限。为此,我们获得了访问 o3 早期检查点的权限,以评估其在Competitive Programming任务中的表现。

[CodeForces] 基准测试

我们在 [CodeForces] 基准测试集上评估了 o3 模型的一个早期检查点,其中每个提示词都包括问题描述、约束条件和所有可用的示例测试用例。

image-20250212131156316

图5

如图5所示,进一步的 RL 训练相比 o1 模型和完整的 o1-ioi 系统,都带来了显著的改进。 尤其值得注意的是,从 o1-ioi 模型到 o3 模型的过渡,使得评级从 2214(98% 百分位)提升至 2724(99.8% 百分位),这反映了在竞技编程性能上的巨大飞跃。 这一改进证明了 o3 模型能够以更高的可靠性解决更广泛的复杂算法问题,使其能力更加接近 [CodeForces] 上的顶尖人类竞争者。

image-20250212131212827

图6

除了其显著提升的问题解决能力之外,我们观察到 o3 展现出更具洞察力和更深思熟虑的思维链。该模型不仅编写和执行代码,针对公共测试用例验证其解决方案,而且还基于这些验证结果来改进其方法。图6展示了 o3 发现的一种高级测试时策略:对于验证至关重要的问题,它通常会编写简单的暴力破解解决方案——以牺牲效率为代价来确保正确性——然后将其输出结果与更优化的算法实现进行交叉验证。这种自我强制的验证机制使 o3 能够发现潜在错误,并提高其解决方案的可靠性。

IOI 2024 基准测试

尽管我们使用 o1-ioi 参加了 IOI 2024,但我们回顾性地评估了 o3 在相同的六个 IOI 2024 问题上的一个检查点,以比较相同条件下的性能。与 o1-ioi 一样,我们严格遵守官方 IOI 规则,该规则允许每个问题最多提交 50 次。

IOI 2024 上的 o3 结果是由比 [CodeForces] 结果更新版本的 o3 产生的,并且包含了更多更新的训练数据。IOI 2024 发生在模型的训练截止日期之后,并且我们还通过搜索确认了 IOI 测试问题没有被训练集污染。

采样方法。

与 o1-ioi 为每个子任务分别采样解决方案不同,我们在评估 o3 时采用了不同的方法:从包含原始问题陈述的单个提示词中采样。此外,虽然 o1-ioi 为每个子任务生成 1 万个解决方案,但对于 o3,我们每个问题仅采样 1 千个解决方案。

两种模型之间的选择策略也不同。o1-ioi 依赖于复杂、人为定义的测试时策略来选择解决方案,而 o3 遵循更简单的方法。具体来说,我们从每个问题的 1,024 个样本中选择测试时计算量最高的 50 个解决方案。尽管采用了这种简化的方法,o3 仍然产生了强大的解决方案,能够覆盖许多(如果不是全部)子任务——而无需针对特定子任务的提示词、手动分区或复杂的提交策略。

image-20250212131233319

图7

结果。

图7 展示了最终得分。IOI 评分系统是基于子任务的,在 2024 年的比赛中总分最高为 600 分。金牌的门槛大约是 360 分。主要结果包括:

  • o1-ioi 在 50 次提交中获得 213 分,通过 1 万 (10K) 次提交提高到 362.14 分,略高于金牌的及格线。
  • o3 获得了 395.64 分,即使在 50 次提交的限制下也超过了金牌的门槛。

这些结果表明,o3 的表现优于 o1-ioi,而无需依赖 IOI 专用、手工打造的测试时策略。相反,在 o3 训练期间涌现出的复杂测试时技术,例如生成暴力破解解决方案来验证输出,可以作为充分的替代方案,并消除了 o1-ioi 所需的手工设计的聚类和选择流程。

总的来说,IOI 2024 的发现证实,仅靠大规模强化学习训练就可以实现最先进的编码和推理性能。通过独立学习生成、评估和改进解决方案,o3 超过了 o1-ioi,而无需依赖特定领域的启发式方法或基于聚类的方法。

软件工程评估

我们已经展示了推理如何显著提高大语言模型在Competitive Programming中的性能,在Competitive Programming中,解决复杂的算法挑战需要深入的逻辑思维。然而,我们也试图评估推理对现实世界编码任务的影响。为此,我们在两个数据集上测试了我们的模型:HackerRank Astra[^3]数据集和SWE-bench verified[^4]。

HackerRank Astra

HackerRank Astra 数据集包含 65 个面向项目的编程挑战,每个挑战都经过精心设计,旨在模拟真实的软件开发任务。这些挑战涵盖了包括 React.js、Django 和 Node.js 在内的一系列框架,从而能够获得构建功能和应用程序的实践经验。该数据集的独特之处在于,它侧重于评估在复杂、多文件、长上下文场景下的问题解决能力,这些场景与实际开发环境非常相似。与典型的竞技编程数据集不同,HackerRank Astra 不提供公开的测试用例,这使得我们无法依赖于手工设计的测试时策略。使用此数据集评估性能,可以揭示推理能力是否仅能提高解决算法问题的成功率,或者能否扩展到更实用、与行业相关的编程任务。

image-20250212131249388

图8

8展示了性能指标,例如 pass@1(首次尝试成功完成任务的概率)和平均分数(通过的测试用例的平均比例)。 结果表明了思维链推理的影响。与 GPT-4o 相比,o1-preview 模型在 pass@1 指标上提升了 9.98%,平均分数提升了 6.03 分。 通过强化学习进一步微调后,o1 的性能得到增强,pass@1 达到 63.92%,平均分数达到 75.80%,相比 o1-preview,pass@1 提升了 3.03%。 这些指标表明 o1 具有更强的推理能力和适应性,能够有效解决复杂的、与行业相关的软件开发任务。

SWE-Bench Verified

SWE-bench Verified 是 OpenAI 准备团队经过人工验证的 SWE-bench 子集,能够更可靠地评估 AI 模型解决现实世界软件问题的能力。这个经过验证的包含 500 个任务的集合,修复了 SWE-bench 的一些问题,例如对正确解决方案的错误评分、问题陈述不够明确以及单元测试过于具体。这有助于确保基准测试能够准确评估模型的能力。为了展示模型在这个软件任务上的性能,我们展示了 o1 系统卡中呈现的结果以及来自早期 o3 检查点的结果。由于 o1-preview 没有经过训练来使用代码执行或文件编辑工具,因此使用了在初始实现时性能最佳的开源框架 Agentless。与 IOI 不同,SWE-Bench Verified 没有采用专门的测试时策略。所有模型都有 5 次机会生成候选补丁。如果模型在 5 次尝试后仍然失败,则认为该尝试不正确。所有评估结果均在 3 次试验中取平均值。对于系统故障(例如,容器挂起或评分失败),我们不会惩罚模型,而是会重试这些部署,直到记录到有效的尝试。

image-20250212131303414

图9

如图9所示,o1-preview 在 SWE-bench 上的性能相比 gpt-4o 提升了 8.1%,展现了在推理能力方面的显著进步。通过在训练过程中应用额外的强化学习计算5,o1 实现了进一步 8.6% 的性能提升。值得注意的是,o3 的训练使用了远超 o1 的计算资源,因此获得了比 o1 高出 22.8% 的显著性能提升。这些结果强调了增强的推理能力不仅限于Competitive Programming挑战,也证明了其在软件工程等现实世界任务中的适用性。

结论

通过 o 系列大型推理模型,我们证明了思维链 (chain-of-thought) 推理是提高编码任务性能的强大策略,涵盖了从 [CodeForces] 和 IOI 等竞技编程基准,到 SWE-bench 和 Astra 等复杂软件工程挑战。 我们的研究结果表明,增加强化学习训练的计算量,并结合增强的测试时计算量,能够持续提升模型性能,使其几乎可以媲美世界上最顶尖的人类。 鉴于这些结果,我们相信 o 系列大型推理模型将在科学、编码、数学和众多其他领域,为 AI 解锁许多新的应用场景。

数据准备:

Borys Minaev, Ignasi Clavera, Lorenz Kuhn, Nat McAleese, Oleg Mürk, Szymon Sidor

IOI 模型训练:

Ahmed El-Kishky, Mostafa Rohaninejad

采样基础设施:

Andre Saraiva, Hunter Lightman, Vineet Kosaraju, Wenda Zhou

测试时策略:

Alexander Wei, Daniel Selsam, David Dohan, Francis Song, Ignasi Clavera, Max Schwarzer, Rhythm Garg, Rui Shu

评估:

Andre Saraiva, Ignasi Clavera, Lorenz Kuhn, Nat McAleese

领导力:

Jakub Pachocki, Jerry Tworek, Lukasz Kaiser, Mark Chen

o3 模型开发

o3 贡献者。

致谢:

我们衷心感谢 IOI 委员会允许我们的模型 o1-ioi 参加 2024 年国际信息学奥林匹克竞赛。同时,我们也特别感谢 IOI 技术委员会的 Wael Ewida 先生,他搭建的平台让我们能够像其他参赛选手一样提交解决方案。此外,我们还要感谢所有为沙盒代码执行环境的贡献者和维护者,包括 Taylor Gordon、Oleg Boiko、John Rizzo、Paul Ashbourne、Leo Liu、Alexander Prokofiev 和 Scottie Yan。感谢 Chris Orsinger 和 Michelle Fradin 在数据方面所做的贡献。最后,我们向所有参与 o1 和 o3 强化学习推理研究的同仁致以诚挚的谢意,他们的专注和专业知识对推动这项研究的进展至关重要。