Stable-DiffCoder 横空出世!扩散模型实现代码生成能力反超自回归模型

扩散语言模型(DLLMs)凭借非自回归并行生成、可直接起草编辑、能做数据增强等特性备受关注,但长期以来,其模型能力始终落后于同等规模的自回归(AR)模型,这也成为扩散模型在代码生成领域落地的一大痛点。而近日,华中科技大学与字节跳动联合推出的Stable-DiffCoder,彻底打破了这一僵局 —— 这款扩散代码模型在完全复用 Seed-Coder 架构与数据的基础上,通过创新的训练策略和稳定性优化,不仅实现了对其 AR 原型的性能反超,更在 8B 规模下击败了 Qwen2.5-Coder、Qwen3、DeepSeek-Coder 等一众主流开源代码模型,证明了扩散训练范式本身就是一种强大的表征学习与数据增强手段。

相关研究成果已发布论文,同时开源了模型代码与权重,可通过 arxiv、Github 及 Hugging Face 平台获取相关资源:

核心痛点:扩散过程难以高效学习样本知识

扩散模型看似能通过扩充数据实现数据增强,但实际训练中会引入大量噪声甚至错误知识,导致模型无法有效学习样本中的明确规则。以简单的加法运算为例,原始样本a = 1, b = 2, a + b= 3; a = 3, b= 4, a + b= 7经 mask 后,部分掩码位置会出现错误的知识映射,模型无法学到清晰的加法逻辑,仅能捕捉到数据的共现概率。

研究团队通过建模 token 推理的知识与流程解释了这一现象:模型想要学好目标分布,需要满足可见样本足够多且干净采样样本与推理样本一致两个核心条件。而纯双向的扩散过程在 mask 比例较大时,会让可见样本减少、噪声增加,同时分散学习量,最终导致模型难以高效掌握知识。

为验证这一理论,团队以 2.5B 模型为基础,设计了三种不同的训练方式展开实验:

  1. AR->BiDLLM:先以 AR 方式训练压缩知识,100k step 时转为双向 DLLM 持续预训练(CPT);

  2. ARDLLM->BiDLLM:采用 AR 结构,以纯双向采样模式训练,再转为 BiDLLM;

  3. BiDLLM:全程使用纯双向 DLLM 训练。

实验结果显示,模型性能呈现1>2>3的趋势,证明先通过 AR 做知识压缩,再转为小块大小的块扩散(Block Diffusion)进行训练,是让扩散模型高效学习知识的最优路径。同时实验还发现,AR 结构的先验更适配 prompt+response 的左侧推理过程,为后续训练流程的设计提供了关键依据。

创新解法:三大核心策略打造高性能稳定扩散模型

针对扩散模型在代码生成中的训练痛点与稳定性问题,Stable-DiffCoder 研发团队设计了Block Diffusion 持续预训练、稳定的 DLLM warmup 策略、Block-wise 截断的噪声调度三大核心优化策略,从知识学习、训练稳定、损失信号三个维度解决扩散模型的固有问题。

1. 训练流程设计:AR 知识压缩 + Block Diffusion 持续预训练

基于前述实验结论,团队将训练流程分为两步:首先用自回归模型对数据进行知识高效压缩,让模型先掌握清晰的样本规则;再以 AR 退火前的 checkpoint 为基础,转为小 block size 的 Block Diffusion进行持续预训练,充分挖掘扩散过程的数据增强能力,实现模型能力的进一步提升。

2. 稳定训练策略:适配性 DLLM warmup 解决梯度异常

扩散模型的持续预训练对超参数高度敏感,容易出现梯度范数(grad norm)异常升高的问题,核心诱因包括 Attention 从单向变双向、mask 增多导致任务难度陡增、交叉熵加权系数放大单个 token 的梯度影响。

由于退火 Attention 难以适配 Flash Attention 等主流架构,团队针对后两个诱因设计了适配性 warmup 策略

  • 逐步提升 mask 比例上界,让训练任务从易到难,实现平稳过渡;

  • warmup 阶段移除交叉熵的加权系数,让每个 token 对损失的影响更均衡,避免梯度剧烈波动。

实验证明,加入该 warmup 策略后,模型的训练损失与梯度范数均保持稳定,解决了扩散模型预训练的不稳定性问题。

3. 噪声调度优化:Block-wise 截断保证有效损失信号

使用 Block Diffusion 时,传统噪声调度会导致部分块无法产生有效损失信号,且小 block size 下这一问题会更加明显。团队通过求解积分得出,块不产生信号的概率与块大小成反比,为此设计了Block-wise 截断的噪声调度策略

  1. 强制每个块都采样一个 token,确保基础损失信号;

  2. 将噪声采样下界设置为 1/B(B 为块大小),既保证至少采样一个有效 token,又避免因采样 t 过小导致的交叉熵加权过大问题。

该策略通过公式ublk(t) = min(1, max(u(t), 1/B))实现,让每个块都能为模型训练提供有效损失信号,大幅提升训练效率。

实验结果:8B 规模霸榜主流代码榜单,多维度能力领先

研发团队在Base 版Instruct 版两个版本的 Stable-DiffCoder 上,开展了全维度的代码生成评测,覆盖 HumanEval、MBPP、BigCodeBench、CanItEdit、CRUXEval 等主流代码榜单,同时测试了多语言代码生成、代码推理、代码编辑等核心能力,结果显示 8B 规模的 Stable-DiffCoder 在各维度均实现领先。

Base 版模型:刷新扩散代码模型基准,超越同等 AR 模型

在 8B 左右规模的 Base 模型评测中,Stable-DiffCoder-8B-Base 不仅大幅超越所有同规模扩散代码模型,更在 HumanEval、MBPP 等核心榜单上击败 Qwen2.5-Coder-7B、OpenCoder-8B-Base 等经典 AR 模型,其中 Python、PHP、C# 等多语言代码生成的平均得分达 71.2,较 Seed-Coder-8B-Base 提升 3.6,在稀疏数据语言(如 PHP、C#)上的表现更是大幅增强,印证了扩散训练的数据增强效果

Instruct 版模型:多任务全面领先,逼近大参数量模型

Stable-DiffCoder-8B-Instruct 在代码生成、编辑、推理等全任务上表现惊艳,核心亮点包括:

  1. 核心榜单霸榜:HumanEval(86.6)、MBPP(85.7)得分大幅超越同规模 AR 与扩散模型,MHPP pass@1 达 42.4,追平 Qwen2.5-Coder-32B-Instruct;

  2. 代码编辑能力突出:CanItEdit pass@1 达 60.0,远超同规模所有模型,成为一大核心优势;

  3. 多语言与推理能力优异:多语言代码生成平均得分 75.3,与 Seed-Coder-8B-Instruct 持平,代码推理 CRUXEval Output-CoT 达 69.0,展现出强大的逻辑理解能力;

  4. BigCodeBench 表现亮眼:Full 版本 54.8、Hard 版本 31.8,仅次于 236B 规模的 DeepSeek-Coder-V2-Instruct,在 8B 规模模型中无出其右。

此外,Stable-DiffCoder 在 LiveCodeBench 等实战性较强的榜单上也保持同规模领先,证明其能力不仅限于实验室评测,更具备实际落地价值。

研究意义与未来展望

Stable-DiffCoder 的发布,打破了行业内 **「扩散模型只能做并行加速,能力不如 AR 模型」的刻板印象,核心证明了扩散训练范式是一种优秀的表征学习手段 **—— 通过合理的课程设计、知识压缩与稳定性优化,扩散模型完全可以在代码理解与生成质量上实现对传统 AR 模型的反超。

而对于大模型的未来演进,Stable-DiffCoder 也提供了一条全新的思路:无需将 AR 与扩散模型对立,而是可以将AR 作为高效的知识压缩器,先让模型快速掌握样本核心规则,再利用Diffusion 作为能力强化剂,通过其数据增强与表征学习优势,进一步推高模型的智能上限。

这一研究成果不仅为扩散模型在代码生成领域的发展打开了新空间,也为大模型的训练范式创新提供了重要参考,未来结合更大参数量、更丰富的训练数据,扩散模型有望在更多 AI 任务中实现能力突破。

这个新模型看起来挺厉害啊

这个模型看起来挺厉害的

这训练策略有点意思啊,AR先学规则再扩散增强,思路挺巧妙的。

扩散模型居然能反超AR了

这个扩散模型在代码生成上表现真不错

扩散模型终于站起来了

这个训练路径有意思

扩散模型终于能打了

扩散模型也能反超了

这个思路确实挺有意思的