U7.0 15 分鐘閱讀 2026年9月

U7.0 不回到終點,能不能直接跳到中間?

本篇重用M2.0河面上的箭頭:Vector Field 與 ODE·M2.1從一片葉子到一群葉子:Flow Map 與 Pushforward

上一個單元留下的病根

U6.5 收在一個問題上。Consistency model 學到的是 f(xt,t)f(x_t,t):把軌跡上任何一點直接送到資料端。一步生成就是 f(xT,T)f(x_T,T)。想多花幾步換品質,唯一的辦法是:跳到資料端、重新加噪聲到某個中間時刻、再跳一次。實驗上多花步數的增益很快就小下去,而且 ODE 那個「多走幾步誤差就小」的保證在那裡不成立。那一篇給了三個理由——每次重新加噪都是一次獨立配對,把 U2.3 Q1 的交叉問題重新請回來,所以整個程序不在逼近任何連續極限;每一跳的誤差都是滿的,最後一跳的誤差不會因為前面多跳了幾次而變小;而 ff 是確定映射、沒有 score,所以也沒有 U3.1 那種把偏掉的樣本拉回來的機制。

把三個理由並排看,會發現它們指向同一個動作:「回到終點再加噪」。跳回終點是浪費——我們本來只想前進一小段;重新加噪是有害——它把已經走對的路徑打亂。如果有一個東西能從 xtx_t 直接送到 xsx_sss 是任何我們想去的中間時刻),不經過終點、不加噪,那兩個問題同時消失。

這個單元就是這個東西。

先把慣例對齊

U6 跟著書用 t=0t=0 是資料、f(xt,t)x0f(x_t,t)\to x_0 的方向(U6.0 有說明)。這個單元的物件有兩個時間,「往哪個方向」不再是問題,所以我們可以回到 U2U3 的 FM 慣例:t=0t=0 是噪聲 x0N(0,I)x_0\sim\mathcal N(0,I)t=1t=1 是資料 x1x_1,直線插值 xt=(1t)x0+tx1x_t=(1-t)\,x_0+t\,x_1,條件速度 x1x0x_1-x_0。唯一要換的是一個字母:前幾個單元的邊際速度場寫成 ut(x)u_t(x),這個單元改記成 vt(x)v_t(x),因為 uu 這個字母兩篇之後要當「平均速度」用。

符號u 在這個單元有兩個身分,怎麼分

uu 這個單元會出現兩次,靠它吃不吃參數分辨:

  • uu 單獨出現,是 progressive 恆等式裡的中間時刻ψts=ψusψtu\psi_{t\to s}=\psi_{u\to s}\circ\psi_{t\to u}uu 落在 sstt 之間)。CTM 的損失、Shortcut 與 AYF 都用這個寫法,因為原文就是這樣寫的。
  • u(z,r,t)u(z,r,t) 帶參數,是 U7.2平均速度

邊際速度場則一律寫 vt(x)v_t(x),不再用 ut(x)u_t(x)

這個東西該長什麼樣

先給畫面。U2.1 說速度場 vtv_t 定義了一組不交叉的軌跡,平面上每一點在每個時刻都恰好有一條軌跡經過。取一顆粒子,它在時刻 tt 的位置是 xx;沿著它的軌跡走到時刻 ss,它會在某個確定的位置。把「時刻 tt 的位置 xx」對應到「同一條軌跡在時刻 ss 的位置」,這個對應就是我們要的東西,記成

ψts(x)  =  經過 (x,t) 的那條軌跡在時刻 s 的位置.\psi_{t\to s}(x)\;=\;\text{經過 }(x,t)\text{ 的那條軌跡在時刻 }s\text{ 的位置}.

ss 可以大於 tt(往資料端走)也可以小於 tt(往噪聲端走),兩個時間都是自由的。它叫 flow map——ODE 教科書裡本來就有這個名字(U2.1 把它記成 ψt\psi_t,而 U1.0 要的那個 GG 就是 ψ01\psi_{0\to1} 這一個特例)。U6 學的 consistency function 是它的另一個特例:終點固定在資料端。

課堂提問Q1

不看任何論文,只從「ψts(x)\psi_{t\to s}(x) 是軌跡上的位置」這個定義出發:一個網路 ψθ\psi_\theta 想當合格的 flow map,必須滿足哪些條件? 請至少列出三個,並說出每一個對應前幾個單元的哪個物件。

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

最先想到的通常是「不跳就不能動」,接著是「跳到終點要等於上一個單元的 ff」;半群性質要換個角度想「分兩段跳」才會浮現,而與速度場的關係最容易被漏掉。四個條件整理如下。

一、恆等。 ψtt(x)=x\psi_{t\to t}(x)=x。從 tt 跳到 tt 就是原地不動。這是 consistency function 邊界條件 f(x,ε)=xf(x,\varepsilon)=x 的推廣(U6.2 的乾淨端是 ε=0.002\varepsilon=0.002 而不是 00);U6.2cskip(t)x+cout(t)Fθc_{\text{skip}}(t)\,x+c_{\text{out}}(t)\,F_\theta 的參數化讓它自動成立,這個單元的參數化也會這麼做。

二、端點。 ψt1\psi_{t\to1} 就是 consistency function——跳到資料端。(在 U6 的慣例裡資料在 t=0t=0,寫成 f(,t0)f(\cdot,t\to0);只是慣例不同。)所以 consistency model 是 flow map 把第二個時間釘死的特例。

三、半群。tt 跳到 ss、再從 ss 跳到 rr,必須等於直接從 tt 跳到 rr

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

這是「軌跡上的位置」這個定義的直接後果:中途停一下不會換到另一條軌跡。它的力量在於多步取樣不再需要重新加噪——ψ00.5\psi_{0\to0.5}ψ0.51\psi_{0.5\to1} 就是一條合法的兩步路,而且理論上與一步 ψ01\psi_{0\to1} 落在同一點。U6.5 的交叉問題就是在這一條被拆掉的。

四、與速度場相容。 沿著 ss 微分,位置的變化率就是那一點的速度:

sψts(x)=vs(ψts(x)),因此ψtt+h(x)=x+hvt(x)+O(h2).\partial_s\,\psi_{t\to s}(x)=v_s\big(\psi_{t\to s}(x)\big),\qquad\text{因此}\quad \psi_{t\to t+h}(x)=x+h\,v_t(x)+O(h^2).

第二式說:flow matching 學的速度場,是 flow map 在 sts\to t 時的無窮小極限U2 學的是這個物件的一階 Taylor 項,U6 學的是它在 s=1s=1 的切片,這個單元要學整張表。

四個條件不獨立:三推得一(取 s=t=rs=t=r),三加四可以推得一切(無窮多個小跳接起來)。但拆成四條有一個好處——下一篇會看到,每一條都可以變成一個損失函數,而且對應到一個已知的方法。

第一個具體實作:CTM

有了四個條件,最直接的問題是:拿 U6 已經會的東西,能不能改一改就變成 flow map?Consistency Trajectory Models(CTM,Kim et al. [1])就是這麼做的。

U6.2 的 consistency 損失說:同一條軌跡上相鄰兩點 xtx_{t}xtx_{t'}fθf_\theta 的輸出要一樣。CTM 把 fθ(x,t)f_\theta(x,t) 換成三個輸入的 Gθ(x,t,s)G_\theta(x,t,s),並把「輸出要一樣」推廣成:xtx_t 直接跳到 ss,要等於先走一段再跳到 ss。「先走一段」用 teacher 的速度場做——從 tt 用 ODE solver 走到某個中間時刻 u[s,t)u\in[s,t),得到 x~u\tilde x_u,然後

Gθ(xt,ts)    Gθ ⁣(x~u,us),x~u=Solverteacher(xt,tu),G_\theta(x_t,\,t\to s)\;\approx\;G_{\theta^-}\!\big(\tilde x_u,\,u\to s\big),\qquad \tilde x_u=\text{Solver}_{\text{teacher}}(x_t,\,t\to u),

右邊是 stop-gradient 的目標(θ\theta^- 是 EMA 或凍結的參數,U6.4 談過這個選擇)。讀一遍會發現這正是半群條件,只是第一段路交給 teacher:ψts=ψusψtuteacher\psi_{t\to s}=\psi_{u\to s}\circ\psi^{\text{teacher}}_{t\to u}

uu 怎麼選很有意思。uu 貼著 tt(只走一小步)時,這就是 consistency distillation 推廣到任意終點 ssu=su=s 時右邊變成 Gθ(x~s,ss)=x~sG_{\theta^-}(\tilde x_s,s\to s)=\tilde x_s——純粹回歸 teacher 走出來的軌跡點,是 U6.0 Q1 那個「最笨的做法」。CTM 把 uu[s,t)[s,t) 隨機取,稱之為 soft consistency matching,讓兩種訊號都有。實務上 CTM 還加了 denoising score matching 的正則項與一個 adversarial 損失來提升樣本品質,那些是工程上的加料,主線只需要記住:CTM 是 consistency distillation 加上第二個時間輸入,並用半群條件當損失。

CTM 回答了起點問題——有了 Gθ(x,t,s)G_\theta(x,t,s),多步取樣就是 0s1s210\to s_1\to s_2\to\cdots\to1,不回終點、不加噪。CTM 的實驗確實看到步數增加時品質持續改善,而不是像 consistency model 那樣很快停住。

展開細節CTM 為什麼仍然需要 teacher?可以拿掉嗎?

CTM 的損失裡 teacher 出現在「先走一段」那裡:x~u\tilde x_u 是用 teacher 的速度場解 ODE 得到的。沒有 teacher,我們就不知道 xtx_t 的軌跡往哪裡走——這是所有 distillation 方法共同的依賴。

U6.3 的 consistency training 示範過怎麼拿掉 teacher:不真的走一步,改用同一組 (x0,x1)(x_0,x_1) 重新插值出 xtx_{t'},靠 U1.2conditional trick(條件目標在期望上等於邊際目標),代價是 O(Δt)O(\Delta t) 的曲率 bias。同樣的替換原則上可以搬到 CTM 上,但要處理的細節更多:ss 不再固定,網路的輸出空間從「資料」變成「任何時刻的中間狀態」。這個單元接下來的三篇,本質上就是在回答「flow map 能不能像 consistency training 那樣從頭訓練、而且不帶曲率 bias」——答案是可以,而且方法不只一種。

這個單元的路線

現在手上有一個新物件(flow map)與一個第一版實作(CTM,需要 teacher、用半群條件)。接下來:

  • 下一篇把四個條件裡的三個各寫成一個損失函數,並把上一個單元和這個單元所有方法排進同一張表——每個方法都是「哪一條恆等式 + 哪一個估計量」。
  • 再一篇看 MeanFlow:用「平均速度」重新參數化 flow map,得到一條精確的恆等式,讓它能像 flow matching 一樣從頭訓練、一步就有競爭力。
  • 然後是 Shortcut、Align Your Flow 這些同一張表上的其他格子。
  • 最後換一條完全不同的路:不再要求「學生輸出等於某個目標點」,改要求「學生的分佈等於 teacher 的分佈」。

先消化一下

想一想

多步 consistency model 的增益很快變小。這一篇把病根歸到哪一個動作?

想一想

半群條件 ψsrψts=ψtr\psi_{s\to r}\circ\psi_{t\to s}=\psi_{t\to r} 對取樣的直接意義是:

想一想

Flow matching 學的速度場 vtv_t 與 flow map ψts\psi_{t\to s} 的關係是:

想一想

CTM 的損失把 Gθ(xt,ts)G_\theta(x_t,t\to s) 對到 Gθ(x~u,us)G_{\theta^-}(\tilde x_u,u\to s),其中 x~u\tilde x_u 由 teacher 從 tt 走到 uu。取 u=su=s 時,這個損失變成:

參考文獻

  1. Kim, D., Lai, C.-H., Liao, W.-H., Murata, N., Takida, Y., Uesaka, T., He, Y., Mitsufuji, Y., Ermon, S. Consistency Trajectory Models: Learning Probability Flow ODE Trajectory of Diffusion. ICLR 2024.(第一個具體的雙時間模型;soft consistency matching。)
  2. Boffi, N. M., Albergo, M. S., Vanden-Eijnden, E. Flow Map Matching. 2024.(flow map 的系統性定義與三種損失,下一篇的主角。)
  3. Song, Y., Dhariwal, P., Chen, M., Sutskever, I. Consistency Models. ICML 2023.(條件二對應的物件。)