本篇重用M2.1從一片葉子到一群葉子:Flow Map 與 Pushforward·M2.3導航每 30 秒更新一次:Euler 法與它的誤差·M1.2天氣預報該報幾度:MSE 的最小值是 Conditional Expectation
回到那條不等式
U3.2 把三個單元的主線收在一條不等式上:Euler 取樣的全域誤差 ≲CLh∫01∥x¨t∥dt。步長 h 是預算,積分是軌跡有多彎。U3.3 與 U3.4 接著做了一件事:改配對,把積分壓小。U3.6 的圖 b 上,四個模型落在一條斜線上——積分小的,同樣步數誤差就小。
現在把這條斜線往左看到底。積分恰好是零只有一種情形:所有粒子沿等速直線走,S(π)=0。reflow 迭代的極限逼近它,但每一輪都在累積上一輪的模型誤差,實務上一到兩輪就停;停下來的時候積分還不是零。而只要它不是零,h=1——一步——就一定有誤差,不等式只告訴你誤差有多小,沒有辦法讓它消失。
換句話說,前三個單元的做法都是先學速度場、再用數值方法積分它,「一步生成」在這條路上是一個永遠只能逼近的極限。這個單元換一個問題:我們真正想要的是「從噪聲一步到資料」的那個映射。
能不能不學速度場,直接學那個映射?
要學的物件叫什麼
用 U2 的語言說清楚要學的東西。速度場 ut 定義了一個 ODE,ODE 的解把時刻 s 的點送到時刻 t 的點,這個「送」的動作是一個映射,記成 ψs→t:ψs→t(xs)=xt。U2.1 叫它 flow map。生成一張圖,就是算一次 ψ0→1——把 x0∼N(0,I) 送到 x1。
前三個單元從來沒有直接碰過 ψ0→1。我們學的是 ut,然後靠 Euler 一步一步近似它:N 步 Euler 就是 N 個「假設這一小段是直線」的映射疊起來。誤差來自每一段其實不是直線。
所以新目標是:用一個網路 Gθ 直接逼近 ψ0→1。 它的輸入是一個噪聲,輸出是一張圖,中間不積分任何東西。這就是 U1.0 一開始想要的那個 G——只是這次我們已經知道它該等於什麼:一個具體的、由 PF-ODE 決定的映射,而不是無限多個合法 G 中隨便一個。這一點很重要,馬上會用到。
課堂提問Q1
我們手上有一個訓好的 FM(或 diffusion)模型,可以跑 ODE。最笨、最直接的做法是什麼?它哪裡好、哪裡不好?
先想一想,再展開看整理後的答案
最直覺的做法幾乎只有一個:用 teacher 跑 ODE,從 x0 算到 x1=ψ0→1(x0),收集一大堆 (x0,x1) 配對,然後訓一個網路做回歸 Gθ(x0)≈x1。這確實就是最早的做法(Luhman & Luhman [1]),值得認真分析,因為它把這個單元所有方法要解決的問題都攤在桌上了。
好的地方,而且比想像中好。 回歸的目標是 MSE,U1.3 說 MSE 的最小值是 conditional expectation E[x1∣x0]。U1.0 提醒過,如果一個 x0 可以對到很多個 x1,回歸會輸出它們的平均、變成一團糊。但這裡不會:ψ0→1 是 ODE 的解,一個起點對到一個終點,E[x1∣x0] 就是 ψ0→1(x0) 本身。沒有 mode averaging。這件事的來源是 U2.1 的「ODE 軌跡不交叉」,也是 U3.3 的第三個性質——同一個事實。
不好的地方一:資料太貴。 每一筆訓練配對都要 teacher 跑幾十到上百步 ODE。想學好一個 Gθ 需要的配對數量和訓練一個生成模型差不多,等於要用 teacher 生成整個資料集一次。
不好的地方二:學生只看過 t=0。 訓練資料只有 (x0,x1),中間的 xt 完全沒出現。這在兩個地方付出代價:學生沒辦法多步取樣(它只會從純噪聲出發),而且它要學的映射是整條 ODE 疊起來的那個版本——U3.5 說中段 t 是最難學的一段,直接回歸終點等於把整段都塞進一個網路裡。
不好的地方三:這只是蒸餾。 學生的上限是 teacher;teacher 的誤差、teacher 用的取樣步數造成的離散誤差,全部進入配對。這個單元後面會問:能不能不要 teacher?
把三個「不好」記下來。接下來三篇分別對付它們:U6.1 用「逐輪減半」省掉事先生成資料;U6.2 把要學的物件從「t=0 到終點」改成「任何 t 到終點」;U6.3 拿掉 teacher。
這件事我們其實做過
停一下,回頭看 U3.3。reflow 的第一步是什麼?「用模型自己的 ODE 生成配對 (X0,Z1)」。這和 Q1 的做法一模一樣:都是 teacher 跑 ODE、收集起點與終點。差別只在拿到配對之後做什麼:
| 配對怎麼來 | 拿配對學什麼 | 產物 |
|---|
| Reflow(U3.3) | teacher 跑 ODE | 重訓 FM:uθ(xt,t)≈x1−x0,xt 是配對的直線插值 | 一個更直的速度場,還是要積分 |
| 直接回歸終點 [1] | teacher 跑 ODE | Gθ(x0)≈x1 | 一個一步映射 |
reflow 學的是速度,所以產物仍然是要積分的東西,只是軌跡直了、需要的步數少了;直接回歸學的是終點,產物本身就是一步。兩者的訓練資料完全相同。而 reflow 做兩輪就接近直線這件事,換到這個角度說就是:一個配對不交叉的 FM,它的一步 Euler 就幾乎是 ψ0→1。所以 reflow×2 本身就是一個不錯的一步生成器——U6.6 會把它和這個單元的方法放在同一張圖上比。
這個對照給了一個很有用的座標:這個單元的所有方法,都可以問「配對從哪裡來、學速度還是學終點、要不要 teacher」三個問題。
切換時間方向
接下來三篇要跟著 Consistency Models 原文 [4] 與 EDM [5] 的慣例走,那套慣例的時間方向和 U2、U3 相反:t=0 是資料、t 大是噪聲,和 U1 的 DDPM 方向相同。這是認知負荷不是數學難度,所以花半頁把它一次講清楚,之後不再回頭。
本單元的 forward process 用 EDM 的 variance-exploding(VE)形式:
xt=x0+tϵ,ϵ∼N(0,I),t∈[0,T],
x0∼pdata 是乾淨資料,噪聲的標準差就是 t 本身(沒有 αˉt 這種縮放)。T 取得夠大(原文用 T=80,資料標準化到單位尺度),使 xT≈Tϵ 幾乎是純噪聲;取樣時從 N(0,T2I) 出發。這條路徑的好處是每個係數都是 1 或 t,接下來所有式子裡不會有 schedule 的符號。
本單元的 PF-ODE。 對這條路徑,probability-flow ODE 是
dtdxt=−t∇logpt(xt)=E[ϵ∣xt],
第二個等號是 U1.3 的 Tweedie 公式在 VE 座標下的樣子——denoiser 預測的 E[ϵ∣xt] 就是速度,方向是「往噪聲走」。生成是把這條 ODE 從 t=T 解到 t=0。(推導放在下面的展開框。)
與 FM 座標的對照。 把 FM 的時間記成 s∈[0,1](s=0 噪聲、s=1 資料),線性路徑 xsFM=sxdata+(1−s)ϵ。兩邊除以 s:xsFM/s=xdata+s1−sϵ,右邊正是本單元的 xt,只要令 t=s1−s。所以兩套座標描述的是同一族分佈,只差一個時間重參數化與一個尺度——U2.4 說的「同一物件、不同座標」。
| U1(DDPM) | U2–U3(FM) | 本單元(EDM / CM) |
|---|
| 資料在哪一端 | t=0 | s=1 | t=0 |
| 噪聲在哪一端 | t=T | s=0 | t=T(T=80) |
| 中間點 | αˉtx0+σtϵ | sx1+(1−s)x0 | x0+tϵ |
| ODE 的速度 | 由 ϵθ 組成 | us=E[x1−x0∣xs] | E[ϵ∣xt]=−t∇logpt |
| 一步映射的目標 | — | ψ0→1:噪聲 → 資料 | f(xt,t)=x0:任何 t → 資料 |
| 對照 | — | t=s1−s,xt=xsFM/s | — |
最後一列先預告了下一篇要定義的物件:本單元學的映射寫成 f(xt,t),吃「任何一個時刻的任何一點」、吐「這條軌跡在 t=0 的終點」。ψ0→1 只是它在 t=T 這一片的特例。
ψs→t 的下標沿用 FM 慣例(0 是噪聲、1 是資料),本篇前半與下面的 quiz 都是這樣用;換到本單元慣例,同一個映射寫成 f(⋅,T)。混用一個記號不理想,但改寫 flow map 的下標會和 U2.1 對不上,所以留著並在這裡標明。
展開細節推導:VE 路徑的 PF-ODE 為什麼是 dx/dt = −t ∇log p_t = E[ε | x_t]
xt=x0+tϵ 的邊際 pt 是 pdata 與 N(0,t2I) 的 convolution,其變異數以 dtdt2=2t 的速率增加,對應的 forward SDE 是 dx=2tdW(drift 為零)。U1.4 的 PF-ODE 公式(那裡的 drift 記成 μ,別和本單元的映射 f 混在一起)dtdx=μ−21g2∇logpt 代入 μ=0、g2=2t,得 dtdx=−t∇logpt(x)。
Tweedie:對 pt(x)=∫N(x;x0,t2I)pdata(x0)dx0 取 ∇xlog,得 ∇logpt(x)=−t2x−E[x0∣xt=x];而 x−x0=tϵ,所以 ∇logpt(xt)=−tE[ϵ∣xt],即 E[ϵ∣xt]=−t∇logpt(xt)。兩式合起來就是正文的 ODE。
用 U2.4 的一般式也能到同一個地方:取 αt=1(x0 的係數)、σt=t,ut=α˙tE[x0∣xt]+σ˙tE[ϵ∣xt]=E[ϵ∣xt]。
從下一篇起,「x0」永遠是資料、「t 小」永遠是乾淨端。如果讀到某個式子覺得方向怪,回來查這張表。
先消化一下
參考文獻
- Luhman, E., Luhman, T. Knowledge Distillation in Iterative Generative Models for Improved Sampling Speed. 2021.(Q1 的直接回歸法。)
- Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023.(reflow 的配對來自 ODE。)
- Salimans, T., Ho, J. Progressive Distillation for Fast Sampling of Diffusion Models. ICLR 2022.(下一篇。)
- Song, Y., Dhariwal, P., Chen, M., Sutskever, I. Consistency Models. ICML 2023.(本單元時間方向與符號的來源。)
- Karras, T., Aittala, M., Aila, T., Laine, S. Elucidating the Design Space of Diffusion-Based Generative Models. NeurIPS 2022.(EDM:xt=x0+tϵ 的 VE 形式與 T=80。)