U7.1 13 分鐘閱讀 2026年9月

U7.1 Flow Map Matching:三條恆等式,三種損失

本篇重用M0.3漂流的溫度計:全導數、微分穿過積分與 JVP·M2.1從一片葉子到一群葉子:Flow Map 與 Pushforward·M1.1從鞋子猜身高:Conditional Expectation

從條件到損失

上一篇的四個條件是判準:拿一個 ψθ\psi_\theta 來,能檢查它合不合格。要拿它們訓練,得把「合格」變成一個可以對 θ\theta 微分的數。Boffi、Albergo 與 Vanden-Eijnden 的 Flow Map Matching [1] 把這件事做得很系統:條件四有兩種微分方式,條件三本身就是一條等式,於是有三條恆等式、三種損失。這一篇逐一看它們,重點放在一個問題上——速度場 vv 在哪一個點被需要? 因為這決定了能不能用 U2.2 的條件速度代替,也就決定了要不要 teacher。

第一條:Lagrangian——跟著輸出點走

條件四寫的是 sψts(x)=vs(ψts(x))\partial_s\psi_{t\to s}(x)=v_s\big(\psi_{t\to s}(x)\big)。固定輸入 (x,t)(x,t),讓目標時間 ss 動,輸出點 ψts(x)\psi_{t\to s}(x) 就像一顆粒子沿軌跡前進,它的速度必須等於那一點的速度場。這是粒子的觀點——跟著它走——所以叫 Lagrangian。損失:

LLag=Esψθ(xt,ts)vs(ψθ(xt,ts))2.\mathcal L_{\text{Lag}}=\mathbb E\Big\|\,\partial_s\psi_\theta(x_t,t\to s)-v_s\big(\psi_\theta(x_t,t\to s)\big)\Big\|^2 .

速度場在輸出點被需要。這是麻煩的地方:ψθ(xt,ts)\psi_\theta(x_t,t\to s) 是網路算出來的一個位置,我們手上沒有任何一組 (x0,x1)(x_0,x_1) 的直線恰好經過它——U2.3 Q1 說過邊際軌跡不是任何一條條件直線。所以這裡的 vsv_s 只能來自一個已經訓好的速度場:Lagrangian 損失是 distillation 專用的

第二條:Eulerian——固定輸出,讓輸入沿軌跡動

換一個角度微分。取一條軌跡 xtx_t,看 ψts(xt)\psi_{t\to s}(x_t):不論從軌跡上哪一點出發,跳到 ss 都是同一個位置。所以沿著軌跡對 tt全導數是零:

ddtψts(xt)=tψts(x)x=xt+xψts(xt)vt(xt)=0.\frac{d}{dt}\,\psi_{t\to s}(x_t)=\partial_t\psi_{t\to s}(x)\Big|_{x=x_t}+\nabla_x\psi_{t\to s}(x_t)\,v_t(x_t)=0 .

(全導數的展開是 U6 用 JVP 算 ddtfθ\tfrac{d}{dt}f_\theta 時的同一條式子:xtx_ttt 動,速度是 vt(xt)v_t(x_t)。)這次是場的觀點——把 ψs\psi_{\cdot\to s} 看成定義在 (x,t)(x,t) 上的一個場,要求它沿著每條軌跡是常數,就像 U2.1 把「粒子怎麼走」翻成「密度怎麼變」那樣——所以叫 Eulerian。

速度場在輸入點 xtx_t 被需要。而輸入點是我們自己造的:xt=(1t)x0+tx1x_t=(1-t)x_0+t\,x_1,手上就有這組 (x0,x1)(x_0,x_1),條件速度 x1x0x_1-x_0 現成可用。這就是 consistency training 能拿掉 teacher 的原因,這個單元從頭訓練的方法也全部走這條路。Eulerian 是能夠不要 teacher 的那一條。 怎麼代替才在期望上精確,下面的展開框先說一半,下一篇 U7.2 的 Q1 說完。

展開細節用條件速度代替時的一個陷阱:squared loss 直接代會多出一項

vt(xt)v_t(x_t) 直接換成 x1x0x_1-x_0 塞進 squared loss: Etψθ+ψθ(x1x0)2\mathbb E\big\|\partial_t\psi_\theta+\nabla\psi_\theta\,(x_1-x_0)\big\|^2。 記 δ=(x1x0)vt(xt)\delta=(x_1-x_0)-v_t(x_t),它給定 xtx_t 的條件期望是零——那正是邊際速度 vtv_t 的定義(U2.2 定理 2 的交叉項用的也是這一條)。展開:

Etψθ+ψθvt真正的 Eulerian 殘差+ψθδ2=E殘差2+Eψθδ2,\mathbb E\big\|\underbrace{\partial_t\psi_\theta+\nabla\psi_\theta\,v_t}_{\text{真正的 Eulerian 殘差}}+\nabla\psi_\theta\,\delta\big\|^2 =\mathbb E\|\text{殘差}\|^2+\mathbb E\|\nabla\psi_\theta\,\delta\|^2 ,

交叉項因 E[δxt]=0\mathbb E[\delta\mid x_t]=0 消失,但第二項依賴 θ\theta——它在懲罰 ψθ\psi_\theta 的 Jacobian,會把最小值拉偏。這和 U2.2 的情形不同:那裡的 vθv_\theta 是「被回歸的量」,條件速度是「目標」,變異數項不含 θ\theta;這裡 vv 卻乘在 ψθ\nabla\psi_\theta 上。

解法是把含 vv 的部分移到 stop-gradient 的目標裡,讓目標對 vv 是線性的。U6.3 的 consistency training、U6.4 的 sCM 都是這個結構:把 ddtψθ\tfrac{d}{dt}\psi_\theta(用條件速度算的)整個當成不回傳梯度的目標。這時 squared loss 對隨機目標取期望,等於對目標的條件期望回歸再加一個與 θ\theta 無關的常數——這就是 U1.2conditional trick,代換在期望上精確。下一篇 MeanFlow 的 Q1 會把這句話說完整。

課堂提問Q1

三條恆等式都在說同一件事(ψts\psi_{t\to s} 沿軌跡不變),但只有 Eulerian 那一條可以不用 teacher。

差別到底在哪裡?從「速度場在哪一個點被需要」去看。

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

把三條並排,只看 vv 出現在哪個位置:

恆等式vv 被需要的位置那個點是誰造的
Lagrangian輸出點 ψts(xt)\psi_{t\to s}(x_t)網路的輸出——我們沒有它的 (x0,x1)(x_0,x_1)
Eulerian輸入點 xtx_t我們自己造的:xt=(1t)x0+tx1x_t=(1-t)x_0+t\,x_1
progressive不需要 vv,但需要 ψθ\psi_\theta 自己走中間那一段網路的輸出

關鍵是第三欄。條件速度 x1x0x_1-x_0 只有在「我知道這個點是由哪一組 (x0,x1)(x_0,x_1) 造出來的」時候才拿得到。輸入點是我們自己插值出來的,所以那組端點就在手上;輸出點是網路吐出來的,我們不知道它落在哪一條條件直線上,只能去問一個已經學會速度場的 teacher。

所以「要不要 teacher」不是這三條恆等式的附帶性質,而是由「vv 被求值的位置」直接決定的。這一欄也解釋了下一篇為什麼走得通:MeanFlow 換了座標,但 vv 仍然只在輸入點被需要。

(progressive 那一列是另一種依賴:它不要 teacher 的 vv,但要學生自己先會走 tut\to u 那一段,所以是 bootstrapping——U7.3 的 Shortcut 就付這個代價。)

第三條:progressive——兩小步等於一大步

條件三不用微分,本身就是等式:

ψtr(x)=ψsr(ψts(x)),t<s<r.\psi_{t\to r}(x)=\psi_{s\to r}\big(\psi_{t\to s}(x)\big),\qquad t<s<r .

損失就是兩邊的距離。它完全不出現速度場——這是它最特別的地方。那動力學的資訊從哪裡進來?從最小的那一步:兩個時間很近時,條件四說 ψtt+h(x)x+hvt(x)\psi_{t\to t+h}(x)\approx x+h\,v_t(x)。所以 progressive 損失一定要配一個「底層」:要嘛底層由 teacher 提供(U6.1:teacher 走兩小步、學生學一大步,一輪一輪把步數減半),要嘛底層是 flow matching 自己(本單元的 Shortcut:步長為零時就是 FM 損失),從小步一路 bootstrap 到大步。

代價是誤差累積:每一級大步都以上一級小步為目標,小步的誤差會一級一級往上帶。U6.1 的逐輪退化與 U3.3 reflow 的多輪誤差是同一件事。

三條恆等式,各自要什麼

現在可以把 U6 和本單元的方法排在一起。每一列的讀法:這個方法學的是 flow map 的哪一片、用哪條恆等式、vv 用什麼估計、要不要 teacher。

方法學的物件恆等式vv 的估計量teacher
Flow matching(U2.2vtv_t 本身條件四的無窮小極限條件速度 x1x0x_1-x_0
Reflow(U3.3vtv_t(新配對)同上ODE 配對下的 x1x0x_1-x_0上一輪的自己
Progressive distillation(U6.1ψtt+2h\psi_{t\to t+2h},離散步progressiveteacher 走兩小步
Consistency distillation(U6.3ψt1\psi_{t\to1}Eulerian,離散化teacher 走一步到 xtx_{t'}
Consistency training(U6.3ψt1\psi_{t\to1}Eulerian,離散化條件重插值 xtx_{t'}O(Δt)O(\Delta t) 曲率 bias
sCM(U6.4ψt1\psi_{t\to1}Eulerian,連續(JVP)條件速度,放在 stop-gradient 目標裡
CTM(U7.0ψts\psi_{t\to s}progressive,第一段交給 teacherteacher solver tut\to u
MeanFlow(下一篇)平均速度 uu,等價於 ψts\psi_{t\to s}Eulerian,連續,換到 uu 座標條件速度,目標對 vv 線性
Shortcut(下下篇)ψtt+d\psi_{t\to t+d}progressive;d=0d=0 是 FM自己的兩小步;d=0d=0 用條件速度
Align Your Flow(下下篇)ψts\psi_{t\to s}Eulerian 與 Lagrangian,連續teacher 的 vv

不要 teacher 的方法全部在 Eulerian 那一欄,或在 progressive 配 FM 底層那一欄——因為只有這兩種寫法讓 vv 出現在我們自己造的點上。consistency model 家族學的都是 ψt1\psi_{t\to1} 這一片;把第二個時間放開,方法本身幾乎不用改。而 U6.3 那個 O(Δt)O(\Delta t) 的曲率 bias 出現在「離散化」的那幾列;連續版(sCM、MeanFlow)把差分換成導數,bias 消失,代價是要算 JVP。下一篇就是這一列。

先消化一下

想一想

Lagrangian 損失 sψθ(xt,ts)vs(ψθ(xt,ts))2\|\partial_s\psi_\theta(x_t,t\to s)-v_s(\psi_\theta(x_t,t\to s))\|^2 為什麼不能用條件速度 x1x0x_1-x_0 代替 vsv_s

想一想

Eulerian 恆等式 ddtψts(xt)=0\tfrac{d}{dt}\psi_{t\to s}(x_t)=0 的幾何意義是:

想一想

Progressive 損失完全不含速度場 vv。那一個只用 progressive 損失、沒有任何底層的網路會學到什麼?

想一想

表格裡「能不能不要 teacher」的分界線落在:

參考文獻

  1. Boffi, N. M., Albergo, M. S., Vanden-Eijnden, E. Flow Map Matching. 2024.(Lagrangian、Eulerian、progressive 三種損失的來源;與 CM、progressive distillation 的對應。)
  2. Salimans, T., Ho, J. Progressive Distillation for Fast Sampling of Diffusion Models. ICLR 2022.(progressive 恆等式配 teacher 底層。)
  3. Song, Y., Dhariwal, P., Chen, M., Sutskever, I. Consistency Models. ICML 2023.(Eulerian 恆等式在 s=1s=1、離散化。)
  4. Kim, D. et al. Consistency Trajectory Models. ICLR 2024.(progressive 恆等式、第一段交給 teacher。)