U5.4 18 分鐘閱讀 2026年9月

U5.4 Discrete Flow Matching:條件路徑、Rate 與配對

本篇重用M4.2電話隨時會響:Continuous-Time Markov Chain 與 Rate Matrix·M1.1從鞋子猜身高:Conditional Expectation·M2.2站內人數變化 = 進 − 出:Continuity Equation

兩個字之間沒有中點。
那 flow matching 的「條件路徑」在離散空間裡是什麼?

換一個起點

到目前為止,反向過程都是「先定 forward chain,再把它倒過來」——U4.1 倒 posterior、U5.2 倒 rate。U2 在連續世界做過另一件事:不從 forward SDE 出發,直接寫下每一對端點之間的條件路徑,微分得到條件速度,再證明邊際速度是條件速度的後驗平均。那個建構把「路徑」的設計權從 Gaussian noise 手上拿回來。

離散世界能不能做同一件事?可以,而且做完會發現:x1x_1 取全 [MASK] 就是 absorbing、取均勻隨機字就是 uniform,兩條鏈變成同一個框架的兩個特例;更重要的是,它讓 U2.0 說的「起點可以不是噪聲」在離散世界也成立。這就是 discrete flow matching(DFM),Gat et al. [1] 與 Campbell et al. [2] 在 2024 年各自提出。

符號這一篇的時間方向和論文原文相反

本單元和上一個單元一樣:t=0t=0 是資料、t=1t=1 是噪聲,所以下面 x0pdatax_0\sim p_{\text{data}}x1pnoisex_1\sim p_{\text{noise}}。Gat et al. [1] 的原文把 source 放在 t=0t=0、資料放在 t=1t=1——式子長得一模一樣,只是 x0x_0x1x_1 的角色互換,讀論文時對照即可。

另外 κt\kappa_t 和前兩篇的 αt\alpha_t 是互補的:κt\kappa_t 是「已經變成 x1x_1 的機率」、αt\alpha_t 是「還是原字的機率」,所以 κt=1αt\kappa_t=1-\alpha_t。代進式子的時候不要記錯方向。

一個 token 怎麼從噪聲走到資料

先看一個 token。給定端點 (x0,x1)(x_0,x_1)(兩個字),連續世界的直線插值 (1t)x0+tx1(1-t)x_0+tx_1 在這裡沒有意義——兩個字之間沒有中點。但機率可以插值:

pt(xx0,x1)=(1κt)δx0(x)+κtδx1(x),κ0=0, κ1=1, κt 單調遞增.p_t(x\mid x_0,x_1)=(1-\kappa_t)\,\delta_{x_0}(x)+\kappa_t\,\delta_{x_1}(x),\qquad \kappa_0=0,\ \kappa_1=1,\ \kappa_t\text{ 單調遞增}.

δx0\delta_{x_0} 是集中在 x0x_0 的 one-hot 分佈。讀法:在時刻 tt,這個 token 以機率 1κt1-\kappa_t 還是 x0x_0、以機率 κt\kappa_t 已經變成 x1x_1沒有第三種可能。畫面是一枚只翻一次的硬幣:token 從 x0x_0 出發,在某個隨機時刻跳到 x1x_1,之後不再動;κt\kappa_t 是「到 tt 為止已經跳了」的機率。

整句 LL 個 token 各自獨立地做這件事,pt(xx0,x1)=pt(xx0,x1)p_t(x\mid x_0,x_1)=\prod_\ell p_t(x^\ell\mid x_0^\ell,x_1^\ell)

它就是上一個單元的兩條鏈。κt=1αt\kappa_t=1-\alpha_t

  • x1=x_1=[MASK](一個確定的狀態):token 以機率 αt\alpha_t 是原字、1αt1-\alpha_t[MASK]——absorbing 的 Qˉt\bar Q_t
  • x1x_1\sim 每個位置獨立均勻:token 以機率 αt\alpha_t 是原字、1αt1-\alpha_t 是均勻隨機字——uniform 的 Qˉt\bar Q_t

U4.1 那句「Qˉt=αˉtI+(1αˉt)×\bar Q_t=\bar\alpha_t I+(1-\bar\alpha_t)\times終點」在這裡變成定義本身。而 x1x_1 也可以是別的東西:一個混合(一部分位置 mask、一部分均勻)、或者根本不是噪聲——是另一個分佈的樣本。

條件 rate:一行

條件路徑要由一條 CTMC 生成,它的 rate 是什麼?forward 方向(x0x1x_0\to x_1)token 只有一種跳法:從 x0x_0 跳到 x1x_1(若 x0x1x_0\ne x_1)。「還沒跳」的機率是 1κt1-\kappa_t,它的衰減率就是 rate 乘上自己:ddt(1κt)=rate(1κt)\frac{d}{dt}(1-\kappa_t)=-\text{rate}\cdot(1-\kappa_t),所以

Rt(x0x1x0,x1)=κ˙t1κt.R_t(x_0\to x_1\mid x_0,x_1)=\frac{\dot\kappa_t}{1-\kappa_t}.

κt=1αt\kappa_t=1-\alpha_tα˙t/αt=βt-\dot\alpha_t/\alpha_t=\beta_t,正是 U5.1 算出的 forward rate。✓

生成方向(從 x1x_1 回到 x0x_0,時間往回走)也只有一種跳法:從 x1x_1 跳回 x0x_0。往回走時「還在 x1x_1」的機率是 κt\kappa_t,它隨往回走的時間衰減的速率是 κ˙t\dot\kappa_t,所以

Rˉt(x1x0x0,x1)=κ˙tκt.\bar R_t(x_1\to x_0\mid x_0,x_1)=\frac{\dot\kappa_t}{\kappa_t}.

代 absorbing:α˙t1αt\frac{-\dot\alpha_t}{1-\alpha_t}——U5.3utu_t。✓ 兩個方向都不需要任何網路,是端點決定的常數(對 tt 的函數)。這對應 U2.2 的「條件速度好算到不需要網路」。

互動 demo:一個 token 的條件路徑。 六根柱子是六個位置,下半是起點的字(高度 1κt1-\kappa_t)、上半是終點的字(高度 κt\kappa_t);拖 tt,質量就從下半流到上半,而且六根完全同步——條件路徑是逐 token 各自獨立的。按「抽一條軌跡」,每個位置各抽一個跳躍時刻,同一個 tt 之下就有些跳了、有些還沒,而且每個位置只跳一次,這就是條件路徑的全部內容。下方兩條 rate 把兩端的發散畫出來:κt=t\kappa_t=t 時,t=0.1t=0.1 的 forward rate 是 1.11、生成 rate 是 10.00,t=0.9t=0.9 剛好反過來(10.00 / 1.11)——實作上兩端都要 clamp。換成 κt=1cos(πt/2)\kappa_t=1-\cos(\pi t/2),同一個 t=0.4t=0.4κ\kappa 從 0.400 變成 0.191、生成 rate 從 2.50 變成 4.83。把起點按鈕換到「另一句話」,這個框架就直接是序列到序列,一個 [MASK] 都不需要。

條件目標平均起來,還是對的嗎?

現在對端點取平均。(x0,x1)π(x_0,x_1)\sim\pi(暫時獨立:π=pdatapnoise\pi=p_{\text{data}}\otimes p_{\text{noise}}),邊際

pt(x)=x0,x1pt(xx0,x1)π(x0,x1),Rˉt(xy):=E[Rˉt(xyx0,x1)  xt=x].p_t(x)=\sum_{x_0,x_1}p_t(x\mid x_0,x_1)\,\pi(x_0,x_1),\qquad \bar R_t(x\to y):=\mathbb E\big[\bar R_t(x\to y\mid x_0,x_1)\ \big|\ x_t=x\big].

敘述。 若每組 (x0,x1)(x_0,x_1) 的條件 rate Rˉt(x0,x1)\bar R_t(\cdot\mid x_0,x_1) 生成條件路徑 pt(x0,x1)p_t(\cdot\mid x_0,x_1),則上面定義的 Rˉt\bar R_t 生成邊際路徑 ptp_t

證明。 forward equation 對 pp線性的。對每組 (x0,x1)(x_0,x_1)p˙t(yx0,x1)=xpt(xx0,x1)Rˉt(xyx0,x1)\dot p_t(y\mid x_0,x_1)=\sum_x p_t(x\mid x_0,x_1)\,\bar R_t(x\to y\mid x_0,x_1)(生成方向的時間;符號按方向調整)。兩邊乘 π(x0,x1)\pi(x_0,x_1)、對端點求和:

p˙t(y)=xx0,x1pt(xx0,x1)π(x0,x1)Rˉt(xyx0,x1)=xpt(x)x0,x1pt(xx0,x1)π(x0,x1)pt(x)Rˉt(xyx0,x1)= Rˉt(xy).\dot p_t(y)=\sum_x\sum_{x_0,x_1}p_t(x\mid x_0,x_1)\,\pi(x_0,x_1)\,\bar R_t(x\to y\mid x_0,x_1) =\sum_x p_t(x)\underbrace{\sum_{x_0,x_1}\frac{p_t(x\mid x_0,x_1)\pi(x_0,x_1)}{p_t(x)}\bar R_t(x\to y\mid x_0,x_1)}_{=\ \bar R_t(x\to y)}.

最後一步用了 Rˉt\bar R_t 的定義。\square

把它和 U2.2 定理 1 的證明並排:那裡是「continuity equation 對 pp 線性 → 對 zz 積分 → 用 utu_t 的定義」;這裡是「forward equation 對 pp 線性 → 對 (x0,x1)(x_0,x_1) 求和 → 用 Rˉt\bar R_t 的定義」。逐字相同,只換了方程式。 還要順手檢查一件連續版不用檢查的事:後驗平均出來的 Rˉt\bar R_t 是不是合法的 rate matrix?是——非對角是非負數的平均,仍非負;列和是零的平均,仍為零。

展開細節訓練目標:定理 2 的離散版,以及為什麼最後還是 cross-entropy

連續版的定理 2 說:用條件速度當 MSE 目標,梯度與用邊際速度相同。離散版要學的是 Rˉt(xy)\bar R_t(x\to y),而條件 rate 的形狀很特別:對 mask source,Rˉt(xyx0,x1)=κ˙tκt1[y=x(x0)]\bar R_t(x\to y\mid x_0,x_1)=\frac{\dot\kappa_t}{\kappa_t}\,\mathbb 1[y=x^{(\ell\to x_0^\ell)}]——「位置 \ell 被遮時,以 rate κ˙t/κt\dot\kappa_t/\kappa_t 跳回 x0x_0^\ell」。對這個指示函數取後驗平均:

Rˉt(xx(v))=κ˙tκtp(x0=v  xt=x).\bar R_t\big(x\to x^{(\ell\to v)}\big)=\frac{\dot\kappa_t}{\kappa_t}\,p\big(x_0^\ell=v\ \big|\ x_t=x\big).

邊際 rate 完全由 x0x_0 的逐位置 posterior 決定,而 posterior 的自然回歸 loss 是 cross-entropy——與 U4.2 相同(Gat et al. 稱之為 probability denoiser)。所以離散版「定理 2」的內容是:x0x_0^\ell 當 cross-entropy 的目標,網路收斂到 p(x0xt)p(x_0^\ell\mid x_t),代進上式就是邊際 rate。 論證仍是 tower property:cross-entropy 的最小值是條件分佈,就像 MSE 的最小值是條件期望。

對一般的 source(例如均勻),條件 rate 是 κ˙tκt1[x=x1]1[v=x0]\frac{\dot\kappa_t}{\kappa_t}\mathbb 1[x^\ell=x_1^\ell]\mathbb 1[v=x_0^\ell],後驗平均後是 κ˙tκtp(x0=v, x1=xxt=x)\frac{\dot\kappa_t}{\kappa_t}\,p(x_0^\ell=v,\ x_1^\ell=x^\ell\mid x_t=x)——多了一個「xtx_t^\ell 是不是還是噪聲字」的判斷,這正是 U4.4 說 uniform 的 context 不乾淨的地方,現在它是式子裡的一個 joint posterior。

這個框架多給了什麼

把 absorbing 與 uniform 寫成同一個式子的兩個特例,本身只是整理。DFM 真正多出來的是三件事:

  1. source 任意。 x1x_1 不必是噪聲。U2.0 說 FM 的動機之一是「從分佈 A 生成分佈 B」;DFM 讓它在 token 上成立——source 可以是一句翻譯的原文、一段要修補的程式、一張圖的 token。
  2. schedule 與 source 可以逐位置不同。 每個位置有自己的 κt\kappa_t^\ell、自己的 source 分佈——例如一部分位置走 mask、一部分走 uniform 的混合路徑(Gat et al. 的實驗顯示這種混合對某些任務有幫助)。
  3. 取樣器的 stochasticity。 上一篇說的 η\eta(Campbell et al.)與 corrector(Gat et al.):在生成 rate 上加一對流量相反的管子,邊際不變。

第 1 點把我們帶到 U2.3 遺留的旋鈕。

課堂提問Q1

U3.0 說 stochastic interpolant 上有三個可以轉的東西:路徑、配對、γt\gamma_t。路徑在這裡是 κt\kappa_tγt\gamma_t 沒有在這裡出現——條件路徑只是 x0x_0x1x_1 兩點的混合,沒有第三個獨立抽的噪聲項。(上一篇的 σt\sigma_t 不是 γt\gamma_t 那是取樣時注入的噪聲,也就是 U3.1 的第五個旋鈕;γt\gamma_t 是訓練時的路徑寬度,U3.0 特別把兩者分開過。)配對 π(x0,x1)\pi(x_0,x_1) 呢?在離散空間裡,把獨立配對換成別的配對,還有 U3.4 那種「拉直軌跡」的意義嗎?

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

常見的答案分三類:「有,用 Hamming 距離做 OT 配對」、「沒有,因為離散空間沒有直線」、「要看 source 是什麼」。第三類是對的起點。

mask source:沒有東西可以配對。 x1x_1 是全 [MASK],一個確定的狀態。π\pi 只能是 pdataδall-maskp_{\text{data}}\otimes\delta_{\text{all-mask}},配對旋鈕根本不存在。這是 absorbing 鏈的另一個乾淨之處。

uniform source:可以配對,但拉直的意義沒了。 連續世界裡配對之所以重要,是 U2.3 Q1 那條鏈:獨立配對 → 條件直線交叉 → 邊際速度是交叉處的平均 → 軌跡彎 → Euler 有限步誤差大;OT 配對讓直線不交叉、軌跡變直、x¨dt\int\|\ddot x\|dt 變小。離散世界裡這條鏈的每一環都換了東西:條件路徑不是直線而是「每個 token 跳一次」;「交叉」沒有定義(沒有 ODE 軌跡,只有跳躍);有限步誤差的來源不是曲率而是 U4.3 的因子化——一步內同時跳的多個位置被獨立抽。而因子化誤差取決於給定 xtx_t 下各位置之間的條件相依,這是資料分佈本身的性質;換配對改變的是「哪個噪聲配哪個資料」,改不了資料裡「牛肉」和「麵」的相依。所以「配對 → 拉直 → 少步」這條路在離散世界沒有對應。

(有一個粗糙的類比:用 Hamming 距離把 x0x_0 配給「和它重疊最多」的 x1x_1,需要跳的 token 變少,每步同時跳的位置也少一點。但這同時讓噪聲字帶有 x0x_0 的資訊——「還是原字」與「噪聲剛好等於原字」不再可分——沒有像 OT 配對那樣的定理支持它是好事,而且就我所知也沒有像 minibatch OT 那樣的系統性研究。這裡只當一個提示,不當結論。)

配對真正留下的意義:對齊。 當 source 不是噪聲而是另一個分佈時,π\pi成對資料——原文與譯文、草稿與修訂、一張圖的 caption 與 token。這時 π\pi 不是為了拉直而選的,是任務本身給的:它告訴模型「這個 x1x_1 該變成哪個 x0x_0」。U2.0 說 FM 拿回了路徑設計權、可以做 A→B;DFM 把同一件事帶到 token 上,而配對是 A→B 裡「哪個 A 對哪個 B」的那個資訊。Campbell et al. [2] 的 protein co-design 就是這種用法的例子:結構(連續、用 FM)與序列(離散、用 DFM)成對生成,兩條路徑共用一個網路。

所以答案是:拉直的意義消失,對齊的意義留下。 U2.3 Q1 的「交叉」在離散世界的化身是因子化誤差,而它不歸配對管,歸「每步翻開幾個」與 U5.3 的取樣器管。

先消化一下

想一想

DFM 的條件路徑 pt(xx0,x1)=(1κt)δx0+κtδx1p_t(x\mid x_0,x_1)=(1-\kappa_t)\delta_{x_0}+\kappa_t\delta_{x_1},用一句話描述一個 token 的行為是:

想一想

「邊際 rate 是條件 rate 的後驗平均」的證明,與 U2.2 定理 1 的證明相比:

想一想

用 mask 當 source 時,配對旋鈕 π(x0,x1)\pi(x_0,x_1)

想一想

U2.3 Q1 說「彎曲來自交叉,交叉來自配對」。這條因果鏈在離散世界裡:

參考文獻

  1. Gat, I., Remez, T., Shaul, N., Kreuk, F., Chen, R. T. Q., Synnaeve, G., Adi, Y., Lipman, Y. Discrete Flow Matching. NeurIPS 2024.(逐 token 條件路徑、probability denoiser、混合 source、corrector sampling。)
  2. Campbell, A., Yim, J., Barzilay, R., Rainforth, T., Jaakkola, T. Generative Flows on Discrete State-Spaces: Enabling Multimodal Flows and Applications to Protein Co-Design. ICML 2024.(CTMC 版的 flow matching、stochasticity η\eta、連續與離散共用框架。)
  3. Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., Le, M. Flow Matching for Generative Modeling. ICLR 2023.(連續版定理 1、2。)
  4. Sahoo, S. S. et al. Simple and Effective Masked Diffusion Language Models. NeurIPS 2024.(mask source 下 DFM 與 MDLM 的等價。)
  5. Tong, A., Fatras, K., Malkin, N., Huguet, G., Zhang, Y., Rector-Brooks, J., Wolf, G., Bengio, Y. Improving and Generalizing Flow-Based Generative Models with Minibatch Optimal Transport. TMLR 2024.(連續世界的配對旋鈕,Q1 的對照。)