U3.0 14 分鐘閱讀 2026年9月

U3.0 一個式子裝下前面兩個單元

本篇重用M1.0兩台體重計:Gaussian 的線性組合·M1.4去噪就是取 Posterior Mean(Tweedie)·M2.2站內人數變化 = 進 − 出:Continuity Equation

前面兩個單元留下三個問題

到目前為止有三件事還沒有交代,而且它們不是同一篇留下來的:

  1. 軌跡彎多少,怎麼變成一個數? U2.4 已經寫出 h01x¨tdth\int_0^1\|\ddot x_t\|\,\mathrm dt 這個量,但沒有證明它真的控制得住誤差。
  2. 怎麼把軌跡拉直? U2.3 把「彎」追到了「配對」,但沒有給任何具體做法。
  3. 取樣的時候該不該把噪聲加回去? 這一題其實是 U1.4 留下來的——那裡給了判準(模型誤差與離散化誤差誰佔上風),但沒有給一個可以連續調的旋鈕。

前兩題動的是 U2.0 的 forward 旋鈕裡的路徑配對;第三題動的是取樣器,是一個新的旋鈕。這一節先給一個把前兩個寫在臉上的式子,取樣那一個留到 U3.1

有沒有一個式子,
能把前面兩個單元的所有方法都裝進去?

一條式子,把路徑、配對、噪聲都寫在臉上

有的,而且短得有點意外:

  xt=αtx0+βtx1+γtz,(x0,x1)π,  zN(0,I) 獨立  \boxed{\;x_t=\alpha_t\,x_0+\beta_t\,x_1+\gamma_t\,z,\qquad (x_0,x_1)\sim\pi,\ \ z\sim\mathcal N(0,I)\ \text{獨立}\;}

邊界條件是 α0=β1=1\alpha_0=\beta_1=1α1=β0=0\alpha_1=\beta_0=0γ0=γ1=0\gamma_0=\gamma_1=0——也就是「t=0t=0 時人在 x0x_0t=1t=1 時人在 x1x_1,而額外的噪聲在兩端都要消失」。

這條式子上有三個可以轉的東西:

  • 路徑(αt,βt)(\alpha_t,\beta_t) 的形狀。
  • 配對π\pip0p_0p1p_1任意耦合,不必是獨立乘積。
  • γt\gamma_t:一項與端點無關的額外 Gaussian,在兩端被掐掉。

注意這三個不等於 U2.0 的那三個旋鈕。 那裡的是「起點分布/路徑/配對」,講的是 forward process 的設計;這裡的起點被吸收進 π\pi 的一個邊際,換上來的是 γt\gamma_t。而 γt\gamma_t訓練時的路徑寬度,和取樣時要注入多少噪聲又是兩回事——U3.1 會把後者獨立出來,那是第五個旋鈕。

x0x_0zz兩個不同的東西,這點很容易看漏。x0x_0 是起點分布的樣本,可以是任何分布;zz 是硬加進來的標準 Gaussian,在兩端被 γt\gamma_t 掐掉。

符號這個單元的 alpha 和上一個單元的 alpha 不是同一個東西

U2 寫的是 xt=αtx1+σtx0x_t=\alpha_t x_1+\sigma_t x_0αt\alpha_t資料的係數。這個單元沿用 Albergo 等人的寫法,αt\alpha_t 變成起點的係數、資料的係數改叫 βt\beta_t

對照表:上一個單元的 (αt,σt)(\alpha_t,\sigma_t) 等於這個單元的 (βt,αt)(\beta_t,\alpha_t)。讀論文時一定要先確認哪個字母配哪一端,不然每個式子都會反過來。

前面學過的東西全部是特例

模型αt\alpha_tβt\beta_tγt\gamma_tπ\pi
線性 FM(U2.31t1-ttt00獨立
Rectified flow(U3.31t1-ttt00上一輪 ODE 誘導的耦合
Minibatch OT-CFM(U3.41t1-ttt00batch 內解 OT
VP diffusion(U1),p0=N(0,I)p_0=\mathcal N(0,I)cosπt2\cos\frac{\pi t}{2}sinπt2\sin\frac{\pi t}{2}00獨立
Albergo 等人的預設1t1-ttt2t(1t)\sqrt{2t(1-t)}獨立

(中間兩列的 π\pi 現在看不懂沒關係——rectified flow 與 minibatch OT 分別是 U3.3U3.4 的主角。先注意一件事就好:它們和線性 FM 唯一的差別就在最後一欄。

(VP 那一列寫的是 cosine schedule,而且時間方向已經照這個單元的慣例轉成「t=1t=1 是資料」;U1 的 linear schedule 代進來只是換一對 (αt,βt)(\alpha_t,\beta_t) 的形狀,γ\gamma 仍然是 0。)

Diffusion 落在 γ=0\gamma=0 那一行,第一眼會覺得寫錯了——它明明整篇都在加噪聲。但 diffusion 的噪聲就是 x0x_0 本身:起點分布恰好是 Gaussian,所以那個 Gaussian 成分本來就在式子裡了。一旦把 x0x_0 換成別的分布,想保留「中間有 Gaussian 成分」這個性質,就得自己掏 γtz\gamma_t z 來買。

γt\gamma_t 到底買到了什麼?

對一般式微分:x˙t=α˙tx0+β˙tx1+γ˙tz\dot x_t=\dot\alpha_t x_0+\dot\beta_t x_1+\dot\gamma_t z。這是給定 (x0,x1,z)(x_0,x_1,z) 之後就算得出來的東西,所以照 U1.2 那個 conditional trick(條件目標好算,平均交給 L2L_2 回歸自己做;U2.2 剛用過速度場的版本),可以定義兩個量:

bt(x)=E[x˙txt=x](速度),ηt(x)=E[zxt=x](denoiser).b_t(x)=\mathbb E[\dot x_t\mid x_t=x]\quad\text{(速度)},\qquad \eta_t(x)=\mathbb E[z\mid x_t=x]\quad\text{(denoiser)}.

兩個都用 MSE 學,目標分別是 x˙t\dot x_tzz。訓練迴圈跟 U2.2 那五行幾乎一樣,只是多抽一個 zz

btb_t 生成邊際 ptp_t 證明和 U2.2 的定理 1 逐字相同,只是條件變數從 (x0,x1)(x_0,x_1) 變成 (x0,x1,z)(x_0,x_1,z),多一個積分變數而已。

ηt\eta_t 給出 score。 這一步是 γt\gamma_t 的全部價值所在。給定 (x0,x1)(x_0,x_1)xtx_t 是一個均值 αtx0+βtx1\alpha_t x_0+\beta_t x_1、變異數 γt2\gamma_t^2 的 Gaussian——注意這裡沒有用到 p0p_0 是什麼、也沒有用到配對獨不獨立。對這個條件 Gaussian 套 U1.3 的 Tweedie,再對 (x0,x1)(x_0,x_1) 取後驗平均:

logpt(x)=ηt(x)γt.\nabla\log p_t(x)=-\frac{\eta_t(x)}{\gamma_t}.

只要 γt>0\gamma_t \gt 0,同一個框架就同時給你速度與 score——不管起點是什麼分布、配對是怎麼配的。

展開細節為什麼「對條件 Gaussian 套 Tweedie 再平均」就會得到邊際的 score

m=αtx0+βtx1m=\alpha_t x_0+\beta_t x_1。條件密度 pt(xx0,x1)=N(x;m,γt2I)p_t(x\mid x_0,x_1)=\mathcal N(x;m,\gamma_t^2 I),所以

xlogpt(xx0,x1)=xmγt2=zγt,\nabla_x\log p_t(x\mid x_0,x_1)=-\frac{x-m}{\gamma_t^2}=-\frac{z}{\gamma_t},

因為 xm=γtzx-m=\gamma_t z。接著用一個很好用的恆等式:邊際的 score 是條件 score 的後驗平均,

logpt(x)=pt(x)pt(x)=xpt(xx0,x1)p(x0,x1)d(x0,x1)pt(x)=E[xlogpt(xx0,x1)  xt=x].\nabla\log p_t(x)=\frac{\nabla p_t(x)}{p_t(x)} =\frac{\int \nabla_x p_t(x\mid x_0,x_1)\,p(x_0,x_1)\,d(x_0,x_1)}{p_t(x)} =\mathbb E\big[\nabla_x\log p_t(x\mid x_0,x_1)\ \big|\ x_t=x\big].

代進去就得到 E[zxt=x]/γt=ηt(x)/γt-\mathbb E[z\mid x_t=x]/\gamma_t=-\eta_t(x)/\gamma_t\square

這又是同一個 conditional trick:難算的邊際量、好算的條件量、一個 L2L_2 回歸。U2.2 那張三欄的對照表可以直接再加一欄。

互動 demo:γt\gamma_t 這個旋鈕在做什麼。 起點和終點刻意設成同一個環,所以任何差別都只來自配對。選「對徑配對」(x1=x0x_1=-x_0,這是一個合法的確定性耦合)、γ=0\gamma=0,把 tt 拉到 0.5:整個環塌成一個點,兩個主方向的標準差都變成 0.000。把 γ\gamma 幅度推上去,同一個 tt 就變成一團有厚度的雲。再按「同位配對」(x1=x0x_1=x_0):一樣是確定性配對,卻從頭到尾都是那個環。

γt=0\gamma_t=0 的時候會失去什麼

先把話說準。γ0\gamma\equiv0配對獨立、p0p_0 是 Gaussian時,什麼都沒失去——那正是 U1U2.3 的情況,score 由 E[x0xt]\mathbb E[x_0\mid x_t] 給出,因為 x0x_0 自己就是那個獨立的 Gaussian 成分。

問題出在把配對換掉之後。若 π\pi確定性耦合——例如 U3.3 的 reflow 把每個 x0x_0 對到唯一的 x1x_1——那給定 xtx_t,端點就被定死了,沒有任何「後驗平均」可以取。ηt\eta_t 沒有 zz 可以學,E[x0xt]\mathbb E[x_0\mid x_t] 也退化成 x0x_0 本身,Tweedie 的前提(給定條件變數之後 xtx_t 是非退化 Gaussian)整個不成立。回歸拿不到 score。

更糟的情況是 ptp_t 連密度都沒有。上面 demo 的對徑配對就是一個例子:xt=(12t)x0x_t=(1-2t)x_0t=12t=\tfrac12 塌成一個點。不是每個確定性配對都會這樣(U3.4 那種 OT 配對就不會——它有一個叫單調的性質,讓不同的起點不會被送到互相交錯的地方,那一篇會證),但只要有可能,靠密度的東西就不能無條件依賴

課堂提問Q1

U2.3 的結論是:要把軌跡拉直,得動配對那一軸。而剛剛的結論是:配對一旦變成確定性的,score 就拿不到了。

這兩件事放在一起,是不是互相矛盾?

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

不矛盾,但它確實是一個要付代價的取捨。

先分清楚兩個東西各自需要什麼:

  • 速度 btb_t 只需要條件期望。 條件期望對退化的分布一樣定義得好(極端情況下,「後驗」只有一個點,那平均就是它自己)。所以確定性配對之下 btb_t 照樣存在、照樣可以用回歸學。這就是為什麼 rectified flow 明明用確定性配對,訓練起來卻毫無障礙。
  • score 需要密度。 而且要用回歸拿到它,還需要「給定條件變數之後 xtx_t 是非退化 Gaussian」這個結構。這兩件事確定性配對都不保證。

所以取捨長這樣:

想要直的軌跡 → 動配對 → 失去 score → 只能用 ODE 取樣。
想要 score(也就是想用 SDE 取樣)→ 要嘛保留獨立配對,要嘛付 γtz\gamma_t z 這筆錢。

γtz\gamma_t z 這筆錢也不是白付的:它把中間分布撐開,讓每一組配對的路徑都變成一個有寬度的管子,管子互相重疊,於是 btb_t 又變回一個平均——軌跡會被弄彎回來一點

三個旋鈕不是各轉各的。U3.2 會把「彎多少」寫成一個算得出來的量,U3.1 會說明有了 score 之後多出哪些取樣器可以選,然後 U3.3U3.4 各自選一邊站。

消化一下

想一想

在 stochastic interpolant 裡,x0x_0zz 的差別是什麼?

想一想

score 公式 logpt=ηt/γt\nabla\log p_t=-\eta_t/\gamma_t 的推導用到了什麼?

想一想

γ0\gamma\equiv0 而且配對是確定性映射時,會發生什麼?

想一想

下列哪一句話不對

參考文獻

  1. Albergo, M. S., Boffi, N. M., Vanden-Eijnden, E. Stochastic Interpolants: A Unifying Framework for Flows and Diffusions. 2023. (這一篇的一般式、btb_tηt\eta_t 兩個目標、以及 γt\gamma_t 的角色。)
  2. Albergo, M. S., Vanden-Eijnden, E. Building Normalizing Flows with Stochastic Interpolants. ICLR 2023. (較早的版本,γt=2t(1t)\gamma_t=\sqrt{2t(1-t)} 這個預設出自這裡。)
  3. Ma, N., et al. SiT: Exploring Flow and Diffusion-Based Generative Models with Scalable Interpolant Transformers. ICCV 2023. (把這個框架的三個旋鈕在影像上一個一個掃過去的實驗。)