U4.4 10 分鐘閱讀 2026年9月

U4.4 Absorbing 與 Uniform:翻錯的字能不能改?

本篇重用M4.1進去就出不來:Absorbing State 與吸收時間·M3.3山谷裡隨機走的人群:Langevin Dynamics 與 Stationary Distribution

如果第三步就把一個字填錯了,
後面還有機會改回來嗎?

反向的時候,兩條鏈差在哪?

前兩篇一直盯著 absorbing 鏈,因為它的數學最乾淨。現在把 uniform 鏈拉回來並排,看反向取樣時兩者的行為差在哪。

Absorbing。 每一步只對仍是 [MASK] 的位置做事:翻開一些、留一些。已翻開的位置,posterior 說「機率 1 保持原字」,反向過程碰都不會碰。所以如果第 2 步在某個位置翻出了一個不對的字——比方說因子化誤差讓兩個空格填成了「牛肉/司」——之後的 6 步只能在這個錯字旁邊繼續填,沒有任何一步能把「司」換掉。錯誤留下來,而且會影響後面:其他位置的 marginal 是以這個錯字為 context 算的。

Uniform。 每一步,posterior q(xt1xt,x0)(xtQt ⁣)(x0Qˉt1)q(x_{t-1}\mid x_t,x_0)\propto(x_tQ_t^{\!\top})\odot(x_0\bar Q_{t-1})每個位置都有可能給出與 xtx_t 不同的字:因為 forward 每步都可能把任何字換成任何字,反向每步也就可能把任何字換成任何字。一個在早期被填錯的位置,之後的步驟仍有機會把它換成更合理的字。反向的 uniform 鏈有自我修正的能力。

這和 U3.1 講的 ODE 與 SDE 是同一組對比。ODE 取樣器沒有噪聲、沒有修正,每步的誤差直接累積到終點;SDE 取樣器每步注入噪聲、再由 score 項把樣本拉回 ptp_t,早期的偏離會被後面修掉。Absorbing 像 ODE,uniform 像 SDE。

互動 demo:翻錯的字,之後改得回來嗎。 兩排是同一條長度 16 的 0/1 序列(資料:相鄰格以機率 0.9 相同),網路是精確算出來的 conditional marginal(前向後向),所以看到的全部是兩條鏈本身的差別。按「植入一個錯誤」再一路走完:absorbing 那排的紅框永遠不變,uniform 那排常常在後面幾步被改掉、變成綠框。跑 200 次的修正率實測是 absorbing 0.0%、uniform 62%~67%。代價在「視角」那顆按鈕——打開它就看到 uniform 的 xtx_t 裡噪聲字和原字長得一模一樣,那些虛線框是讀者看得到、模型看不到的。

那為什麼實務上 absorbing 比較好?

照上面的說法,uniform 能修正、absorbing 不能,uniform 應該更好。但 D3PM [1] 在文字上的實驗、以及之後 SEDD [2] 用連續時間重做的比較,都是 absorbing 的 perplexity 明顯更好。原因在 demo 的第二個面板裡:

uniform 鏈的 xtx_t 裡,噪聲字和原字長得一模一樣。 模型看到「今天想吃壽貓」,得先判斷「貓」是噪聲還是原文的一部分(也許這句本來就在講貓),然後才能決定要不要改。每一步、每個位置都要做這個判斷,而判斷會錯——它可能把原字當噪聲改掉,也可能把噪聲當原字留下。修正能力是有了,但修正本身會引入新的錯誤。

absorbing 鏈把這個判斷完全拿掉[MASK] 一眼可辨,沒被遮的字一定是對的(就 forward 而言)。模型的全部容量都用在「這個空格該填什麼」上。所有的不確定性集中在一種符號上,而不是散在字典的每個字裡。

所以兩條鏈的取捨是:修正能力(uniform 有、absorbing 沒有)對上 乾淨的 context(absorbing 有、uniform 沒有)。經驗上第二項更重要——至少在語言上、在目前的模型規模下。這和 U1.4 的判準——模型誤差與離散化誤差誰佔上風——不完全對應。SDE 多加的噪聲修得動模型誤差,但它自己會帶進離散化誤差,而後者隨步數變小;uniform 付的手續費不是「每步的噪聲」,而是「每步都要重新判斷什麼是噪聲」,這個代價不隨步數變小,所以它不會在步數多的那一端自己消失。

補充demo 的修正率是上限,不是實際模型拿得到的

上面 demo 的網路是用前向後向精確算出來的,所以它在判斷「哪些字是噪聲」這件事上不會犯錯——量到的 62%~67% 是 uniform 修正能力的上限

真實模型會在這個判斷上犯錯,而錯的兩種方式都有代價:把原字當噪聲改掉(破壞已經對的部分)、把噪聲當原字留下(錯字留到最後)。所以實驗上 uniform 拿到的淨好處遠小於這個上限,甚至是負的——這正是 D3PM 與 SEDD 都量到 absorbing 更好的原因。

課堂提問Q1

有沒有辦法兩個都要——保留 [MASK] 帶來的乾淨 context,又讓早期填錯的字有機會被改?請用這個單元的語言描述你會怎麼設計 forward chain。

先想一想,再展開看整理後的答案

直覺的設計是:在 absorbing 鏈上加一點「回到 [MASK]」的機會——一個已經翻開的字,以某個小機率被重新遮起來,之後再重填。這樣噪聲仍然只有一種符號(context 依然乾淨),但錯字不再永遠固定;重新被遮的位置會用當時更完整的 context 重新填一次。

這個想法叫 remasking,近期的工作(例如 ReMDM [3])正是這麼做的。但要把它做對,有幾件事得說清楚:重新遮的機率該是多少?它會不會改變每個 tt 的邊際分佈 q(xtx0)q(x_t\mid x_0)、進而讓訓好的模型不再適用?「每步翻開的比例」和「每步重遮的比例」之間該怎麼平衡?這些問題用本單元離散時間、transition matrix 的語言答起來很笨拙——每個問題都要重新算一次矩陣連乘。

下一個單元換一種語言:連續時間,用 rate 描述「每單位時間有多少機率從一個狀態流到另一個狀態」。在那個語言裡,remasking 只是在 absorbing 過程上多加一個 rate,而它對應到的正是 U3.1 那個「訓練噪聲與取樣噪聲是兩個旋鈕」裡取樣器的 ε\varepsilon。答案會變得很短。

先消化一下

想一想

Absorbing 鏈的反向取樣不能修正已翻開的 token,這件事對應連續世界的:

想一想

Uniform 鏈雖然能修正,實務上 perplexity 卻通常比 absorbing 差。主要原因是:

想一想

「Remasking」的設計想同時保留兩條鏈的優點。它保留的分別是:

參考文獻

  1. Austin, J., Johnson, D. D., Ho, J., Tarlow, D., van den Berg, R. Structured Denoising Diffusion Models in Discrete State-Spaces. NeurIPS 2021.(文字上 absorbing 優於 uniform 的實驗。)
  2. Lou, A., Meng, C., Ermon, S. Discrete Diffusion Modeling by Estimating the Ratios of the Data Distribution. ICML 2024.(SEDD:連續時間下 absorbing 與 uniform 的比較。)
  3. Wang, G., Schiff, Y., Sahoo, S. S., Kuleshov, V. Remasking Discrete Diffusion Models with Inference-Time Scaling. 2025.(ReMDM:在 absorbing 鏈上加 remasking。)
  4. Campbell, A., Benton, J., De Bortoli, V., Rainforth, T., Deligiannidis, G., Doucet, A. A Continuous Time Framework for Discrete Denoising Models. NeurIPS 2022.(下一個單元的連續時間語言。)