
2026年,一件此前从未发生过的事情发生了。

在国际信息学奥林匹克竞赛(IOI)2026赛场上,一套AI系统在和人类选手完全相同的条件下,用同样的时间限制、同样的提交次数、同样断网的比赛环境,拿到了535.4分,超过了当届人类最高分498.27分,也远远甩开了金牌线361.12分。
**这是AI系统第一次在IOI赛题上超过人类最高分的选手。**
如果你对编程竞赛不熟悉,可能很难体会这件事的分量。IOI是全球最顶尖的高中生编程竞赛之一,能站上这个赛场的选手,本身就是从各国层层选拔出来的天才。让一个AI在同样的规则下打败这些人里最强的那个,听起来更像是科幻电影的情节。
但NVIDIA的研究团队真的做到了,而且他们把整个过程写成了一篇论文,老老实实地把每一步是怎么走过来的都交代清楚。这篇文章想做的事情,就是把这条路给你捋顺了讲一遍。
**难在哪里**
先说说编程竞赛到底难在哪,为什么它是检验AI推理能力的一个特别好的试金石。
普通的代码生成任务,你让AI写个排序函数,写个爬虫脚本,这些任务大多有固定套路,训练数据里见得多了,模仿着写也能过关。但竞赛编程不一样。
竞赛评测*:把选手写的程序放到一堆事先准备好的测试用例上跑,程序必须在规定的时间和内存限制内,对每一个测试用例都给出正确答案,才能拿到相应的分数。
一道题目往往需要你先想清楚用什么算法思路,这个思路本身可能就是这道题目独有的、之前没见过的组合,然后你还要把这个思路精确地翻译成代码,还要考虑各种边界情况,还要保证程序跑得足够快不超时。这四件事任何一件出岔子,分数就没了。
这篇论文提到,在他们的模型接受专门训练之前,起点是相当尴尬的。基础模型Nemotron-3-Nano-30B-A3B在IOI 2025的题目上只能拿到130分,满分是600分,连铜牌线252分都摸不到。
也就是说,在这套系统被训练出来之前,一个规模不小的AI模型,面对世界顶级编程竞赛的题目,连及格线的一半都够不着。
这个起点低到什么程度呢?想象一个刚学会基础语法的编程新手,被扔进了奥数级别的编程考场,写出来的程序东一榔头西一棒子,能跑起来都算幸运。
**从头搭一条流水线**
研究团队的做法是搭建一条完整的训练流水线,从数据准备一直到最后交卷的策略,每一步都精心设计。
第一步是攒题目。
他们从16个地区性和国际性的竞赛家族里,收集了整整20多年的历史题目,再加上一些在线编程平台的题目,凑够了22000道题。<div id="zqzbapp.org2784"><div id="www.zqzbapp.org0756">这不是简单地把题目文本抓下来就完事,每一道题都要打包成一个可以真正运行、真正判分的完整环境,题目描述、限制条件、测试用例、参考答案,缺一不可。
可执行评测环境*:一个把题目描述、约束条件、测试数据和标准答案整合在一起,能自动运行并给出判分结果的独立系统。
为了保证这些环境靠谱,他们还专门用另一个AI模型生成大量候选解法去试跑,凡是评分结果不稳定、不一致的环境统统剔除。这一步听起来枯燥,但恰恰是整个工程里最容易被忽视却又最要命的一环。
如果这一步做得不扎实会怎样?
那就相当于你拿着一套标准答案有错的教辅资料去刷题,你以为自己进步了,其实学的是错的东西,练得越多偏得越远。研究团队显然很清楚这个风险,所以在数据源头上花了大力气。
值得一提的是,他们把IOI 2025、ICPC 2025和LiveCodeBench Pro这几个评测集里的所有题目,从训练数据里全部剔除并去重,确保后面测出来的成绩不是模型提前背过答案的结果。
**监督微调:站在巨人的肩膀上先学个大概**
有了题目库,下一步是让AI学会怎么解题。
这里用到的方法叫监督微调。
监督微调(SFT)*:用一批高质量的问题和标准答案,让模型模仿着学习正确的解题方式,是训练大模型的常见起步手段。
具体做法是,先请一个更强的教师模型DeepSeek-V4-Flash针对这22000道题生成解题过程,一共生成了120万条推理轨迹给小模型Nano用,47.7万条给大模型Ultra用。这些轨迹不只是最终代码,而是包含了完整的思考过程,怎么分析题目、怎么选算法、怎么写代码。
这批数据里还藏着一个巧思,叫自我修正轨迹,也就是让教师模型先给出一个解法,再让它自己审查、挑毛病、改进。这么做的目的,是提前让学生模型见识一下反复打磨、自我纠错的过程,为后面推理阶段要用到的迭代改进策略打个底。
结果立竿见影。
Nano模型经过三轮监督微调后,IOI 2025的单次得分从21.7%飙升到47.3%,ICPC竞赛从16.9%涨到46.7%,LiveCodeBench Pro从17.6%涨到70.7%。这一步贡献了整个训练流程里最大的一块提升。
有意思的是,绝大部分的进步都发生在第一轮训练里,后面两轮增量已经不明显,说明模型很快就把能学到的模式吸收得差不多了。
**强化学习:让AI在实战中摸爬滚打**
监督微调教会了模型怎么模仿,但模仿终究有天花板,因为老师给的答案本身也不是完美的。这时候就轮到强化学习登场了。
强化学习(RL)*:不再靠模仿标准答案,而是让模型自己反复尝试,根据尝试结果的好坏(比如代码能不能跑通、能不能拿分)给予奖励或惩罚,逐步调整自己的行为策略。
研究团队只在小模型Nano上做了强化学习,用的是一种叫GRPO的算法。
GRPO(组相对策略优化)*:一种强化学习训练方式,让模型针对同一道题生成一组不同的解法,比较这组解法之间谁更好,用相对好坏作为学习信号,而不需要单独的评分模型。
每一步训练,模型要对64道题各生成16个不同的解法,凑成1024次尝试,这些C++代码会被真的拿去编译、执行,跑对了给1分,跑错了给0分,非常干脆的赏罚机制。
这一步带来的提升相对温和,IOI分数从46.7%涨到48.5%,ICPC从47.3%涨到51.0%,LiveCodeBench Pro从70.7%涨到71.6%。
为什么强化学习的效果不如监督微调那么惊艳?研究团队给出了一个挺实在的解释:这种基于组内比较的强化学习,只有当同一组尝试里既有成功又有失败的案例时,才能提供有效的学习信号。换句话说,如果模型对一道题要么全对要么全错,这道题就没法从中学到东西,强化学习只能在模型能力的边界地带发挥作用,越往边界之外,信号越稀薄。
这就好比一个已经会开车的人,教练在旁边一直纠正细节,能帮你从合格提升到熟练,但没法把你从完全不会开车的状态一步教到熟练,前面那一大段路必须靠系统性的驾校课程,也就是监督微调,先把基础打好。
还有一个细节值得琢磨。研究团队专门做了个对比实验,同样是强化学习,但分别从没有微调的基础模型、以及微调了一轮、两轮、三轮后的模型开始训练。结果是,起点越好,强化学习最后能达到的高度也越高,从零开始的强化学习只能把成绩从21.7%拉到24.9%,远远不如站在监督微调基础上再练。**这说明强化学习不是万能的替代方案,而是一个放大器,你原本的底子有多厚,它才能放大出多少效果。**
**GenCorrect:一场自己给自己改卷子的接力赛**
前面讲的都是训练阶段的功夫,练好了内功还得在考场上把招式使出来。这就是这篇论文里最有意思的部分,一个叫GenCorrect的推理时策略。
IOI比赛规则里有个关键限制,每道题最多只能提交50次。这意味着AI不能像撒网一样无限次尝试,必须精打细算地用好这50次机会。
测试时计算(TTC)*:不改变模型本身的参数,而是在实际使用阶段花更多的计算资源去反复生成、筛选、修正答案,以此换取更好的最终结果。
GenCorrect的做法分成几轮,每一轮做四件事。
第一件事是生成,一次性并行生成多达200个候选解法,第一轮只给题目本身,后面几轮会把之前提交后的评测反馈也喂给模型。
第二件事是挑选,从200个候选里挑出10个最有代表性的提交。这里用到一个挺巧妙的多样性筛选算法,简单说就是先选出一个还不错的候选作为起点,然后每次都去找和已选中的这些候选差异最大的那个新候选,这样保证最后选出来的10个解法尽量覆盖不同的解题思路,而不是10个大同小异的变种。
第三件事是提交评测,把这10个解法真的交上去跑,IOI的反馈是按子任务给分的,比如一道题拆成5个子任务,反馈会告诉你这5个子任务各自得了多少分。
第四件事是复盘规划下一轮,系统会记住迄今为止每个子任务拿到过的最高分,然后挑出三份互补的参考解法喂给下一轮:整体表现最强的一份、针对目前差距最大的子任务的一份、以及在多个子任务上综合表现不错的一份。
这个设计的巧妙之处在于,它没有把整道题目硬性拆成子任务分别攻克,而是把所有子任务信息一次性交给模型,让模型自己判断该优先攻克哪一块。论文里提到,这种做法比以前那些逐个子任务单独处理的方案,需要的生成次数要少得多。
这套流程用一个比喻来说可能更好懂。想象你在参加一场需要反复提交作业的考试,但每次提交后阅卷老师只告诉你哪几道小题对了哪几道错了,不会告诉你正确答案是什么。**如果你每次都随便交10份差不多的答案,那你浪费的是宝贵的提交次数,因为这10份答案大概率会一起对一起错,你并没有真正探索到不同的解题路径**。但如果你每次都刻意交10份思路迥异的答案,再根据反馈精准判断哪个方向最有希望、还差在哪,你就能用同样的提交次数换来更多有效信息。GenCorrect本质上就是把这套"刻意求异、按反馈迭代"的策略工程化了。
效果确实惊人。Nano模型经过五轮GenCorrect,IOI分数从360.6分一路涨到468.2分,超过了金牌线438.3分。Ultra模型更夸张,从343.9分涨到502.0分。
在ICPC竞赛上也是类似的故事,Nano模型解题数从8.6题涨到9.4题,Ultra模型从9.0题涨到9.6题,都超过了当年金牌线的9题标准。不过论文也诚实地指出,ICPC的反馈是二元的,要么全对要么不算,信息量比IOI的分子任务打分要少,所以两个模型在ICPC上都更快就趋于平稳,不像在IOI上那样持续爬升。
**大模型和小模型,谁更划算**
论文里还有一组对比特别值得聊聊,那就是Nano(300亿参数,激活30亿)和Ultra(5500亿参数,激活550亿)这两个不同规模模型的表现差异。
**一个反直觉的结果是,Ultra模型只经过了监督微调,没有做强化学习,训练用的数据量也比Nano少得多,最终却在所有基准上都超过了训练更充分的Nano模型。**
这背后的原因,论文分析得挺清楚。Ultra本身的底子更强,起点更高,即使只喂了47.7万条数据、只练一轮,也能把IOI成绩从45.5%拉到50.7%。相比之下Nano虽然吃了120万条数据、练了三轮再加强化学习,但受限于模型规模本身的能力上限,最终成绩还是差了一截。
更有意思的是两个模型在GenCorrect阶段的表现差异。单次尝试时Ultra只比Nano领先2.2个百分点,折合到IOI分数上大概13分左右。但经过200次并行采样后,这个差距扩大到44分。经过完整五轮GenCorrect之后,Ultra反而反超了33.8分。
这说明什么?说明Ultra模型不只是单次答题能力更强,它生成的候选解法池子里"好苗子"的密度也更高,而且对评测反馈的利用效率也更好,越到后面的迭代轮次,这种优势就越被放大。
这就像两个学生准备考试,一个平时成绩略微领先,另一个平时成绩稍差一点。但到了模拟考试反复刷题、根据错题反馈调整的阶段,平时成绩略微领先的那个学生进步速度明显更快,因为他的知识基础更扎实,每一次反馈都能更精准地转化为改进,而不是在原地打转。**如果只看单次考试成绩,你可能低估了两人之间真正的实力差距,只有在允许反复修正的场景下,这个差距才会真正显现出来**。
论文由此得出一个挺实用的经验:如果对模型规模和推理成本没有硬性限制,用有限的数据去微调一个更强的底座模型,效果可能反而好过对一个小模型做大量的、成本高昂的后训练。
**IOI 2026现场:为一场只有一次机会的比赛量身定制**
前面讲的Nano-CC和Ultra-CC都是研究团队在IOI 2025这个可以反复实验的基准上打磨出来的通用系统。但真正的重头戏是IOI 2026,这是一场只有一次机会的实战,赛题在比赛结束前不会公开,AI系统必须像人类选手一样,在断网环境下、在同样的时间和提交次数限制里,交出最终答卷。
正因为只有一次机会,研究团队针对这场硬仗做了几处专门的调整。
第一个调整是换教师数据源。他们对比了GLM-5.2和DeepSeek-V4-Flash两个候选教师模型,发现GLM-5.2不仅IOI得分更高,生成的解题过程还更短。**这一点很关键,因为在有限的比赛时间窗口里,模型生成的内容越短,同样的算力就能跑出越多候选方案**。最终他们选择用GLM-5.2的数据重新微调Ultra模型,这个新版本比之前用DeepSeek-V4-Flash数据训练的版本,在保持更高分数的同时,输出长度也更短。
第二个调整是给最后一轮GenCorrect开小灶。前四轮还是按常规流程生成200个候选、提交10个,但到了决定成败的最后一轮,他们把候选生成量直接拉到1000个,同时引入了一套执行驱动的筛选机制:先让模型自己写50个测试用例生成器和校验器,跑出100个有效测试输入,再让所有候选解法跑一遍这些测试,最后让模型再写一个打分脚本,按照题目的子任务评分规则给候选排名,挑出得分最高的10个提交。
这一步的用意很明显。既然只有一次实战机会,那就要把最后的冲刺阶段的算力用到极致,与其墨守成规地按老套路再跑一遍200个候选,不如把预算集中砸向一次更大规模、更精细筛选的冲刺。
第三个调整是硬件层面的优化,对Ultra模型做了NVFP4量化压缩。
量化*:把模型内部原本用较高精度数字存储的参数,转换成精度较低但占用空间更小、计算更快的数字格式,用来换取推理速度的提升,代价通常是精度会有一定损失。
论文里给出的数据显示,量化后的模型吞吐量从199.1提升到736.8(单位是每GPU每秒处理的词元数),提升了3.7倍,但IOI分数只从59.4%掉到52.8%,掉了6.6个百分点。这笔交易划算与否,取决于你怎么算账:**如果没有这次量化,GenCorrect想要的那种大批量候选生成、快速迭代反馈的节奏,在比赛规定的有限时间窗口里根本跑不完,宁可单次准确率打点折扣,也要换来能多跑几轮迭代的空间**。
这三处调整凑在一起,最终在IOI 2026现场跑出了535.4分的成绩,比金牌线361.12分高出174.3分,比当届人类最高分498.27分高出37.1分。
为了验证这个结果不是运气使然,研究团队后来又用标准的五轮GenCorrect流程独立跑了5次,平均分521.72,波动区间在495.0到545.8之间。现场那次535.4分正好落在这个区间内,比平均值高出13.68分,说明那些针对性调整确实带来了实打实的额外提升,而不是单纯的偶然。
**这条路是怎么走出来的**
把整篇论文串起来看,你会发现这不是靠某一个神奇的技巧一下子解决问题,而是一步步垒起来的。
数据是地基,22000道题目,经过反复验证才能用。监督微调是主体结构,贡献了最大头的能力提升。强化学习是精修,在模型已经具备一定能力的基础上再往边界推一推。GenCorrect则是临场发挥的艺术,把有限的提交次数用到刀刃上。而在真正上场的那一刻,还得根据具体的比赛规则和时间预算,做出取舍和权衡。
论文的作者们也很坦诚地承认了局限。这套系统需要海量的训练和推理算力支撑,IOI现场那次跑分动用了最多760块NVIDIA GB300 GPU,这不是随便什么团队都能复现的规模。他们也没能给Ultra模型做强化学习训练,纯粹是因为算力预算不够。而且这些结论目前只在编程竞赛这个特定领域里成立,能不能推广到别的推理任务,论文里没有下定论。
---
**写在后面**
读完这篇论文,最触动我的其实不是535.4分这个数字本身,而是研究团队处理"只有一次机会"这件事的方式。
大多数AI论文讲的都是可以反复实验、反复调参的场景,跑一百次取平均值,出了问题重来就是了。但IOI 2026现场那次不一样,题目提前不知道,比赛只有一次,交出去就是交出去了。这种压力下,团队没有选择孤注一掷地上新招数,而是把IOI 2025当成沙盘推演的场地,把每一个可能影响最终成绩的变量都提前测试过一遍,换教师数据、扩大最后一轮候选池、做量化压缩,每一步调整都有对照实验背书。这种在不确定性面前依然保持工程严谨性的做法,比最后那个分数本身更值得琢磨。
还有一个细节我印象很深,就是强化学习那部分的诚实。很多论文会把强化学习包装成万能药,但这篇论文老老实实说了,强化学习带来的提升远不如监督微调,而且效果强烈依赖于起点好坏。这种不夸大、把局限性摆出来给你看的态度,在一篇声称"打败人类冠军"的论文里显得挺难得。
一个问题始终在我脑子里转:当AI在越来越多需要"临场发挥、限时限量"的场景里超过人类顶尖选手,我们对"天才"这个词的定义,会不会也要跟着重新想一想?
Q&A
Q1:Nemotron-3-Ultra-CC是什么?
A:它是NVIDIA团队基于5500亿参数的Nemotron-3-Ultra模型,只经过监督微调(没有强化学习)打造出的编程竞赛专用模型,在IOI 2026现场配合GenCorrect策略拿到535.4分,超过人类冠军和金牌线。
Q2:GenCorrect是怎么工作的?
A:GenCorrect是一种迭代式的推理策略,每轮先并行生成多达200个候选解法,挑出10个思路差异最大的提交评测,再根据各子任务得分反馈,挑选互补的参考解法指导下一轮生成,最多循环五轮,正好对应IOI比赛每题50次的提交上限。
Q3:为什么强化学习的效果不如监督微调明显?
A:论文解释是因为这种基于组内对比的强化学习,只有当模型对同一题目的多次尝试里既有成功又有失败时才能提供学习信号,所以主要在模型能力边界附近起作用,而且效果高度依赖此前监督微调打下的基础,起点越好强化学习能达到的高度也越高。














