吉他谱介绍: 推理是大型语言模型的基本能力。尽管先前的研究主要集中在提高狭窄领域的技能,如数学或代码生成,但由于稀疏且碎片化的训练数据,在许多其他推理任务上的性能
推理是大型语言模型的基本能力。尽管先前的研究主要集中在提高狭窄领域的技能,如数学或代码生成,但由于稀疏且碎片化的训练数据,在许多其他推理任务上的性能提升仍然具有挑战性。为了解决这一问题,我们提出了CODEI/O,一种通过将原始代码转化为代码输入输出预测格式,系统性地凝练在情境驱动代码中固有的多样化推理模式的新方法。通过训练模型根据代码和测试用例(完全以自然语言表示的链式思维(CoT)推理)预测输入/输出,我们使其接触到普遍的推理原语——如逻辑流程规划、状态空间搜索、决策树遍历和模块化分解,同时将结构化推理与代码特定语法解耦,并保持程序的严谨性。实验结果表明,CODEI/O在符号推理、科学推理、逻辑推理、数学与数值推理以及常识推理任务上均实现了持续的性能提升。通过匹配现有的真实输出或重新执行代码与预测输入,我们可以验证每个预测,并通过多轮修订进一步增强链式思维,从而得到CODEI/O++并实现更高的性能。我们的数据和模型可在获得。
我们认为,现实世界中的代码程序反映了跨多种情境集成的广泛推理模式,使其成为理想的训练数据来源,同时最大程度地减少过拟合的风险。然而,传统的原始代码持续预训练方法并不理想,因为相关的推理信号通常是隐式的,并且与噪声信息交织在一起。即使是直接训练文本到代码生成的更清晰目标,也面临着挑战,因为它受到生成特定代码语法的要求的限制,这使得它难以推广到代码特定之外的任务。为了解决这些限制,我们提出将原始代码文件转化为可执行函数,并设计一个更简化的任务:给定一个函数及其相应的文本查询,模型需要完全以自然语言形式(作为链式思维(CoT)推理)预测给定输入的执行输出或给定输出的可行输入。此方法旨在将核心推理流程与代码特定语法解耦,同时保持逻辑严谨性。通过从不同来源收集和转化函数,生成的数据包含了多种基础推理技能,如逻辑流程编排、状态空间探索、递归分解和决策制定。通过从这些原始代码文件提供的多种情境中学习,模型能够反复接触这些推理过程,从而更好地内化这些技能。
类似于原始代码的持续预训练,我们的代码输入/输出预测学习被引入为一个独立的训练阶段,作为一般指令调优之前的中间步骤,用于增强基础模型的推理能力。该提示包括函数、文本查询以及给定的输入或输出,而响应则通过强大的开源模型DeepSeek-V2.5(DeepSeek-AI et al., 2024)直接生成。值得注意的是,输入输出预测的实例非常具有扩展性,因为我们可以为每个函数从单独的Python输入生成器中采样数百个输入,并执行代码以获得真实输出。最终,我们从多个来源收集了超过450K个函数,并为每个函数生成了几个输入输出对,通过执行相应的代码。为它们合成链式思维结果,最终生成了350万条训练样本,构成了CODEI/O数据集。为了进一步利用代码的可验证特性,我们通过代码执行验证所有预测,并提示DeepSeek-V2.5对其最初错误的响应进行第二轮修订。这些多轮修订被串联成更长的响应。最终生成的CODEI/O++数据集进一步提升了性能,证明了这一优化过程的有效性。
我们在四个基础模型(参数规模从7B到30B不等)上验证了CODEI/O和CODEI/O++的有效性。通过14个不同基准测试的评估,显示在这些数据上训练不仅提高了代码相关任务的性能,还提升了更广泛任务的推理能力,包括逻辑推理、符号推理、数学与数值推理、科学推理、常识推理等。与几种强大的数据基线相比,如OpenMathInstruct2(Toshniwal et al., 2024)、OpenCoderSFT-Stage1(Huang et al., 2024)、WebInstruct(Yue et al., 2024)和高质量的原始代码(Ben Allal et al., 2024),CODEI/O不仅在所有四个测试基础模型上取得了更高的平均得分,而且表现出更均衡的性能——它并非仅在少数评估基准上得分提高,同时避免了在其他基准上表现下降。CODEI/O在几乎所有基准上都带来了持续的提升,展现了均衡且具有泛化能力的推理能力。
CoDEI/O的有效性在于选择多样化的原始代码来源,涵盖广泛的推理模式。为了实现这一目标,我们选择了具有不同侧重点的来源:CodeMix,一个从内部代码预训练语料库中检索到的大量Python代码文件集合,我们过滤掉了过于简单或过于复杂的文件;PyEdu-R(推理),Python-Edu的一个子集,专注于复杂的推理任务,如STEM、系统建模或逻辑谜题。为了避免与CodeMix重叠,我们故意排除了以纯算法为中心的文件。除了这两个来源外,我们还从各种较小的、声誉良好的来源中纳入了高质量的代码文件,包括全面的算法库、具有挑战性的数学问题集和知名的在线编程平台。总共合并这些来源产生了大约81.05万个代码文件。有关数据来源的更多详细信息,请参见附录C.1。
收集的原始代码文件通常缺乏结构,包含不相关的元素,并且难以以自包含的方式执行。因此,我们使用DeepSeek-V2.5对它们进行预处理,将其转换为统一格式,强调主要逻辑功能,并使其可执行,以便我们为后续的预测任务收集输入输出对。此转换将数据组织为以下组件,我们在附录G的表8中提供了一个完整示例:
清理后的参考代码:我们通过清理和重构原始代码文件,提取核心逻辑功能到函数中。排除了非必要的元素,如可视化(例如,print、plot)和文件处理(例如,read、write)。
主入口函数:添加一个主入口函数来总结代码的整体逻辑。它可以调用其他函数或导入外部库,并且必须具有非空参数(输入)以及有意义的输出。所有输入和输出都必须是JSON可序列化的,以便进一步处理。
输入/输出描述:主入口函数的输入和输出被明确定义,包括数据类型、约束(例如,输出范围)或更复杂的要求(例如,字典中的键)。
输入生成器:不是直接生成测试用例,而是创建一个独立的基于规则的Python输入生成器函数。该生成器返回遵循主入口函数要求的非平凡输入。在约束条件下应用随机性,从而实现可扩展的数据生成。
查询:基于主入口函数生成一个简洁的问题陈述,作为描述代码预期功能的查询。
将收集的原始代码文件转换为统一格式后,我们使用输入生成器为每个函数采样多个输入,并通过执行代码获得相应的输出。为了确保输出的确定性,我们跳过了所有包含随机性的函数,例如使用import random的函数。在执行这些代码时,我们还对运行时和输入/输出对象的复杂性施加了一系列限制(详细信息见附录A)。对于每个转换后的函数,我们采样多个输入输出对,具体数量取决于其来源(详细信息见附录C.2)。在过滤掉不可执行的代码、超过运行时限制的样本以及超过所需复杂性的输入输出对后,我们从45.49万个原始代码文件中获得了350万个实例。输入和输出预测实例的分布大致平衡,各占50%。
在收集输入输出对以及转换后的函数后,我们需要将它们组装成可训练的格式。对于我们采用的监督微调过程,每个训练样本需要一个提示和一个响应。由于我们的目标是输入输出预测任务,我们使用设计的模板构建提示,将函数、查询、参考代码以及特定输入或输出组合在一起。我们在附录G的图8中提供了一个示例提示。响应理想情况下应该是自然语言的CoT,用于推理如何得出正确的输出或可行的输入。通常,我们选择以下两种方式来构建所需的CoT响应:
直接提示 - CoDEI/O:虽然拥有完整的可执行代码理论上允许我们生成可靠的执行轨迹作为响应,但面临两个挑战:1)为输入预测获得确定性的反向函数是不切实际的;2)自动构建的轨迹受限于预先设计的模板,缺乏自由形式自然语言推理的表达力和通用性。因此,我们采用完全基于LLM的方法,使用DeepSeek-V2.5合成所有所需的响应,因为它在顶级性能的同时成本极低。这里生成的数据集称为CoDEI/O。我们在图2中提供了两个收集到的响应示例。
充分利用代码 - CoDEI/O++:提高数据质量的常见方法是拒绝采样(Yuan et al., 2023),即丢弃错误的预测。尽管这种方法非常适合CoDEI/O,因为我们可以通过重新执行代码来验证所有响应,但我们发现它会导致次优性能(§4.1)。因此,我们采用另一种方法,充分利用参考代码的执行反馈。对于预测错误的响应,我们将反馈作为第二轮输入消息附加,并要求DeepSeek-V2.5重新生成另一个响应。在实践中,我们捕获多种类型的反馈:对于输出预测,我们简单地通知模型它生成了错误的答案。对于输入预测,我们额外提供基于错误输入的执行输出。对于代码无法执行的情况(例如,由于格式错误、参数不匹配错误或其他运行时错误),我们也明确包含这些反馈。
在第二轮之后,我们重新检查新生成的响应的正确性。然后,我们通过连接所有四个组件来构建最终响应:第一轮响应 + 第一轮反馈 + 第二轮响应 + 第二轮反馈。对于第一轮正确的响应,第一轮反馈仅为“成功”,没有第二轮内容。通常,在第一轮中,50%的响应是正确的,10%的错误响应可以在第二轮成功修订。与CoDEI/O类似,我们在修订后保留所有响应,无论正确与否。通过这种方式收集的数据集称为CoDEI/O++,我们在附录G的表9中提供了一个完整示例。
指令微调数据:我们使用了一个包含约118万个样本的内部指令微调数据集,涵盖了数学、编码、写作等多个领域。在该数据集上微调模型使其能够有效遵循多样化的指令,从而适用于广泛的下游任务。
训练设置:与持续预训练类似,我们在大多数实验中采用两阶段训练策略。第一阶段涉及在CoDEI/O或CoDEI/O++数据集上进行训练,随后是第二阶段的通用指令微调。
采用这种两阶段训练方法的原因在于我们数据集的特点。CoDEI/O(++)数据集包含的样本数量显著多于指令微调数据。简单地将两个数据集混合会导致分布偏差,可能导致模型在指令微调数据上的学习不足,从而无法在下游任务中充分展示其遵循多样化指令的能力。为了解决这个问题,两阶段训练首先将模型强化为更具鲁棒性的基础模型,然后通过指令微调将其适应为多功能的指令遵循模型。详细的训练超参数见附录E。
我们在表1中展示了主要评估结果。如图所示,CoDEI/O在所有基准上均带来了普遍的性能提升,优于单阶段基线和其他数据集,即使是更大的数据集。尽管竞争数据集可能在特定任务上表现出色(例如,OpenMathInstruct2在数学任务上),但在其他任务上表现不佳(混合的绿色和红色单元格),CoDEI/O则显示出一致的改进(主要是绿色模式)。尽管仅使用代码中心数据,它也提升了代码推理之外的所有其他任务,表明其具有可推广的能力。我们还观察到,在原始代码文件(PythonEdu)上训练仅带来微小的、有时甚至是负面的改进,与单阶段基线相比显著表现不佳,表明从这种结构化程度较低的数据中学习是次优的。这进一步强调了性能提升不仅仅是由数据规模驱动的,而是由精心设计的训练任务驱动的,这些任务包含了多样化的、结构化的推理模式,并以通用的CoT形式呈现。
此外,CoDEI/O++系统地优于CoDEI/O,提升了平均分数,而不会在个别任务上做出权衡。这突显了基于执行反馈的多轮修订如何提高数据质量并增强跨领域的推理能力。最重要的是,CoDEI/O和CoDEI/O++在模型规模和架构上均表现出普遍的有效性。这进一步验证了我们的训练方法,即预测代码输入和输出,使模型能够在多样化推理任务中表现出色,而不会牺牲专门基准的性能。
为了检验我们方法中不同关键方面的影响,我们进行了多项分析实验。除非另有说明,所有实验均使用Qwen 2.5 Coder 7B进行,报告的结果是在第二阶段通用指令微调后获得的。
输入/输出预测:我们通过分别训练输入预测和输出预测来检验它们的效果。得分大致相似,但输入预测在KorBench上表现优异,而在GPQA上略有下降,输出预测在符号推理任务(如BBH)上表现出更大的优势。CRUXEval-1和-O也分别偏好输入和输出预测。
拒绝采样:我们探索了使用拒绝采样过滤错误响应,这移除了50%的训练数据。然而,这导致了整体性能下降,表明数据多样性的损失。我们还尝试通过代码执行将所有错误响应替换为真实答案(没有CoT)。我们看到在LeetCode-O和CRUXEval-O等基准上有所改进,这些基准旨在衡量输出预测的准确性,但在其他地方降低了分数,从而降低了平均性能。当将这些方法与训练在CoDEI/O的约50%子集上进行比较时,它们仍然没有优势。因此,为了保持性能平衡,我们在主要实验中保留了所有错误响应,不做任何修改。
我们评估了CoDEI/O在不同训练数据量下的扩展效应。通过随机采样训练实例,图4a揭示了一个明显的趋势:增加训练样本数量通常会提高跨基准的性能。具体而言,使用最少的数据量在大多数基准上表现出相对较弱的性能,因为模型缺乏足够的训练来有效泛化。相比之下,当在完整数据集上训练时,CoDEI/O实现了最全面和稳健的性能。中等数量的数据产生的结果介于这两个极端之间,随着更多训练样本的引入,性能逐渐提高。这突显了CoDEI/O在增强推理能力方面的可扩展性和有效性。
我们还在输入输出对的维度上扩展了数据,通过固定并使用所有唯一的原始代码样本,但改变每个样本的输入输出预测实例数量。图4b显示了与完整集相比使用的I/O对的比例。尽管扩展效应不如训练样本明显,但我们仍然观察到明显的优势,特别是在从1/6增加到6/6时。这表明某些推理模式需要多个测试用例来完全捕捉和学习其复杂的逻辑流程。
我们研究了如何在训练样九游娱乐文化 九游app官方入口本中最好地安排查询、参考代码和CoT。如表3所示,将查询和参考代码放在提示中,将CoT放在响应中,实现了最高的平均分数和最平衡的性能。其他格式显示出略低但可比的性能,最差的结果发生在查询在提示中而参考代码在响应中时,类似于标准的代码生成任务,但训练样本少得多。这突显了CoT和测试用例扩展对于学习可转移推理能力的重要性。
基于CoDEI/O(无修订)和CoDEI/O++(单轮修订),我们将修订扩展到第二轮,以评估通过重新生成在第一轮修订后仍然错误的预测实例的进一步改进。我们在附录D的图7中可视化了每轮修订中响应类型的分布。它显示大多数正确的响应在第一轮中预测,大约10%的错误响应在第一轮修订中得到了纠正。然而,第二轮产生的纠正显著减少,我们发现通过检查案例,模型经常重复相同的错误CoT,而没有添加新的有用信息。在纳入多轮修订后,我们观察到从第0轮到第1轮的一致改进,但从第1轮到第2轮的改进微乎其微——LLaMA 3.1 8B略有改进,而Qwen 2.5 Coder 7B则有所下降。因此,我们在主要实验中停止在单轮修订,即CoDEI/O++。
总之,我们提出了CODEI/O,这是一种通过训练大型语言模型(LLMs)预测纯自然语言链式思维(CoTs)中的代码输入和输出,来提升其推理能力的方法。该方法利用代码的结构化和可扩展性,学习多样的推理模式,包括符号推理、逻辑推理、数学推理和常识推理。大量实验结果表明,CODEI/O及其增强版CODEI/O++始终优于现有基线方法,在各项基准测试中实现了平衡的提升,同时没有在任何领域牺牲性能,突显了其鲁棒性和多功能性。
本站曲谱部分来源于网络,仅供学习交流分享,九游娱乐吉他教学网不承担任何由于内容的使用所引起的争议及损失。如有侵权,可联系管理员删除处理。本文链接:http://www.cznoblelift.com/news/2150.html