U3.3 拉直(二):不依靠反覆訓練,能不能用別的方法決定好的 coupling?
本篇重用3 篇
Reflow 的迴圈可以省掉嗎?
這個單元想改善的是解 ODE 時產生的 discretization error。我們在 U3.1 看過:如果能讓 trajectory 更接近等速直線,使用 Euler method 解 ODE 時,discretization error 就能比較小。
在 U3.2 中,我們也介紹了 Reflow:利用模型生成新的起點與終點配對,再重新訓練,透過迴圈逐步拉直生成軌跡。但是這個方法每一輪都要解 ODE、重新訓練模型,新的配對也可能受到上一輪 discretization error 的影響。雖然實作上很好用,但聽起來仍沒有把問題解決得很徹底。
仍然保留 Flow Matching 的 simulation-free training?
一個自然的想法,是在訓練開始前就先安排一種比較不容易讓 reference paths 互相打架的搬運方式。我們在 U3.0 已經觀察過:當同一個位置附近的 reference velocities 互相衝突時,L2 regression 會把它們平均起來,learned ODE trajectory 就可能會改變方向。
想像有一批貨物,分散在幾個出發位置,要送到同樣數量的目的地,每個目的地收一件。即使每件貨物都沿直線搬運,隨便配對仍可能讓路線交錯:到了同一個地方,有的要往左、有的要往右,模型學到的平均方向就可能隨位置改變,讓生成軌跡彎曲。
這種凌亂的配對,常常也伴隨著「捨近求遠」:左邊的貨物被送到很遠的右邊,右邊的貨物反而被送回左邊。這提醒我們,也許可以先從一個比較容易檢查的目標開始:不要讓整批貨物搬得比必要的更遠。
什麼叫做「比較省的配對」?
先想只有三件貨物的情況。三個起點分別記成 ,三個終點則記成 。一種配對方式可以是
也就是說,第一件貨物送到第 2 個終點,第二件送到第 3 個終點,第三件則送到第 1 個終點。把右邊的終點編號依序記下來,就得到 。這串編號剛好把 各使用一次;也就是把原本依序的 重新排成 。所以,我們可以把這個動作稱為 permutation(置換)。
像 就不合法:第 2 個終點收了兩件貨物,第 3 個終點卻完全沒有收到。Permutation 要表達的,就是重新排列終點,但不能重複或漏掉任何一個。
推廣到 個起點與 個終點後,我們用 記錄這張重新排列的名單。 的意思是:第 個起點 ,會被送到第 個終點 。因此,第 組配對可以統一寫成
如果搬運成本是距離的平方,這組配對的總成本就是
先算每組配對,再算整張名單的成本
- 是第 個起點。先固定它,問這件貨物要搬去哪裡。
- 記錄這件貨物被分到的終點編號,所以配對的另一端是 。
- 把兩端位置相減,再取平方長度,得到這件貨物的二次搬運成本。
- 對所有 加總。每個終點恰好使用一次的限制,由 是 permutation 來保證。
- 把這個總和記成 。接下來才在所有合法送貨表裡,找讓它最小的 。
我們想找的,是所有合法配對中讓這個總和最小的那一個:
這就是有限樣本上的 quadratic optimal transport(二次成本最優傳輸),後面簡稱 OT;也就是 U3.2 最後稍微提過的問題。生活例子裡, 是整張送貨名單;OT 做的事情,就是在不增減任何出發地與目的地的前提下,找出總搬運距離平方最小的名單。
不過,我們真正關心的不是省運費,而是 learned ODE 的 discretization error。搬得比較近,真的也會讓 reference directions 比較不容易互相衝突嗎? 我們可以先從兩組貨物開始看。
交換兩個目的地,會發生什麼?
先想一維的例子。起點在 與 ,終點在 與 。如果交叉著配,、,總成本是
把兩個終點交換,改成 、,總成本立刻降成
橫軸是位置 ,縱軸是 reference path 的時間 。兩欄使用相同的起點 與終點 ,只交換誰配誰。每條線本來就直,但交換後成本從 降到 ,也移除了同一個 上的方向衝突。
在這個例子裡,交換不只讓搬運距離變短,也拿掉了兩條彼此交叉的 reference paths。 接著把同一個計算寫成一般形式。假設某個配對把 送到 、把 送到 ;若交換終點,改成 、,新成本減掉舊成本會是
展開平方後, 都會前後抵消,只剩右邊的內積。因此,如果
交換後的成本就會更低。OT 已經是所有配對中最小的那一個,所以裡面不可能還留著這種「交換一下就更省」的兩組端點。
接下來只是換一個比較方便的寫法。用 表示 OT 排出的送貨表:如果 被分配到 ,就寫成 ;如果 被分配到 ,就寫成 。把 、 代回剛才的條件,就得到
這就是這組 OT 配對的單調性。它說的是:從 指向 ,以及從 指向 的兩個向量,不能指向彼此相反的方向。在一維裡更直接:如果 ,就必須有 。起點的左右順序不能在終點反過來,因此兩條直線不會交叉。
不過,高維沒有單一的「左右順序」。那這個條件還能幫我們減少 reference directions 的衝突嗎?考慮 與 對應的 linear reference paths:
兩條路在時間 相隔多少,可以先看它們的差和 的內積:
若 且 ,第一項嚴格大於 ;第二項則因為 OT 的單調性而大於等於 。所以整個內積一定大於 ,也就不可能有
換句話說,兩條 linear reference paths 不會在同一個時間抵達同一個位置。 這正是 Flow Matching 在意的「不衝突」:同一個輸入 不會同時收到兩條不同的 reference velocities,L2 regression 也就不必在這兩個方向之間取平均。
這不代表高維裡畫出的兩條線段完全不會碰到。它們仍可能在不同時間經過同一個空間位置;但因為模型的輸入還包含 ,這不會形成同一個 training input 上的衝突。
因此,如果完整 distributions 之間的 quadratic OT coupling 可以寫成上述的 ,並使用 linear interpolation,那麼給定 就能認出它屬於哪一條 reference path,optimal velocity 便是那條路從頭到尾不變的 。學到的 ODE trajectory 也會是等速直線,正是 U3.1 裡 Euler 最容易近似的情況。
怎麼算 quadratic optimal transport?
要先分清楚我們現在想算的是哪一個 OT。對一般的兩個 distributions ,我們要找的是所有可能 couplings 中成本最低的一個;這是一個作用在 distributions 上的最佳化問題。除了少數特殊情況,population-level OT 通常沒有 closed-form solution;而在生成模型裡, 又只有 samples,因此我們不能期待直接算出兩個完整 distributions 之間的精確 OT。更一般的 formulation 可以回顧 搬倉庫問題:Monge、Kantorovich 與 Coupling。
我們現在多了一個限制,也因此得到一個能算的版本:手上有 個起點與 個終點,兩邊都只看成 finite empirical distribution,而且每個點的權重同樣是 。在這個樣本數相同、權重也相同的情況下,至少有一個最佳 coupling 可以寫成一對一的 permutation 。如果兩邊數量不同或每個點的權重不同,最佳解一般就會是一張 transport plan ,不能只用一個 表示。
因此,這個 finite quadratic OT 的 objective 告訴我們,最佳配對 應該讓總距離平方最小;但寫下 ,還沒有告訴我們怎麼把它找出來。如果有 個終點,所有可能的送貨表一共有 種,一張一張列出來比較顯然不可行。
我們可以先把第 個起點送到第 個終點的成本全部算好,排成一張 的成本矩陣:
每一列代表一個起點,每一欄代表一個終點。現在的任務就是:每一列選一格、每一欄也剛好被選一次,並讓選中格子的總和最小。 這是一個 linear assignment problem(線性指派問題),可以用 Hungarian algorithm(匈牙利演算法)等 solver 找到精確的最佳置換:
把三個起點設為 、抽到的終點依序設為 。粉紅格選出 ,也就是 、、,總成本 。矩陣依抽樣順序排列,右圖則依位置高低畫出端點。
solver 回傳的 ,就是第 個起點應該被送到哪一個終點。所以,這個 finite、equal-weight 的 quadratic OT 確實有精確算法;問題是資料一多,計算成本就會太高。 真實資料可能有幾十萬、幾百萬筆,光是存下所有兩兩距離就需要 的空間,常見的精確 assignment algorithm 則大約需要 的時間。
訓練神經網路時,我們本來就不會一次讀完整個資料集,而是每次抽一小批樣本,也就是一個 batch。因此,一個自然的近似是:只讓目前這 個起點,在目前這 個終點裡找最佳配對。把上面的 矩陣換成 ,再用同一個 assignment solver,就會得到這個 batch 裡的 。
一旦 算出來,接回 Flow Matching 的 framework 就很自然了。第 個起點改成和 配對,兩者之間的 reference path 與 reference velocity 分別是
接下來仍然使用 U2.1 的 velocity regression:
配對換了,velocity regression 怎麼寫
- 先在抽到的 batch 內求出 ,再沿每組新配對畫直線、抽時間 ,算出網路的 input 。
- 回答這個時間、這個位置該怎麼走;model 的任務沒有改變。
- 是這組新端點的 reference velocity。
- 把預測減去這條直線的速度,再取平方長度,仍然是原本的 velocity regression。
- 把這次 batch 裡每一組新配對的平方誤差平均起來。
- 期望值涵蓋抽 batch 與抽 的 randomness,也就參考這個配對程序能產生的所有速度 labels。改變的是 label 的來路,CFM 的平方誤差形式沒有改。
這個期望值包含抽 batch 與抽時間 的 randomness。CFM objective 的形式沒有改;改的是哪些 與 會被拿來畫同一條 reference path。
Tong 等人把這個版本稱為 OT-CFM [1];Pooladian 等人的 Multisample Flow Matching 也使用 batch 內的 coupling [2]。這種只在目前 batch 裡近似完整 OT 的做法,通常就叫 minibatch OT。
repeat
x1 ← B 個資料樣本
x0 ← B 個噪聲樣本
C ← 成本矩陣 C[i,j] = ‖x0[i] − x1[j]‖²
σ ← 解指派問題 argmin_σ Σ_i C[i, σ(i)] # scipy.optimize.linear_sum_assignment
x1 ← x1[σ] # 重排,讓 x0[i] 對到 x1[σ(i)]
抽 t,計算 I_t = (1−t)x0 + tx1
用 target = x1 − x0 訓練 v_θ(I_t,t)
和原本 CFM 相比,真正新增的是「解指派」與「依指派重排終點」兩步。常見的精確指派演算法成本約為 。
互動 demo:batch 內解一次 OT。 從「獨立」按到「192(全域)」,這組 2D toy 裡的線段交叉比例約為 20% → 9% → 4% → 1.4% → 0.6%,1 步 Euler error 約為 1.5 → 0.77 → 0.41 → 0.21 → 0.08。Batch 越大,每個起點可以比較的候選終點越多;改善逐漸變小,但不會在某個固定 batch size 突然結束。
OT 排除的是同一個 上的衝突,不是高維線段在圖上完全不相交。
上面的推導保證,使用同一個時間 計算位置時,兩條 linear reference paths 不會相遇。Demo 計算的則是兩條線段在平面上有沒有幾何交點;即使它們在不同時間經過那個交點,仍會被算成相交。因此,圖上的交叉比例下降是這個 2D toy 的觀察,不是單調性直接保證的結論。
補充Batch 較大時,Sinkhorn 算的是什麼?
Exact BatchOT 會得到一個 permutation:每個起點只配到一個終點。但 變大後,精確解 assignment 的成本也會快速增加。實作上常改用 Cuturi 提出的 Sinkhorn algorithm [3],解加入 entropy regularization 的版本:
其中, 是所有非負矩陣中,每一列、每一欄加總都等於 的集合。第一項仍希望搬運距離小;第二項則鼓勵 probability mass 不要全擠在少數格子裡。
所以 Sinkhorn 通常得到的不是單一 permutation,而是一個 soft coupling:同一個 可以用不同權重配到多個 。訓練時可以依照 抽取端點對,或直接用這些權重計算 regression objective。
Sinkhorn 只需要反覆調整矩陣的 row sums 與 column sums,容易平行化,因此 batch 較大時很常使用。不過,只要 ,它解的就是 entropic OT(BatchEOT),不是上面的 exact BatchOT;當 時,才會逐漸靠近沒有 entropy regularization 的 OT solution。
每個 batch 都解了 OT,整體也會是真的 OT、真的很直嗎?
使用 exact assignment 時,每一次抽到的 batch 確實都解出了這兩批 empirical samples 之間的 quadratic OT。但一個 batch 裡的 只能從同一批 挑選;如果更合適的終點這次沒有被抽進來,batch 內的最佳選擇仍可能不是完整 distributions 之間的最佳選擇。
把很多次 training runs 合起來看,每次重新抽 batch 都可能得到不同的配對。因此,這些配對共同形成的是一個合法的 coupling,但一般不會剛好等於 之間的 population OT。「每個 batch 裡都是 OT」不等於「合起來就是完整 distributions 的 OT」。
那 learned ODE 至少會變成等速直線嗎?在單一 batch 裡,exact OT 會排除同一個 上互相衝突的 linear reference paths;但神經網路看到的是所有 batches。不同 batches 仍可能在同一個區域提供不同的 reference velocities,L2 regression 還是必須把它們平均起來,所以 learned velocity 沿著 trajectory 仍可能改變。
要讀懂 Pooladian 等人的結果,我們先把他們控制的三個量分開。令 表示 BatchOT 在抽 batch 的 randomness 平均後形成的 coupling,並定義
下面先考慮理想情況:模型真的學到 ,ODE 也被精確解出來。把真正生成時的 trajectory 記成 :
Transport cost 看 learned flow 最後把每個起點搬了多遠。 定義
這裡量的是 learned ODE 產生的起終點配對,不是某一次 batch 裡 assignment solver 算出的 。所有 population couplings 中能達到的最小值,才是 。
Straightness 看真正生成的 ODE trajectory 是否等速直走。 定義
這就是 U3.2 使用的 straightness:它比較「當下的 velocity」與「從起點直達終點所需的固定 velocity」。 時,每條 都是等速直線。它和 U3.1 的加速度積分不是同一個量;後者直接量 velocity 沿 trajectory 改變了多少。 會讓加速度也等於零,但有限的 並不能直接代替 U3.1 的 finite-step error bound。
Regression target variance 看同一個位置收到的 reference velocities 是否一致。 定義
因為 是 給定 的 conditional mean, 正是 optimal L2 regression 剩下的 conditional variance,也就是 U3.2 的 。它不是 neural network 沒有學好造成的 approximation error;即使模型已經達到最佳解,只要同一個 仍對應到不同的 reference velocities, 就不會是零。
Pooladian 等人證明,在適當的 regularity 條件下,當 時 [2],
這三行分別表示:learned flow 的 transport cost 逐漸達到 population OT、生成 trajectories 逐漸接近等速直線,而同一個位置的 regression targets 也逐漸不再衝突。這是 的漸近結果,不是說 batch size 每增加一次,三個量都一定單調下降。因此,有限的 既不保證得到 population OT,也不保證 learned ODE 已經是等速直線。
對 finite-step error 來說,我們最後仍要回到 U3.1 的量:只有當 learned velocity 沿 trajectory 的加速度積分也跟著下降,同一個 solver、同樣步長下的 error bound 才會變小。Minibatch OT 改的是 training coupling,沒有改變 solver 本身的階數。
這一點和 reflow 不同:minibatch OT 不必先用上一輪 neural ODE 產生終點,因此不會把上一輪模型與 solver 的誤差寫進配對。
補充重新配對會改變兩端的 distributions 嗎?
不會。Batch 內重排只是一個 permutation: 與 的樣本集合都沒有變,只有誰和誰配在一起。想像送貨表被重新排序,但每個倉庫仍然出一件貨、每個目的地也仍然收一件貨,因此這個 batch 的兩端 empirical marginals 完全不變。
把一次 batch 的配對寫成 empirical coupling:
表示把單位 probability mass 放在端點對 。每個 pair 分到 的權重;再對抽 batch 的 randomness 平均,就得到前面使用的 。
第一端仍是 ;第二端只是把 換了求和順序。因為 不重複、不漏掉任何終點,兩端 empirical marginals 都不變;對隨機 batches 平均後,。
把抽 batch 的 randomness 一起考慮後,這個程序誘導出的 joint distribution 仍然是一個兩端 marginals 分別為 的合法 coupling [2]。所以在理想 velocity 與精確 ODE 下,U2.2 的結論仍然適用:沿著學到的 velocity field 走,最後仍會抵達 。
reflow 與 minibatch OT,差在哪?
| Reflow | Minibatch OT | |
|---|---|---|
| 改配對的時機 | 訓完一輪之後 | 每個 batch 當下 |
| 額外計算 | 整輪 ODE 取樣 + 重訓 | 每 batch 一次 指派 |
| 實作中的終點 | 受上一輪模型與 solver 誤差影響 | batch 內只是置換,不會因配對改變 |
| 理論保證 | 理想條件下 ;不保證逐輪單調,也不保證得到 OT | 適當條件下, 時 straightness 與 transport cost 分別趨近 與完整 OT cost |
| 對模型的依賴 | 新配對來自上一輪 neural ODE | 配對只依賴目前 batch 與成本函數 |
| 高維的困難 | 要重新訓練與取樣 | 成本使用的距離可能失去辨別力 |
課堂提問Q1
Minibatch OT 的效果取決於成本矩陣能不能分出「比較適合的終點」。到了高維,直接使用 Euclidean distance 時,為什麼這件事可能變難?
先想一想,再展開看整理後的答案
一個重要的警訊是高維距離集中。先看最容易算的例子:取兩個獨立的 ,則
所以相對標準差是 —— 越大,所有兩兩距離越接近同一個值。 時是 100%, 時只剩 2.5%。
在這個例子裡, 越大,所有兩兩距離就越接近同一個值。成本矩陣如果接近常數,「最佳指派」和「隨機指派」的差距自然會縮小。
這不是說所有高維資料都一定如此;真實資料不會是兩組獨立 Gaussian,而且資料通常集中在較低維的結構上。它真正提醒我們的是:minibatch OT 是否有效,不只取決於 batch size,也取決於成本函數有沒有表達我們在意的相似性。
- 若 raw pixel distance 幾乎沒有辨別力,可以改在較有語意的 representation space 定義成本。
- Batch size 增加會提供更多候選者,但如果成本本身分不出好壞,單純加大 batch 也不會自動解決問題。
這也是 reflow 與 minibatch OT 的另一個差別:reflow 用 neural ODE 產生 coupling;minibatch OT 則把所有判斷交給指定的 cost。
消化一下
參考文獻
- 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. (OT-CFM;這一篇的主線。)
- Pooladian, A.-A., Ben-Hamu, H., Domingo-Enrich, C., Amos, B., Lipman, Y., Chen, R. T. Q. Multisample Flow Matching: Straightening Flows with Minibatch Couplings. ICML 2023. (同一個想法的另一條線,含 batch size 的分析。)
- Cuturi, M. Sinkhorn Distances: Lightspeed Computation of Optimal Transport. NeurIPS 2013. (batch 太大時用的熵正則化近似。)