
这项由Salesforce AI Research团队的陈浩霖、王诗雨、秦灿等多位研究人员共同完成的研究发表于2025年1月,论文标题为"CoDA: Coding LM via Diffusion Adaptation"。感兴趣的读者可以通过arXiv:2510.03270v1查询完整论文,或在GitHub上搜索"SalesforceAIResearch/CoDA"获取开源代码和模型。
当我们谈论AI写代码时,大多数人想到的可能是那些动辄几十亿参数的庞然大物。就像造房子一样,人们总觉得材料越多、工人越多,房子就能建得越好。但Salesforce的研究团队却用一个只有17亿参数的"小个子"模型CoDA,向这种常识发起了挑战,证明了有时候巧妙的设计比单纯的体量更重要。
要理解CoDA的特别之处,我们得先明白传统代码生成AI的工作方式。现在主流的自回归模型就像是一个从左到右写字的人,它必须按顺序一个字一个字地写下去,一旦写错了某个字,后面的内容就可能全盘皆错。更要命的是,这种模型在面对需要"填空"的任务时就显得很笨拙,比如在已有代码的中间插入一段新功能,或者根据前后文的提示来补全缺失的代码片段。
CoDA采用的扩散模型则完全不同,它的工作方式更像是一个雕塑家。雕塑家不是从左到右逐步完成作品,而是从一块模糊的石料开始,逐渐雕琢出清晰的形状。CoDA也是如此,它从一堆"噪声"开始,通过多次迭代逐步"去噪",最终生成清晰完整的代码。这种方式的最大优势在于,模型可以同时考虑前后文的信息来做决策,就像雕塑家可以随时调整作品的任何部分,确保整体的协调性。
要训练这样一个模型绝非易事,研究团队设计了一套渐进式的训练策略,就像培养一个学徒从简单任务开始,逐步挑战更复杂的工作。训练分为三个阶段,每个阶段都有不同的重点和目标。
一、从通用能力到专业技能:CoDA的三阶段成长之路
CoDA的训练过程就像培养一个全能工匠的过程,需要经历从学徒到师傅的三个关键阶段。
预训练阶段就像是给这个"AI学徒"打基础,让它广泛接触各种文本和代码材料。研究团队准备了约1800亿个token的海量数据,其中包括网页文本、Python代码、多种编程语言代码、数学文本、学术论文和百科全书内容。这就像让学徒接触各行各业的知识,建立广泛的认知基础。
有趣的是,研究团队在这个阶段就开始使用一种叫做"渐进式掩码"的训练技巧。简单来说,就是在训练时故意遮挡一些文字让模型去猜测,但遮挡的方式会越来越复杂。最开始可能只是随机遮挡几个词,后来会遮挡整个句子段落,甚至会故意留下开头部分让模型续写后面的内容。这种训练方式让模型学会了从不完整的信息中推断出完整的内容,为后续的代码生成任务做好了准备。
中期训练阶段则像是让学徒开始专门学习编程这门手艺。研究团队精选了约210亿个token的高质量数据,其中既包括学术论文这样的高质量文本,也包括专门的编程教育材料和精心筛选的代码库。这个阶段的重点是让模型在保持通用能力的同时,强化对编程语言和代码结构的理解。
更重要的是,研究团队在这个阶段进一步加强了渐进式掩码训练。他们设计了三种特殊的掩码策略。第一种是"不可掩码前缀"策略,就像给学徒一个开头提示,然后让他完成后面的工作。第二种是"截断后缀"策略,故意把结尾部分去掉,训练模型处理不完整输入的能力。第三种是"块状掩码"策略,不再是随机遮挡单个词汇,而是遮挡连续的代码块,这更接近真实的代码编写场景。
后训练阶段就像是让这个已经掌握基本技能的工匠学会如何与人类客户交流,理解他们的需求并提供有用的服务。研究团队使用了OpenCoder数据集中的指令微调数据,训练模型学会理解人类的编程需求,并生成符合要求的代码。这个阶段使用了较小的学习率和精心设计的训练策略,确保模型在学会"说人话"的同时不会忘记之前学到的编程技能。
二、小巧身材下的强大内核:CoDA的技术创新
CoDA最令人惊讶的地方在于,它用仅仅17亿个参数就实现了媲美70亿参数模型的性能。这就像用一台小型车的油耗达到了大型SUV的动力表现,背后必然有着精巧的设计。
CoDA的核心技术基于扩散模型的数学原理。传统的扩散模型最初是为图像生成设计的,将图像看作连续的像素值分布。但代码是由离散的token组成的,这就需要特殊的处理方式。研究团队采用了一种叫做"分类扩散"的方法,将每个token位置看作一个分类问题。
具体来说,在训练时,模型会随机将一些token替换为特殊的"掩码"标记,然后学习根据上下文信息来预测原始的token是什么。这个过程用数学公式表达就是:给定一个噪声程度t,token以概率βt被替换为掩码,以概率(1-βt)保持原样。模型的目标是学会一个函数fθ,能够从被掩码的序列中准确预测出原始的token。
为了让这个过程更加高效,研究团队还引入了"置信度引导采样"技术。这就像给模型装上了一个"自信度检测器",让它能够判断自己的预测有多可靠。当模型对某个位置的预测很有信心时,就会更快地确定这个位置的内容;当不确定时,就会多花一些时间来仔细考虑。这种机制让推理过程既保持了质量,又提高了效率。
三、训练基础设施:TPU上的高效实现
要训练这样一个复杂的模型,需要强大的计算基础设施支持。研究团队选择了Google的TPU(张量处理单元)作为训练平台,并基于PyTorch/XLA库和torchprime框架开发了专门的训练器。
这个训练系统就像一个高度自动化的工厂流水线。它能够自动处理数据的分布式加载、模型状态的分布式保存,还能根据训练进度自动调整掩码策略。整个系统在TPU v4-1024集群上运行时,能够达到每秒处理约10亿个token的惊人速度。
特别值得一提的是,研究团队将整个训练流程完全开源,包括数据处理脚本、训练代码和模型检查点。这就像不仅公布了菜谱,还把厨房的设计图纸和烹饪技巧都无偿分享给了整个社区。这种开放态度大大降低了其他研究团队复现和改进这项工作的门槛。
四、实战表现:小模型的大能量
CoDA在实际测试中的表现令人印象深刻。在两个广泛使用的编程能力评测基准HumanEval和MBPP上,CoDA-1.7B-Instruct的表现都达到了令人满意的水平。
在HumanEval测试中,CoDA取得了54.3%的pass@1分数,这意味着它能够一次性正确解决超过一半的编程问题。虽然这个成绩还不如一些更大的模型,但考虑到它只有17亿参数的体量,这已经是相当出色的表现了。更重要的是,当与同样大小的自回归模型比较时,CoDA展现出了明显的优势,特别是在需要理解前后文关系的复杂编程任务上。
在MBPP测试中,CoDA的表现同样亮眼,达到了47.2%的pass@1分数。这个测试更加注重实际编程场景中的问题解决能力,CoDA的良好表现说明它不仅能够生成语法正确的代码,还能理解和解决实际的编程需求。
研究团队还专门测试了推理效率与性能之间的平衡关系。他们发现,随着扩散步数的增加,模型性能确实会提升,但在512步之后提升就变得很有限了。这个发现很有实用价值,因为它告诉我们可以在保持良好性能的同时大幅缩短推理时间。
与更大的模型相比,CoDA在推理速度上有着明显优势。由于参数量只有大模型的四分之一左右,它的推理延迟比同类扩散模型低约40%。这就像用一台小型车达到了大型车80%的载货能力,但油耗却只有一半,在实际应用中显然更有吸引力。
五、创新亮点:渐进式掩码策略的妙用
CoDA最具创新性的技术之一就是渐进式掩码策略。这个策略的巧妙之处在于它很好地解决了训练和推理之间的分布差异问题。
在传统的训练中,模型看到的总是随机掩码的文本,但在实际使用时,往往需要根据给定的前缀生成后续内容。这就像一个学生在练习时总是做填空题,但考试时却要写作文,两种任务的要求是不同的。
CoDA的渐进式掩码策略通过三种不同的掩码方式来缓解这个问题。不可掩码前缀策略让模型学会如何根据给定的开头来生成内容,这直接对应了实际使用中的场景。截断后缀策略则训练模型处理不完整输入的能力,这在实际编程中很常见,比如需要根据部分需求描述来推断完整的功能实现。
块状掩码策略可能是最有趣的一个创新。传统的掩码通常是随机遮挡单个token,但CoDA会遮挡连续的代码块。这种训练方式更接近真实的编程场景,比如需要填补函数中间的逻辑,或者根据函数签名和注释来实现函数体。
这种渐进式的训练策略不仅提高了模型的性能,还增强了它的泛化能力。就像一个经过全面训练的运动员能够适应各种不同的比赛环境一样,经过渐进式掩码训练的CoDA能够更好地处理各种不同的代码生成任务。
六、开源贡献:推动整个领域的发展
CoDA项目最值得称赞的一点是它的完全开源策略。研究团队不仅公开了最终的模型权重,还分享了完整的训练代码、数据处理流程和评估框架。这种开放态度在当前AI领域并不多见,特别是对于性能优秀的模型来说。
这种开源策略的价值远超模型本身。完整的TPU训练流程代码让其他研究团队能够在类似的硬件环境下复现实验,大大降低了进入扩散语言模型研究的门槛。详细的数据处理脚本也帮助社区更好地理解如何准备和处理大规模训练数据。
更重要的是,这种开放性促进了整个领域的快速发展。其他研究团队可以基于CoDA的工作进行改进和扩展,而不需要从零开始摸索。这就像在科学研究中,一个重要发现会激发出更多的后续研究一样,CoDA的开源为扩散代码生成模型的发展奠定了坚实的基础。
研究团队还提供了详细的评估harness,让其他研究者能够在相同的标准下比较不同模型的性能。这种标准化的评估方式对于推动领域进步具有重要意义,它确保了不同研究之间的结果具有可比性。
简单来说,CoDA不仅仅是一个性能优秀的模型,更是一个推动整个扩散代码生成领域发展的催化剂。它的开源策略和完整的技术文档为后续研究提供了宝贵的资源和参考。
CoDA的成功证明了在AI发展中,巧妙的设计和创新的方法往往比单纯的规模扩大更有价值。这个只有17亿参数的"小个子"模型,通过精心设计的扩散架构和创新的训练策略,在代码生成任务上达到了令人瞩目的性能。更重要的是,它为整个领域提供了一条不同于传统"大力出奇迹"的发展路径,证明了效率和性能可以兼得。
当然,CoDA也还有改进空间。与最强的大型自回归模型相比,它在某些任务上仍有差距。但考虑到它在计算效率、推理速度和资源消耗方面的优势,这种性能差异是可以接受的。更何况,随着技术的不断发展,这种差距很可能会进一步缩小。
展望未来,CoDA的成功可能会激发更多关于高效AI模型的研究。在资源日益紧张、环境保护要求日益严格的今天,像CoDA这样既高效又强大的模型代表了一个很有前景的发展方向。它告诉我们,AI的进步不一定要依赖于越来越大的模型和越来越多的计算资源,有时候,聪明的设计和巧妙的方法能够创造出更大的价值。对于那些想要深入了解这项研究的读者,可以访问GitHub搜索"SalesforceAIResearch/CoDA"获取完整的开源代码和模型,或者通过arXiv:2510.03270v1查阅完整的技术论文。
Q&A
Q1:CoDA与传统的代码生成AI有什么不同?
A:CoDA使用扩散模型技术,工作方式像雕塑家一样从模糊到清晰逐步生成代码,可以同时考虑前后文信息。而传统的自回归模型像写字一样从左到右逐个生成,一旦出错就容易影响后续内容,在代码填空等任务上表现较弱。
Q2:为什么CoDA只有17亿参数却能媲美70亿参数的大模型?
A:CoDA通过精心设计的扩散架构和创新的渐进式掩码训练策略实现了高效性能。它采用了三种特殊的掩码策略和置信度引导采样技术,让模型能够更好地理解代码结构和上下文关系,从而用更少的参数达到更好的效果。
Q3:普通开发者可以使用CoDA吗?如何获取?
A:可以使用。CoDA完全开源,开发者可以通过GitHub搜索"SalesforceAIResearch/CoDA"获取模型代码和权重,也可以在HuggingFace上搜索"Salesforce/CoDA-v0-Instruct"直接下载模型。研究团队还提供了完整的训练和推理代码,方便开发者集成到自己的项目中。
好文章,需要你的鼓励
过去十年,终端厂商比拼的是“性能”和“参数”,如今,竞争的焦点正转向“智能程度”。
Fractal AI Research实验室开发了Fathom-DeepResearch智能搜索系统,该系统由两个4B参数模型组成,能够进行20多轮深度网络搜索并生成结构化报告。研究团队创新了DUETQA数据集、RAPO训练方法和认知行为奖励机制,解决了AI搜索中的浅层化、重复性和缺乏综合能力等问题,在多项基准测试中显著超越现有开源系统,为AI助手向专业研究工具转变奠定了基础。
快手科技与清华大学合作发现当前AI语言模型训练中存在严重的权重分配不平衡问题,提出了非对称重要性采样策略优化(ASPO)方法。该方法通过翻转正面样本的重要性权重,让模型把更多注意力放在需要改进的部分而非已经表现良好的部分,显著提升了数学推理和编程任务的性能,并改善了训练稳定性。