U4.0 資料是 Token 的時候,噪聲是什麼?
本篇重用M4.0明天的天氣只看今天:Markov Chain 與 Transition Matrix·M4.1進去就出不來:Absorbing State 與吸收時間
換一種資料
前三個單元的資料一直是一堆 裡的點:一張圖是 3072 個實數,一個 toy 樣本是平面上的一個座標。這個單元把資料換掉。
一句話是一串 token:我 / 今天 / 想 / 吃 / …,每個位置從一個大小 的字典裡選一個。一段蛋白質是二十種胺基酸排成的序列。一個分子是原子種類加上「哪兩個原子之間有鍵」的 0/1 表。這些資料有一個共同點:它們是類別,不是數值。 兩個 token 之間沒有「中間」——「想」和「吃」的平均不是一個字。
於是 U1 的第一步就出問題了。那個單元的起點是「把 一點一點加 Gaussian noise,直到變成 」。對一串 token, 根本不是一個合法的物件。
先別急著找替代品。值得先做的是盤點:前三個單元的框架裡,哪些東西真的用到了「狀態是連續的」,哪些只是用到了「forward process 是一條我們自己寫好的、邊際好算的鏈」。盤點完會發現,壞掉的比想像中少。
盤點:哪些壞了,哪些還活著
回頭看 U1 的骨架:
- 自己定一條從資料到噪聲的路徑(U1.1)——用到的是「路徑已知、每個中間點 的分佈 有 closed form」。
- 在每個 做回歸,預測 (或 )(U1.2)——用到的是「MSE 的最小值是 conditional expectation」。
- denoiser 就是 score(U1.3)——用到的是 Tweedie 公式,而 Tweedie 用到 Gaussian 的密度對 可微。
- 反向過程是 SDE 或 ODE(U1.4)——用到的是 這個梯度。
第 3、4 點用到的東西——gradient、score、ODE——在離散空間裡都不存在:類別之間沒有方向,沒有「往密度高的方向走一小步」這件事。這兩塊是真的壞了,U5 會用另一種語言把它們重建回來。
第 1、2 點沒有壞。「自己定一條已知的路徑」不需要狀態連續,只需要一條 Markov chain:從 出發,每一步按一個已知的規則隨機換掉一些 token, 步後到達一個簡單的終點分佈。「在每個 做回歸」也還活著,只是 MSE 換成類別上的 cross-entropy——回歸的目標從 換成 這個條件分佈本身。U1.2 那個 conditional trick——條件好算、邊際難算,而回歸自動取後驗平均——在這裡一字不改地成立。
所以這個單元的任務比重新發明一個框架小得多:把「加噪聲」換成一條離散的 Markov chain,然後看回歸目標長什麼樣。
兩個 token 之間沒有「中間」。
那「加一點噪聲」該換成什麼?
課堂提問Q1
「加噪聲」在離散空間上該換成什麼?請先自己想兩三種候選,並為每一種回答: 步之後的終點分佈是什麼? 算得出來嗎?
先想一想,再展開看整理後的答案
會被想到的候選大致有這幾類:隨機把 token 換成字典裡任意一個、把 token 換成一個特殊符號 [MASK]、隨機刪掉 token、把 token 先變成 embedding 加 Gaussian noise 再 round 回去、隨機交換相鄰 token 的位置。
把它們過一遍,會整理出兩個原則。第一,forward 必須是一條我們完全知道的 Markov chain,而且 要有 closed form——否則訓練時做不出 配對,U1.1 那個「隨便挑一個 就能直接抽 」的便利就沒了。「隨機刪掉」讓序列長度變化,「交換位置」的多步邊際很難寫,這兩個候選在這裡出局。第二,終點分佈必須簡單到可以直接抽樣,這是取樣的起點。
剩下兩個標準選擇:
- Uniform:每一步,每個 token 以機率 被換成字典裡均勻隨機的一個(可能換回自己)。終點是每個位置獨立均勻的分佈。這是連續世界裡「加 Gaussian noise 直到變成 」最直接的類比 [1, 2]。
- Absorbing / mask:字典多加一個符號
[MASK]。每一步,每個還沒被遮的 token 以機率 變成[MASK];一旦變成[MASK]就永遠留在那裡。終點是整串全部[MASK]——一個確定的狀態 [1]。
「embedding 加 Gaussian noise 再 round」是第三條路(Diffusion-LM [3] 走過),它把問題丟回連續空間,於是前三個單元的工具都能用。代價是 round 這一步:噪聲小的時候 round 回原字、噪聲大的時候 round 到隨機字,中間幾乎沒有「介於兩個字之間」的有意義狀態,模型花大量容量在學 embedding 的幾何而不是語言本身。在語言上,mask 的表現長期壓過這條路。這門課接下來只走前兩條。
一個容易混的詞
到這裡要停下來釐清一個詞。這個單元的標題是 discrete diffusion,「discrete」說的是狀態空間是離散的: 的每個位置是 個類別之一。
它不是在說時間離散。U1 的 DDPM 走 步,時間也是離散的,但每個 是 裡的點,狀態連續。反過來,U5 會把這個單元的 Markov chain 換成連續時間的版本——時間連續,狀態依然離散。四種組合都存在:
| 狀態連續 | 狀態離散 | |
|---|---|---|
| 時間離散 | DDPM(U1.4) | D3PM、masked diffusion(本單元) |
| 時間連續 | SDE / ODE(U1.4、U3.1) | CTMC、SEDD、discrete FM(U5) |
這張表值得記住,因為它同時說明了本單元和下一個單元的分工:本單元在左下→右上這條對角線上做翻譯——把時間離散、狀態連續的 DDPM 翻成時間離散、狀態離散的版本,讓你先在熟悉的結構裡接受「離散噪聲」;下一個單元再把時間變連續,重建 score 與 sampler 的語言。
互動 demo:逐 token 加噪聲。 同一句話、同一個 ,上排走 uniform、下排走 absorbing。兩排被動過的格數大致相同(都是機率 存活),差別在動過之後長什麼樣。往右拖 會看到 absorbing 沒有格子復原——那就是「吸收態」的意思。點任一個格子,下方長條圖會顯示該位置的 :uniform 從一根柱子慢慢攤成一片均勻,absorbing 永遠只有兩根。
為什麼 mask 值得特別看
兩條鏈裡,absorbing 看起來像是比較「偷懶」的那一條——它連噪聲都不是隨機字,只是把字蓋起來。但它有一個 uniform 沒有的性質:在任何 , 裡沒被遮的 token 一定就是 的原字。看到一個沒被遮的位置,你就確定知道它的答案;不確定的資訊全部集中在被遮的位置。
這件事會讓下一篇之後的數學大幅簡化:回歸目標只需要對被遮的位置預測,loss 塌成一個加了時間權重的 masked cross-entropy——也就是 BERT [4] 的 masked language modeling,多了「遮多少比例是隨機的、而且要對所有比例都學會」這一層。MaskGIT [5] 在影像 token 上、之後一系列 masked diffusion language model 在文字上,走的都是這條線。
代價也有,而且和 U3.1 那個「ODE 沒有自我修正」的觀察是同一件事:被遮的 token 一旦被還原,就永遠固定,之後的步驟沒有機會改它。這個單元先只給直覺,U5 有了 rate 的語言之後會把它量化。
先消化一下
參考文獻
- 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 兩條鏈的出處。)
- Hoogeboom, E., Nielsen, D., Jaini, P., Forré, P., Welling, M. Argmax Flows and Multinomial Diffusion: Learning Categorical Distributions. NeurIPS 2021.(uniform 鏈的另一個獨立出處。)
- 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」路線。)
- Devlin, J., Chang, M.-W., Lee, K., Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.
- Chang, H., Zhang, H., Jiang, L., Liu, C., Freeman, W. T. MaskGIT: Masked Generative Image Transformer. CVPR 2022.