機器之心編輯部
擴散語言模型(Diffusion Language Models, DLLMs)因其多種潛在的特性而備受關注,如能加速的非自回歸并行生成特性,能直接起草編輯的特性,能數據增強的特性。然而,其模型能力往往落后于同等規模的強力自回歸(AR)模型。
近日,華中科技大學和字節跳動聯合推出了Stable-DiffCoder。這不僅僅是一個新的擴散代碼模型,更是一次關于 「擴散訓練能否提升模型能力上限」 的深度探索。
Stable-DiffCoder 在完全復用 Seed-Coder 架構、數據的條件下,通過引入Block Diffusion 持續預訓練(CPT)及一系列穩定性優化策略,成功實現了性能反超。在 多個 Code 主流榜單上(如 MBPP,BigCodeBench 等),它不僅擊敗了其 AR 原型,更在 8B 規模下超越了 Qwen2.5-Coder ,Qwen3,DeepSeek-Coder 等一眾強力開源模型,證明了擴散訓練范式本身就是一種強大的數據增強手段。
![]()
- 論文標題:Stable-DiffCoder: Pushing the Frontier of Code Diffusion Large Language Model
- 論文鏈接: https://arxiv.org/pdf/2601.15892
- Github 鏈接: https://github.com/ByteDance-Seed/Stable-DiffCoder
- 模型鏈接: https://huggingface.co/collections/ByteDance-Seed/stable-diffcoder
![]()
擴散過程難以高效學習樣本知識
擴散過程雖然表面上可以擴充很多數據,可以作為一個數據增強的手段,但是實際上會引入很多噪聲甚至錯誤知識的學習。
例如下面的例子:
將其 mask 成
![]()
可以發現對于最后一個 mask_n,其只能在看見 a=1,b=2 的情況下去學習 a+b=7,會形成錯誤的知識映射。最后充其量也只能學到,a=3,b=4 在 a+b = 這個語境下的共現概率更大一點,不能學到明確的加法規則。
token 推理的知識和流程設計
論文通過建模這個知識的學習來解釋這個現象:
![]()
假設 c 是當前可見的樣本,根據真實分布通過這些樣本在當前位置能夠推理出的 token 集合為 C (c),大小為 K (c)(這里多個 token 同時推理的情景一致,因此只簡單的考慮單個 token 推理)。由于使用的真實分布來定義的,所以 c 越多越干凈的時候,K (c) 越小。
![]()
因此,如果用純雙向的擴散過程,在 mask 比例較大的時候,當前 token 見到的 c 變小,不干凈的概率變大,導致 K (c) 變大,難以映射到清晰的規則。同時其會產生會產生各種各樣的 c,平均每個 c 的學習量會減小。另外,還要保證訓練采樣的 c 跟推理用的 c 是一致的,才能更好的使用訓練學習的知識。
接下來論文通過在 2.5B 的模型設計實驗來進一步闡釋并證明這個結論。論文從一個 AR model 初始化,然后訓練一段新的知識。論文設計了 3 個訓練方式來探索:
![]()
(1)AR->BiDLLM: 用 AR 的方式繼續訓練,在 100k step 的時候 CPT 成雙向的 DLLM。
(2)ARDLLM->BiDLLM: 用 AR 的結構,但是使用純雙向的采樣模式來訓練。然后 100k step CPT 成 BiDLLM。
(3)BiDLLM:使用純雙向的 DLLM 訓練。
可以發現,最后效果是(1)>(2)>(3),這也符合前面的理論。不用隨機 [MASK] 的(1)方案對于知識有更快的壓縮速度,并且轉換成 BiDLLM 也保持著最佳性能,這可以證明在要高效的學好一個 DLLM,可以用 AR 或者小 block size 的 block diffusion 來進行知識壓縮。另外有趣的是,在 block=32 時(1)和(2)的表現比(3)差,但是在 100k 之后表現比(3)好。100k 之前可以說明,AR 采樣的 c 跟 block size=32 推理過程的 c 不太匹配,但是由于 AR 壓縮了大量有用的知識,稍微 CPT 一下就能適配這種推理過程。同時也可以說明,AR 這種結構的先驗,可能更適合 prompt+response 這種從左側開始推理的過程。
因此我們將訓練流程設計為,先用 AR 壓縮一遍知識,然后用 AR 退火的前一個 checkpoint 繼續 CPT 成小 block 的 block diffusion,來探索 diffusion 過程的數據增強能力。
穩定的 DLLM warmup 策略持續預訓練設計
擴散模型的持續預訓練通常對超參數的設計(如學習率)非常敏感,容易出現 grad norm 的異常變高,這也會受到各種訓練架構的影響。為了保持各種訓練架構的學習穩定,以及繁雜的調參過程,團隊設計了一種適配的 warmup 策略。
![]()
DLLM 的 CPT 過程不穩定主要受到下面 3 個原因影響:
(1)Attention 從單向變成雙向
(2)Mask 變多導致任務變得很難
(3)為了對齊 ELBO,會在交叉熵前面乘上加權系數。比如只 mask 了一個 token,會等價于只計算了這個 token 的 loss,會大幅增大這個 token 對于梯度的影響,進而影響 grad norm 和 loss。
由于退火 attention 的方式難以靈活適配 flash attention 等架構,該團隊針對(2)(3)來設計 warmup 過程。具體的,在 warmup 階段將 mask 比例上界逐漸 warmup 到最大值,從而使得一開始任務從易變難。
![]()
其次,在 warmup 階段去掉交叉熵中加權的系數,從而讓每個 token 對 loss 的影響更平穩:
![]()
Block-wise 截斷的噪聲調度
在使用 block diffusion 時,由于通過 cross attention 拼接了干凈的前綴,可以使得每個 token 都產生有用的 loss。然而如果使用傳統的 noise schedule 會使得有些塊不產生 loss 信號,通過求解積分可以算出 block 不產生信號的概率如下,這在小 block 時會特別明顯:
![]()
因此團隊做了兩個設計:(1)強制每個塊都采樣一個 token(2)將 noise 采樣下界設置為 1/B,這樣可以使得至少期望采樣一個 token。同時可以避免強制采樣 1 個 token 之后,原本對應的 t 過小,從而使得交叉熵加權過大的問題。
![]()
實驗結果:多個代碼 benchmark 在 8B 左右的模型保持領先
對于 Base 模型
![]()
![]()
![]()
Stable-DiffCoder-8B-Base 在代碼生成,多代碼語言生成,代碼推理上表現出色。超過一系列 AR 和 diffusion-based 的模型。另外可以發現模型在稀疏代碼語言上(如 C#,PHP 等,預訓練中數據較少),相比于 AR baseline 得到了大幅增強,可以證明 DLLM 的訓練過程起到了一定的數據增強的效果。同時在代碼推理能力上也得到了增強。
對于 Instruct 模型
Stable-DiffCoder-8B-Instruct 在代碼生成,代碼編輯,代碼推理等任務上做了綜合評測,并有著優越的表現。其中在常用的任務(humaneval,mbpp)上大幅超過原有 AR baseline 和其他 8B 左右的 DLLM model。在測試集閉源的 MHPP 達到 qwen32B 的水平,BigCodeBench 上更是超過一系列模型并僅次于 DeepSeek236B 的模型。同時在代碼編輯 CanItEdit 任務上更是有著驚艷的效果。
![]()
![]()
![]()
![]()
![]()
總結與展望
Stable-DiffCoder 的發布,打破了 「擴散模型只能做并行加速」 的刻板印象。它證明了:擴散訓練范式本身就是一種極佳的表征學習手段。通過合理的課程設計及穩定性優化,擴散模型完全可以在代碼理解和生成質量上超越傳統的 AR 模型。
對于未來的大模型演進,Stable-DiffCoder 提示了一條新路徑:也許我們不需要拋棄 AR,而是將 AR 作為高效的知識壓縮器,再利用 Diffusion 作為 「強化劑」,進一步推高模型的智能上限。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.