U2.3 代入最簡單的一條路:直線插值
本篇重用M2.0河面上的箭頭:Vector Field 與 ODE·M1.1從鞋子猜身高:Conditional Expectation
最沒有花招的選法
U2.2 的框架可以代任何一對 進去。最沒有花招的選法是兩點之間走直線:、。
條件速度是一個常數——不隨 變、也不隨位置變。所以網路的工作被講成了一句很短的話:看到 和 ,猜出「終點減起點」。
程式碼上,這只是把 U2.2 那五行的目標換掉一行:target = x1 - x0。
補充這條路在文獻裡有三個名字
同一條線性路徑在三篇論文裡各有講法:rectified flow [1] 從「把軌跡拉直」出發、stochastic interpolants [2] 從「把 當設計變數」出發、Lipman et al. [3] 稱它為 OT path(在獨立配對下)。
它們寫下來的訓練目標是同一個。
差別在動機與後續怎麼發展,不在這一行式子。
條件路徑每一條都是直線。
那訓好之後,粒子會走直線嗎?
課堂提問Q1
有一個聽起來很順的推理:
每一條條件路徑都是直的,而邊際速度是這些條件速度的平均。一堆直線方向平均起來還是一個方向,所以邊際軌跡當然也是直的。
這個推理錯在哪?
先想一想,再展開看整理後的答案
錯在「平均起來的那個方向」不必是其中任何一條在走的方向。
回到邊際速度的定義:。在位置 、時刻 ,會有很多組配對的直線正好經過這裡,而它們的方向各不相同——邊際速度是這些方向的平均,不是其中任何一條。
用兩組配對就能算出來。 令 、,配對方式是 與 ,各佔一半。兩條直線都在 經過原點,而它們的條件速度分別是 與 。所以
正上方。這個方向任何一條條件直線都沒有在走——水平的分量互相抵消掉了。走到原點的粒子會被推著往上,然後才分岔到左上或右上。
再往下一層,還有一個更硬的理由:U2.1 說 ODE 的軌跡不能交叉。條件直線會交叉(獨立配對之下幾乎一定會),所以邊際 ODE 的軌跡不可能就是那些直線——它只能是一組彼此不交叉的曲線,在分布層面給出同一個 。
理解它為什麼不會,是 U3 整個單元的起點。一句話串起來:「彎」來自「交叉」,「交叉」來自「隨機配對」。 這三個詞在 U3 分別長成 U3.2、U3.3 與 U3.4。
互動 demo:交叉、彎曲,與要走幾步。 起點與資料各是兩團,配對方式是唯一的變數。「隨機配對」下條件直線交出一個 X,邊際軌跡被迫繞開,實測彎曲度約 1.59;按「依位置配對」,兩邊各走各的,彎曲度掉到 1.00。再切 Euler 步數看終點誤差:隨機配對 4 步差 1.49、20 步 0.26、200 步才 0.01;依位置配對 4 步就只差 0.03。兩種配對的 與 一模一樣。(這裡的彎曲度是在四團的 toy 上量的;U2.4 比較線性與 VP 時用的是雙月,兩組數字不要直接對比。)
直不直,決定要走幾步
取樣就是解那條 ODE,而我們只能用有限步。最簡單的 Euler 是
也就是假設這一段時間內速度不變——等於拿一條割線去代替真正的軌跡。軌跡本來就是直線時,一步到終點、誤差為零;軌跡越彎,割線和曲線差得越多。
所以「軌跡有多直」不是美學問題,它直接決定取樣需要幾步。U1.4 裡 DDIM 步數少的時候會掉品質,原因也是同一個。demo 裡那組數字就是這件事的量化版本:同樣的兩個分布,只換配對,4 步的誤差差了將近五十倍。
換到 座標看,其實不是同一個 loss
把 改叫 (在 FM 慣例裡起點就是噪聲),。給定 與 就能反解出 ,代回去:
網路那一邊也照同一個關係讀:把 寫成 (這就是「把速度網路當成噪聲網路來看」的意思)。兩式相減, 消掉:
第一,學速度和學噪聲仍然是同一件事,兩者只差一個 affine transformation——這延續 U1.2 對三種 parametrization 的討論。(那裡把「預測資料」叫 -prediction,因為 diffusion 的慣例裡 是資料;在本單元的慣例下同一件事要叫 -prediction。這是最容易讀錯的一個術語。)
第二,注意那個 。均勻抽 的 FM loss,換到 座標之後帶著 的權重;而 小是噪聲端,所以FM 其實把噪聲端看得比均勻的 -loss 重很多。
拿它跟 DDPM 比就看得很清楚。U1.2 最後那五行跑的是 ——均勻加權的 -MSE,那是刻意把推導出來的 丟掉之後的版本。所以:
| 換到 座標之後的權重 | |
|---|---|
| DDPM 實際在跑的 | 均勻() |
| 線性 FM、均勻抽 | , 小的那一端被放大 |
兩邊都是 -MSE,差的就是這個權重。
FM 與 DDPM 的差別不只在路徑(線性 vs VP),還在那個沒有人明說的加權。
U1.2 說過 forward process 與 weighting 可以分開設計,這裡是它最乾淨的例子:兩個模型可以只差加權,訓出來的結果卻不一樣。U2.4 會把這兩軸攤在同一張表上。
消化一下
參考文獻
- Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. (從「把軌跡拉直」出發的版本;U3.3 會細講。)
- Albergo, M. S., Vanden-Eijnden, E. Building Normalizing Flows with Stochastic Interpolants. ICLR 2023. (把 當成可以挑的東西。)
- Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., Le, M. Flow Matching for Generative Modeling. ICLR 2023. (線性路徑在這篇裡叫 OT path。)