Back to blog

Stable-DiffCoder: Pushing the Frontier of Code Diffusion Large Language Model

基于扩散的代码大语言模型,通过Block Diffusion持续预训练超越自回归基线

Stable-DiffCoder: Pushing the Frontier of Code Diffusion Large Language Model

一、论文概述

项目内容
标题Stable-DiffCoder: Pushing the Frontier of Code Diffusion Large Language Model
作者Chenghao Fan, Wen Heng, Bo Li, Sichen Liu, Yuxuan Song, Jing Su, Xiaoye Qu, Kai Shen, Wei Wei
机构华中科技大学、ByteDance Seed
论文https://arxiv.org/abs/2601.15892
代码https://github.com/ByteDance-Seed/Stable-DiffCoder
模型https://huggingface.co/collections/ByteDance-Seed/stable-diffcoder
发布2026年1月22日
许可CC BY 4.0

二、核心思想

问题定义

自回归(AR)语言模型在代码生成中取得了强大成果,但其严格顺序解码无法充分利用代码固有的非自回归特性。扩散语言模型(DLLMs)提供了一种互补视角,通过迭代去噪实现非顺序、块级解码和更丰富的数据重用。然而,现有代码DLLMs在可比预算下仍落后于强大的AR基线。

核心问题:在固定数据和计算预算下,扩散引入的额外训练模式能否实际提升模型能力?

解决方案概述

Stable-DiffCoder通过以下关键创新解决这一问题:

  1. Block Diffusion持续预训练(CPT):从Seed-Coder的预退火检查点开始,使用小块扩散(块大小4)进行1.3T token的CPT
  2. 定制化Warmup:通过渐进式腐败度warmup解决AR→DLLM训练不稳定性
  3. 块级裁剪噪声调度:确保每个训练块都有非平凡的学习信号

核心发现:在相同数据和架构下,Stable-DiffCoder在广泛代码基准上总体优于其AR对应模型Seed-Coder。

三、技术架构

整体框架图

训练流程图

训练流程:从Seed-Coder的预退火检查点出发,使用小块DLLM进行持续预训练,得到Stable-DiffCoder-Base。

核心公式

AR语言模型目标函数:

LAR(θ)=−Ex∼pdata[log⁡pθ(x1)+∑i=2Nlog⁡pθ(xi∣x<i)]\mathcal{L}_{AR}(\theta) = -\mathbb{E}_{\mathbf{x} \sim p_{data}} \left[ \log p_\theta(\mathbf{x}_1) + \sum_{i=2}^{N} \log p_\theta(\mathbf{x}_i | \mathbf{x}_{<i}) \right]

DLLM目标函数:

LDLLM(θ)=−Ex0∼pdata,t∼U(0,1),xt∼q(xt∣x0)[w(t)∑i=1N1[xit=MASK]log⁡pθ(xi0∣x1:Nt)]\mathcal{L}_{DLLM}(\theta) = -\mathbb{E}_{\mathbf{x}_0 \sim p_{data}, t \sim \mathcal{U}(0,1), \mathbf{x}_t \sim q(\mathbf{x}_t|\mathbf{x}_0)} \left[ w(t) \sum_{i=1}^{N} \mathbf{1}[\mathbf{x}_i^t = \text{MASK}] \log p_\theta(\mathbf{x}_i^0 | \mathbf{x}_{1:N}^t) \right]

其中 w(t)=1/tw(t) = 1/t 是基于腐败程度的权重系数。

Token推理知识(Definition 3.1):

给定上下文 cc,定义候选集: C(c)={v∈V:p0(v∣c)≥ε},K(c)=∣C(c)∣\mathcal{C}(c) = \{ v \in \mathcal{V} : p_0(v|c) \geq \varepsilon \}, \quad K(c) = |\mathcal{C}(c)|

三种知识学习机制制:

  • 推理机制:K(c)K(c) 小,映射近乎确定性,梯度高度对齐
  • 相关机制:K(c)K(c) 中等,梯度部分抵消,主要拟合噪声共现
  • 噪声机制:K(c)K(c) 极大,上下文几乎无信息,模型只能记忆特异对

块级裁剪噪声调度:

ublk(t)=min⁡(1,max⁡(u(t),1/B))u_{blk}(t) = \min(1, \max(u(t), 1/B))

确保每个块的预期掩码token数 E[m∣t]=B⋅ublk(t)≥1\mathbb{E}[m|t] = B \cdot u_{blk}(t) \geq 1。

训练流程

  1. Warmup阶段:从AR检查点开始,渐进增加最大腐败度
    • umax(s)=uinit+(1−uinit)⋅s/Swarmupu_{max}(s) = u_{init} + (1 - u_{init}) \cdot s / S_{warmup}
    • 去除权重 w(t)w(t),优化简化目标
  2. 主训练阶段:使用标准DLLM目标,t∼U(0,1)t \sim \mathcal{U}(0,1)
  3. 块大小选择:采用块大小4,平衡数据增强效果和训练效率

训练稳定性

Warmup前后对比

Warmup显著改善训练稳定性:

  • 梯度范数峰值大幅降低
  • 损失曲线呈”V形”(先降后升再降)
  • 最终损失与AR CPT相当

四、核心创新

创新点说明理论/实验依据
Token推理知识分析形式化分析随机掩码下的知识学习效率区分推理/相关/噪声三种机制制
AR→DLLM训练课程先AR高效压缩知识,再小块DLLM增强2.5B规模实验验证 (1)>(2)>(3)(1) > (2) > (3)
块级裁剪噪声调度确保每个块有非平凡学习信号$\Pr[m=0
渐进式Warmup从低腐败度渐进增加,去除损失权重消除AR→DLLM边界梯度峰值

五、实验结果

基准测试

Base模型性能

模型类型HumanEvalHumanEval+MBPPMBPP+
Seed-Coder-8B-BaseAR77.468.382.069.0
Stable-DiffCoder-8B-BaseDLLM79.373.883.667.7
WeDLM-8B-BaseDLLM75.068.967.0-
Dream-7B-BaseDLLM56.750.068.757.4

Instruct模型性能

模型HumanEvalHumanEval+MBPPMBPP+
Seed-Coder-8B-Instruct84.878.785.271.2
Stable-DiffCoder-8B-Instruct86.682.385.772.8
Qwen2.5-Coder-7B-Instruct88.484.183.571.7
Dream-Coder-7B-Instruct82.9-79.6-

多语言代码生成 (MBXP平均)

模型平均
Seed-Coder-8B-Instruct75.3
Stable-DiffCoder-8B-Instruct75.3
Qwen2.5-Coder-7B-Instruct72.9
Yi-Coder-9B-Chat71.8

更难基准

模型MHPPBigCodeBench-FullBigCodeBench-HardLiveCodeBench
Seed-Coder-8B-Instruct36.253.326.424.7
Stable-DiffCoder-8B-Instruct42.454.831.823.5
Qwen3-8B32.851.723.023.5

关键发现

  1. 多语言增益:在C#、PHP等低资源语言上获得显著提升,扩散的随机采样有效放大稀缺数据的学习信号

  2. 代码推理能力:在CRUXEval上,Stable-DiffCoder-8B-Base的Output-CoT达到60.0%,超过Seed-Coder的54.8%

  3. 代码编辑优势:在CanItEdit上达到60.0%,大幅超过所有其他模型,得益于去噪训练天然适合编辑/填充模式

  4. 代码生成平衡:在Aider上略弱于Seed-Coder(54.9 vs 57.1),可能因长上下文超出训练窗口

与DLLM基线对比

DLLM模型规模HumanEvalMBPP
LLaDA-8B-Instruct8B49.441.0
Dream-7B-Instruct7B63.468.3
DiffuCoder-7B-Instruct7B72.075.1
Stable-DiffCoder-8B-Instruct8B86.685.7
Mercury Coder-90.077.1
Gemini Diffusion-89.676.0

六、核心贡献

  1. 理论分析:提出Token推理知识框架,形式化分析DLLM的知识学习效率
  2. 训练课程:设计AR→小块DLLM的高效训练流程
  3. 训练稳定性:通过Warmup和块级裁剪噪声调度解决DLLM CPT不稳定性
  4. SOTA结果:在~8B规模代码模型中达到最佳性能

七、相关工作

论文方法与Stable-DiffCoder的区别
LLaDA全序列掩码扩散块大小=1,更适合AR式解码
Dream扩散语言模型未使用块扩散,性能较低
DiffuCoder扩散代码模型未解决AR→DLLM训练不稳定性
SDAR半自回归扩散混合AR/扩散,不同训练策略
Seed-CoderAR基线相同架构和数据,用于公平对比

八、总结

核心贡献

  • 首次系统研究DLLM中的高效知识获取
  • 设计稳定的AR→DLLM持续预训练流程
  • 在相同数据和架构下超越AR基线

技术影响

  • 证明扩散训练可作为有效的数据增强手段
  • 为代码DLLM提供实用的训练最佳实践
  • 启发后续扩散语言模型研究

局限性

  • 主要聚焦代码领域,数学推理和通用文本任务可能受限
  • 长上下文任务(如Aider)性能略降
  • 未探索更大规模模型的扩展性

九、参考资源