統一原則與展望:機率的運輸,從連續空間到離散狀態
這本書的每一章其實都在講同一件事:在一個指定的變換下,機率質量怎麼移動,以及怎麼把這個移動反過來、近似它或利用它來生成資料。這最後一章把這個結構上的統一講清楚。先回顧貫穿全書的變數變換原則(從單一雙射到 Fokker–Planck 方程),再看同一個「機率運輸」的觀點怎麼延伸到離散狀態空間:密度換成機率向量,ODE/SDE 換成 Markov 鏈和連續時間 Markov 鏈,連續方程換成 master equation,score 換成機率的比值。最後是全書的結語。
讀完這頁你應該能夠
- 把「機率的運輸」說成全書各種生成模型框架共同的原則。
- 把連續空間裡機率的演化(連續方程、Fokker–Planck 方程)和它在有限狀態上的對應:master equation 連起來。
- 說明在離散狀態空間裡,反向建模怎麼改變:普通的歐氏 score 和速度場,被轉移核、機率比值和跳躍速率取代。
- 比較變分、score/比值、flow 三種觀點在連續和離散狀態空間裡各是什麼,指出什麼不變、什麼改變了。
書在本章開頭的提示:這一章是結語,不是新方法的一章。請把它當成綜合來讀:注意從連續狀態空間走到離散狀態空間時,哪些原則保持不變、哪些數學物件必須改變。
前置知識
- B11:變數變換公式與 normalizing flow;B17:連續方程、Fokker–Planck 方程如何連起各個觀點。附錄 B(B34)把整條變數變換的階梯推導一遍。
- B04:DDPM 的 ELBO 與「以 \(\mathbf x_0\) 為條件的後驗」;B05:score 的意義;B12:flow matching 的條件化技巧。
- 補充課 G(連續時間 Markov 鏈):速率、master equation、uniform/absorbing、時間反轉,本頁的離散部分大量用到;CS236 第 18 講:SEDD(concrete score、score entropy)。
「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。
01本章:結構上的統一書 第 12 章開頭
這本書的每一章都在講同一件事:在一個指定的變換下,機率質量怎麼移動,以及怎麼把這個移動反過來、近似它或利用它來生成資料。在這最後一章,我們退後一步,把這個結構上的統一明確寫出來。先回顧支撐全書內容的變數變換原則(第 2 節),再說明同一個機率運輸的觀點怎麼透過 Markov 核和連續時間 Markov 鏈延伸到離散狀態空間(第 3–10 節),最後是對更廣的全貌的一些反思(第 11 節)。
02Density transport 主軸書 §12.1
全書一路追著兩條密切相關的發展線。第一條是 diffusion model 本身,包括變分、score-based 和 flow-based 的表述,它們用不同的數學語言描述機率分佈怎麼演化、以及這個演化怎麼被反過來用於生成。第二條是受 diffusion 啟發的快速生成器,最主要的是 flow map 模型(B29–B31),它們建立在同一個運輸觀點上,但目標是學更直接、更有效率的生成器。儘管形式不同,這些方法都根植於一個組織性的想法:生成建模本質上是一個運輸機率質量的問題。從一個簡單的參考分佈(例如高斯雜訊)出發,我們要構造一個過程,逐步把它連到複雜的資料分佈。
這個觀點有用,因為它把注意力從個別的模型家族,轉向一個更根本的問題:
回答這個問題的數學語言,是變數變換公式和它的連續時間延伸。在這個意義上,變數變換原則不只是一個技術工具,而是 diffusion model 和它啟發的快速生成器背後的概念主軸。
共同的三步結構
從高層看,本書研究的方法都遵循同一個簡單模式:
- 定義一個前向過程,逐步把資料移向一個簡單的參考分佈。
- 透過合適的「分佈演化方程」,理解機率分佈在這個過程下怎麼演化。
- 學一個生成機制,把這個演化反過來、近似它或利用它來產生樣本。
各種表述之間不同的,是前向過程的選擇、分佈演化方程的數學形式,以及生成機制怎麼參數化和訓練。
變數變換的階梯
附錄 B(B34)有系統地發展了一串變數變換公式,從確定性的雙射一路到隨機微分方程。這裡值得回顧,因為它顯示同一個運輸原則以好幾種形式出現。
- 單一雙射。一個光滑可逆的映射 \(\bm\Psi:\mathbb R^D\to\mathbb R^D\) 把密度 \(p_0\) 變成 \(p_1\): $$p_1(\mathbf x_1)=p_0\big(\bm\Psi^{-1}(\mathbf x_1)\big)\,\big|\det\partial_{\mathbf x_1}\bm\Psi^{-1}(\mathbf x_1)\big|.$$ Jacobian 行列式記錄局部體積的變化:映射把空間拉開時,密度降低;壓縮空間時,密度升高。
- 複合的雙射。把許多雙射串起來,\(\mathbf x_k=\bm\Psi_k(\mathbf x_{k-1})\),得到 $$\log p_L(\mathbf x_L)=\log p_0(\mathbf x_0)-\sum_{k=1}^L\log\big|\det\partial_{\mathbf x_{k-1}}\bm\Psi_k(\mathbf x_{k-1})\big|.$$ 這是 normalizing flow 背後的基本原則(B11)。更重要的是,它已經說明了核心訊息:一旦粒子的運動被指定,密度的演化就跟著確定。
- 連續時間的確定性 flow(ODE)。取無窮小步的極限,得到連續方程 $$\frac{\partial p_t(\mathbf x)}{\partial t}+\nabla\cdot\big(p_t(\mathbf x)\,\mathbf v(\mathbf x,t)\big)=0,$$ 粒子依 \(\frac{d\mathbf x(t)}{dt}=\mathbf v(\mathbf x(t),t)\) 演化。這是質量守恆的連續時間表達:機率質量不被創造或消滅,只是在速度場 \(\mathbf v\) 下流過空間。
- 連續時間的隨機 flow(SDE)。加上布朗雜訊得到 Fokker–Planck 方程 $$\frac{\partial p_t(\mathbf x)}{\partial t}=-\nabla\cdot\big(\mathbf v(\mathbf x,t)\,p_t(\mathbf x)\big)+\frac12g^2(t)\,\Delta p_t(\mathbf x),$$ 對應隨機動態 \(d\mathbf x(t)=\mathbf v(\mathbf x(t),t)\,dt+g(t)\,d\mathbf w(t)\)。第一項描述漂移造成的有方向的運輸,第二項描述雜訊造成的隨機擴散。
一維的例子:拉伸空間,密度就變低(轉述者補充)
這些不是互不相干的公式。多層的變數變換規則,是重複的確定性變換下運輸的離散時間版本;它的無窮小確定性極限給出連續方程;加上隨機擾動就得到 Fokker–Planck 方程。每一層都延伸前一層,同時保留同一個底層原則:機率質量守恆,機率分佈會調整,反映底層動態怎麼在空間中移動樣本。
從這個角度,本書的主要表述就比較容易放進脈絡:
- 變分方法透過時間格點上的去噪轉移描述生成(B03–B04)。
- Score-based 方法處理隨機動態,學支配反向 SDE 的 score 場(B05–B10)。
- Flow-based 方法處理確定性運輸,學一個速度場,讓它誘導的邊際分佈沿著一族指定的中間分佈走(B11–B14)。
- 快速生成器建立在同一個主軸上,但要找更直接的方式,有效率地利用學到的運輸來取樣(B28–B31)。
所以核心結論很簡單:diffusion modeling 最好不要理解成綁定某一種架構或某一種雜訊時程的單一演算法。它是一個設計原則:指定一個前向運輸過程,理解它誘導的機率分佈演化,然後在這個結構上構造一個生成器。一旦有了這個觀點,許多看似不同的方法就成了同一個想法的自然變化。
於是自然有一個問題:這個原則能延伸到連續狀態空間以外嗎?下一節說明可以。
03離散狀態:問題設定書 §12.2
到目前為止,本書的每個模型都建立在一個共同的結構假設上:生成動態作用的狀態,活在連續的歐氏空間 \(\mathbb R^D\)。不管 \(\mathbf x\) 的分量代表像素強度、音訊取樣,還是連續的潛變數,數學都一樣:粒子沿 ODE 或 SDE 支配的連續軌跡移動,機率密度透過連續方程或 Fokker–Planck 方程演化。這個框架依賴 \(\mathbb R^D\) 的微分結構:梯度和散度透過導數定義,確定性動態可以用向量場產生的可微軌跡描述。
區別在「建模的狀態」,不在原始資料的型態
離散的觀測也可以先選一個連續的編碼和一個讀出(readout)來處理。對一個原始符號 \(a\),令 \(\mathbf E(a)\in\mathbb R^d\) 是它的編碼,\(\mathbf D\) 把編碼映回符號,或更一般地映到一個類別分佈:
$$\text{原始離散符號 }a\ \xrightarrow{\ \mathbf E\ }\ \text{連續編碼 }\mathbf E(a)\in\mathbb R^d\ \xrightarrow{\ \mathbf D\ }\ \text{離散的讀出}.$$- 表示可以是固定的:one-hot、類別向量,或取值在單純形上的編碼(Richemond et al. 2022)。在單射的碼本上,讀出可以是確定的,滿足 \(\mathbf D(\mathbf E(a))=a\)。
- 表示也可以是學出來的:token embedding 或 autoencoder 的潛變數(Li et al. 2022,Diffusion-LM;Dieleman et al. 2022);這時 \(\mathbf D\) 是學到的讀出,\(\mathbf D\circ\mathbf E\) 不一定精確可逆。
表示一旦固定,diffusion 就是連續狀態的:在環境編碼空間裡加高斯雜訊,或對受限制的編碼空間用一個配合幾何的連續過程,都用本書前面發展的連續工具處理。下面研究的有限狀態路線不同:演化的狀態本身一直是離散的。
有限狀態路線
本節研究互補的情形:狀態在前向和反向過程中始終是有限的離散狀態。許多資料型態很自然地符合這個觀點:文字是詞彙 token 的序列,分子圖用有限種原子和鍵的類型,蛋白質序列是有限字母表上的字串。在這樣的有限狀態空間裡,沒有從一個狀態到另一個狀態的標準無窮小位移,沒有穿過 token 值的光滑軌跡,也沒有對狀態本身的普通梯度。這引出一個自然的問題:
結構主軸不變,但數學物件改變了。在連續空間裡,機率分佈在 ODE/SDE 動態下透過連續方程或 Fokker–Planck 方程演化;在有限狀態空間裡,機率質量依 Markov 轉移核或跳躍速率在狀態之間移動,分佈依一個有限維的守恆律演化:master equation,也叫 Kolmogorov 前向方程。在抽象層次上,兩種情形遵循同一個配方:
在連續的高斯 diffusion 裡,這個反向機制以高斯反向條件分佈、score 或速度場的形式出現;在有限狀態空間裡,它以反向轉移機率、機率比值或跳躍速率出現。這些是不同的數學物件,但在概念上扮演相同的角色。
這一章的目標不是把某一個離散 diffusion 演算法當成定論,而是發展一張在文獻變化時仍然穩定的路線圖,依描述反向運輸所用的物件組織:轉移核、機率比值或跳躍速率。分四步:離散時間的轉移(第 4 節)、它的連續時間極限(第 5–6 節)、對應連續情形的變分、score/比值、flow 三種反向建模觀點(第 7–9 節),以及一個指出和連續情形真正不同之處的比較(第 10 節)。
04離散時間的轉移書 §12.2.1
狀態與機率向量
考慮一個在 \(K\) 個離散類別上的前向過程,\(K\) 包含所選前向過程需要的任何特殊破壞 token,例如 mask token。每個狀態表示成一個 one-hot 行向量 \(\mathbf x\in\{0,1\}^K\),恰好一個分量是 1;所有這種向量的集合是
$$\mathcal V=\Big\{\mathbf x\in\{0,1\}^K:\textstyle\sum_{i=1}^Kx_i=1\Big\}=\{\mathbf e_1,\dots,\mathbf e_K\}.$$\(\mathbf e_i\) 是第 \(i\) 個標準基底向量,也就是類別 \(i\) 的 one-hot 編碼。例如每個 \(\mathbf e_i\) 可以代表一個 token、一個離散的潛在編碼、一種原子、一種鍵或一種胺基酸。書的註腳:等價的寫法(CTMC 和隨機過程文獻的標準寫法,Norris 1998;Kelly 1979)是把每個狀態寫成純量索引 \(x\in\{1,\dots,K\}\),轉移速率寫成 \([\mathbf Q_t]_{ij}\),邊際寫成 \(p_t(x)\)。這裡採用的 one-hot 寫法在記號上等價,但更貼近離散 diffusion 的文獻(Austin et al. 2021;Sahoo et al. 2024;Lou et al. 2024),訓練目標裡自然會出現內積 \(\langle\mathbf x_{\bm\phi},\mathbf x\rangle\) 和矩陣–向量乘積 \(\mathbf P^\top\mathbf x\)。
對文字或蛋白質這類序列資料,一個樣本由 \(N\) 個 token 組成,每個 token 取值在大小為 \(K\) 的詞彙裡。完整的狀態空間是 \(\mathcal V^N\),大小隨序列長度指數成長。在許多離散 diffusion model 裡,前向破壞在各個位置上獨立作用,所以單一 token 的 Markov 過程是基本的局部組件。因此我們先專注在一個 token,它在不增加記號負擔的情況下,展現了核心的機率運輸機制。對完整序列,同樣的公式套用在完整的組態上。如果前向破壞在各位置獨立作用,條件前向核就按位置分解。書的註腳:得到的被破壞序列的邊際分佈一般不分解,因為乾淨資料的分佈可能含有位置之間的相依。學到的反向模型則不必在各位置之間獨立:Transformer 或圖神經網路可以看到整個被破壞的物件,用全域的上下文預測局部或全域的反向轉移。(Demo B 會看到這一點有多重要。)

在第 \(k\) 步,系統處在這 \(K\) 個狀態之一。記處在狀態 \(\mathbf e_i\) 的純量機率為 \(p_k(i):=\Pr(\mathbf x_k=\mathbf e_i)\)。把這些純量機率收集起來,得到邊際機率向量
$$\mathbf p_k:=\big(p_k(1),\dots,p_k(K)\big)^\top=\mathbb E[\mathbf x_k]\in\Delta^{K-1}\subset\mathbb R^K,\qquad\sum_{i=1}^Kp_k(i)=1,$$\(\Delta^{K-1}:=\{\mathbf p\in\mathbb R^K:p_i\ge0,\ \sum_ip_i=1\}\) 是機率單純形。等價地 \(\mathbf x_k\sim\mathrm{Cat}(\mathbf p_k)\)。(\(\mathbb E[\mathbf x_k]=\mathbf p_k\) 是因為 one-hot 向量第 \(i\) 個分量的期望值就是它等於 1 的機率。)所以 \(\mathbf p_k\) 是離散隨機狀態 \(\mathbf x_k\) 的完整分佈,\(p_k(i)\) 是它的第 \(i\) 個純量分量。連續時間時用同樣的慣例:\(p_t(i):=\Pr(\mathbf x_t=\mathbf e_i)\)、\(\mathbf p_t:=(p_t(1),\dots,p_t(K))^\top\)。向量 \(\mathbf p_t\) 是密度的離散類比:它告訴我們總機率質量怎麼分佈在 \(K\) 個狀態上。
依本書的慣例,粗體小寫(\(\mathbf p\)、\(\mathbf x\))是向量,粗體大寫(\(\mathbf P\)、\(\mathbf Q\))是矩陣,不加粗的帶索引量(例如 \(p_k(i)\)、\([\mathbf P_k]_{ij}\)、\([\mathbf Q_t]_{ij}\))是純量分量。不加粗、以隨機變數為引數的 \(p\),例如 \(p(\mathbf x_{k-1}\mid\mathbf x_k)\),表示固定前向過程下的機率質量函數或轉移核;\(p_{\bm\phi}\) 是學到的反向模型。
轉移矩陣
系統怎麼在狀態之間移動?一步轉移由一個轉移矩陣 \(\mathbf P_k\in\mathbb R^{K\times K}\) 指定。它的元素 \([\mathbf P_k]_{ij}\) 是系統目前在狀態 \(\mathbf e_i\)、一步之後移到 \(\mathbf e_j\) 的機率:
$$[\mathbf P_k]_{ij}=\Pr(\mathbf x_{k+1}=\mathbf e_j\mid\mathbf x_k=\mathbf e_i).$$所以矩陣的列(第 \(i\) 列)對應目前狀態 \(i\),行(第 \(j\) 行)對應下一個狀態 \(j\)。讀第 \(i\) 列回答的問題是:「系統目前在 \(\mathbf e_i\),落到每個可能的下一個狀態的機率是多少?」所以每一列是一個對目的地的機率分佈:
$$[\mathbf P_k]_{ij}\ge0\ \ \text{對所有 }i,j,\qquad\sum_{j=1}^K[\mathbf P_k]_{ij}=1\ \ \text{對每個 }i.$$非負條件說每個轉移機率都合法,列和條件說離開狀態 \(\mathbf e_i\) 的質量全部有交代:系統一定會落在某處。
分佈怎麼演化
有了轉移矩陣,問一個基本問題:如果系統從分佈 \(\mathbf p_k\) 出發,一步之後的分佈是什麼?答案來自簡單的機率記帳。一步之後處在 \(\mathbf e_j\) 的機率,是從所有可能的來源狀態抵達 \(\mathbf e_j\) 的質量總和:
和式裡每一項是原本在 \(\mathbf e_i\) 的質量,乘上從 \(\mathbf e_i\) 跳到 \(\mathbf e_j\) 的機率。等價地,給定目前的 one-hot 狀態 \(\mathbf x_k\),下一個狀態的條件分佈是
$$\Pr(\mathbf x_{k+1}\mid\mathbf x_k)=\mathrm{Cat}\big(\mathbf x_{k+1};\,\mathbf P_k^\top\mathbf x_k\big),$$因為 \(\mathbf P_k^\top\mathbf e_i\) 取出 \(\mathbf P_k\) 的第 \(i\) 列,正好是從 \(\mathbf e_i\) 出發的轉移機率。
依這個規則演化的系統叫離散時間 Markov 鏈:給定目前狀態 \(\mathbf x_k\),\(\mathbf x_{k+1}\) 的分佈不依賴更早的狀態。它在有限狀態上扮演連續空間裡「分佈演化公式」的角色。在連續空間裡,雙射 \(\bm\Psi\) 重塑密度,Jacobian 行列式補償局部的體積變化;在有限狀態空間裡沒有體積元素要追蹤,轉移矩陣 \(\mathbf P_k\) 直接指定有多少機率質量離開每個來源、抵達每個目的地。列和條件保證總機率守恆,就像連續方程裡散度的結構那樣。
用轉移矩陣 \(\mathbf P_0,\dots,\mathbf P_{L-1}\) 重複多步,得到
$$\mathbf p_L=\mathbf P_{L-1}^\top\cdots\mathbf P_1^\top\mathbf P_0^\top\,\mathbf p_0.$$這對應第 2 節的多層變數變換公式:在連續確定性的情形,密度的演化透過 Jacobian 行列式累積;這裡,機率向量透過相繼的 Markov 算子傳遞。底層的想法一樣:在一串指定的變換下追蹤機率質量。
倒轉一步
有了前向的機制,自然要問怎麼把一步轉移倒過來用於生成。假設在第 \(k+1\) 步觀察到系統在 \(\mathbf e_j\),它在前一步 \(k\) 在 \(\mathbf e_i\) 的機率是多少?這直接是 Bayes 規則:
只要 \(p_{k+1}(j)>0\)。這是和前向轉移 \(\mathbf P_k\) 搭配目前邊際分佈的離散時間反向核。它的形式很直觀:在所有可能讓質量抵達 \(\mathbf e_j\) 的方式中,每個來源 \(\mathbf e_i\) 的貢獻正比於那裡有多少質量(\(p_k(i)\))以及那一跳有多可能(\([\mathbf P_k]_{ij}\))。
- 分子 \([\mathbf P_k]_{ij}\,p_k(i)\):在第 \(k\) 步處在 \(\mathbf e_i\)、然後在第 \(k+1\) 步跳到 \(\mathbf e_j\) 的聯合機率。
- 分母 \(p_{k+1}(j)=\sum_{i'}p_k(i')\,[\mathbf P_k]_{i'j}\):從任何來源抵達 \(\mathbf e_j\) 的總機率。它是正規化常數,確保反向機率對 \(i\) 加總為 1。
關鍵的一點:反向核不是 \(\mathbf P_k\) 的反矩陣。一個 Markov 轉移可能把許多狀態的質量合併到一個狀態,它作為線性映射不一定可逆。機率上的反轉是一個 Bayes 反轉,它不只依賴前向轉移矩陣,也依賴邊際分佈 \(\mathbf p_k\)。這正是生成建模面對的困難:\(\mathbf p_k\) 是把未知的資料分佈推過前向過程得到的,通常沒有閉式。下面的反向建模觀點,都可以理解成表示或學習「執行這個 Bayes 反轉所缺少的資訊」的不同方式。
一個兩狀態的例子:反矩陣和 Bayes 反轉差在哪(轉述者補充)
兩個狀態,一步之後 \(\mathbf e_1\) 一定留在 \(\mathbf e_1\),\(\mathbf e_2\) 一定變成 \(\mathbf e_1\):\(\mathbf P=\begin{pmatrix}1&0\\1&0\end{pmatrix}\)。它不可逆(行列式 0),兩個狀態的質量全部合併到 \(\mathbf e_1\)。但 Bayes 反轉沒問題:若 \(\mathbf p_k=(0.3,0.7)\),觀察到 \(\mathbf x_{k+1}=\mathbf e_1\) 時,\(\Pr(\mathbf x_k=\mathbf e_1\mid\cdot)=1\cdot0.3/1=0.3\)、\(\Pr(\mathbf x_k=\mathbf e_2\mid\cdot)=1\cdot0.7/1=0.7\):原本的分佈原封不動地成了反向的機率。換一個 \(\mathbf p_k\),同一個 \(\mathbf P\) 的反向核就不同。反向需要的資訊,全在邊際分佈裡。Masked diffusion 正是這種「合併」:所有 token 最後都變成 [M]。
05連續時間:master equation書 §12.2.2
在連續空間的故事裡,把複合雙射的步長縮到 0 得到連續方程(附錄 B,B34)。同樣的極限想法在這裡也行得通:時間步變成無窮小時,離散時間 Markov 鏈變成連續時間 Markov 鏈(CTMC),分佈依 master equation 演化。

無窮小的轉移
上一節每個轉移矩陣 \(\mathbf P_k\) 描述從時間 \(k\) 到 \(k+1\) 的完整一步。現在想像把步切得越來越細。令 \(\mathbf P_{t,\Delta t}\) 是從時間 \(t\) 開始、把系統往前推一小段 \(\Delta t\) 的轉移矩陣:\([\mathbf P_{t,\Delta t}]_{ij}\) 是在區間 \([t,t+\Delta t]\) 裡從 \(\mathbf e_i\) 移到 \(\mathbf e_j\) 的機率。\(\Delta t\) 很小時,大部分質量留在原地,只有一小部分跳走,所以 \(\mathbf P_{t,\Delta t}\) 接近單位矩陣,可以展開成
\(\mathbf Q_t\in\mathbb R^{K\times K}\) 是時間 \(t\) 的速率矩陣,也叫生成元(generator)。如果 \(\mathbf Q_t\) 在時間上夠規則,餘項可以局部寫成 \(\mathcal O(\Delta t^2)\)。\(\mathbf Q_t\) 的元素是瞬時速率,不是機率:
- \([\mathbf Q_t]_{ij}\ge0\)(\(i\ne j\)):過程從 \(\mathbf e_i\) 跳到 \(\mathbf e_j\) 的速率。乘上 \(\Delta t\) 就是短時間內跳躍機率的主項。
- \([\mathbf Q_t]_{ii}=-\sum_{j\ne i}[\mathbf Q_t]_{ij}\):對角元素是負的,記錄機率離開 \(\mathbf e_i\) 的總速率。這保證 \(\mathbf Q_t\) 的每一列加總為 0,這是機率守恆在速率層級的表達。
為什麼列和為 0(書的註腳)
這直接來自 \(\mathbf P_{t,\Delta t}\) 的列和條件。轉移矩陣的每一列加總為 1,代入展開 \(\mathbf P_{t,\Delta t}=\mathbf I+\mathbf Q_t\Delta t+o(\Delta t)\):\(1+\Delta t\sum_j[\mathbf Q_t]_{ij}+o(\Delta t)=1\),所以 \(\sum_j[\mathbf Q_t]_{ij}=0\)。把對角項分出來就得到 \([\mathbf Q_t]_{ii}=-\sum_{j\ne i}[\mathbf Q_t]_{ij}\)。
從展開讀出:短時間內從 \(\mathbf e_i\) 跳到 \(\mathbf e_j\)(\(j\ne i\))的機率約為 \([\mathbf Q_t]_{ij}\Delta t\),留在 \(\mathbf e_i\) 的機率約為 \(1-\sum_{j\ne i}[\mathbf Q_t]_{ij}\Delta t\)。
Master equation
有了無窮小轉移,連續時間的極限立刻得到。把展開代進 \(\mathbf p_{t+\Delta t}=\mathbf P_{t,\Delta t}^\top\mathbf p_t\),令 \(\Delta t\to0\):
這就是 master equation,也叫 CTMC 的 Kolmogorov 前向方程(Norris 1998)。寫出第 \(j\) 個分量,意義就很具體:
$$\frac{d}{dt}\,p_t(j)=\underbrace{\sum_{i\ne j}p_t(i)\,[\mathbf Q_t]_{ij}}_{\text{流入:從其他狀態抵達的質量}}-\underbrace{p_t(j)\sum_{\ell\ne j}[\mathbf Q_t]_{j\ell}}_{\text{流出:離開到其他狀態的質量}}.$$\(p_t(j)\) 的變化率就是流入減流出。這是寫成微分方程的機率守恆。
從向量式到分量式
\([\mathbf Q_t^\top\mathbf p_t]_j=\sum_ip_t(i)[\mathbf Q_t]_{ij}\)。把 \(i=j\) 那一項分出來,用 \([\mathbf Q_t]_{jj}=-\sum_{\ell\ne j}[\mathbf Q_t]_{j\ell}\),就是「流入 − 流出」。
和連續方程比較
在連續空間裡,連續方程 \(\partial_tp_t(\mathbf x)+\nabla\cdot(p_t(\mathbf x)\mathbf v(\mathbf x,t))=0\) 說密度的變化由速度場 \(\mathbf v\) 下機率質量的淨通量驅動。master equation 用有限狀態的語言說同一件事:\(p_t(j)\) 的變化來自速率矩陣 \(\mathbf Q_t\) 支配的淨機率通量。速度場和速率矩陣扮演類似的結構角色:兩者都規定機率質量怎麼重新分配,也都強制守恆。主要的差別是幾何上的:在 \(\mathbb R^D\) 裡質量流過相鄰的空間位置;在有限狀態空間裡,質量沿轉移圖上允許的邊跳躍。
06前向破壞:masked 與 uniform書 §12.2.2
和連續情形一樣,需要一個前向過程,逐步破壞資料分佈的結構,把它推向一個容易取樣的簡單參考分佈。這是連續 diffusion 裡選高斯加噪過程的離散類比,設計目標相同:破壞要漸進、可以解析或計算地處理,而且夠強,使得到終點時間 \(T\) 時資料分佈大致被洗掉。
速率矩陣可以有很多種選法:uniform、absorbing、最近鄰、以圖為基礎、依化學結構、依文法,或其他配合資料領域的設計。下面兩個例子不是要窮盡分類,而是讓機制一目了然的標準情形。

Masked diffusion(吸收式)
保留最後一個類別當 mask token,記成 \(\mathbf m:=\mathbf e_K\)。乾淨資料 \(\mathbf x_0\) 落在前 \(K-1\) 個類別之一,所以 \(\langle\mathbf x_0,\mathbf m\rangle=0\)。速率矩陣定義成每個普通狀態以速率 \(\beta(t)\) 轉到 mask 狀態,而 mask 狀態永遠不出去:
$$[\mathbf Q_t]_{iK}=\beta(t),\quad[\mathbf Q_t]_{ii}=-\beta(t),\quad[\mathbf Q_t]_{ij}=0\ \ (i\lt K,\ j\notin\{i,K\}),\qquad[\mathbf Q_t]_{Kj}=0\ \ \text{對所有 }j.$$想法很簡單:每個 token 獨立地以速率 \(\beta(t)\) 被換成 mask,一旦被 mask 就一直是 mask。以乾淨狀態 \(\mathbf x_0\) 為條件的前向邊際是
在時間 \(t\),token 以機率 \(\alpha_t\) 仍等於它的乾淨值 \(\mathbf x_0\),以機率 \(1-\alpha_t\) 被 mask。時間越久,越多機率質量累積在 mask 狀態上。如果 \(\int_0^T\beta(s)\,ds\) 很大,\(\alpha_T\) 就很小,終點分佈接近全部是 mask 的參考分佈。
\(\alpha_t\) 怎麼來的
從 \(\mathbf x_0\) 出發、還沒被 mask 的機率記為 \(a(t)\)。它只會流出(速率 \(\beta(t)\)),沒有流入,master equation 給出 \(a'(t)=-\beta(t)a(t)\)、\(a(0)=1\),解是 \(a(t)=\exp(-\int_0^t\beta)\)。其餘質量全在 mask 上:\(1-a(t)\)。
Uniform diffusion
這個過程不是抹掉 token,而是逐漸把它隨機化。一個方便的連續時間正規化是讓 token 以相同的速率跳到其他 \(K-1\) 個狀態中的每一個:
$$[\mathbf Q_t]_{ij}=\frac{\beta(t)}{K-1}\ \ (i\ne j),\qquad[\mathbf Q_t]_{ii}=-\beta(t).$$第一個式子說從 \(\mathbf e_i\) 出發,token 以相同的瞬時速率跳到每個其他狀態;第二個說離開 \(\mathbf e_i\) 的總速率是 \(\beta(t)\)。前向邊際也有內插的形式
\(\bm\pi_{\text{unif}}=\frac1K\mathbf 1\) 是均勻的機率向量。時間一久,反覆的隨機化洗掉資料分佈的結構,把它推向 \(\mathcal V\) 上的均勻分佈。
為什麼衰減率多了 \(K/(K-1)\)
看 \(\mathbf e_i\) 的機率 \(p_i(t)\)。流入:其他狀態的總質量 \(1-p_i\) 以速率 \(\beta/(K-1)\) 跳到 \(i\);流出:\(p_i\) 以速率 \(\beta\) 離開。所以 \(p_i'=\frac{\beta}{K-1}(1-p_i)-\beta p_i=\frac{\beta}{K-1}-\frac{K\beta}{K-1}p_i\)。令 \(u=p_i-\frac1K\),得到 \(u'=-\frac{K\beta}{K-1}u\),所以 \(p_i(t)=\frac1K+(p_i(0)-\frac1K)\alpha_t\),\(\alpha_t=\exp(-\frac{K}{K-1}\int_0^t\beta)\)。這就是上面的內插形式。直觀上:這個過程等價於「以速率 \(\frac{K}{K-1}\beta\) 把 token 從 \(K\) 個狀態裡均勻重抽一次」(抽到自己就等於沒跳,所以跳到每個其他狀態的速率是 \(\frac{K}{K-1}\beta\cdot\frac1K=\frac{\beta}{K-1}\))。每次重抽都完全洗掉記憶,所以記憶衰減的速率是 \(\frac{K}{K-1}\beta\),比 \(\beta\) 大一點。
更一般地,前向過程不必有這種簡單的混合形式。這個形式便於直覺,也出現在常見的 masked 和 uniform 構造裡,但 Markov 分佈演化的觀點更一般:轉移矩陣支配離散時間的演化,速率矩陣透過 master equation 支配連續時間的演化。結構化的離散 diffusion model 可以用尊重編輯距離、圖的鄰接、分子的合法性、詞彙結構或其他領域知識的轉移規則。在所有情形下原則都一樣:前向 Markov 過程定義一條機率路徑,生成就是學著沿這條路徑反向走。
Demo A一個 token 的機率怎麼流動轉述者補充
一個 token,4 個普通狀態 \(\mathbf e_1,\dots,\mathbf e_4\),資料分佈 \(\mathbf p_0=(0.5,0.3,0.15,0.05)\);masked 時另加 [M] 當第 5 個狀態。\(\beta\equiv1\),時間到 \(T=4\)。上圖:長條是閉式的 \(\mathbf p_t\),虛線框是 \(\mathbf p_0\),橙點是 4,000 條模擬跳躍路徑(Gillespie 法:指數分佈的停留時間,再依非對角速率選目的地,固定種子)在時間 \(t\) 的比例。下圖是其中一條完整的樣本路徑,虛線是目前的 \(t\)。讀數另外用 RK4 解 master equation,並從 \(\mathbf p_4\) 反向走回 \(t=0\),比較兩種反向:Bayes 反向核(第 4 節,每一步精確)和一階的反向速率(第 8 節的公式,每步用起點的速率乘 \(\Delta t\);一步的跳躍機率合計超過 1 時按比例縮到 1)。
讀數(瀏覽器實測,和 Node 原型逐位相同):
- 三種算法一致。主方程的 RK4 數值解和閉式差 \(10^{-15}\) 的量級;4,000 條路徑的比例和閉式通常差 0.01 上下,把滑桿走完一遍,最大是 masked 0.020、uniform 0.024(都是抽樣誤差的大小:4,000 條時單一比例的標準差最多約 0.008)。例如 masked、\(t=1\):閉式 \((0.184,0.110,0.055,0.018,0.632)\),也就是 \(\alpha_1=e^{-1}=0.368\) 的質量留在原 token、其餘全在 [M]。
- Masked 的路徑只跳一次。一條路徑最多從某個 token 跳到 [M],然後永遠停在那裡;uniform 的路徑則會一直跳。
- Bayes 反向核在任何步數都精確(誤差 \(10^{-16}\)):它用的是整段的轉移矩陣和兩端的邊際。
- 一階反向速率需要細步。Masked 時,2、5、20、100 步的最大誤差是 0.649、0.238、0.021、0.001;2 步時有 65% 的質量還停在 [M]。原因是 [M] 解開成 token 的反向速率 \(\beta\,p_t(i)/p_t(\mathbf m)\) 在 \(t\to0\) 時像 \(1/t\) 一樣變大,一步用起點的速率會嚴重低估。Uniform 時是 0.235、0.093、0.016、0.003。
07變分觀點:學反向轉移核書 §12.2.3
有了前向過程和它的分佈演化,剩下的任務和連續情形一樣:學一個反向過程,讓它的邊際分佈在反向時間裡重走前向的演化,把簡單的參考樣本變成資料。在 Part B,我們把連續的 diffusion model 整理成三個觀點:變分(第 2 章)、score-based(第 3–4 章)和 flow-based(第 5 章)。同樣的三分法延續到離散設定,但有一個重要的但書:這些不是互斥的學派,也不是固定的論文分類,而是三種辨認「要反轉機率路徑必須學哪個未知物件」的方式。
在連續情形(§2.2,B04),變分觀點把 diffusion 當成一個階層式潛變數模型。前向過程定義一串越來越吵的潛變數,目標是學一步一步解除破壞的反向轉移。真正的反向核 \(\Pr(\mathbf x_{k-1}\mid\mathbf x_k)\) 拿不到,因為它依賴 \(\mathbf x_k\) 的邊際分佈,而那牽涉未知的資料分佈。DDPM 的關鍵洞見是以乾淨樣本 \(\mathbf x_0\) 為條件:前向後驗 \(\Pr(\mathbf x_{k-1}\mid\mathbf x_k,\mathbf x_0)\) 有閉式的高斯形式,而 B04 的定理說明對這個條件後驗訓練,扣掉和學到的反向模型無關的項之後,等價於對拿不到的邊際反向核訓練。ELBO 於是拆成每個雜訊等級一個 KL 項,每一項要求學到的模型匹配一個可計算的前向後驗。
同樣的邏輯適用於離散設定。記 \(p\) 為「從資料分佈抽 \(\mathbf x_0\)、再套用固定前向鏈」得到的聯合分佈,\(p_{\bm\phi}\) 為學到的反向模型。考慮一串被破壞的 one-hot 狀態
$$\mathbf x_0\xrightarrow{\ \mathbf P_0\ }\mathbf x_1\xrightarrow{\ \mathbf P_1\ }\cdots\xrightarrow{\ \mathbf P_{L-1}\ }\mathbf x_L,$$\(\mathbf x_0\) 從資料分佈抽出,\(\mathbf x_L\) 接近一個簡單的參考分佈(例如全 mask 或均勻)。轉移現在是類別分佈而不是高斯,但變分結構相同:
- 真正的反向 \(p(\mathbf x_{k-1}\mid\mathbf x_k)\) 拿不到,因為它依賴第 \(k\) 步的邊際。
- 以 \(\mathbf x_0\) 為條件,前向後驗透過 Bayes 規則變得可計算: $$p(\mathbf x_{k-1}\mid\mathbf x_k,\mathbf x_0)=\frac{p(\mathbf x_k\mid\mathbf x_{k-1})\,p(\mathbf x_{k-1}\mid\mathbf x_0)}{p(\mathbf x_k\mid\mathbf x_0)},$$ 右邊每一個因子都由前向過程決定。
- 對這些條件後驗訓練,和對拿不到的邊際反向核訓練,有相同的最佳反向核;兩者的差是和 \(p_{\bm\phi}\) 無關的項。
示意地,離散 diffusion 的 ELBO 含有這種形式的去噪項:
依具體模型,完整的 ELBO 還包含邊界項,例如終點的先驗項和 \(k=0\) 附近的重建項。重點是每個去噪項都要求學到的反向核匹配一個由前向破壞決定的、可計算的 Bayes 後驗。這裡 \(p_{\bm\phi}(\mathbf x_{k-1}=\mathbf e_i\mid\mathbf x_k=\mathbf e_j)\) 是神經網路參數化的反向轉移機率:給定第 \(k\) 步在 \(\mathbf e_j\),它給出第 \(k-1\) 步來自 \(\mathbf e_i\) 的機率;對每個固定的 \(\mathbf e_j\),這些值構成對前一狀態的類別分佈。
Masked 的條件後驗長什麼樣(轉述者補充)
用第 6 節的 \(\alpha_t\),記第 \(k-1\)、\(k\) 步的保留機率為 \(\alpha_{k-1}\ge\alpha_k\)。若 \(\mathbf x_k\) 不是 mask,它一定等於 \(\mathbf x_0\),而且前一步也一定是 \(\mathbf x_0\)(mask 不會變回 token):後驗是 \(\delta_{\mathbf x_0}\)。若 \(\mathbf x_k=\mathbf m\):
$$p(\mathbf x_{k-1}=\mathbf x_0\mid\mathbf x_k=\mathbf m,\mathbf x_0)=\frac{(1-\alpha_k/\alpha_{k-1})\,\alpha_{k-1}}{1-\alpha_k}=\frac{\alpha_{k-1}-\alpha_k}{1-\alpha_k},\qquad p(\mathbf x_{k-1}=\mathbf m\mid\cdot)=\frac{1-\alpha_{k-1}}{1-\alpha_k}.$$(分子:第 \(k-1\) 步還是 \(\mathbf x_0\) 的機率 \(\alpha_{k-1}\),乘上這一步被 mask 的機率 \(1-\alpha_k/\alpha_{k-1}\);分母:第 \(k\) 步是 mask 的機率。)也就是「這一步有多少比例的 mask 是剛剛才發生的」。
和連續 DDPM 主要的形式差別,是這些 KL 散度是對離散狀態的有限和,而不是閉式的高斯式子。這反映高斯分佈的一個特殊性質:同一個變數的兩個高斯密度相乘,正比於另一個高斯。在連續 DDPM 裡,前向後驗由高斯因子相乘算出,結果仍是高斯,KL 化成只牽涉平均和共變異的簡單代數式(B04)。在離散設定裡,Bayes 規則給出的是類別分佈,每個 KL 項是對狀態的和。這個和精確、概念上也簡單,但對大詞彙或完整的序列空間,可能需要結構、分解、子抽樣或特殊的參數化。
參數化:預測乾淨狀態
ELBO 要求學到的反向核 \(p_{\bm\phi}(\mathbf x_{k-1}\mid\mathbf x_k)\) 匹配一個 Bayes 後驗,但不強制唯一的神經網路參數化。一個常見的選擇是預測乾淨狀態(\(x_0\) 預測)。精確的邊際反向核滿足恆等式
$$p(\mathbf x_{k-1}\mid\mathbf x_k)=\sum_ap(\mathbf x_{k-1}\mid\mathbf x_k,\mathbf x_0=\mathbf e_a)\,p(\mathbf x_0=\mathbf e_a\mid\mathbf x_k),$$和式對所有合法的乾淨類別;這只是對未知的乾淨狀態做邊際化。因為後驗 \(p(\mathbf x_0\mid\mathbf x_k)\) 依賴資料分佈,沒有閉式,模型可以預測一個乾淨狀態的分佈 \(\widehat p_{\bm\phi}(\mathbf x_0\mid\mathbf x_k)\),用它定義
如果 \(\widehat p_{\bm\phi}\) 等於真正的後驗 \(p(\mathbf x_0\mid\mathbf x_k)\),這個混合就還原精確的反向核。實務上,它是把學到的反向轉移綁到已知前向後驗上的好方法。這種參數化在 multinomial/D3PM 類的離散時間 diffusion model 裡很常見(Hoogeboom et al. 2021;Austin et al. 2021),但它不是離散 diffusion 的定義。D3PM 本身就指出也可以直接預測反向的 logits,後來的模型用其他配合前向過程的結構化參數化(Sahoo et al. 2024)。所以預測乾淨狀態應該看成變分觀點的一種重要參數化,不是建模反向過程的唯一方式。
08Score/比值觀點:學局部的機率比較書 §12.2.3
在連續情形(第 3–4 章),score-based 觀點從一個簡單問題出發:給定一個被破壞的樣本 \(\mathbf x_t\sim p_t\),要反轉 diffusion,需要目前密度的哪些局部資訊?答案是 score 函數 \(\nabla_{\mathbf x}\log p_t(\mathbf x)\),它出現在反向 SDE 和 PF-ODE 裡;用神經網路學到 score,就足以生成。
在有限狀態空間裡,沒有環境的歐氏幾何、沒有普通的無窮小位移、也沒有對狀態的梯度。樣本不是走一小步歐氏距離,而是從一個狀態跳到另一個。所以 score \(\nabla_{\mathbf x}\log p_t(\mathbf x)\) 沒有直接的字面類比。但反向過程仍然要回答一個類似的問題:如果系統目前在 \(\mathbf e_j\),每個候選的來源狀態 \(\mathbf e_i\) 相對於它有多可能?
推導反向跳躍速率
為了找出需要的量,考慮一個前向 CTMC \(\{\mathbf x_t\}_{0\le t\le T}\),速率矩陣 \(\mathbf Q_t\)、邊際 \(\mathbf p_t\)。\([\mathbf Q_t]_{ij}\) 是從 \(\mathbf e_i\) 到 \(\mathbf e_j\) 的跳躍速率。在一小段 \(\Delta t\) 內,無窮小的前向事件「\(\mathbf x_t=\mathbf e_i\) 且 \(\mathbf x_{t+\Delta t}=\mathbf e_j\)」(\(i\ne j\))的機率約為 \(p_t(i)\,[\mathbf Q_t]_{ij}\,\Delta t\)。
現在定義反向時間的過程 \(\bar{\mathbf x}_s:=\mathbf x_{T-s}\)(\(0\le s\le T\)),它在反向時間 \(s\) 的邊際是 \(\bar{\mathbf p}_s=\mathbf p_{T-s}\)。如果反向過程有速率矩陣 \(\bar{\mathbf Q}_s\),那麼對應的反向跳躍(從 \(\mathbf e_j\) 到 \(\mathbf e_i\))必須以相反的時間順序重現同一個無窮小路徑機率。取極限 \(\Delta t\to0\) 得到非對角的時間反轉公式
只要 \(p_{T-s}(j)>0\)。等價地,若 \(t\) 是對應的前向時間,\(\widetilde{\mathbf Q}_t\) 是以前向時間標記的反向生成元,則
對角元素由列和為零的條件決定:\([\widetilde{\mathbf Q}_t]_{jj}=-\sum_{i\ne j}[\widetilde{\mathbf Q}_t]_{ji}\)。
「重現同一個路徑機率」的兩邊
考慮前向時間的一小段 \([t,t+\Delta t]\)。前向看:在 \(t\) 處於 \(\mathbf e_i\),接著跳到 \(\mathbf e_j\),機率 \(\approx p_t(i)[\mathbf Q_t]_{ij}\Delta t\)。反向看同一段:反向過程在這段的「開頭」(前向時間 \(t+\Delta t\))處於 \(\mathbf e_j\),機率 \(\approx p_t(j)\)(差一個 \(\mathcal O(\Delta t)\)),然後以反向速率跳到 \(\mathbf e_i\),機率 \(\approx[\widetilde{\mathbf Q}_t]_{ji}\Delta t\)。兩個描述是同一個事件,所以 \(p_t(j)[\widetilde{\mathbf Q}_t]_{ji}\Delta t=p_t(i)[\mathbf Q_t]_{ij}\Delta t+o(\Delta t)\),除以 \(p_t(j)\Delta t\) 取極限即得。這和第 4 節的 Bayes 反向核是同一個式子:把 \([\mathbf P_k]_{ij}\) 換成 \([\mathbf Q_t]_{ij}\Delta t\),\(p_{k+1}(j)\approx p_t(j)\)。
這是 CTMC 的標準時間反轉公式(Kelly 1979;Anderson 2012),由 Campbell et al. (2022) 用在離散 diffusion 上。這個公式只在邊際機率為正的狀態上有意義。此外,反向過程只沿前向過程允許的轉移反轉機率通量:若 \([\mathbf Q_t]_{ij}=0\),對應的從 \(\mathbf e_j\) 回到 \(\mathbf e_i\) 的反向速率也是 0。這個敘述不是平衡態的 detailed balance 假設,而是一個關於無窮小路徑機率的局部時間反轉恆等式。
比值:score 的離散類比
看上面的式子。前向速率 \([\mathbf Q_t]_{ij}\) 是已知的,因為前向過程是設計好的;未知的是比值 \(p_t(i)/p_t(j)\),它比較在目前的邊際下,狀態 \(\mathbf e_i\) 相對於 \(\mathbf e_j\) 有多可能。用內積寫,\(p_t(i)=\langle\mathbf p_t,\mathbf e_i\rangle\),比值可以寫成 \(\langle\mathbf p_t,\mathbf e_i\rangle/\langle\mathbf p_t,\mathbf e_j\rangle\)。
為什麼這是 score 的離散類比?在連續空間裡,score \(\nabla_{\mathbf x}\log p_t(\mathbf x)\) 衡量 log 密度在無窮小位移下怎麼變。在有限狀態空間裡,自然的局部比較是沿一次允許的跳躍、從一個狀態到另一個狀態。沿從 \(\mathbf e_j\) 到 \(\mathbf e_i\) 的跳躍,log 機率的變化是
$$\log p_t(i)-\log p_t(j)=\log\frac{p_t(i)}{p_t(j)},$$一個 log 機率的有限差分,扮演 \(\mathbb R^D\) 裡 \(\log p_t\) 的方向導數的角色。這個比較天生是沿邊局部的:只需要前向跳躍結構連起來的那些狀態對的比值。所以離散的 score 不是 \(\mathbb R^D\) 上的歐氏向量場,而是沿允許轉移的一組局部機率比較。對完整序列,同樣的話把 \(i\)、\(j\) 換成完整的組態,通常是在 Hamming 類或圖結構的轉移下相鄰的組態。
網路學什麼
在連續的 score-based model 裡,神經網路 \(\mathbf s_{\bm\phi}(\mathbf x,t)\) 被訓練去近似 \(\nabla_{\mathbf x}\log p_t(\mathbf x)\),學到的 score 代進反向 SDE 生成樣本。離散情形在資訊層次遵循同樣的邏輯:網路必須提供時間相依的比值資訊,用上面的公式決定反向跳躍速率;生成則是用學到的轉移機率或速率模擬反向時間的 Markov 鏈或 CTMC。
不同的表述用不同的方式表示這個資訊。以比值為主的模型,例如 SEDD(Lou et al. 2024,CS236 第 18 講),用受 score matching 啟發的損失估計比值 \(p_t(i)/p_t(j)\) 或它們的 log 形式。其他連續時間表述(Campbell et al. 2022;Sun et al. 2023)透過例如匹配條件轉移機率的目標,學等價的反向量。把局部機率比較當成 score 的離散類比,這個想法由 Meng et al. (2022) 的 concrete score 形式化。儘管參數化不同,底層原則相同:學時間反轉所需的局部機率比較,構造反向的轉移或速率,往回模擬。
Masked 時,比值有多簡單(轉述者補充)
Masked diffusion 唯一的前向跳躍是 token → [M],所以唯一需要的反向速率是 [M] → token:\([\widetilde{\mathbf Q}_t]_{\mathbf m,i}=\beta(t)\,p_t(i)/p_t(\mathbf m)\)。單一 token 時 \(p_t(i)=\alpha_tp_0(i)\)、\(p_t(\mathbf m)=1-\alpha_t\),所以速率是 \(\beta\frac{\alpha_t}{1-\alpha_t}p_0(i)\):[M] 以總速率 \(\beta\alpha_t/(1-\alpha_t)\) 被揭開,揭開成哪個 token 依 \(p_0\) 的比例。對序列,\(p_0(i)\) 換成「給定其他位置目前的值,這個位置是 \(i\) 的條件機率」:這就是為什麼 masked 模型最後學的東西看起來像一個以上下文為條件、預測被遮住 token 的分類器。\(t\to0\) 時 \(\alpha_t/(1-\alpha_t)\sim1/t\),速率發散,這就是 Demo A 裡一階方法需要細步的原因。
09Flow 觀點:學離散的運輸場書 §12.2.3
在連續情形(第 5 章),flow-based 觀點走另一條路:不學 score、不反轉 SDE,而是直接學一個速度場 \(\mathbf v_t(\mathbf x)\),它的 ODE flow 把參考分佈運到資料分佈。訓練策略是 flow matching(B12):邊際速度場拿不到,但以資料或端點樣本為條件的條件速度場 \(\mathbf v_t(\mathbf x\mid\mathbf x_0)\) 有閉式。邊際和條件目標的關係是
$$\mathbf v_t(\mathbf x)=\mathbb E\big[\mathbf v_t(\mathbf x\mid\mathbf x_0)\,\big|\,\mathbf x_t=\mathbf x\big],$$給定目前狀態,對所有可能的條件變數取平均。明確算這個平均需要知道連續的邊際密度 \(p_t(\mathbf x)\)。關鍵的訓練技巧(等價定理在 B12,書在這裡指向 §5.3.2 的條件路徑構造,B13)是:在平方誤差回歸下,條件目標和拿不到的邊際目標有相同的母體最小解,所以訓練可以用從可計算的條件路徑抽出的樣本,避開明確的邊際計算。
離散情形遵循同一個想法,用速率矩陣取代速度場。因為離散狀態不能沿連續軌跡穿過 token 空間,速度場的角色由速率矩陣(也叫 Markov 生成元)\(\mathbf Q_t\) 扮演。\([\mathbf Q_t]_{ij}\) 規定從 \(\mathbf e_i\) 到 \(\mathbf e_j\) 的跳躍速率;單位時間內實際從 \(\mathbf e_i\) 送到 \(\mathbf e_j\) 的機率質量是通量
在這個意義上,速率矩陣是一個離散的運輸場:它決定機率質量隨時間怎麼重新分配。(master equation 就是 \(\frac{d}{dt}p_t(j)=\sum_{i\ne j}\big(J_t(i,j)-J_t(j,i)\big)\):淨流入的通量。)
有一個重要的細節:一條機率路徑 \(\{\mathbf p_t\}_{t\in[0,T]}\) 不唯一決定一個速率矩陣。許多不同的生成元可以在 master equation 裡給出同一個導數 \(d\mathbf p_t/dt\),就像不同的運輸場在不同的幾何限制下可以實現同一個邊際演化。所以離散 flow matching 方法不只要指定一條機率路徑,還要指定一個沿這條路徑分配條件跳躍速率或機率流的規則。
一個三狀態的例子:同一條路徑,兩個速率矩陣(轉述者補充)
三個狀態,均勻分佈 \(\mathbf p_t\equiv(\frac13,\frac13,\frac13)\) 不隨時間變。\(\mathbf Q=0\) 給出 \(d\mathbf p/dt=0\);循環 \(1\to2\to3\to1\)、每條邊速率 1 也給出 \(d\mathbf p/dt=0\)(每個狀態流入 \(\frac13\)、流出 \(\frac13\))。分佈相同,但樣本一個不動、一個一直繞圈。連續情形也一樣:在連續方程的通量 \(p_t\mathbf v\) 上加一個無散度的場,不改變密度的演化。
和連續 flow matching 一樣,邊際速率矩陣一般拿不到,但條件版本常常可以寫出來。如果以一個端點為條件(例如乾淨資料狀態和/或參考狀態),就可以指定一條條件機率路徑,推出沿這條路徑可計算的條件跳躍速率。然後在一個合適的 proper loss 下,訓練神經網路從被破壞的樣本預測對應的轉移或速率資訊。邊際生成元透過同一個條件期望原則還原:給定目前狀態,對未知端點的分佈平均條件運輸物件,但這個平均是用對條件目標的監督式迴歸或分類學出來的,不是明確算出來的。
和連續 flow matching 的對應是:
- 連續 flow matching:網路對條件速度目標訓練,邊際速度作為 flow matching 損失下的最佳預測出現。
- 離散 flow matching:網路對條件轉移或跳躍速率目標訓練,邊際的離散運輸場透過類似的條件期望機制出現。
兩種情形的訓練都靠可計算的條件路徑和抽樣的中間狀態,避開拿不到的邊際分佈。這個觀點由 Campbell et al. (2024) 和 Gat et al. (2024) 以「離散 flow model」或「離散 flow matching」的名稱發展。更廣地說,flow 觀點應該讀成一個關於學什麼物件的敘述:離散狀態空間上的運輸場,用轉移、速率或機率流表示。
Demo B兩個 token 的句子:反向模型要看到什麼轉述者補充
第 4 節說:前向破壞在各位置獨立,但被破壞序列的邊際一般不分解,所以反向模型需要看整個序列。這個 demo 把它量出來。詞彙 \(\{\text{a},\text{the},\text{cat},\text{dogs}\}\),資料是兩個 token 的句子:「a cat」35%、「the dogs」35%、「the cat」30%;「a dogs」不合文法,機率 0。前向破壞和 Demo A 相同(\(\beta=1\)、\(T=4\)),在兩個位置獨立作用。生成從精確的 \(\mathbf p_4\) 出發,在 \([0,4]\) 上切 \(M\) 個等長的反向步。三種反向模型:
- 整句的精確反向核:對兩個 token 的 25(或 16)個組態做第 4 節的 Bayes 反轉。
- 看整句、但每步各位置獨立抽:每個位置的反向分佈是上一項對另一個位置取邊際,所以每個位置都「看得到」整句(像 Transformer);但同一步裡兩個位置獨立抽樣。這是實際的 masked diffusion 語言模型一次揭開好幾個 token 時的做法。
- 只看自己的位置:每個位置只用自己那一格的邊際做 Bayes 反轉,完全不看另一個位置。
這裡的機率都是精確傳遞的(不抽樣),所以下表的數字沒有抽樣誤差。
表格的列是第 1 個 token(a 或 the)、行是第 2 個 token(cat 或 dogs),每格是生成的機率,下方小字是資料的比例;資料裡不存在卻被生成的組合用警示色。瀏覽器實測(和 Node 原型逐位相同)。和資料的 total variation 距離,\(M=1/2/4/16/64\):
| 反向模型 | masked | uniform |
|---|---|---|
| 整句的精確反向核 | 0 / 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 / 0 |
| 看整句、每步獨立抽 | 0.236 / 0.187 / 0.113 / 0.030 / 0.008 | 0.245 / 0.241 / 0.201 / 0.074 / 0.022 |
| 只看自己的位置 | 0.245(任何 M) | 0.245(任何 M) |
- 只看自己的位置,永遠是錯的。它最多學到兩個位置各自的邊際:第 1 個是 a 35%、the 65%,第 2 個是 cat 65%、dogs 35%,生成的是它們的乘積,「a dogs」有 \(0.35\times0.35=12.25\%\)。步數再多也一樣:前向在各位置獨立,不代表邊際分佈在各位置獨立。
- 看整句但一步揭開兩個,也會出錯。Masked、\(M=1\) 時,兩個 [M] 在同一步各自揭開,各自只知道「另一個也還是 [M]」,結果和只看自己的位置幾乎一樣(TV 0.236,「a dogs」11.8%)。步數越多,同一步裡同時揭開兩個位置的機率越小,誤差就消失(\(M=64\) 時 0.008)。這就是補充課 G §6 說的「一次揭開好幾個的代價」。
- 整句的精確反向核在任何步數都精確,就像 Demo A 的 Bayes 反向核。但它要對整個 \(\mathcal V^N\) 做加總,序列一長就不可行;實際模型用的是中間那一種,靠細步數彌補。
10相似之處與真正的差別書 §12.2.4
下表總結連續和離散 diffusion model 之間的平行關係;橫著讀每一列,是同一個概念成分在兩種設定裡的樣子。
| 連續(\(\mathbf x\in\mathbb R^D\)) | 離散(\(\mathbf x\in\mathcal V\subset\{0,1\}^K\)) | |
|---|---|---|
| 分佈 | 密度 \(p_t(\mathbf x)\) | 機率向量 \(\mathbf p_t\in\Delta^{K-1}\) |
| 樣本動態 | ODE 或 SDE 軌跡 | Markov 鏈或 CTMC 的跳躍 |
| 分佈演化 | 連續方程或 Fokker–Planck 方程 | 轉移矩陣的傳遞或 master equation |
| 運輸物件 | 速度、漂移、擴散或 score 場 | 轉移核、速率矩陣、比值或機率流 |
| 參考分佈 | 簡單分佈,例如高斯 | 簡單分佈,例如均勻或全 mask |
| 反向建模的三個觀點 | ||
| 變分 | 高斯或連續轉移的 ELBO | 類別轉移的 ELBO |
| Score/比值 | 學 score \(\nabla_{\mathbf x}\log p_t(\mathbf x)\) | 學比值或 log 比值,例如 \(p_t(i)/p_t(j)\) |
| Flow | 學速度場 \(\mathbf v_t(\mathbf x)\) | 學轉移、速率或機率流場 |
依書中的表重排(書:連續與離散的機率運輸觀點;同樣的生成建模成分出現在連續和有限的離散狀態空間,但數學物件改變了)。
平行關係很乾淨,但離散設定不只是把連續理論裡的梯度換成比值。有幾個更深的差別值得強調。
沒有字面上的反映射
在確定性的連續 normalizing flow 裡,反向映射就是前向映射的反函數。在離散的 Markov 過程裡,前向核可能把許多狀態的質量合併,不一定可逆,所以反向過程不是靠矩陣求逆得到,而是一個依賴目前邊際分佈的 Bayes 或時間反轉構造。這就是為什麼反向轉移機率裡有 \(p_k(i)/p_{k+1}(j)\) 這種因子,反向跳躍速率裡有 \(p_t(i)/p_t(j)\) 這種比值。
幾何與樣本路徑
在連續歐氏空間裡,個別樣本沿連續時間的軌跡演化:ODE 的解是光滑的,SDE 的樣本路徑是連續的(雖然通常處處不可微)。這個微分結構讓速度場、score 函數和散度這些物件有意義。在有限狀態空間裡,個別軌跡則是純跳躍路徑:在一個狀態停留一段隨機時間,然後突然跳到另一個。光滑演化的不是樣本路徑本身,而是機率向量 \(\mathbf p_t\),它依 master equation 在機率單純形上隨時間連續演化。所以離散 diffusion 在機率演化的層級仍然有統一的描述,但它樣本層級的動態由跳躍過程支配,而不是資料空間裡連續的 ODE/SDE 路徑。
前向破壞的結構與反向參數化
在離散 diffusion 裡,前向破壞過程常常是一個實質的建模選擇。在連續的高斯 diffusion 裡,可以改變時程 \(\alpha_t\)、\(\sigma_t\),但前向核通常仍是高斯,主要效果只是控制破壞的速度和尺度。在離散 diffusion 裡,轉移規則本身可以改變:uniform 破壞、masking、最近鄰轉移、圖結構的轉移、領域特定的轉移,或更一般的機率路徑。如 D3PM(Austin et al. 2021)所強調,前向過程因此可以直接納入領域特定的歸納偏置,這又反過來塑造反向生成的問題。
這個差別也改變了反向參數化的地位。在高斯設定裡,常見的目標(雜訊、去噪資料、score、速度)彼此由簡單的、隨時間變化的仿射變換相連(B16)。在離散設定裡,反向轉移機率、乾淨狀態預測、機率比值和跳躍速率透過正規化、Bayes 規則和所選的轉移圖相連。它們彼此相關,但不只是可以互換的高斯式重新參數化。結果,變分、score/比值、flow 三種描述是反向問題真正不同的觀點,不只是同一個代數目標的不同名字。
取樣機制
取樣程序也不同。在連續 diffusion 裡,生成通常是在選定的時間格點上數值積分 ODE 或 SDE。在離散 diffusion 裡,生成是模擬一個反向的 Markov 鏈或 CTMC:離散時間時是抽類別分佈的反向轉移;連續時間時可能是用學到的速率模擬跳躍,例如以事件為基礎的模擬,或時間離散化。所以連續 diffusion 裡數值 ODE/SDE 解法的角色,在離散設定裡由類別轉移抽樣或跳躍過程模擬取代(Demo A 的一階反向速率就是最簡單的時間離散化)。
為什麼停在這裡?
本節的目標不是發展離散 diffusion model 的完整機制,而是辨認在不同狀態空間之間保持不變的原則。重點是結構上的:在連續空間裡,分佈的演化由變數變換原則和它的微分形式支配,包括連續方程和 Fokker–Planck 方程;在離散空間裡,對應的角色由 Markov 算子和 master equation 扮演。兩種設定的建模邏輯相同:定義一個前向破壞過程,理解它怎麼運輸分佈,然後學一個用於生成的反向運輸機制。這個邏輯不依賴底層狀態空間是連續還是離散。
改變的是實現這個計畫的數學物件,不是計畫本身。連續空間裡用密度、梯度、速度場、SDE 或 ODE 動態;離散空間裡用機率向量、轉移核、跳躍速率、比值和機率流。這些差別在技術上很重要,導出參數化、訓練和取樣上不同的問題,但它們不改變更深的結論:機率運輸的觀點不綁定特定的狀態空間、架構或論文譜系。它是一個夠廣的組織原則,能在單一概念框架裡同時涵蓋連續和離散的 diffusion。
11全書結語書 §12.3
Diffusion model 一開始可能看起來像一堆縮寫、參數化和演算法變體的集合。但核心想法很簡單:它們提供一種構造生成器的方式,方法是規定機率分佈怎麼隨時間演化。從這個觀點看,生成不是一個神祕的黑盒子,而是一團粒子在一個前向過程和它學到的反向過程下,受控的運輸。
全書裡這個觀點以好幾種形式出現。在連續狀態空間裡,變分、score-based 和 flow-based 的表述提供不同的方式,描述並學習一個指定的分佈演化的反向。受 diffusion 啟發的快速生成器,例如 flow map 模型,也屬於同一個故事:它們沒有放棄運輸的觀點,而是問底層的生成動態能不能被更直接地表示、更有效率地執行。在離散狀態空間裡,同一個結構想法以 Markov 核、跳躍過程、比值和 master equation 的語言再次出現。
因此,本書的主要訊息不是某一個特定的表述應該取代其他所有表述。而是:diffusion 最好理解成一個從指定的前向過程構造生成器的一般原則(Lai et al. 2026)。在這個觀點下,不同的狀態空間自然導出不同的反向表示。連續設定裡,可以用條件高斯、score 函數、速度場或更直接的 flow map;離散設定裡,可以用反向轉移機率、乾淨狀態預測、機率比值、跳躍速率,或和底層 Markov 過程相關的機率流。重要的不是參數化的名稱,而是前向過程、它誘導的機率分佈演化,以及學到的生成機制,能不能一致地配合在一起。
我們希望這本書把這個結構講清楚了:一個前向過程誘導機率分佈的演化,生成建模就是學著反轉、近似或利用這個演化。具體的方法會繼續改變,但這個觀點提供一個穩定的方式,理解它們為什麼有效、彼此怎麼相關,以及新的發展可能從哪裡來。
本章開頭引用 Dijkstra:抽象的目的不是含糊,而是建立一個能絕對精確的新語意層次。全書最後引用 Einstein:重要的是不停止提問,好奇心有它自己存在的理由。
轉述者註:正文到這裡結束。後面 B33–B35 是書的附錄 A–C(ODE/SDE 速成、變數變換到 Fokker–Planck、Itô 與 Girsanov),補齊正文用到的數學工具;附錄 D 的證明已經分散在各頁的推導框裡。