U6.3 16 分鐘閱讀 2026年9月

U6.3 Consistency Distillation 與 Consistency Training:沒有老師,憑什麼?

本篇重用M1.4去噪就是取 Posterior Mean(Tweedie)·M1.1從鞋子猜身高:Conditional Expectation·M1.2天氣預報該報幾度:MSE 的最小值是 Conditional Expectation·M2.3導航每 30 秒更新一次:Euler 法與它的誤差·M0.2導航的三十秒:Taylor 展開與「假設直線」

空格

上一篇的損失

LCM=E[λ(tn)d(fθ(xtn+1,tn+1), fθ(x^tn,tn))]\mathcal L_{\text{CM}}=\mathbb E\Big[\lambda(t_n)\,d\Big(f_\theta\big(x_{t_{n+1}},t_{n+1}\big),\ f_{\theta^-}\big(\hat x_{t_n},t_n\big)\Big)\Big]

裡,xtn+1=x0+tn+1ϵx_{t_{n+1}}=x_0+t_{n+1}\epsilon 是普通的加噪聲,唯一沒說清楚的是 x^tn\hat x_{t_n}:「從 xtn+1x_{t_{n+1}} 出發,沿同一條 PF-ODE 軌跡往乾淨端走一格的點」。真實的那個點 xtnx_{t_n} 需要解 ODE,我們沒有;但我們只需要一個夠好的近似。Song et al. [1] 給了兩個。

Consistency distillation(CD)。 有一個訓好的 teacher 給 score sϕ(x,t)logpt(x)s_\phi(x,t)\approx\nabla\log p_t(x)U6.0 說本單元的 PF-ODE 是 dxdt=tlogpt(x)\frac{dx}{dt}=-t\nabla\log p_t(x),從 tn+1t_{n+1}tnt_n 走一步 Euler:

x^tnCD=xtn+1+(tn+1tn)tn+1sϕ(xtn+1,tn+1).\hat x^{\text{CD}}_{t_n}=x_{t_{n+1}}+(t_{n+1}-t_n)\,t_{n+1}\,s_\phi(x_{t_{n+1}},t_{n+1}) .

tn<tn+1t_n<t_{n+1},所以是往回走;用 E[ϵx]=tlogpt\mathbb E[\epsilon\mid x]=-t\nabla\log p_t 改寫成 xtn+1(tn+1tn)ϵ^ϕx_{t_{n+1}}-(t_{n+1}-t_n)\,\hat\epsilon_\phi 也一樣。)這個點與真實 xtnx_{t_n} 差了兩件事:teacher 的 score 誤差,以及 Euler 一步的局部誤差 12Δt2x¨\tfrac12\Delta t^2\|\ddot x\|——U3.2 的那個量,Δt=tn+1tn\Delta t=t_{n+1}-t_n這是一個蒸餾:它把 teacher 的知識、一小步一小步地,壓進 fθf_\theta

Consistency training(CT)。 沒有 teacher。注意到 xtn+1x_{t_{n+1}} 本來就是用某一組 (x0,ϵ)(x_0,\epsilon) 造出來的,那就用同一組,在 tnt_n 再造一次:

x^tnCT=x0+tnϵ.\hat x^{\text{CT}}_{t_n}=x_0+t_n\,\epsilon .

程式碼上這是一行:x_hat = x0 + t[n] * eps。不需要任何網路呼叫、任何 score。

第一次看到 CT 的人通常會皺眉。x0+tnϵx_0+t_n\epsilon 不在 xtn+1x_{t_{n+1}} 的 PF-ODE 軌跡上——它在那條穿過 x0x_0、方向是 ϵ\epsilon直線上;而 U2.3 Q1 花了一整篇說:條件路徑是直的,邊際軌跡是彎的,兩者不是同一條線。拿一個不在軌跡上的點,要求 fθf_\theta 在那裡的輸出等於 fθ(xtn+1)f_\theta(x_{t_{n+1}}),這看起來就是在教錯的東西。

課堂提問Q1

CT 沒有 teacher、沒有 score,x0+tnϵx_0+t_n\epsilon 也明明不在同一條 PF-ODE 軌跡上。它憑什麼能學到 consistency function?

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

常見的答案分三類:「因為 Δt\Delta t 很小,x0+tnϵx_0+t_n\epsilonxtn+1x_{t_{n+1}} 靠得很近,所以差不多」(對一半——靠近是必要的,但不是理由;靠近的錯點還是錯點);「因為 fθf_\theta 會自己平均掉」(方向對了,但要說清楚是在平均、平均成什麼);以及「這又是那個條件與邊際的事」。第三個是對的,把它算出來。

算一次條件期望。 把 CT 的目標改寫成從 xtn+1x_{t_{n+1}} 出發的形式:

x0+tnϵ=(x0+tn+1ϵ)(tn+1tn)ϵ=xtn+1Δtϵ.x_0+t_n\epsilon=(x_0+t_{n+1}\epsilon)-(t_{n+1}-t_n)\,\epsilon=x_{t_{n+1}}-\Delta t\cdot\epsilon .

它是「從 xtn+1x_{t_{n+1}} 沿 ϵ-\epsilon 方向退 Δt\Delta t」。但 ϵ\epsilon 是這一筆樣本自己的噪聲,不是 xtn+1x_{t_{n+1}} 的函數——很多不同的 (x0,ϵ)(x_0,\epsilon) 會造出同一個 xtn+1x_{t_{n+1}},每一組退的方向都不同。固定 xtn+1x_{t_{n+1}},對所有這些 (x0,ϵ)(x_0,\epsilon) 取後驗平均:

E[x0+tnϵxtn+1]=xtn+1Δt E[ϵxtn+1]=xtn+1+Δt tn+1logptn+1(xtn+1).\mathbb E\big[x_0+t_n\epsilon\,\big|\,x_{t_{n+1}}\big] =x_{t_{n+1}}-\Delta t\ \mathbb E\big[\epsilon\,\big|\,x_{t_{n+1}}\big] =x_{t_{n+1}}+\Delta t\ t_{n+1}\nabla\log p_{t_{n+1}}(x_{t_{n+1}}) .

第二個等號是 Tweedie(U6.0 的展開框:E[ϵxt]=tlogpt\mathbb E[\epsilon\mid x_t]=-t\nabla\log p_t)。右邊正是 CD 的 x^tnCD\hat x^{\text{CD}}_{t_n},而且用的是真實 score,不是 teacher 的近似。

所以 CT 的目標是 CD 目標的條件版本:每一筆樣本都是錯的(退的方向是自己的 ϵ\epsilon,不是平均方向),但錯的方向對 xtn+1x_{t_{n+1}} 的後驗是零均值的,平均起來就是對的方向。這就是 U1.2conditional trick——條件目標好算、邊際目標難算,而回歸自動對條件取後驗平均——換到 consistency 上的樣子。U5.2 那張表已經列過它的幾個版本(score、速度、btb_tηt\eta_t、比值),每一個都是同一句話:我們不需要邊際量,只需要一個在期望上等於它的條件量。

但這裡有兩個新的細節,也是為什麼上面第一類答案裡「Δt\Delta t 很小」不是多餘的。

細節一:目標經過了一個非線性函數。 先前那幾個版本的條件目標都是直接被回歸的量(ϵ\epsilonx1x0x_1-x_0x˙t\dot x_t、比值),MSE 對它取期望是精確的。這次條件目標 x^tnCT\hat x^{\text{CT}}_{t_n} 是先餵進 fθf_{\theta^-} 再被比較。fθf_{\theta^-} 非線性,所以

E[fθ(x0+tnϵ,tn)xtn+1]  fθ(x^tnCD,tn).\mathbb E\big[f_{\theta^-}(x_0+t_n\epsilon,\,t_n)\,\big|\,x_{t_{n+1}}\big]\ \neq\ f_{\theta^-}\big(\hat x^{\text{CD}}_{t_n},\,t_n\big).

差多少?x0+tnϵx_0+t_n\epsilon 在給定 xtn+1x_{t_{n+1}} 下的條件變異數是 Δt2Var(ϵxtn+1)\Delta t^2\,\mathrm{Var}(\epsilon\mid x_{t_{n+1}}),Jensen gap 的量級是 Δt2\Delta t^2ff 的二階導數。這是 O(Δt2)O(\Delta t^2) 的東西——Δt0\Delta t\to0 消失,但 Δt\Delta t 大時不能忽略。

細節二:Euler 本身相對真實軌跡就有誤差。 就算完美地平均成 x^tnCD\hat x^{\text{CD}}_{t_n},它也只是真實 xtnx_{t_n} 的一步 Euler 近似,差 12Δt2x¨\tfrac12\Delta t^2\|\ddot x\|。這一項 CD 也有;它是 U3.2 的局部誤差,係數是曲率,同樣隨 Δt0\Delta t\to0 消失。

兩項合起來,就是 Song et al. [1] 那條定理的精神:Δt0\Delta t\to0 時,CT 的損失與(用真實 score 的)CD 損失只差 o(Δt)o(\Delta t),兩者訓出同一個 ff。(定理的精確條件——dd 的形式、對 ff 的 Lipschitz 與二階可微假設、θ=θ\theta^-=\theta——請查原文;這裡只用它的結論。)

一句話總結:CT 不是「沒有 teacher」,它的 teacher 是資料本身——(x0,ϵ)(x_0,\epsilon) 這一組配對就是一條條件軌跡,而條件軌跡的後驗平均就是真實的 PF-ODE。

為什麼時間網格要慢慢變細

Q1 的兩個細節給了一張很實用的圖。固定一個 xtn+1x_{t_{n+1}},看 CT 那一側的目標 fθ(x0+tnϵ,tn)f_{\theta^-}(x_0+t_n\epsilon,t_n)

  • 它的期望偏離真實的 f(xtn,tn)f(x_{t_n},t_n),偏離量是 O(Δt2)O(\Delta t^2) 乘上曲率(Euler 誤差)與 ff 的二階導數(Jensen gap)。這是 biasNN 個網格點的 bias 疊起來,整個 fθf_\theta 偏離真值 O(Δt)O(\Delta t)——這是 Song et al. [1] 定理裡「CD 損失為零則 fθf=O(Δt)\|f_\theta-f\|=O(\Delta t)」的內容,係數由曲率決定。
  • 它的散佈來自不同的 (x0,ϵ)(x_0,\epsilon) 退向不同方向,標準差是 O(Δt)O(\Delta t)。這是 variance

單看兩項都隨 Δt\Delta t 變小,似乎 Δt\Delta t 越小越好。但損失比較的是 fθ(xtn+1)f_\theta(x_{t_{n+1}})fθ(x^tn)f_{\theta^-}(\hat x_{t_n}),這個差本身在 Δt0\Delta t\to0 時也趨近零——真正有資訊的訊號(兩點輸出的真實差距)是 O(Δt)O(\Delta t) 量級,而目標的 noise 也是 O(Δt)O(\Delta t)Δt\Delta t 一小,訊噪比不再改善,梯度被 variance 主導,訓練變慢、甚至不收斂 [1, 2]。

於是有一個真正的取捨:Δt\Delta t 大(NN 小)→ 訊號強、好訓,但 bias 大,fθf_\theta 學到的是「假設每一段是直線」的錯誤終點;Δt\Delta t 小(NN 大)→ bias 小,但訊號被淹沒。Song et al. 的解法是時間網格的 curriculum:訓練初期用小 NNN=2N=2 起),fθf_\theta 快速學到一個粗糙但方向正確的版本;然後逐步增加 NN(到 150 或更多),每次加細都在把上一階段的 bias 消掉,而因為 fθf_\theta 已經接近真值、相鄰兩點的輸出已經很接近,variance 造成的擾動相對可控。改進版本 [2] 把這條 curriculum 改成指數成長(NN 每隔固定步數翻倍,到 1280),這是下一篇的內容。

展開細節「CT 的目標其實是假設這一段是直線」——把 Q1 接回配對交叉

Q1 裡三個點的幾何值得再說一次。從 xtn+1x_{t_{n+1}} 往乾淨端走 Δt\Delta t:CT 走的是這一筆條件直線的方向 ϵ-\epsilon;Euler 走的是經過此點的所有條件直線方向的後驗平均 E[ϵxtn+1]-\mathbb E[\epsilon\mid x_{t_{n+1}}];真實軌跡走的是一段曲線。前兩者都是直線,差別在方向是「自己的」還是「平均的」——這正是 U2.3 Q1 的圖:條件直線交叉,邊際速度是交叉處的平均,邊際軌跡因此彎曲。CT 的 bias 有兩層:條件方向對平均方向的偏差(零均值、進 variance)、平均方向的直線對曲線的偏差(不是零均值、進 bias)。第二層就是 U3.2 的曲率積分在 CM 裡的樣子。

反過來想:如果配對是不交叉的(U3.3 reflow 之後、或 U3.4 的 OT 配對),條件直線幾乎就是邊際軌跡,CT 的目標就幾乎落在軌跡上,bias 幾乎為零、不需要小 Δt\Delta t。這解釋了為什麼「先拉直、再做 CT」在實務上是一個常見的組合。

CD 與 CT 各付什麼

兩邊的取捨可以並排看:一個要 teacher 但目標乾淨,一個不要 teacher 但目標帶噪。

CDCT
x^tn\hat x_{t_n}teacher 走一步 Euler同一組 (x0,ϵ)(x_0,\epsilon)tnt_n 重加噪
需要訓好的 teacher(每步多一次網路呼叫)只要資料
x^tn\hat x_{t_n} 的誤差teacher 誤差 ++ Euler 曲率誤差Euler 曲率誤差 ++ 條件目標的 variance(++ 非線性的 Jensen gap)
上限teacher資料分佈本身
NN 的敏感度較低(目標是確定的)高(bias–variance 取捨,需要 curriculum)

CD 是蒸餾,一步一步把 teacher 壓進 fθf_\theta,訓練較穩,但上限是 teacher。至於品質,早期的比較裡 CD 明顯較好,而下一篇的 iCT 會把這個差距抹掉。CT 是一個獨立的生成模型家族——從資料直接訓出一步生成器,不經過任何 diffusion 模型。這件事在 2023 年是新的:它說「一步生成」不必是 diffusion 的附屬品。代價是 variance、以及對時間網格與各種穩定技巧的依賴,下一篇處理。

先消化一下

想一想

CT 的目標 x0+tnϵx_0+t_n\epsilonxtn+1x_{t_{n+1}} 取條件期望,結果是:

想一想

和先前用過的 conditional trick 相比,CT 多了一個需要 Δt0\Delta t\to0 才消失的誤差。它來自:

想一想

CT 的時間網格 NN 為什麼要從小到大做 curriculum,而不是一開始就用很大的 NN

想一想

「CT 的目標其實是假設這一段是直線」這句話裡,「直線」指的是:

參考文獻

  1. Song, Y., Dhariwal, P., Chen, M., Sutskever, I. Consistency Models. ICML 2023.(CD 與 CT 的定義;定理:CD 損失為零則 fθf=O(Δt)\|f_\theta-f\|=O(\Delta t);CT 損失與 CD 損失只差 o(Δt)o(\Delta t)NN 的 curriculum。)
  2. Song, Y., Dhariwal, P. Improved Techniques for Training Consistency Models. ICLR 2024.(CT 的 bias–variance 分析與指數 curriculum。)
  3. Karras, T., Aittala, M., Aila, T., Laine, S. Elucidating the Design Space of Diffusion-Based Generative Models. NeurIPS 2022.(本單元 PF-ODE 與時間網格的來源。)