連續時間 Markov 鏈:離散資料的 diffusion 怎麼加雜訊、怎麼倒回去
第 18 講把 diffusion 搬到文字這種離散資料上:加雜訊變成「token 隨機換成別的字,或被蓋成 MASK」,用的數學是連續時間 Markov 鏈(CTMC)。這一頁從「速率是什麼」開始,一步一步推導等待時間的分佈、分佈的演化方程、反向過程為什麼只需要機率的比值,以及 τ-leaping 一次揭開很多個 token 的代價。
讀完這頁你應該能夠
- 區分機率和速率,並說明速率矩陣 \(Q\) 的兩個條件從哪裡來。
- 推導停留時間為什麼是指數分佈,說明下一步跳到哪裡的機率,並寫出 Gillespie 模擬法。
- 從流入與流出推導 master equation \(\frac{d\mathbf p}{dt} = Q\mathbf p\),手解一個兩狀態的例子,並說明直接用 Euler 法會出什麼問題。
- 推導 uniform 與 absorbing 兩種加雜訊方式的轉移機率。
- 用貝氏定理推導反向 CTMC 的速率 \(\bar Q_t(j,i) = \frac{p_t(j)}{p_t(i)}Q_t(i,j)\),說明它和 concrete score 的關係。
- 用兩個 token 的例子說明 τ-leaping 為什麼會產生不存在的組合。
00為什麼需要它
前面幾堂的粒子都在連續的空間裡,可以移動一點點。但文字是離散的:一個 token 只能是字彙裡的某個字,不存在「A 和 B 之間」,也沒辦法對它加高斯雜訊。Score \(\nabla\log p\) 也沒有意義,因為不能對離散的東西微分。
所以要換一種連續時間的隨機過程:粒子大部分時間都不動,偶爾跳到另一個狀態。下表是這一頁和前面幾堂的對應,讀完你會發現每一格都有對應的東西:
| 連續資料 | 離散資料(本頁) | |
|---|---|---|
| 隨機過程 | SDE | 連續時間 Markov 鏈 |
| 分佈的演化 | Fokker–Planck | master equation |
| 加雜訊 | 高斯雜訊 | 換字或蓋成 MASK |
| 反向需要 | score \(\nabla\log p_t\) | 機率比 \(p_t(j)/p_t(i)\) |
| 數值解 | Euler–Maruyama | τ-leaping |
01從「每步機率」到「速率」
速率不是機率
補充課 D 的 Markov 鏈一步一步走,每一步用機率決定去哪裡。如果時間是連續的,就不能說「每步」,要改說「每單位時間」,也就是速率。
就像車速不是距離:時速 60 公里,開 1 分鐘才走 1 公里。同樣地,速率 2 代表「每單位時間發生約 2 次」,乘上一段很短的時間才是機率:
某個狀態以速率 2 跳走。\(\Delta t = 0.01\) 內跳走的機率約 \(2\times0.01 = 0.02\)。速率可以大於 1,但 \(\Delta t = 1\) 時,機率不是 2,「速率 × 時間」只有在時間很短時才是機率。
速率矩陣
把所有速率排成速率矩陣 \(Q\)。\(Q(j, i)\) 是「現在在 \(i\),每單位時間跳到 \(j\) 的速率」,注意是第 \(i\) 行第 \(j\) 列。在很短的時間 \(\Delta t\) 內:
$$P(x_{t+\Delta t} = j\mid x_t = i)\approx Q(j, i)\,\Delta t$$這裡 \(j\neq i\)。
對角元素怎麼決定?留在原地的機率是 1 減掉跳走的機率。令離開 \(i\) 的總速率是 \(\lambda_i = \sum_{j\ne i}Q(j, i)\):
$$P(x_{t+\Delta t} = i\mid x_t = i)\approx1 - \lambda_i\,\Delta t$$定義 \(Q(i, i) = -\lambda_i\),兩種情況就能合成一條式子(\(\delta_{ij}\) 是 \(i = j\) 時為 1、否則為 0):
$$\begin{aligned}&P(x_{t+\Delta t} = j\mid x_t = i)\\={}&\delta_{ij} + Q(j, i)\,\Delta t + O(\Delta t^2)\end{aligned}$$所以速率矩陣有兩個條件,都有清楚的來由:
- 非對角元素 \(\ge0\):速率不能是負的。
- 每一行加起來是 0:這就是 \(Q(i,i) = -\lambda_i\) 的定義,代表從 \(i\) 出發,所有去向的機率加起來是 1。
A→B 1.0、A→C 0.5;B→A 0.3、B→C 0.7;C→A 0.6、C→B 0.2。
$$Q = \begin{bmatrix}-1.5&0.3&0.6\\1&-1&0.2\\0.5&0.7&-0.8\end{bmatrix}$$第一行是「從 A 出發」:\(-1.5 + 1 + 0.5 = 0\) ✓。
記號:本頁沿用第 18 講與 SEDD 論文的寫法,\(Q(j, i)\) 是 \(i\to j\)、每一行加總為 0、分佈是行向量 \(\mathbf p\),演化寫成 \(Q\mathbf p\)。補充課 D 用的是「列向量乘矩陣、每一列加總為 1」,兩者差一個轉置:\(T(\Delta t)\approx I + \Delta t\,Q^\top\)。
02什麼時候跳、跳去哪裡
等待時間:為什麼是指數分佈
粒子在狀態 \(i\),離開的總速率是 \(\lambda\)。令 \(S(t)\) 是「到時間 \(t\) 還沒跳」的機率。要撐到 \(t + dt\),就要先撐到 \(t\),然後在接下來的 \(dt\) 也不跳:
$$S(t + dt) = S(t)\,(1 - \lambda\,dt)$$移項、除以 \(dt\),得到 \(\frac{dS}{dt} = -\lambda S\)。這正是補充課 B 第 3 節的方程,加上 \(S(0) = 1\):
等待時間 \(\tau\) 的密度是 \(-S'(t) = \lambda e^{-\lambda t}\),這就是指數分佈,它的平均是 \(1/\lambda\)。速率越大,等得越短,很合理。
它還有沒有記憶的性質:已經等了 \(s\),再等超過 \(t\) 的機率是
$$\begin{aligned}P(\tau > s + t\mid\tau > s) &= \frac{e^{-\lambda(s+t)}}{e^{-\lambda s}}\\&= e^{-\lambda t}\end{aligned}$$和完全沒等過一樣。這正是 Markov 性質:未來只看現在在哪裡,不管已經待了多久。
跳去哪裡
在每一段 \(dt\) 內,跳到 \(j\) 的機率是 \(Q(j, i)\,dt\),跳走的總機率是 \(\lambda\,dt\)。所以已知要跳了,跳到 \(j\) 的條件機率是兩者的比值:
$$P(\text{跳到 }j\mid\text{跳了}) = \frac{Q(j, i)}{\lambda_i}$$從 A 出發:\(\lambda = 1.0 + 0.5 = 1.5\)。平均停留 \(1/1.5 = 0.667\)。超過 1 的機率 \(e^{-1.5} = 0.223\)。跳的時候,去 B 的機率 \(1.0/1.5 = \tfrac23\),去 C 的機率 \(\tfrac13\)。
精確的模擬:Gillespie 演算法
這兩件事直接給出不需要切時間步的模擬方法。在狀態 \(i\):
- 抽等待時間 \(\tau = -\ln(u)/\lambda_i\),其中 \(u\) 是 \([0, 1]\) 上的均勻亂數。(\(P(\tau > t) = P(u \lt e^{-\lambda t}) = e^{-\lambda t}\),確實是指數分佈。)
- 以機率 \(Q(j, i)/\lambda_i\) 選下一個狀態 \(j\)。
- 時間前進 \(\tau\),重複。
Demo G1 · 一條 CTMC 的軌跡,以及停留時間的分佈
小練習:離開的總速率是 2。平均停留多久?停留超過 1 的機率是多少?
03Master equation:分佈的演化是一個線性 ODE
推導:流入減流出
從一顆粒子換成整個分佈 \(\mathbf p_t\)(在每個狀態的機率)。用第 1 節的機率和全機率,走一小段時間後在 \(j\) 的機率是:
$$\begin{aligned}p_{t+\Delta t}(j) ={}&\underbrace{p_t(j)(1 - \lambda_j\Delta t)}_{\text{原本在 }j\text{ 且沒跳走}}\\&+ \underbrace{\sum_{i\ne j}p_t(i)\,Q(j, i)\,\Delta t}_{\text{從別處跳進來}}\end{aligned}$$移項、除以 \(\Delta t\),取極限:
$$\frac{dp_t(j)}{dt} = \underbrace{\sum_{i\ne j}Q(j,i)\,p_t(i)}_{\text{流入}} - \underbrace{\lambda_j\,p_t(j)}_{\text{流出}}$$右邊正好是矩陣乘法 \(Q\mathbf p_t\) 的第 \(j\) 個元素(\(-\lambda_j\) 就是對角元素 \(Q(j,j)\))。所以:
這也叫 Kolmogorov forward equation,是 Fokker–Planck 方程的離散版本。總機率不變:把所有 \(j\) 加起來,\(\mathbf 1^\top Q = 0\)(每一行加起來是 0),所以 \(\frac{d}{dt}\sum_jp_t(j) = 0\)。
三狀態例子,從 A 出發,\(\mathbf p_0 = (1, 0, 0)\)。\(Q\mathbf p_0\) 就是 \(Q\) 的第一行 \((-1.5, 1, 0.5)\)。所以 \(\Delta t = 0.01\) 之後約是 \((0.985, 0.01, 0.005)\)。
解:矩陣指數
它就是補充課 B 第 7 節的線性 ODE,解是矩陣指數:
所以 \(P(x_t = j\mid x_0 = i) = \big(e^{tQ}\big)(j, i)\)。
特徵值的意義也和 B 一樣。\(Q\) 一定有特徵值 0:它的特徵向量滿足 \(Q\boldsymbol\pi = 0\),也就是不再變化的穩態。鏈不可約時(每個狀態都能走到每個狀態),其他特徵值的實部都是負的,對應會衰減掉的部分。
A→B 速率 2,B→A 速率 1:\(Q = \begin{bmatrix}-2&1\\2&-1\end{bmatrix}\)。trace 是 \(-3\),行列式是 0,所以特徵值是 \(0\) 和 \(-3\)。
穩態:\(Q\boldsymbol\pi = 0\) 給出 \(-2\pi_A + \pi_B = 0\),也就是 \(\boldsymbol\pi = (\tfrac13, \tfrac23)\)。
從 A 出發,\(p_A(t)\) 是穩態加上衰減的部分:
$$p_A(t) = \tfrac13 + \tfrac23e^{-3t}$$驗算:\(p_A' = -2e^{-3t}\)。右邊 \(-2p_A + p_B\),其中 \(p_B = 1 - p_A = \tfrac23 - \tfrac23e^{-3t}\),算出來也是 \(-2e^{-3t}\) ✓。
Demo G2 · 兩個狀態的鏈
為什麼不直接用 Euler 法
用 Euler 法(補充課 B 第 8 節)一步步解,就是 \(\mathbf p_{k+1} = (I + \Delta t\,Q)\mathbf p_k\)。\(I + \Delta t\,Q\) 的對角元素是 \(1 - \Delta t\,\lambda_i\)。步長小時沒問題,但只要 \(\Delta t\,\lambda_i > 1\),它就變成負的,「機率」會出現負數,這和 補充課 B 的 stiffness 是同一件事。
Demo G3 · e^{tQ}、5,000 條模擬軌跡,以及大步長的 Euler
小練習:離開某狀態的最大速率是 4,用 Euler 解 master equation,步長最多多大才不會出現負機率?
04兩種加雜訊的方式:uniform 與 absorbing
第 18 講的離散 diffusion 讓每個 token 獨立地照同一個 CTMC 變化。字彙大小 \(N\),有兩種常用的規則。這裡把速率歸一化成 1;第 18 講的 \(Q^{\text{uniform}} = \mathbf 1\mathbf 1^\top - NI\) 是這裡的 \(N\) 倍,只差時間的縮放。
推導轉移機率
這兩種規則不必算矩陣指數,用第 2 節直接想就好。「重抽」或「被蓋」事件以速率 1 發生,所以到時間 \(t\) 完全沒發生過的機率是 \(e^{-t}\)。
- absorbing(蓋成 MASK):沒發生過就還是原字,機率 \(e^{-t}\);發生過就是 MASK,機率 \(1 - e^{-t}\)。
- uniform(重抽成隨機的字):沒發生過是原字,機率 \(e^{-t}\);發生過的話,最後一次重抽的結果是完全均勻的,每個字機率 \(1/N\)。所以原字的機率是 \(e^{-t} + (1 - e^{-t})/N\)(可能抽回自己),其他每個字是 \((1 - e^{-t})/N\)。
| uniform:換成隨機的字 | absorbing:蓋成 MASK | |
|---|---|---|
| 規則 | 以速率 1 把 token 重抽成 \(N\) 個字之一 | 以速率 1 變成 MASK,MASK 不再改變 |
| \(P(\text{還是原本的字})\) | \(e^{-t} + (1 - e^{-t})/N\) | \(e^{-t}\) |
| 其他 | 每個別的字 \((1 - e^{-t})/N\) | MASK:\(1 - e^{-t}\) |
| \(t\to\infty\) | 完全均勻的亂碼 | 全部 MASK |
\(N = 26,\ t = 1\):uniform 還是原字 \(0.368 + 0.632/26 = 0.392\);absorbing 還是原字 \(0.368\)。
Demo G4 · 同一句話,兩種加雜訊
05倒轉時間:反向的速率只需要機率的比值
推導:貝氏定理
前向的 CTMC 把資料 \(p_0\) 變成雜訊 \(p_T\)。生成時要從雜訊走回資料。假設現在是時間 \(t\),在狀態 \(i\),往回看一小段 \(dt\),上一刻在 \(j\) 的機率是多少?這正是貝氏定理:
$$\begin{aligned}&P(x_{t-dt} = j\mid x_t = i)\\={}&\frac{P(x_{t-dt} = j)\,P(x_t = i\mid x_{t-dt} = j)}{P(x_t = i)}\end{aligned}$$代入:分子第一項是 \(p_t(j)\)(\(dt\) 很短),第二項是前向從 \(j\) 跳到 \(i\) 的機率 \(Q_t(i, j)\,dt\),分母是 \(p_t(i)\):
$$\begin{aligned}&P(x_{t-dt} = j\mid x_t = i)\\={}&\frac{p_t(j)}{p_t(i)}\,Q_t(i, j)\,dt\end{aligned}$$「機率 = 速率 × \(dt\)」,所以倒著走時,從 \(i\) 跳到 \(j\) 的速率是:
這裡 \(i\ne j\)。
關鍵在 \(\frac{p_t(j)}{p_t(i)}\):反向過程只需要機率的比值,歸一化常數消掉了。這就是第 18 講的 concrete score,和連續情形反向 SDE 只需要 \(\nabla\log p_t\) 完全對應(補充課 F §6)。模型要學的就是這個比值。
手算:一個 token 的 absorbing 鏈
三個字 A、B、C 的初始機率 \((0.5, 0.3, 0.2)\)(第 18 講投影片 31、38 的例子),加上 MASK。前向時各字以速率 1 被蓋住,所以 \(p_t(v) = p_0(v)e^{-t}\),\(p_t(\text{MASK}) = 1 - e^{-t}\)。
反向是從 MASK 揭開成 \(v\)。前向 \(v\to\) MASK 的速率是 1,所以
$$\begin{aligned}\bar Q_t(v, \text{MASK}) &= \frac{p_t(v)}{p_t(\text{MASK})}\\&= \frac{p_0(v)\,e^{-t}}{1 - e^{-t}}\end{aligned}$$\(t = 1\) 時,分母 \(0.632\),揭開成 A、B、C 的速率是 \(0.291, 0.175, 0.116\)。注意比例就是 \(0.5 : 0.3 : 0.2\):揭開成哪個字,由資料分佈決定。
驗證它真的走回去:倒著走時,每單位時間揭開成 A 的量是「速率 × MASK 的機率」\(= p_t(A)\)。而前向的 \(\frac{d}{dt}p_t(A) = -p_t(A)\),所以倒著走時 \(p_t(A)\) 正好以 \(p_t(A)\) 的速率增加 ✓。
Demo G5 · 一個 token 的 absorbing 鏈:倒著走回原本的分佈
06很多個 token:τ-leaping 一次揭開好幾個的代價
狀態太多
序列有 \(d\) 個 token 時,狀態數是 \(N^d\)。\(N = 26,\ d = 10\) 就有 \(1.4\times10^{14}\) 個,不可能直接處理整個 \(Q\)。第 18 講的做法是讓前向過程每個 token 獨立。獨立事件同時發生的機率是 \(dt^2\) 量級,所以任一瞬間只有一個 token 在變,反向也只需要「只差一個位置」的比值。
τ-leaping
精確的反向模擬一次只能改一個 token,太慢。τ-leaping 讓一個時間步內每個位置同時、獨立地決定要不要變。它相當於 CTMC 版本的 Euler–Maruyama。
代價:同一步內,每個位置只看「步驟開始時」的序列做決定,看不到其他位置在同一步裡改成了什麼。步長很小時,同一步裡很少有兩個位置同時變,問題不大;步長很大時,相依性就被忽略了。
資料只有兩個長度 2 的字,各 50%:AB 和 BA。也就是兩個位置永遠不同。
現在兩個位置都是 MASK,要揭開第 1 個位置。兩種字的機率相同,所以揭開成 A 或 B 各 50%。第 2 個位置也一樣。
- 同一步一起揭開:兩個位置各自看到「另一個是 MASK」,獨立地選。\(P(\text{AA}) = P(\text{BB}) = \tfrac14\),所以一半的結果不合法。
- 分兩步揭開:第一個揭開成 A 之後,另一個看到 A,只有 AB 符合,所以它的比值一定選 B。結果一定合法。
Demo G6 · 只有 AB 和 BA 兩個合法的「字」:步數太少會生出 AA、BB
07CTMC 的 detailed balance
和補充課 D 第 4 節一樣,若穩態分佈 \(\boldsymbol\pi\) 滿足
$$\pi_i\,Q(j, i) = \pi_j\,Q(i, j)$$(每一對狀態之間的流量相等),鏈就是可逆的。代入第 5 節的公式,在穩態下:
$$\bar Q(j, i) = \frac{\pi_j}{\pi_i}Q(i, j) = Q(j, i)$$反向和前向是同一條鏈。兩種雜訊正好是兩個極端:
- uniform 對均勻分佈滿足 detailed balance:任兩個字之間來回的速率一樣。
- absorbing 完全不可逆:只能變成 MASK,不能變回來,所以反向過程(揭開 MASK)和前向長得完全不同,而且需要知道資料分佈的比值才能定義。
08在 CS236 哪裡用到
| 本頁的概念 | 第 18 講的對應 |
|---|---|
| 速率矩陣、兩個條件 | §6「\(Q_t\) 的每一行加總為 0、非對角 ≥ 0」 |
| master equation、\(e^{tQ}\) | §6 的 \(\frac{d\mathbf p_t}{dt} = Q_t\mathbf p_t\)、\(\mathbf p_t = \exp(\bar\sigma(t)Q)\mathbf p_0\);課後問答「為什麼不用更複雜的 \(Q\):要能快速算矩陣指數」 |
| uniform、absorbing | §6 的兩種 \(Q\) 與 Demo A;SEDD Uniform vs Absorb 的結果 |
| 反向速率需要比值 | §4 的 concrete score、§7 的 \(\bar Q_t(j,i) = \frac{p_t(j)}{p_t(i)}Q_t(i,j)\) |
| τ-leaping 與相依性 | §7 的 τ-leaping、Demo B 的步數與合法比例 |
常見誤解
自我測驗
1. 從 A 出發,A→B 速率 1、A→C 速率 3。第一次跳到 B 的機率是多少?
2. \(Q = \begin{bmatrix}-1&3\\1&-3\end{bmatrix}\) 的穩態是什麼?收斂的速率是多少?
3. absorbing 雜訊下,\(t = 1\) 時某個 token 還是原本的字的機率是多少?
4. 寫出反向 CTMC 的速率。為什麼不需要歸一化常數?
5. 為什麼 τ-leaping 一步揭開所有 MASK 會生出不存在的字?
延伸閱讀
- Holderrieth & Erives (2026)〈Discrete Diffusion Models〉一章:速率矩陣的兩個條件、Kolmogorov forward equation、factorized CTMC 與每個 token 獨立更新的理由;附錄有 CTMC 存在唯一性的證明。
- Lou, Meng & Ermon (2024), SEDD:第 18 講的論文;反向速率、τ-leaping 與 Tweedie τ-leaping。
- Campbell et al. (2022), A Continuous Time Framework for Discrete Denoising Models:CTMC 與 τ-leaping 在 diffusion 的用法。
- 第 18 講頁面 §6–7 與 Demo A、B。