扩散语言模型(DLLMs)凭借非自回归并行生成、可直接起草编辑、能做数据增强等特性备受关注,但长期以来,其模型能力始终落后于同等规模的自回归(AR)模型,这也成为扩散模型在代码生成领域落地的一大痛点。而近日,华中科技大学与字节跳动联合推出的Stable-DiffCoder,彻底打破了这一僵局 —— 这款扩散代码模型在完全复用 Seed-Coder 架构与数据的基础上,通过创新的训练策略和稳定性优化,不仅实现了对其 AR 原型的性能反超,更在 8B 规模下击败了 Qwen2.5-Coder、Qwen3、DeepSeek-Coder 等一众主流开源代码模型,证明了扩散训练范式本身就是一种强大的表征学习与数据增强手段。
相关研究成果已发布论文,同时开源了模型代码与权重,可通过 arxiv、Github 及 Hugging Face 平台获取相关资源:
-
Github 链接: https://github.com/ByteDance-Seed/Stable-DiffCoder
-
模型链接: https://huggingface.co/collections/ByteDance-Seed/stable-diffcoder
核心痛点:扩散过程难以高效学习样本知识
扩散模型看似能通过扩充数据实现数据增强,但实际训练中会引入大量噪声甚至错误知识,导致模型无法有效学习样本中的明确规则。以简单的加法运算为例,原始样本a = 1, b = 2, a + b= 3; a = 3, b= 4, a + b= 7经 mask 后,部分掩码位置会出现错误的知识映射,模型无法学到清晰的加法逻辑,仅能捕捉到数据的共现概率。
研究团队通过建模 token 推理的知识与流程解释了这一现象:模型想要学好目标分布,需要满足可见样本足够多且干净、采样样本与推理样本一致两个核心条件。而纯双向的扩散过程在 mask 比例较大时,会让可见样本减少、噪声增加,同时分散学习量,最终导致模型难以高效掌握知识。
为验证这一理论,团队以 2.5B 模型为基础,设计了三种不同的训练方式展开实验:
-
AR->BiDLLM:先以 AR 方式训练压缩知识,100k step 时转为双向 DLLM 持续预训练(CPT);
-
ARDLLM->BiDLLM:采用 AR 结构,以纯双向采样模式训练,再转为 BiDLLM;
-
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 截断的噪声调度策略:
-
强制每个块都采样一个 token,确保基础损失信号;
-
将噪声采样下界设置为 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 在代码生成、编辑、推理等全任务上表现惊艳,核心亮点包括:
-
核心榜单霸榜:HumanEval(86.6)、MBPP(85.7)得分大幅超越同规模 AR 与扩散模型,MHPP pass@1 达 42.4,追平 Qwen2.5-Coder-32B-Instruct;
-
代码编辑能力突出:CanItEdit pass@1 达 60.0,远超同规模所有模型,成为一大核心优势;
-
多语言与推理能力优异:多语言代码生成平均得分 75.3,与 Seed-Coder-8B-Instruct 持平,代码推理 CRUXEval Output-CoT 达 69.0,展现出强大的逻辑理解能力;
-
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 任务中实现能力突破。
