![]()
機器之心編輯部
這兩年,擴散語言模型(Diffusion LLM)一直是個很有討論度的方向。
和傳統自回歸模型不同,擴散模型不是嚴格按從左到右一個 token 一個 token 往外吐,它在生成方式上更靈活,也天然更適合并行建模。可問題也一直擺在那里:這條路很有潛力,但真正把效果做上去并不容易。
最近有一篇來自華為諾亞方舟實驗室的工作,探究了擴散模型訓練中的 “默認設置”。論文標題叫 Mask Is What DLLM Needs: A Masked Data Training Paradigm for Diffusion LLMs。作者沒有先去改模型結構,而是把目光放回了訓練過程里一個看起來很基礎、但其實一直被默認接受的設定:masking 到底該怎么做
![]()
- 論文鏈接:https://arxiv.org/abs/2603.15803
- 數據集鏈接:https://huggingface.co/datasets/malr07/opc-sft-stage2-dense-extracted
這篇文章給出的判斷是,現有很多離散擴散語言模型在訓練時采用的均勻隨機 masking,其實有點 “平均用力” 了。
這個問題在一般文本里可能還沒那么明顯,但到了代碼和數學推理任務上,就會變得很突出。因為這類數據里,真正決定模型能不能做對的,往往只是少數幾個關鍵位置:在代碼任務里,可能是關鍵的分支條件、判斷邏輯;在數學里,可能是關鍵的化簡步驟、函數替換,這些東西顯然比連接詞或者格式內容更重要。事實上,真實序列里的信息密度本來就不是均勻分布的,而傳統隨機 masking 卻默認每個位置都差不多,這會被動地讓模型把不少優化資源花在不那么關鍵的地方。
說白了,就是模型學的時候沒太分清主次,所有東西都一樣對待了。
不是所有 token 都一樣重要
這篇工作的核心想法其實一句話就能概括:
既然不同 token 的信息量不一樣,那訓練時就不該對它們一視同仁。
圍繞這個想法,作者提出了一個更加 Smart(Input Information Density Aware)的 Noise Scheduler。它做了一件很簡單且直觀的事情:先想辦法把樣本里那些 “信息密度高” 的位置找出來,然后在訓練時更優先地 mask 掉這些位置,逼著模型去學會恢復真正關鍵的部分。
這套做法背后的直覺其實很自然,人做完形填空的時候,也不會覺得補一個逗號和補一句關鍵結論的難度是一樣的。真正能拉開差距的,通常就是那些牽一發而動全身的地方。論文里也提到,這種設計的直覺和人類的挖空練習很接近:更高效的學習,往往不是去恢復冗余內容,而是去恢復核心概念。
![]()
先找 “重點”,再決定怎么 mask
具體做法上,作者先做了一步高信息密度區域提取(Step 1)。
![]()
對于代碼數據和數學數據,作者設計了一些不同的 criteria。將數據中的關鍵信息區域提取出來之后,這些區域會在原始序列中被高亮標記出來,后面訓練時的噪聲調度就會參考這些特殊標記。
接下來進入真正的 masking 階段(Step 2)。和傳統做法不同,這里不是所有位置都按同樣概率被 mask。作者把序列分成兩類:一類是優先區域,也就是那些信息密度高的 token;另一類是普通區域。前者會被賦予更高的 mask 概率,后者保持較低概率。與此同時,整體的 mask 比例仍然會被控制住,不會因為 “偏心” 了某些位置就把整個噪聲調度搞亂。
這個設計最關鍵的一點在于,它不是單純 “多遮一點”,而是把訓練難點往真正值得學的地方推。模型被反復要求補全的,不再只是隨機缺失的內容,而是那些決定代碼是否成立、推理是否走通的關鍵片段。
另一個小巧思:一條數據,兩種學法
如果只是優先 mask 掉高信息區域,很容易讓人擔心另一個問題:模型會不會變得更會 “做題”,但對語言結構本身?
所以這里引入了擴散模型訓練中常用的 Complementary Masking。
思路是:對同一條樣本,Trainer 不只根據前文的 token-level 優先標記構造一個 priority mask,還會構造它的完全邏輯互補版本。也就是說,一份樣本會變成兩種互補的訓練視角:一種把重點放在邏輯骨架上,另一種則更多保留這些關鍵位置,轉而讓模型去處理結構、語法和上下文連貫性。
這種將互補掩碼與優先級掩碼結合的設計得到了一種 1+1>2 的效果,因為它沒有把問題簡化成 “只要盯住重點就行”,而是承認:語言模型最終還是既要會推理,也得會組織語言。前一種視角更像是在逼模型抓住關鍵邏輯,后一種視角則是在防止它把句子寫散、把上下文關系學丟。論文把這種效果稱為一種基于信息密度的 decoupling,本質上是在把一條訓練樣本里的不同學習目標拆開。
改改噪聲調度就能直接提點
實驗部分,作者使用 LLaDA-2.0-mini 作為基礎模型,在代碼和數學數據上進行訓練,最后在 HumanEval、MBPP、GSM8K、MATH500 四個 benchmark 上做評測。結果顯示,相比標準的隨機 masking baseline,這套方法的平均成績提升了大約 4%。
![]()
這個幅度不屬于那種一眼看上去特別炸裂的數字,但放在這里其實挺有說服力。原因在于,這項工作并沒有去改 backbone,也沒有上特別重的額外模塊,它動的是訓練范式本身,兩個數字之間唯一的差異只有噪聲調度。換句話說,它不是靠 “再堆一點結構” 把結果抬上去,而是證明了只要訓練信號分配得更合理,擴散模型本身還有不少潛力沒被用出來。
有個消融結果很值得注意:不是越狠越好
論文里另一個有啟發性的部分,其實是關于 hard masking 和 soft masking 的比較。
直覺上你可能會覺得,既然高信息區域重要,那就干脆把這些位置狠狠遮掉,讓模型專門練這個,不是更好嗎?但實驗結果并不是這樣。作者發現,確定性的 hard masking 反而容易把訓練搞壞,效果反而不如帶概率的 soft masking。
![]()
![]()
他們給出的解釋也挺合理。代碼和數學里的高信息區域,很多時候在文本里是連續出現的。如果把這一整段連續內容都直接硬遮掉,那么在 block diffusion 的訓練過程中,就相當于突然挖掉了一大片局部錨點,出現了一大片連續的 “內容黑洞”。論文把這個現象叫做 contextual collapse:局部參照一旦沒了,訓練過程就容易失穩,梯度軌跡也會變得很難控制。相比之下,soft mask 雖然也提高了這些位置被遮掉的概率,但畢竟還保留了隨機性,不至于每次都把關鍵部分整個掏空,因此優化會平滑得多。
這一點其實挺像很多訓練技巧最后都會落到的那個結論:方向對了不代表力度越大越好,給模型留一點緩沖,往往更重要。
只處理一小部分數據,就已經能看到收益
另一個比較實用的發現,是這套方法的數據效率。
作者沒有要求對全部訓練數據都做離線的信息密度提取,而是做了不同比例的數據實驗。結果顯示,只對 10% 的代碼數據做這一步處理,就已經能把平均成績從 55.32 拉到 59.45。再繼續往上加到 30%,甚至加到 100%,性能提升會逐漸趨于飽和;到了 100% 時,雖然代碼類指標還能沖高,但數學推理表現反而會掉下來。論文把這種現象歸因于 domain shift:代碼側結構先驗加得太多,反而擠占了模型在其他推理任務上的泛化空間。
這部分結果挺重要,因為它說明這件事并不一定是個 “高成本、重工程” 的方案。相反,作者給出的結論很明確:不需要全量標注,也不需要把整個訓練流水線推倒重來,只要在一小部分數據上引入這種結構化先驗,就能把基礎擴散模型往上推一截。
擴散模型的訓練過程還有很多細節可供挖掘
從結果上看,這篇工作當然是在講一個 masked data training 的新做法。但如果再往后退一步看,它其實碰到了一個更根本的問題:擴散語言模型到底應該怎樣分配自己的學習注意力。
過去很多工作習慣從模型結構、采樣策略或者推理機制上找突破,這篇文章反而提醒了一件很樸素的事:你讓模型學什么、在哪些位置上用力,本身就會決定它最后學成什么樣。對于 DLLM 這種本來就高度依賴 noising /denoising 過程的模型來說,masking 不是配角,某種程度上它就是訓練邏輯本身的一部分。
論文最后也提到,當前這套信息密度提取流程還是偏離線、偏啟發式的。后面可以繼續往幾個方向走,比如基于 AST 的規則提取、基于模型自身置信度的自適應提取,或者干脆引入 GAN 的思想做成端到端可學習的對抗式 mask 模塊。
如果這些方向后面能繼續推進,那這篇工作的意義可能就不只是 “提出了一個有效的小改動”,而是在給 Diffusion LLM 提供一種更像樣的訓練思路:
先別急著讓模型學會所有東西,先讓它學會什么東西值得優先學。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.