U3.3 12 分鐘閱讀 2026年9月

U3.3 拉直(一):讓模型自己生出配對

本篇重用M5.0保險為什麼存在:Convex Function 與 Jensen 不等式·M2.0河面上的箭頭:Vector Field 與 ODE

一個很便宜的觀察

U2.3 Q1 的結論可以倒過來讀。那裡說:邊際軌跡彎,因為條件直線交叉;交叉,因為配對是隨機的。U2.1 又說:ODE 的軌跡不會交叉。

把這兩句話放在一起,就得到一個不必增加任何新機器的想法:如果配對是由某條 ODE 的「起點 → 終點」生出來的,那這組配對的軌跡本來就不交叉,它的條件直線也就不會亂交錯。

配對不必自己設計——讓上一輪的模型生出來就好。

而我們手上正好有一條 ODE——就是訓好的模型自己。

能不能拿模型自己的取樣結果,
當成下一輪訓練的配對?

一輪要做哪三件事

可以,而且整件事寫成三步就結束了。給一個耦合 (X0,X1)π(X_0,X_1)\sim\pi(一開始就用最沒有結構的獨立配對):

  1. U2.3 的直線插值 Xt=(1t)X0+tX1X_t=(1-t)X_0+tX_1,得到邊際速度 vt(x)=E[X1X0Xt=x]v_t(x)=\mathbb E[X_1-X_0\mid X_t=x]
  2. 解 ODE Z˙t=vt(Zt)\dot Z_t=v_t(Z_t)Z0=X0Z_0=X_0,走到 t=1t=1 得到 Z1Z_1
  3. (Z0,Z1)(Z_0,Z_1) 當成新的耦合:π=R(π)\pi'=\mathsf R(\pi)

這個運算叫 rectification,把它一輪一輪疊上去(πk+1=R(πk)\pi^{k+1}=\mathsf R(\pi^k))就是 reflow——本篇之後都用這兩個名字。

R\mathsf R 吃一個耦合、吐一個耦合,而它其實是:「訓練一個 FM 模型,然後用 ODE 取樣」這件事,在耦合的層次上就是 R\mathsf R 所以 reflow 不需要任何新的機器,只是把已經在做的事再做一次,並且把輸出接回輸入。

這一招為什麼不需要新的機器

(一)保邊際。 Z0p0Z_0\sim p_0 是定義;Z1p1Z_1\sim p_1 來自 U2.2 的定理 1(vtv_t 生成 ptp_t,而 p1=pdatap_1=p_{\text{data}})。所以 R(π)\mathsf R(\pi) 仍然是 p0p_0p1p_1 的耦合——可以再餵回去。這條性質是整個迭代能成立的前提。

(二)不增運輸成本。 對任何凸函數 cc

E[c(Z1Z0)]  E[c(X1X0)].\mathbb E\big[c(Z_1-Z_0)\big]\ \le\ \mathbb E\big[c(X_1-X_0)\big].

c()=2c(\cdot)=\|\cdot\|^2 就是:新配對的平均位移平方不會比舊的大。 粒子不再繞路。

展開細節不增運輸成本:兩次 Jensen

Z1Z0=01vt(Zt)dtZ_1-Z_0=\int_0^1 v_t(Z_t)\,dt,而 vt(Zt)=E[X1X0Xt=Zt]v_t(Z_t)=\mathbb E[X_1-X_0\mid X_t=Z_t]

先對時間用 Jensen(cc 是凸的,01dt\int_0^1\cdot\,dt 是一個平均):

c(01vt(Zt)dt)  01c(vt(Zt))dt.c\Big(\int_0^1 v_t(Z_t)\,dt\Big)\ \le\ \int_0^1 c\big(v_t(Z_t)\big)\,dt .

再對條件期望用 Jensen:c(E[X1X0Xt])E[c(X1X0)Xt]c(\mathbb E[X_1-X_0\mid X_t])\le\mathbb E[c(X_1-X_0)\mid X_t]。最後取期望,並用 ZtZ_tXtX_t 同分布(性質一的推論)把兩邊接起來:

E[c(Z1Z0)]01E[c(X1X0)]dt=E[c(X1X0)].\mathbb E\big[c(Z_1-Z_0)\big]\le\int_0^1\mathbb E\big[c(X_1-X_0)\big]\,dt=\mathbb E\big[c(X_1-X_0)\big].\qquad\square

兩次 Jensen 各對付一個「取平均」:一次是沿時間平均,一次是對後驗平均。

(三)不交叉。 ZtZ_t 是 ODE 的解,Lipschitz 之下唯一,所以兩條 ZZ 軌跡不交叉。R(π)\mathsf R(\pi) 的條件直線 {(1t)Z0+tZ1}\lbrace(1-t)Z_0+tZ_1\rbrace 是這些不交叉軌跡的

嚴格說弦還是有可能交叉——但比原本的隨機配對少太多了。這件事就是下面 demo 要看的。

互動 demo:reflow 一輪一輪看。 按 0 → 1 → 2 → 3。第 0 輪的配對直線交錯成一團,ODE 軌跡明顯彎;第 1 輪之後配對幾乎互不相交、軌跡幾乎就是那些直線。第一輪就吃掉大部分好處:straightness(下一節會定義;直覺上就是「條件直線的方向和實際速度差多少」,直線時為 0)從約 1.4 掉到 0.03,1 步 Euler 的誤差從約 1.4 掉到 0.1,運輸成本(配對兩端距離平方的平均,EX1X02\mathbb E\|X_1-X_0\|^2)從約 4.0 掉到 0.6。同時「終點分布與資料的距離」一直在 0.01 以下——保邊際那條性質是真的,這些改善不是拿樣本品質換來的。

為什麼一直做下去會變直?

把「直」寫成一個數:

S(π)=01E[(X1X0)vt(Xt)2]dt.S(\pi)=\int_0^1\mathbb E\big[\|(X_1-X_0)-v_t(X_t)\|^2\big]\,dt .

白話是:每個粒子自己的條件速度,和它在那個位置實際被指派到的邊際速度,差多少。 S=0S=0 等價於 vt(Xt)=X1X0v_t(X_t)=X_1-X_0 幾乎處處成立——粒子照著自己的直線走,軌跡是直線,而且一步 Euler 就精確

Liu et al. [1] 證明對迭代 πk+1=R(πk)\pi^{k+1}=\mathsf R(\pi^k)

k=0KS(πk)  EX1X02π0,所以minkKS(πk)=O(1/K).\sum_{k=0}^{K}S(\pi^k)\ \le\ \mathbb E\|X_1-X_0\|^2\Big|_{\pi^0}, \qquad\text{所以}\quad \min_{k\le K}S(\pi^k)=O(1/K).

論證是一個很漂亮的簿記,而且它就是 Liu 等人 [1] 的定理本身,不只是直覺:每一輪 rectification 省下來的運輸成本,至少等於那一輪的 straightness。 而運輸成本有下界——它不可能小於「兩個邊際之間最省的那個配對」的成本,那個下界就是 optimal transport(OT)的成本(U3.4 會正式定義並給出它的性質)。既然每一輪都要從一個有限的預算裡扣掉 S(πk)S(\pi^k),而預算扣不完,kS(πk)\sum_k S(\pi^k) 就必須收斂,於是 S(πk)0S(\pi^k)\to0

補充這個 S 和上一篇的曲率積分是同一件事

U3.2x¨tdt\int\|\ddot x_t\|\,dt 與這裡的 SS 是同一件事的兩種寫法。

S=0S=0vt(Zt)=Z1Z0v_t(Z_t)=Z_1-Z_0 是一個不隨 tt的常向量,於是

Z¨t=ddtvt(Zt)=ddt(Z1Z0)=0,\ddot Z_t=\frac{d}{dt}v_t(Z_t)=\frac{d}{dt}(Z_1-Z_0)=0 ,

曲率積分也是零。差別只在 SS 是一個對訓練資料算得出來的量(不需要解 ODE),而曲率積分要沿著軌跡積——所以 reflow 直接壓 SS

直是有代價的

reflow 買到的是「直」,付出的是多樣性與上一輪的模型誤差。

誤差累積。kk 輪的配對來自第 k1k-1 輪模型的 ODE 解,所以模型的逼近誤差和取樣的數值誤差會一起變成下一輪的訓練資料。上面 demo 用的是精確算出來的場,所以它顯示的是這件事的上限,不是實際會拿到的。 實務上一到兩輪就停。

多樣性。 每一輪的配對都是確定性映射、γ0\gamma\equiv0U3.2 Q1 說過這時候沒有可回歸的 score。模型變成一個純確定的映射,樣本的隨機性完全來自 p0p_0——而且沒有 SDE 取樣器可以退回去用。

極限未必是 OT。 運輸成本單調下降,但沒有理由收斂到 OT 成本。經驗上很接近,但那是經驗,不是定理。

課堂提問Q1

Reflow 和下一篇的 minibatch OT 都只改「配對」。端點分布 p0p_0p1p_1 完全沒動,中間路徑也還是同一條直線插值。

那為什麼只改配對,軌跡的曲率就變了?

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

因為邊際速度是一個條件期望

vt(x)=E[X1X0Xt=x],v_t(x)=\mathbb E[X_1-X_0\mid X_t=x],

而條件期望取決於聯合分布,不只是兩個邊際。同一組 p0,p1p_0,p_1 配上不同的 π\pi,經過 xx 的那些條件直線就是不同的一批,方向的分布也不同,平均出來的 vtv_t 自然不同。

具體看兩端:

  • 獨立配對:經過 xx 的直線來自四面八方,平均之後的方向偏離其中每一條——這就是 U2.2 demo 裡那支「明顯比細箭頭短」的粗箭頭。
  • 不交叉配對:經過 xx 附近的直線幾乎彼此平行,平均之後幾乎就是那個共同方向,於是 vt(Xt)X1X0v_t(X_t)\approx X_1-X_0S0S\approx0

中間的邊際分布 ptp_t 也會隨 π\pi 改變,即使兩端固定。U3.0 的 demo 就是這件事最極端的版本——同一個環配同一個環,換配對可以讓 p1/2p_{1/2} 從一個環變成一個點。

所以「路徑」和「配對」這兩個旋鈕不是完全獨立的:配對決定了中間的 ptp_t 長什麼樣,而路徑 (αt,βt)(\alpha_t,\beta_t) 只是決定在給定配對之下怎麼從 x0x_0 走到 x1x_1

消化一下

想一想

Rectification 為什麼保邊際?

想一想

S(π)=0S(\pi)=0 代表什麼?

想一想

做完三輪 reflow 之後,模型取樣的多樣性來自哪裡?

想一想

關於 demo 顯示的數字,下列哪一句不對

參考文獻

  1. Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. (rectification 運算、三個性質、straightness 與 O(1/K)O(1/K) 的收斂。)
  2. Liu, X., et al. InstaFlow: One Step is Enough for High-Quality Diffusion-Based Text-to-Image Generation. ICLR 2024. (把 reflow 推到文字生圖上、真的做到一步。)
  3. Esser, P., et al. Scaling Rectified Flow Transformers for High-Resolution Image Synthesis. ICML 2024. (大規模用線性路徑訓練的實務細節;注意它並沒有做 reflow 迭代。)