U4.0 12 分鐘閱讀 2026年9月

U4.0 資料是 Token 的時候,噪聲是什麼?

本篇重用M4.0明天的天氣只看今天:Markov Chain 與 Transition Matrix·M4.1進去就出不來:Absorbing State 與吸收時間

換一種資料

前三個單元的資料一直是一堆 Rd\mathbb R^d 裡的點:一張圖是 3072 個實數,一個 toy 樣本是平面上的一個座標。這個單元把資料換掉。

一句話是一串 token:我 / 今天 / 想 / 吃 / …,每個位置從一個大小 KK 的字典裡選一個。一段蛋白質是二十種胺基酸排成的序列。一個分子是原子種類加上「哪兩個原子之間有鍵」的 0/1 表。這些資料有一個共同點:它們是類別,不是數值。 兩個 token 之間沒有「中間」——「想」和「吃」的平均不是一個字。

於是 U1 的第一步就出問題了。那個單元的起點是「把 x0x_0 一點一點加 Gaussian noise,直到變成 N(0,I)\mathcal N(0,I)」。對一串 token,x0+σϵx_0+\sigma\epsilon 根本不是一個合法的物件。

先別急著找替代品。值得先做的是盤點:前三個單元的框架裡,哪些東西真的用到了「狀態是連續的」,哪些只是用到了「forward process 是一條我們自己寫好的、邊際好算的鏈」。盤點完會發現,壞掉的比想像中少。

盤點:哪些壞了,哪些還活著

回頭看 U1 的骨架:

  1. 自己定一條從資料到噪聲的路徑U1.1)——用到的是「路徑已知、每個中間點 xtx_t 的分佈 q(xtx0)q(x_t\mid x_0) 有 closed form」。
  2. 在每個 tt 做回歸,預測 x0x_0(或 ϵ\epsilonU1.2)——用到的是「MSE 的最小值是 conditional expectation」。
  3. denoiser 就是 scoreU1.3)——用到的是 Tweedie 公式,而 Tweedie 用到 Gaussian 的密度對 xx 可微。
  4. 反向過程是 SDE 或 ODEU1.4)——用到的是 logpt\nabla\log p_t 這個梯度。

第 3、4 點用到的東西——gradientscoreODE——在離散空間裡都不存在:類別之間沒有方向,沒有「往密度高的方向走一小步」這件事。這兩塊是真的壞了,U5 會用另一種語言把它們重建回來。

第 1、2 點沒有壞。「自己定一條已知的路徑」不需要狀態連續,只需要一條 Markov chain:從 x0x_0 出發,每一步按一個已知的規則隨機換掉一些 token,TT 步後到達一個簡單的終點分佈。「在每個 tt 做回歸」也還活著,只是 MSE 換成類別上的 cross-entropy——回歸的目標從 E[x0xt]\mathbb E[x_0\mid x_t] 換成 p(x0xt)p(x_0\mid x_t) 這個條件分佈本身。U1.2 那個 conditional trick——條件好算、邊際難算,而回歸自動取後驗平均——在這裡一字不改地成立。

所以這個單元的任務比重新發明一個框架小得多:把「加噪聲」換成一條離散的 Markov chain,然後看回歸目標長什麼樣。

兩個 token 之間沒有「中間」。
那「加一點噪聲」該換成什麼?

課堂提問Q1

「加噪聲」在離散空間上該換成什麼?請先自己想兩三種候選,並為每一種回答:TT 步之後的終點分佈是什麼?q(xtx0)q(x_t\mid x_0) 算得出來嗎?

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

會被想到的候選大致有這幾類:隨機把 token 換成字典裡任意一個、把 token 換成一個特殊符號 [MASK]、隨機刪掉 token、把 token 先變成 embedding 加 Gaussian noise 再 round 回去、隨機交換相鄰 token 的位置。

把它們過一遍,會整理出兩個原則。第一,forward 必須是一條我們完全知道的 Markov chain,而且 q(xtx0)q(x_t\mid x_0) 要有 closed form——否則訓練時做不出 (xt,x0)(x_t, x_0) 配對,U1.1 那個「隨便挑一個 tt 就能直接抽 xtx_t」的便利就沒了。「隨機刪掉」讓序列長度變化,「交換位置」的多步邊際很難寫,這兩個候選在這裡出局。第二,終點分佈必須簡單到可以直接抽樣,這是取樣的起點。

剩下兩個標準選擇:

  • Uniform:每一步,每個 token 以機率 βt\beta_t 被換成字典裡均勻隨機的一個(可能換回自己)。終點是每個位置獨立均勻的分佈。這是連續世界裡「加 Gaussian noise 直到變成 N(0,I)\mathcal N(0,I)」最直接的類比 [1, 2]。
  • Absorbing / mask:字典多加一個符號 [MASK]。每一步,每個還沒被遮的 token 以機率 βt\beta_t 變成 [MASK];一旦變成 [MASK]永遠留在那裡。終點是整串全部 [MASK]——一個確定的狀態 [1]。

「embedding 加 Gaussian noise 再 round」是第三條路(Diffusion-LM [3] 走過),它把問題丟回連續空間,於是前三個單元的工具都能用。代價是 round 這一步:噪聲小的時候 round 回原字、噪聲大的時候 round 到隨機字,中間幾乎沒有「介於兩個字之間」的有意義狀態,模型花大量容量在學 embedding 的幾何而不是語言本身。在語言上,mask 的表現長期壓過這條路。這門課接下來只走前兩條。

一個容易混的詞

到這裡要停下來釐清一個詞。這個單元的標題是 discrete diffusion,「discrete」說的是狀態空間是離散的:xtx_t 的每個位置是 KK 個類別之一。

不是在說時間離散。U1 的 DDPM 走 T=1000T=1000 步,時間也是離散的,但每個 xtx_tRd\mathbb R^d 裡的點,狀態連續。反過來,U5 會把這個單元的 Markov chain 換成連續時間的版本——時間連續,狀態依然離散。四種組合都存在:

狀態連續狀態離散
時間離散DDPM(U1.4D3PM、masked diffusion(本單元)
時間連續SDE / ODE(U1.4U3.1CTMC、SEDD、discrete FM(U5

這張表值得記住,因為它同時說明了本單元和下一個單元的分工:本單元在左下→右上這條對角線上做翻譯——把時間離散、狀態連續的 DDPM 翻成時間離散、狀態離散的版本,讓你先在熟悉的結構裡接受「離散噪聲」;下一個單元再把時間變連續,重建 score 與 sampler 的語言。

互動 demo:逐 token 加噪聲。 同一句話、同一個 tt,上排走 uniform、下排走 absorbing。兩排被動過的格數大致相同(都是機率 αˉt\bar\alpha_t 存活),差別在動過之後長什麼樣。往右拖 tt 會看到 absorbing 沒有格子復原——那就是「吸收態」的意思。點任一個格子,下方長條圖會顯示該位置的 q(xtx0)q(x_t\mid x_0):uniform 從一根柱子慢慢攤成一片均勻,absorbing 永遠只有兩根。

為什麼 mask 值得特別看

兩條鏈裡,absorbing 看起來像是比較「偷懶」的那一條——它連噪聲都不是隨機字,只是把字蓋起來。但它有一個 uniform 沒有的性質:在任何 ttxtx_t 裡沒被遮的 token 一定就是 x0x_0 的原字。看到一個沒被遮的位置,你就確定知道它的答案;不確定的資訊全部集中在被遮的位置。

這件事會讓下一篇之後的數學大幅簡化:回歸目標只需要對被遮的位置預測,loss 塌成一個加了時間權重的 masked cross-entropy——也就是 BERT [4] 的 masked language modeling,多了「遮多少比例是隨機的、而且要對所有比例都學會」這一層。MaskGIT [5] 在影像 token 上、之後一系列 masked diffusion language model 在文字上,走的都是這條線。

代價也有,而且和 U3.1 那個「ODE 沒有自我修正」的觀察是同一件事:被遮的 token 一旦被還原,就永遠固定,之後的步驟沒有機會改它。這個單元先只給直覺,U5 有了 rate 的語言之後會把它量化。

先消化一下

想一想

「discrete diffusion」裡的 discrete 指的是:

想一想

下列哪一項是 U1 的框架裡真的依賴「狀態連續」的環節?

想一想

「隨機刪掉一些 token」為什麼不適合當 forward process?

想一想

Absorbing(mask)鏈相對於 uniform 鏈,下面哪個描述是對的?

參考文獻

  1. Austin, J., Johnson, D. D., Ho, J., Tarlow, D., van den Berg, R. Structured Denoising Diffusion Models in Discrete State-Spaces. NeurIPS 2021.(D3PM:uniform 與 absorbing 兩條鏈的出處。)
  2. Hoogeboom, E., Nielsen, D., Jaini, P., Forré, P., Welling, M. Argmax Flows and Multinomial Diffusion: Learning Categorical Distributions. NeurIPS 2021.(uniform 鏈的另一個獨立出處。)
  3. Li, X. L., Thickstun, J., Gulrajani, I., Liang, P., Hashimoto, T. B. Diffusion-LM Improves Controllable Text Generation. NeurIPS 2022.(Q1 提到的「embedding 加 Gaussian noise 再 round」路線。)
  4. Devlin, J., Chang, M.-W., Lee, K., Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.
  5. Chang, H., Zhang, H., Jiang, L., Liu, C., Freeman, W. T. MaskGIT: Masked Generative Image Transformer. CVPR 2022.