复旦大学:用代码教AI推理,让机器学会“举一反三”的思考艺术

B站影视 内地电影 2025-10-11 21:57 1

摘要:这项由复旦大学的李俊龙、郭大亚等研究者与DeepSeek-AI以及香港科技大学合作完成的重要研究,发表于2025年第42届国际机器学习会议(ICML),论文编号为arXiv:2502.07316v4。研究团队发现了一个令人兴奋的现象:通过让AI模型学习预测代码

这项由复旦大学的李俊龙、郭大亚等研究者与DeepSeek-AI以及香港科技大学合作完成的重要研究,发表于2025年第42届国际机器学习会议(ICML),论文编号为arXiv:2502.07316v4。研究团队发现了一个令人兴奋的现象:通过让AI模型学习预测代码的输入和输出,竟然能显著提升它们在各种推理任务上的表现。

当我们谈到人工智能的推理能力时,就像在讨论一个学生是否真正掌握了解题思路。目前的AI模型虽然在数学题和编程方面表现不错,但在其他需要推理的任务上却常常力不从心。这就好比一个学生只会做数学题,但遇到物理、化学或逻辑推理题时就束手无策。研究团队意识到,问题的根源在于这些其他领域的训练数据太少太零散,就像给学生的练习题不够系统一样。

研究团队提出了一个巧妙的解决方案:既然代码中蕴含着丰富多样的推理模式,为什么不让AI通过学习代码来掌握通用的推理技能呢?这就像让学生通过大量解题来培养通用的思维能力。他们设计了一个名为CodeI/O的训练方法,将原本复杂的代码转化为一个简单的任务:给定一个函数和相应的文字描述,让AI用自然语言推理出输入或输出应该是什么。

这种方法的精妙之处在于,它让AI接触到了代码中隐藏的各种推理模式,比如逻辑流程规划、状态空间搜索、决策树遍历和模块化分解等。更重要的是,AI在学习过程中不需要掌握具体的编程语法,而是专注于理解其中的推理逻辑。这就像让学生学习解题思路而不是死记硬背公式一样。

研究团队从多个来源收集了大约81万个代码文件,经过精心处理后得到了45万多个函数,最终生成了350万个训练样本。他们还开发了一个增强版本CodeI/O++,通过多轮修正来进一步提升训练数据的质量。这种做法就像老师不断给学生提供反馈和修正机会,让学习效果更加显著。

实验结果令人惊喜。在14个不同的评测基准上,CodeI/O训练的模型在符号推理、科学推理、逻辑推理、数学计算和常识推理等各个方面都表现出了显著提升。更重要的是,这种提升是全面而均衡的,不像其他方法那样只在某些任务上有效而在其他任务上反而下降。

一、从混乱的代码世界中提炼推理精华

当我们打开任何一个软件的源代码时,会发现里面充满了各种复杂的逻辑、算法和处理流程。每个程序都像一个小小的思维世界,包含着解决特定问题的完整思路。研究团队意识到,这些代码文件就像是一座巨大的推理知识宝库,里面蕴藏着人类在解决各种问题时积累的思维模式。

然而,直接让AI学习原始代码就像让学生直接阅读各种技术手册一样效果有限。代码中包含了太多与推理无关的技术细节,比如文件操作、图形显示、错误处理等等。这些内容不仅会分散AI的注意力,还可能让它学到一些不相关甚至有害的模式。

研究团队采用了一种巧妙的方法来解决这个问题。他们使用DeepSeek-V2.5这样的先进AI模型来充当"编辑",将原始的混乱代码重新整理成标准化的格式。这个过程就像让一个有经验的老师将各种教材中的知识点重新组织成易于学习的形式。

经过整理后的代码包含了几个核心要素。首先是清理后的参考代码,去除了所有与核心逻辑无关的内容,就像提炼出了解题的关键步骤。然后是主入口函数,它总结了整个程序的核心功能,就像为每道题写出了标准答案。接下来是输入输出描述,明确定义了问题的边界条件,就像为每道题目写出了详细的题目要求。

最有趣的是输入生成器的设计。研究团队没有直接生成测试用例,而是创建了一个能够生成多样化输入的程序。这就像为每道题目准备了一个能够生成无限变式练习的机器,确保AI能够接触到足够多样化的训练场景。最后是查询部分,用简洁的问题描述来解释代码的功能,就像为每个程序写了一个通俗易懂的功能说明。

通过这种标准化处理,原本杂乱无章的代码文件变成了结构化的学习材料。每个处理后的样本都包含了完整的问题描述、解决方案和多个测试用例,为AI提供了理想的学习环境。

二、让AI学会用自然语言思考代码逻辑

传统的代码学习方法通常让AI直接生成代码,这就像让学生直接写出程序却不要求他们解释思路。研究团队认为这种方法存在根本缺陷:AI可能会机械地记住代码模式,但不一定真正理解其中的推理逻辑。

CodeI/O采用了一种完全不同的思路。它不要求AI写代码,而是让AI用自然语言来推理代码的执行过程。具体来说,给定一个函数和相应的问题描述,AI需要完成两类任务:一是根据给定的输入推理出对应的输出,二是根据给定的输出推理出可能的输入。

这种设计的巧妙之处在于强迫AI用语言来表达推理过程。当AI需要解释"为什么这个输入会产生那个输出"时,它必须理解函数的内在逻辑,而不是简单地记忆输入输出对应关系。这就像要求学生不仅要给出答案,还要详细解释解题步骤一样。

为了收集高质量的推理过程,研究团队使用DeepSeek-V2.5来生成自然语言解释。这些解释被称为思维链(Chain-of-Thought),它们详细描述了从问题到答案的完整推理路径。这种方法确保了AI学到的不是简单的输入输出映射,而是完整的推理模式。

研究团队还开发了一个增强版本CodeI/O++,充分利用了代码可验证的特性。当AI给出错误答案时,系统会提供具体的反馈信息,然后要求AI重新思考并给出修正答案。这个过程就像老师发现学生答错题后,不是简单地告诉正确答案,而是引导学生重新思考,找出错误所在。

这种多轮修正机制产生了意想不到的效果。最终的训练数据不仅包含了正确的推理过程,还包含了错误推理和修正过程的完整记录。这让AI不仅学会了如何正确推理,还学会了如何从错误中恢复,这对提升推理的鲁棒性具有重要意义。

三、从海量代码中构建推理训练营

研究团队面临的第一个挑战是如何从浩如烟海的代码库中挑选出最有价值的训练材料。他们采用了多源头策略,就像在不同的图书馆里搜集最好的教材一样。

CodeMix是他们的主要数据源之一,这是一个包含大量Python代码文件的内部语料库。但他们没有盲目地使用所有代码,而是设计了一个巧妙的过滤机制。他们让DeepSeek-Coder-V2-Lite-Inst模型尝试完成从这些代码衍生出的函数补全任务,然后根据成功率来判断代码的质量。只有那些成功率在10%到90%之间的代码被保留下来,这样既避免了过于简单的代码,也排除了过于复杂的代码。

另一个重要数据源是PyEdu-R,这是从Python-Edu数据集中精选出的专注于复杂推理任务的代码集合。研究团队特意排除了纯算法类的代码,转而专注于STEM学科、系统建模和逻辑解谜等需要深度推理的代码。这就像在数学题库中特意挑选那些需要多步推理的应用题,而不是简单的计算题。

除了这两个主要来源,研究团队还从算法仓库、数学问题集合和在线编程平台等多个渠道收集了高质量代码。最终,他们汇集了大约81万个代码文件,经过处理后得到了45万多个可用函数。

对于每个函数,研究团队都会生成多个输入输出对。这个过程就像为每道例题准备多个变式练习。不同来源的代码被分配了不同数量的测试用例:CodeMix中的每个样本最多生成3对输入输出,PyEdu-R中的每个样本最多生成6对,而其他来源的样本最多可以生成10对。这种差异化处理反映了不同代码源的复杂度和重要性。

在执行代码生成输入输出对的过程中,研究团队设置了严格的质量控制机制。他们为每个代码的运行时间设置了5秒的上限,防止程序陷入无限循环。同时,他们还对输入输出对象的复杂度进行了限制:总大小不能超过1024字节,列表和字典的长度不能超过20个元素,字符串长度不能超过100个字符。这些限制确保生成的训练样本既具有足够的多样性,又在AI模型的处理能力范围内。

最终,这个精心设计的数据收集和处理流程产生了350万个高质量的训练样本,其中输入预测和输出预测的样本数量基本平衡。每个样本都包含了完整的问题描述、代码逻辑和详细的推理过程,为AI提供了丰富的学习材料。

四、推理能力的全面检验和惊人提升

为了验证CodeI/O方法的有效性,研究团队设计了一套全面的评测体系。他们选择了四个不同规模和架构的基础模型作为测试对象:Qwen 2.5 7B Coder、DeepSeek v2 Lite Coder、LLaMA 3.1 8B和Gemma 2 27B。这些模型代表了当前最先进的AI技术水平,涵盖了从7B到27B参数的不同规模。

评测过程采用了两阶段训练策略。第一阶段使用CodeI/O数据进行训练,就像让学生先专门练习推理技能。第二阶段进行通用指令调优,就像让学生学会将推理技能应用到各种实际问题中。这种分阶段方法确保AI既能掌握核心推理能力,又能灵活应用到不同场景。

测试涵盖了14个不同的评测基准,每个基准都专注于特定类型的推理能力。WinoGrande测试常识推理能力,就像测试AI是否理解日常生活中的基本逻辑。DROP评估数值推理能力,要求AI在阅读理解的基础上进行计算操作。GSM8K包含小学数学应用题,测试基础算术推理。MATH则包含更复杂的竞赛级数学问题,挑战AI的高级数学推理能力。

科学推理方面,GPQA提供了生物、物理和化学领域的"谷歌难搜"问题,测试AI的深度专业知识推理。MMLU-STEM涵盖了科学技术工程数学等STEM学科的广泛知识。逻辑推理方面,BBH包含了23个之前让AI模型头疼的挑战性任务,而ZebraLogic则通过经典的斑马谜题测试约束满足问题的求解能力。

代码理解方面,CRUXEval专门测试AI预测代码输入输出的能力,这与CodeI/O的训练任务直接相关。研究团队还创建了两个新的评测基准:BBH-ZH测试中文环境下的逻辑推理能力,LeetCode-O测试基于文字描述的代码输出预测能力。

实验结果令人振奋。在所有四个基础模型上,CodeI/O都表现出了显著而全面的性能提升。更重要的是,这种提升是均衡的:不像其他方法那样在某些任务上大幅提升却在其他任务上有所下降,CodeI/O在几乎所有评测基准上都实现了稳定提升。

以Qwen 2.5 Coder 7B为例,使用CodeI/O训练后,模型在GPQA上的得分从41.5提升到43.3,在LeetCode-O上从20.7提升到23.7,在CRUXEval-I上从61.3提升到63.6。这些提升看似不大,但在AI评测中已经是非常显著的进步。更重要的是,所有基准的平均得分从54.8提升到57.2,显示出全面而均衡的能力提升。

CodeI/O++的表现更加出色。通过多轮修正机制,它在大多数基准上都超过了CodeI/O,平均得分达到57.7。这证明了执行反馈和错误修正对提升推理质量的重要作用。

五、深度解析方法有效性的关键因素

为了理解CodeI/O成功的原因,研究团队进行了一系列细致的分析实验。这些实验就像医生为病人做各种检查,要搞清楚到底是哪些因素在起关键作用。

首先,他们测试了输入预测和输出预测哪个更重要。结果发现,这两种任务各有所长:输入预测在某些基准上表现更好,比如KorBench,而输出预测则在符号推理任务如BBH上更有优势。这说明两种推理方向都很重要,就像练习正向思维和逆向思维都对提升推理能力有帮助。

接下来,他们探讨了如何处理错误答案。一种常见做法是拒绝采样,即直接丢弃所有错误的回答,只保留正确的。但实验发现这种做法实际上会降低性能,因为它减少了数据的多样性。另一种做法是将错误答案替换为正确答案,虽然在一些特定任务上有所帮助,但总体性能反而下降。这个发现很有趣:保留错误答案和推理过程,让AI从中学习,竟然比只看正确答案更有效。

研究团队还测试了不同合成模型的影响。他们用DeepSeek-V2.5重新生成了WebInstruct数据集的回答,创建了WebInstruct-DS25版本。虽然这个版本比原始WebInstruct表现更好,但仍然不如CodeI/O。这证明了性能提升不仅仅来自使用了更先进的合成模型,更重要的是CodeI/O这种训练任务的设计。

数据规模分析显示了CodeI/O良好的可扩展性。随着训练样本数量的增加,模型性能呈现稳定上升趋势。当他们固定代码样本数量,只改变每个样本的输入输出对数量时,发现增加测试用例数量也能带来性能提升,特别是从1/6增加到6/6时效果最明显。这说明某些复杂的推理模式需要多个测试用例才能完全掌握。

数据格式的选择也很关键。研究团队测试了多种组织训练数据的方式,发现将问题描述和参考代码放在输入中,将推理过程放在输出中效果最好。这种格式让AI能够充分利用代码的结构信息来指导推理过程。

多轮修正实验揭示了一个有趣现象:从第0轮到第1轮的改进效果显著,但从第1轮到第2轮的改进就很有限了。仔细分析发现,AI在第二轮修正中经常重复相同的错误推理,没有添加新的有用信息。这就像学生在第一次订正错误时能学到很多,但反复订正同一道错题的收益会递减。

训练策略分析证实了两阶段训练的必要性。所有两阶段训练变体都优于单阶段训练。有趣的是,不同模型对数据混合策略的偏好不同:Qwen 2.5 Coder 7B更适合完全分离的两阶段训练,而LLaMA 3.1 8B则更适合混合数据训练。

六、解决数据泄露质疑和验证真实效果

任何涉及大规模数据训练的研究都会面临数据泄露的质疑,即训练数据中可能包含了测试集的内容,导致结果不可信。研究团队对这个问题进行了严格的检查和分析。

他们采用了业界标准的13-gram重叠检测方法,这就像用一个非常细密的筛子来筛查可能的重复内容。具体做法是,将测试问题和训练数据都进行标准化处理(去除标点符号、数字和空格),然后检查是否有连续13个词完全相同的情况。

检测结果让人放心:大多数评测基准的潜在泄露率都极低,几乎为零。只有两个基准显示了相对较高的重叠率:LeetCode-O为21.5%,KorBench为5.1%。但仔细分析这些重叠内容后,研究团队发现它们并不构成真正的数据泄露。

对于KorBench,重叠的内容主要是一些通用描述,比如数独游戏的规则说明或者"A B C D..."这样的常见字母序列,而不是具体的题目内容。训练任务和测试任务完全不同,不存在直接的答案泄露。

对于LeetCode-O,重叠来源于相似问题共享的描述文字。比如"两数之和I"和"两数之和II"这样的姊妹题目会有相同的背景描述。但研究团队在构建数据集时已经刻意排除了所有原始LeetCode问题,所以这种重叠是不可避免的相似性而非直接泄露。

为了进一步验证结果的可信性,研究团队计算了在全集和去除疑似泄露样本后的性能提升幅度。结果显示,两种情况下的性能提升几乎完全一致。这强有力地证明了CodeI/O的效果确实来自于方法本身的优越性,而不是数据泄露带来的虚假提升。

这种严格的验证过程体现了研究团队的科学态度。他们不仅主动检查了可能的问题,还提供了充分的证据来支持自己的结论。

七、在更广阔背景下审视研究贡献

CodeI/O的提出并非孤立的创新,而是在AI推理能力研究的大背景下的重要进展。当前的AI推理研究面临着一个根本性挑战:如何让模型掌握通用的推理能力,而不仅仅是在特定领域表现出色。

传统方法通常采用领域特定的训练策略。比如,为了提升数学能力,研究者会收集大量数学题目进行训练;为了提升代码能力,他们会使用代码生成任务。但这种方法存在明显局限:每个领域都需要专门的数据收集和处理,而且不同领域之间的知识难以迁移。

CodeI/O提供了一种全新的思路:利用代码这种天然包含多样化推理模式的数据源,通过巧妙的任务设计来提取和学习通用推理能力。这种方法的优势在于既能够大规模获取训练数据,又能够学到跨领域的推理技能。

在推理时扩展技术方面,近期出现了像OpenAI的o1和DeepSeek的R1这样的突破性模型,它们通过生成超长的推理过程来解决复杂问题。CodeI/O与这些方法是互补的:CodeI/O专注于在训练阶段提升模型的基础推理能力,而推理时扩展技术则是在应用阶段充分发挥这些能力。两者结合使用可能会产生更强大的效果。

代码执行学习也是一个相关的研究方向。之前的研究主要关注如何利用代码执行来改进代码生成能力,或者专门训练模型预测代码执行结果。CodeI/O的创新在于将代码执行学习扩展到通用推理能力提升,这为该领域开辟了新的方向。

从数据效率的角度看,CodeI/O展示了一种高效的数据利用策略。通过将一个代码文件转化为多个输入输出预测任务,显著增加了数据的利用效率。这种策略可能对其他需要大量训练数据的AI任务有启发意义。

在多语言和跨文化方面,CodeI/O的方法也显示出良好的泛化能力。通过在中英文评测基准上的一致性表现,证明了这种基于逻辑推理的学习方法能够跨越语言障碍,学到更本质的推理技能。

结论

说到底,这项研究为我们展示了一个简单而深刻的道理:真正的智能不在于记住多少知识,而在于掌握多少推理技能。研究团队通过CodeI/O这个巧妙的方法,让AI模型从代码这个丰富的推理模式宝库中学会了举一反三,这不仅仅是技术上的进步,更是对AI学习方式的重新思考。

当AI模型不再需要为每个特定领域单独训练,而是能够通过学习通用推理模式来应对各种挑战时,我们就向真正的人工通用智能迈进了一大步。这项研究的影响可能远超我们的想象:未来的AI助手可能会更好地理解我们的问题,更准确地分析复杂情况,更有效地提供解决方案。

对于普通人来说,这意味着我们将拥有更智能、更可靠的AI工具。无论是帮助学生理解复杂概念,协助研究人员分析实验数据,还是为企业提供决策支持,这些具备强大推理能力的AI系统都将发挥重要作用。更重要的是,随着推理能力的提升,AI系统的错误率会降低,可信度会提高,这对AI技术的广泛应用具有重要意义。

这项研究也提醒我们,AI的发展不仅仅是算力和数据规模的比拼,更需要在方法论上的创新和突破。通过巧妙的任务设计和数据利用策略,我们可以用相对较少的资源获得显著的性能提升。这为那些计算资源有限的研究团队和公司提供了新的思路。

当然,CodeI/O方法还有继续改进的空间。比如如何进一步提升多轮修正的效果,如何更好地处理不同类型的推理任务,如何将这种方法扩展到其他编程语言和领域等。这些都是值得继续探索的方向。

随着这项技术的不断完善和普及,我们有理由相信,未来的AI系统将具备更强的推理能力,能够更好地理解和解决我们面临的各种复杂问题。这不仅会改变我们与AI交互的方式,也可能重新定义人机协作的边界。对于想要深入了解这项研究的读者,可以通过论文编号arXiv:2502.07316v4查询完整的技术细节和实验结果。

Q&A

Q1:CodeI/O方法是什么?它如何提升AI的推理能力?

A:CodeI/O是一种让AI通过学习预测代码输入和输出来提升推理能力的训练方法。它将复杂的代码转化为简单任务:给定函数和描述,让AI用自然语言推理出对应的输入或输出。这种方法让AI接触到代码中丰富的推理模式,如逻辑规划、状态搜索等,从而掌握通用推理技能。

Q2:CodeI/O训练的AI模型在哪些任务上表现更好?

A:经过CodeI/O训练的AI模型在多个推理领域都有显著提升,包括符号推理、科学推理、逻辑推理、数学计算和常识推理。实验显示,在14个不同评测基准上,模型都实现了均衡的性能提升,不像其他方法那样只在特定任务上有效。

Q3:CodeI/O方法与传统的AI训练方法有什么区别?

A:传统方法通常针对特定领域收集专门数据进行训练,比如用数学题训练数学能力、用代码生成任务训练编程能力。CodeI/O则利用代码这个包含多样推理模式的统一数据源,通过输入输出预测任务来学习通用推理技能,实现了跨领域的能力迁移。

来源:新浪财经

相关推荐