香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式

发布于 2025-4-21 07:29
浏览
0收藏

大家好,我是HxShine

今天分享一篇香港科技大学、DeepSeek-AI和上海交通大学联合发表的文章,标题为:CODEI/O: Condensing Reasoning Patterns via Code Input-Output Prediction(CODEI/O:通过代码输入输出预测浓缩推理模式)。

这篇文章提出了一种名为 CODEI/O 的新方法,旨在 通过代码输入输出预测来提炼和浓缩代码中蕴含的多种推理模式,从而提升大语言模型(LLMs)的推理能力。 该方法的核心思想是 将代码转换为一种输入输出预测任务,让模型学习在给定代码和测试用例的情况下,预测输入或输出,而这些输入输出都以自然语言(思维链,CoT)的形式呈现。

该方法主要特点如下:

通用性: CODEI/O 不仅能用于代码相关的任务的推理能力, 还适用于更广泛的推理任务, 如逻辑、符号、数学、科学和常识推理等。

一、概述

Title:CODEI/O: Condensing Reasoning Patterns via Code Input-Output Prediction

URL:arXiv:2502.07316v3

Authors:Junlong Li, Daya Guo, Dejian Yang, Runxin Xu, Yu Wu, Junxian He

Code:​ https://github.com/hkust-nlp/CodeIO​

1.Motivation

• 现有研究主要集中于增强特定领域的技能,例如数学或代码生成,但由于训练数据稀疏且分散,提高其他推理任务的性能仍然具有挑战性(如何提升通用的推理能力还没有人做的特别好!!!)。

• 传统方法在原始代码上进行持续预训练效果不佳,因为相关推理信号通常是隐式的,并且与噪声信息交织在一起(预训练阶段利用代码提上推理能力时的数据质量不太好!!!)。

• 直接训练文本到代码生成也面临挑战,因为它受限于生成特定代码语法的要求,很难推广到代码特定任务之外的任务(需要做到更通用,例如全部用自然语言来处理,方便迁移到其他任务!!!)。

2.Methods

省流版总结:

CODEI/O 将代码转化为输入-输出预测格式, 训练模型根据自然语言形式的 CoT 推理来预测给定代码和测试用例的输入/输出。这样可以将结构化推理从特定代码语法中解耦出来,并保留程序的严谨性。CODEI/O 能够学习到通用推理基础,如逻辑流程规划、状态空间搜索、决策树遍历和模块化分解。

CODEI/O方法:将原始代码文件转换成可执行的函数,并设计一个更直接的任务:给定一个函数及其相应的文本查询,模型需要预测给定输入的执行输出或给定输出的可行输入,全部以自然语言作为CoT理由。

数据构建:从各种来源收集原始代码文件,转换为统一格式,然后通过执行代码生成输入-输出对,并使用DeepSeek-V2.5收集自然语言CoT预测。为了进一步提升数据质量,通过代码执行验证所有预测,并对初始错误的回应进行多轮修订(CODEI/O++)。

训练方法:采用两阶段训练策略,首先在CODEI/O或CODEI/O++数据集上进行训练,然后在通用指令调优数据集上进行第二阶段训练。

详细方法和步骤:

数据收集 (Collecting Raw Code Files):

• 从多样化的来源选择原始代码,包括CodeMix (一个大型的内部代码预训练语料库) 和 PyEdu-R (Python-Edu 的一个子集,专注于复杂的推理任务,如 STEM、系统建模或逻辑谜题)。

• 为了避免与 CodeMix 重叠,PyEdu-R 特意排除了纯算法中心的文件。

• 除了这两个主要来源,还整合了来自各种小型但信誉良好的来源的高质量代码文件,包括综合算法存储库、具有挑战性的数学问题和知名的在线编码平台。

• 总共合并了大约 810.5K 个代码文件。

数据转换 (Transforming to a Unified Format): 使用 DeepSeek-V2.5 对收集的原始代码文件进行预处理,将其精炼为统一的格式,强调主要的逻辑功能,并使其可执行,以便收集输入-输出对。转换后的数据组织成以下组件:

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

1)Cleaned Reference Code:通过清理和重构代码,提取核心逻辑功能到函数中,排除可视化和文件处理等非必要元素。

2)Input Generator:创建一个独立的、基于规则的 Python 输入生成器函数,返回遵循主入口函数要求的非平凡输入。应用随机性以实现可扩展的数据生成。

3)Query:基于主入口函数生成简洁的问题陈述,作为描述代码预期功能的查询。

这里有一个完整的example:

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

收集输入和输出对 (Collecting Input and Output Pairs): 对于每个转换后的函数,使用输入生成器采样多个输入,并通过执行代码获得相应的输出。

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

构建输入-输出预测样本 (Building Samples for Input-Output Prediction):

• 将收集的输入-输出对和转换后的函数组合成可训练的格式。

• 对于监督微调过程,为每个训练样本构建一个 prompt 和 response。Prompt 模板结合了函数、查询、参考代码以及特定的输入或输出。Response 理想情况下是自然语言 CoT,解释如何推导出正确的输出或可行的输入。

• 提供了两种构建 CoT response 的方法:

1)Direct Prompting – CODEI/O:使用 DeepSeek-V2.5 合成所有期望的 response,因为其性能优越且成本极低。

2)Making Full Use of Code – CODEI/O++:对于预测不正确的 response,将反馈附加为第二轮输入消息,并要求 DeepSeek-V2.5 重新生成另一个 response。最终的 response 通过连接所有四个组件(第一轮 response + 第一轮反馈 + 第二轮 response + 第二轮反馈)构建。一个revise的example如下:

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

训练设置 (Training Setups): 采用两阶段训练策略:第一阶段在 CODEI/O 或 CODEI/O++ 数据集上训练 (加强推理能力),第二阶段进行通用指令调优 (提升通用能力)。

3.Conclusion

CODEI/O 方法有效提升了模型的推理能力。通过在 CODEI/O 数据集上训练,模型在各种推理任务上都取得了显著且普遍的性能提升,包括符号推理、科学推理、逻辑推理、数学推理和常识推理。

CODEI/O 方法具有通用性和泛化能力。尽管 CODEI/O 使用的代码中心数据进行训练,但它不仅提升了代码相关任务的性能,也提升了更广泛的通用推理任务的性能,表明其学习到的推理模式具有良好的泛化能力。

4.Limitation

• 本文主要验证了 CODEI/O 方法在提高模型推理能力上的有效性,但对于模型规模、推理成本等方面未进行深入探讨,未来可以进一步探索如何将其应用于更广泛的场景,并降低推理成本。

二、详细内容

1.不同基座模型使用 CODEI/O 和 CODEI/O++ 在多个推理 benchmark 上的结果

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

总结1:CODEI/O 和 CODEI/O++ 不仅取得了更高的平均分数,而且性能更加均衡,在几乎所有 benchmark 上都实现了性能提升,展示了其平衡且可泛化的推理能力。

总结2:与使用完整数据集训练的 WI (Full) 和 OMI2 (Full) 相比,使用 3.5M 子集的 CODEI/O 和 CODEI/O++ 在 Qwen 2.5 Coder 7B 上仍然取得了更具竞争力的结果,表明 CODEI/O 具有更好的数据效率。

2.消融实验:推理需要学习推理Pattern,最终答案反而不重要

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

说明:分别评估了仅进行输入预测 (I. Pred. only)、仅进行输出预测 (O. Pred. only) 以及去除 rejection sampling 的效果。

总结1:结果表明,输入预测和输出预测的效果大致相似,但输入预测在 KorBench 上表现更优,而输出预测在 BBH 等符号推理任务上表现更好。

总结2:去除 rejection sampling (过滤掉错误的数据或者更换成正确的数据)会导致性能普遍下降,表明 rejection sampling 虽然减少了训练数据,但损失了数据多样性,反而降低了性能 (重点是要学习更多pattern,答案是否正确对结果影响不大!!!)。DDdDd

3.CODEI/O 的 scaling effect

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

说明:a)展示了随着随机采样训练数据量增加,模型在各个 benchmark 上的性能变化趋势。 b) 展示了随着每个样本输入-输出对数量比例变化,模型性能的变化。

总结1:增加训练样本数量通常会提升各个 benchmark 的性能,表明 CODEI/O 具有良好的可扩展性。总结2:Figure 4b 表明,增加每个样本的输入-输出对数量比例,也能带来性能提升,尤其是在从 1/6 增加到 6/6 时,表明某些推理模式需要多个测试用例才能充分捕获和学习其复杂的逻辑流程。

4.不同 revision turns 下对训练结果的影响

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

说明:Figure 5 展示了在不同 revision turns 下(修正错误结果的次数),模型在 benchmark 上的平均分数变化。总结1:从 turn 0 到 turn 1,模型性能有显著提升,表明单轮修订能够有效提高数据质量。总结2:但从 turn 1 到 turn 2,性能提升微乎其微,甚至在 Qwen 2.5 Coder 7B 上出现下降,表明进一步修订带来的收益迅速递减。(推理 长度影响比较大,可能影响了其他正常的推理)

5.不同数据格式对模型性能的影响

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

说明:评估了将 query+code 放在 prompt 中,CoT 放在 response 中 (Q+Code COT) 以及其他不同组合方式的效果。总结1:结果表明,将 query 和 reference code 放在 prompt 中,CoT 放在 response 中的格式 (Q+Code COT) 取得了最高的平均分数和最均衡的性能,表明这种格式最有利于模型学习可迁移的推理能力。总结2:将 query 放在 prompt 中,reference code 放在 response 中的格式 (Q Code) 效果最差,这可能是因为这种格式类似于标准的代码生成任务,但训练样本量远少于标准的代码生成数据集。

6.多阶段微调的影响

香港科技大学联合DeepSeek-AI推出CODEI/O:让AI学会“浓缩”推理模式-AI.x社区

说明:Table 4 展示了不同训练策略下的平均 benchmark 分数。对比了单阶段指令调优 (IT)、两阶段训练 (CODEI/O+IT, CODEI/O++IT) 以及不同数据混合方式的效果。总结1:结果表明,所有两阶段训练变体都优于单阶段训练,说明使用 CODEI/O 数据进行独立训练能提升推理效果。总结2:对于 Qwen 2.5 Coder 7B,保持 CODEI/O 和指令调优数据完全分离的效果最佳,而对于 LLAMA 3.1 8B,混合数据效果更好。论文为了简化方法,主要实验采用了完全分离的数据。

三、总结

结论1: CODEI/O 是一种有效提升大型语言模型通用推理能力的方法。 通过将原始代码转换为输入-输出预测任务,并利用自然语言 CoT 进行训练,CODEI/O 使得模型能够学习代码中蕴含的多样化推理模式,并在各种推理 benchmark 上取得显著且均衡的性能提升。

结论2: CODEI/O++ 通过执行反馈和多轮修订进一步增强了模型性能。 基于执行反馈的修订策略能够提高数据质量,并使模型在各种推理领域都获得更优的表现。

结论3: CODEI/O 方法具有良好的通用性和泛化能力。 尽管使用代码数据进行训练,CODEI/O 不仅提升了代码相关任务的性能,也显著提升了其他通用推理任务的性能,表明其学习到的推理模式具有广泛的适用性。

结论4: CODEI/O 在数据效率和性能方面都优于其他基线方法。 实验表明,CODEI/O 即使使用相对较小的数据集,也能超越使用更大规模数据集的其他方法,展现了其数据效率和卓越的性能。

产业应用价值:

提升通用人工智能模型的推理能力: CODEI/O 提供了一种新的训练方法,可以有效提升大型语言模型的通用推理能力,使其在更广泛的应用场景中表现更出色。

降低数据标注成本: CODEI/O 利用代码的结构化特性自动生成训练数据,无需大量人工标注,降低了数据获取和标注的成本。

增强模型的鲁棒性和泛化性: CODEI/O 训练的模型在各种推理任务上都表现出均衡且优异的性能,表明其具有良好的鲁棒性和泛化性,可以应用于更复杂和多样的实际场景。

为代码相关应用提供更强大的基础模型: CODEI/O 使用代码数据进行训练,可以为代码生成、代码理解、代码缺陷检测等代码相关应用提供更强大的基础模型。

收藏
回复
举报
回复
相关推荐