Flow map 與 consistency model:不靠老師,學會一步跳到終點
第 10 章的蒸餾需要先有一個訓練好的老師。這一章問:能不能從頭直接學 PF-ODE 的解映射(flow map)\(\bm\Psi_{s\to t}\),讓長長一條軌跡用一兩次網路計算就走完?這一頁先建立全章的共同語言:統一的 flow map 目標、它的兩種近似來源(蒸餾或從頭訓練),以及 CM、CTM、Mean Flow 三種參數化的概觀。接著細講最早的一員 consistency model:它只學「跳到 \(t=0\)」這個特例,靠 flow map 的半群性質把拿不到的目標換成「自己在下一格的輸出」,而下一格的狀態可以用老師的一步 DDIM(CD),也可以用不需要任何老師的一點估計(CT)。
讀完這頁你應該能夠
- 分辨瞬時的速度場 \(\mathbf v^*\) 和它的 ODE 解映射(flow map)\(\bm\Psi_{s\to t}\)。
- 說明精確 ODE 流的半群性質,以及它怎麼引出以「一致性」為基礎的訓練目標。
- 把 consistency model(CM)、consistency trajectory model(CTM)、Mean Flow(MF)看成學「特殊」或「一般」flow map 的代表做法。
- 分辨 oracle 的 flow map 恆等式和它的實際近似:CD 用老師的一步 DDIM,CT 用一點估計;說明兩者在什麼意義下只差 \(\mathcal O(\Delta s^2)\),以及為什麼有限的格點 \(N\) 仍然會留下偏差。
- 寫出 CM 的參數化(邊界條件 \(\mathbf f_{\bm\theta}(\mathbf x,0)=\mathbf x\))和一步、多步取樣的流程。
書在本章開頭的提示:這一章的核心物件是 ODE 的 flow map;各個方法應該看成同一個物件的不同參數化和訓練策略。
前置知識
- B28:flow map 學習的統一損失 \(\mathcal L_{\text{oracle}}\)、KD、PD 的「局部半群匹配」。本頁從這個損失出發。
- B25:DDIM 的一步更新;B09:flow map 的定義與 PF-ODE。
- B16:Tweedie 公式、四種預測與速度 \(\mathbf v^*=\mathbb E[\alpha'_t\mathbf x_0+\sigma'_t\bm\epsilon\mid\mathbf x_t]\)。
- B15:條件化技巧(§6.1)和 EDM 的參數化 \(c_{\text{skip}},c_{\text{out}},c_{\text{in}},c_{\text{noise}}\)(附錄 D.6)。
「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。
01本章的問題書 第 11 章開頭
第 10 章(B28)看到,慢的反覆取樣可以透過蒸餾壓縮成少步的生成器。從工程角度,兩階段的流程很實用:它把複雜的生成式訓練拆成兩個清楚、獨立的目標。第一階段學資料分佈,第二階段加速取樣或提升品質。這樣每個階段可以分開最佳化,整個系統更容易管理、更穩定可靠。
這一章則把焦點轉到推動深度生成模型進步的一個核心問題:
這一章追求的方向是:不依賴預訓練模型,直接訓練少步的、以 diffusion 為基礎的生成器。焦點是 flow map 模型。這裡的 flow map 指 ODE 的古典解映射,這個概念來自微分方程和動力系統,在連續介質力學與流體力學裡和「追蹤物質粒子的運動」密切相關。\(\bm\Psi_{s\to t}\) 把時間 \(s\) 的狀態送到在既定動態下時間 \(t\) 會到達的狀態。flow map 模型直接學這個映射,讓一條長軌跡可以用一次或少數幾次網路計算走完。
這種表述給了一個有原則的方式,把機率質量從先驗分佈 \(p_{\text{prior}}\) 運到資料分佈 \(p_{\text{data}}\),同時在每個中間時間保持正向 diffusion 過程規定的邊際分佈 \(p_t\)。
「flow map」這個詞的來歷(書 §4.2 的說明,B09)
書在第 4 章定義 flow map 時說明:這個詞在微分方程、動力系統和連續介質力學裡是古典的,指在給定動態下把狀態從時間 \(s\) 的位置帶到時間 \(t\) 的位置的映射。速度場 \(\mathbf v(\mathbf x,t)\) 描述瞬時的運動,flow map \(\bm\Psi_{s\to t}\) 記錄有限時間區間上累積的運動。這個物理概念更早:十八世紀的流體力學(Euler、Lagrange 的奠基工作)就已經用速度場、以及追蹤物質粒子的演化來研究運動。在光滑性假設下,\(\bm\Psi_{s\to t}\) 是光滑的雙射。
02Flow map 模型與統一目標書 §11.1
為什麼要學 flow map
第 10 章示範了怎麼用預訓練的 diffusion model 去估計 oracle flow map 損失裡拿不到的回歸目標,得到少步的生成器。這條路有效又實用:兩階段的流程可以做得很穩健,在資料和計算效率上也常常有競爭力。
這一章轉向更廣的挑戰:能不能建立一個獨立的生成原則,訓練穩定、可擴展、有效率,取樣快,生成又容易依使用者的意圖操控,而且不依賴預訓練模型?設計這種獨立原則,正是生成模型的核心課題。
diffusion model 提供一個有用的設計原則:先有一個連續時間的正向過程,把資料逐漸變成簡單的先驗(雜訊)當作參考,再把建模任務定成「學反向時間的運輸」,讓它還原這個過程、對上想要的邊際分佈。和一次到位的生成映射相比,這種隨時間演化的表述也讓我們更容易在中間步驟操控生成。落到受 diffusion 啟發的方法,問題變成:

統一的目標
這一章的方法都圍繞同一個目標展開。它也是蒸餾背後的目標,給出 flow map 表述的統一觀點(Boffi et al. 2024;Hu et al. 2025):
這就是 B28 第 3 節的那個損失。\(s,t\) 從某個時間分佈抽出(例如均勻分佈),\(w(s,t)\ge0\) 給時間對 \((s,t)\) 權重,\(d(\cdot,\cdot)\) 是差異度量,例如平方 \(\ell_2\) 範數。oracle flow map \(\bm\Psi_{s\to t}\) 是理想的變換,把時間 \(s\) 的狀態 \(\mathbf x_s\) 直接運到時間 \(t\):
$$\bm\Psi_{s\to t}(\mathbf x_s)=\mathbf x_s+\int_s^t\mathbf v^*(\mathbf x_u,u)\,du,$$其中 oracle 漂移是
$$\mathbf v^*(\mathbf x_u,u)=\mathbb E\big[\alpha'_u\mathbf x_0+\sigma'_u\bm\epsilon\,\big|\,\mathbf x_u\big].$$也可以用其他等價的參數化(第 6 章,B16),常見的有 \(\mathbf x\) 預測和 \(\mathbf v\) 預測。在 oracle 損失的最佳解,學到的模型精確還原真正的 flow map:
$$\mathbf G^*(\mathbf x_s,s,t)=\bm\Psi_{s\to t}(\mathbf x_s),\qquad\text{對所有 }s,t\text{ 和 }\mathbf x_s\sim p_s.$$為什麼 oracle 漂移是條件期望
這是 B12、B16 的結果,這裡快速回顧。條件路徑 \(\mathbf x_u=\alpha_u\mathbf x_0+\sigma_u\bm\epsilon\) 對時間的導數是 \(\alpha'_u\mathbf x_0+\sigma'_u\bm\epsilon\):給定 \((\mathbf x_0,\bm\epsilon)\),每個粒子的速度是已知的。但經過 \(\mathbf x_u\) 的粒子有很多(來自不同的 \((\mathbf x_0,\bm\epsilon)\)),能產生同樣邊際 \(p_u\) 的確定性速度場,是把這些條件速度在 \(\mathbf x_u\) 處取平均:\(\mathbf v^*(\mathbf x_u,u)=\mathbb E[\alpha'_u\mathbf x_0+\sigma'_u\bm\epsilon\mid\mathbf x_u]\)。它就是 PF-ODE 的速度場,只是用 \(\mathbf v\) 預測寫出來。
因為 \(\bm\Psi_{s\to t}\) 沒有閉式,必須近似。一個選擇是第 10 章的做法,靠預訓練的 diffusion model;另一個選擇是這一章會看到的:引入新的、更容易計算的替代目標。依訓練迴圈裡是否呼叫老師,現有方法大致分成兩類:
- 蒸餾(distillation):明確呼叫一個老師模型。
- 從頭訓練(training from scratch):不呼叫老師,自己構造自足的替代目標。
以這個有原則的目標為基礎,接下來介紹學 flow map 模型的系統化方法,目標是方法實用,同時生成結果更忠實地反映真正的資料分佈,計算上也有效率。下面先給這個範式的高層次介紹。
03特殊 flow map:consistency function書 §11.1
Consistency Model(CM,Song et al. 2023)是學 flow map 最早的先驅方法之一。它學一個少步的 denoiser \(\mathbf f_{\bm\theta}(\cdot,s)\),近似「流到原點」這個特例:
$$\bm\Psi_{s\to0}(\cdot),\qquad s\in(0,T].$$關鍵想法是:每個狀態 \(\mathbf x_s\) 都被送到經過它的那條 PF-ODE 軌跡在時間 0 的端點 \(\bm\Psi_{s\to0}(\mathbf x_s)\)。形式上,CM 家族(Song et al. 2023;Song & Dhariwal 的改進版;Geng et al. 2024;Lu & Song 2024)的 oracle 訓練目標是
實務上拿不到 oracle 的 \(\bm\Psi_{s\to0}(\mathbf x_s)\)。所以把它換成一個 stop-gradient 目標 \(\mathbf f_{\bm\theta^-}\),在同一條軌跡上稍早一步 \(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)\) 的地方取值:
$$\bm\Psi_{s\to0}(\mathbf x_s)\approx\mathbf f_{\bm\theta^-}\big(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s),\,s-\Delta s\big),\qquad\Delta s>0,$$而 \(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)\) 本身也要近似。有兩種實用策略:(i) 蒸餾,靠預訓練的 diffusion model;(ii) 從頭訓練,用不需要老師指導的一點估計。第 9、10 節詳述。
04一般 flow map:CTM 與 Mean Flow書 §11.1
學一般的 \(\bm\Psi_{s\to t}\)(任意起點和終點)有兩個代表方法:Consistency Trajectory Model(CTM)和 Mean Flow(MF)。這裡只給概觀,細節在 B30、B31。
Consistency Trajectory Model
CTM(Kim et al. 2023)是第一個學任意起點、終點的一般 flow map \(\bm\Psi_{s\to t}\) 的工作,可以看成統一目標的一個具體例子。它採用受 Euler 法啟發的參數化,把 oracle flow map 寫成
$$\bm\Psi_{s\to t}(\mathbf x_s):=\mathbf x_s+\int_s^t\mathbf v^*(\mathbf x_u,u)\,du=\frac ts\,\mathbf x_s+\frac{s-t}{s}\underbrace{\Big[\mathbf x_s+\frac{s}{s-t}\int_s^t\mathbf v^*(\mathbf x_u,u)\,du\Big]}_{\approx\ \mathbf g_{\bm\theta}},$$由此引出神經網路的參數化
$$\mathbf G_{\bm\theta}(\mathbf x_s,s,t):=\frac ts\,\mathbf x_s+\frac{s-t}{s}\,\mathbf g_{\bm\theta}(\mathbf x_s,s,t),$$\(\mathbf g_{\bm\theta}\) 是一個神經網路,訓練到 \(\bm\Psi_{s\to t}(\mathbf x_s)\approx\mathbf G_{\bm\theta}(\mathbf x_s,s,t)\)。
右邊的拆法為什麼成立
直接展開:\(\frac ts\mathbf x_s+\frac{s-t}{s}\mathbf x_s+\frac{s-t}{s}\cdot\frac{s}{s-t}\int_s^t\mathbf v^*\,du=\mathbf x_s+\int_s^t\mathbf v^*\,du\)。這是恆等式,沒有任何近似;參數化的用處是讓網路學的量 \(\mathbf g\) 有良好的尺度,而且 \(t=s\) 時 \(\mathbf G_{\bm\theta}(\mathbf x_s,s,s)=\mathbf x_s\) 自動成立。
(轉述者註:B30 會看到,CTM 原本沿用 EDM 的設定 \(\mathbf x_s=\mathbf x_0+s\bm\epsilon\)(\(\alpha=1,\sigma=s\)),也允許更一般的時程。在這個設定下,PF-ODE 的速度是 \((\mathbf x-\mathbb E[\mathbf x_0\mid\mathbf x_s])/s\),所以 \(\mathbf g\) 的 oracle 在 \(t\to s\) 時趨近 \(\mathbb E[\mathbf x_0\mid\mathbf x_s]\),也就是 denoiser;\(\mathbf G\) 對很小的 \(s-t\) 就是一步 Euler。)
因為 oracle 的 \(\bm\Psi_{s\to t}(\mathbf x_s)\) 拿不到,CTM 對一個在中間時間 \(u\) 取值的 stop-gradient 目標訓練:
$$\bm\Psi_{s\to t}(\mathbf x_s)\approx\mathbf G_{\bm\theta^-}\big(\bm\Psi_{s\to u}(\mathbf x_s),\,u,\,t\big),\qquad u\in[t,s],$$其中的中間狀態 \(\bm\Psi_{s\to u}(\mathbf x_s)\) 有兩種近似:(i) 蒸餾,對預訓練的老師用少步解法;(ii) 從頭訓練,直接用 \(\mathbf G_{\bm\theta}\) 的參數化構造一個「自己誘導的老師」。
Mean Flow
Mean Flow(Geng et al. 2025)建立在 flow matching 上,建模區間 \([t,s]\)(\(t\le s\))上的平均漂移:
$$\mathbf h_{\bm\theta}(\mathbf x_s,s,t)\approx\mathbf h^*(\mathbf x_s,s,t):=\frac{1}{t-s}\int_s^t\mathbf v^*(\mathbf x_u,u)\,du,$$這也和統一目標一致。對恆等式
$$(t-s)\,\mathbf h^*(\mathbf x_s,s,t)=\int_s^t\mathbf v^*(\mathbf x_u,u)\,du$$對 \(s\) 微分,得到一個自我參照的關係,引出 MF 的目標
$$\mathcal L_{\text{MF}}(\bm\theta):=\mathbb E_s\,\mathbb E_{\mathbf x_s\sim p_s}\Big[w(s)\,\big\|\mathbf h_{\bm\theta}(\mathbf x_s,s,t)-\mathbf h^{\text{tgt}}_{\bm\theta^-}(\mathbf x_s,s,t)\big\|_2^2\Big],$$其中 stop-gradient 目標是
$$\mathbf h^{\text{tgt}}_{\bm\theta^-}(\mathbf x_s,s,t):=\mathbf v^*(\mathbf x_s,s)-(s-t)\Big(\big(\partial_{\mathbf x}\mathbf h_{\bm\theta^-}\big)\mathbf v^*(\mathbf x_s,s)+\partial_s\mathbf h_{\bm\theta^-}\Big).$$對 \(s\) 微分的細節
固定終點 \(t\),讓起點 \(s\) 沿同一條 PF-ODE 軌跡移動,也就是 \(\mathbf x_s\) 跟著 \(d\mathbf x_s/ds=\mathbf v^*(\mathbf x_s,s)\) 走。
右邊。軌跡不變,只有積分下限在動,所以 \(\frac{d}{ds}\int_s^t\mathbf v^*(\mathbf x_u,u)\,du=-\mathbf v^*(\mathbf x_s,s)\)。
左邊。乘積法則加上連鎖律(\(\mathbf h^*\) 同時經由 \(\mathbf x_s\) 和 \(s\) 依賴 \(s\)):
$$\frac{d}{ds}\Big[(t-s)\mathbf h^*\Big]=-\mathbf h^*+(t-s)\Big[\big(\partial_{\mathbf x}\mathbf h^*\big)\mathbf v^*(\mathbf x_s,s)+\partial_s\mathbf h^*\Big].$$兩邊相等,移項:
$$\mathbf h^*(\mathbf x_s,s,t)=\mathbf v^*(\mathbf x_s,s)-(s-t)\Big[\big(\partial_{\mathbf x}\mathbf h^*\big)\mathbf v^*(\mathbf x_s,s)+\partial_s\mathbf h^*\Big].$$這是 \(\mathbf h^*\) 必須滿足的自我參照方程。把右邊的 \(\mathbf h^*\) 換成 stop-gradient 的網路 \(\mathbf h_{\bm\theta^-}\),就是 MF 的目標 \(\mathbf h^{\text{tgt}}\)。\((\partial_{\mathbf x}\mathbf h)\mathbf v^*+\partial_s\mathbf h\) 是一個 Jacobian–向量乘積,實作上用前向模式自動微分一次算完(B31)。
實務上 oracle 速度 \(\mathbf v^*(\mathbf x_s,s)\) 也要近似。兩種常見策略:(i) 蒸餾,用一個以 flow matching 訓練的預訓練 diffusion model;(ii) 從頭訓練,用由正向加噪 \(\mathbf x_s=\alpha_s\mathbf x_0+\sigma_s\bm\epsilon\) 得到的一點條件速度 \(\alpha'_s\mathbf x_0+\sigma'_s\bm\epsilon\)。
CTM 和 MF 的關係
CTM 和 MF 近似同一個路徑積分,只是參數化成不同的替代量:
$$\begin{aligned}\bm\Psi_{s\to t}(\mathbf x_s)&:=\mathbf x_s+\int_s^t\mathbf v^*(\mathbf x_u,u)\,du\\&=\frac ts\,\mathbf x_s+\frac{s-t}{s}\underbrace{\Big[\mathbf x_s+\frac{s}{s-t}\int_s^t\mathbf v^*(\mathbf x_u,u)\,du\Big]}_{\approx\ \mathbf g_{\bm\theta}}\\&=\mathbf x_s+(t-s)\underbrace{\Big[\frac{1}{t-s}\int_s^t\mathbf v^*(\mathbf x_u,u)\,du\Big]}_{\approx\ \mathbf h_{\bm\theta}}.\end{aligned}$$換句話說,CTM 透過 \(\mathbf g_{\bm\theta}\) 學一個「斜率位移」(slope displacement),MF 學平均漂移 \(\mathbf h_{\bm\theta}\);兩者都是近似定義 \(\bm\Psi_{s\to t}\) 的同一個積分的一致方式。
轉述者註:比較兩行可得 \(\mathbf g=\mathbf x_s-s\,\mathbf h\),所以兩種參數化之間只差一個已知的仿射變換。書在 §11.5.3(B31)把這件事推到損失層級。
05本章路線與時間軸書 §11.1
接下來先講 CM 家族,它專注在特殊的 flow map \(\bm\Psi_{s\to0}\):包括離散時間的起源(§11.2,本頁)和連續時間的延伸(§11.3,B30)。之後轉到一般的 flow map,詳細討論兩個代表:CTM(§11.4,B30)和 MF(§11.5,B31),包括它們的參數化、訓練策略和實際近似。
書也提醒:附錄 D.6 介紹的 EDM(Elucidating Diffusion Model,B15)為 \(\mathbf x\) 預測模型的網路參數化提供系統化的設計準則,實證表現很強。雖然那一節可以當選讀,EDM 的表述是 CM 類模型的重要基礎(第 12 節會用到)。
為了敘述清楚,書不嚴格照方法出現的時間順序,而是依概念關係組織。為了尊重原創與時間順序,書附了下面的時間軸。
06半群性質書 §11.2

Consistency model(§11.2–11.3)和它的推廣 CTM(§11.4),都利用 flow map 的一個關鍵數學結構來定義回歸目標,也就是基本的半群性質:
直觀地說:先把狀態從 \(s\) 演化到 \(u\)(經由 \(\bm\Psi_{s\to u}\)),再從 \(u\) 演化到 \(t\)(經由 \(\bm\Psi_{u\to t}\)),會到達和直接從 \(s\) 演化到 \(t\) 完全相同的點。這只是解 ODE 的基本原則:起點一旦指定,未來的演化就完全確定,沿著唯一一條明確的路徑。不管一大步走完,還是切成很多小段走,都沿著同一條軌跡、到達同一個終點。
為什麼唯一性推出半群性質(書的註腳指向附錄 A)
書的註腳說:半群性質來自 ODE 初值問題的唯一性定理(附錄 A,B33)。展開如下。設 \(\mathbf x(\tau)\) 是從 \(\mathbf x(s)=\mathbf x_s\) 出發的解,令 \(\mathbf y:=\bm\Psi_{s\to u}(\mathbf x_s)=\mathbf x(u)\)。
- \(\bm\Psi_{u\to t}(\mathbf y)\) 是從 \(\mathbf y\) 在時間 \(u\) 出發的解在 \(t\) 的值。
- 原本的 \(\mathbf x(\tau)\) 在時間 \(u\) 也正好等於 \(\mathbf y\),所以它也是「時間 \(u\)、初值 \(\mathbf y\)」這個初值問題的解。
- 唯一性說這個初值問題只有一個解,所以兩者在 \(t\) 的值相同:\(\bm\Psi_{u\to t}(\mathbf y)=\mathbf x(t)=\bm\Psi_{s\to t}(\mathbf x_s)\)。
\(\bm\Psi_{s\to s}=\mathbf I\) 則是定義本身(積分區間長度為 0)。注意 \(u\) 不必在 \(s\) 和 \(t\) 之間;確定性的 ODE 可以往兩個方向積分,所以 \(\bm\Psi_{0\to s}\) 和 \(\bm\Psi_{s\to0}\) 互為反函數。
為了建立更多直覺,考慮 PF-ODE
$$\frac{d\mathbf x(\tau)}{d\tau}=\mathbf v^*(\mathbf x(\tau),\tau)$$的一條解軌跡 \(\{\mathbf x(s)\}_{s\in[0,T]}\),初始條件 \(\mathbf x(T)\) 固定在時間 \(T\),倒著解回來。把終點時間固定在 \(t=0\),對應的 flow map 可以寫得更簡單:
這叫做 consistency function。
07Consistency function 的三個性質書 §11.2
依定義,\(\mathbf f^*\) 直接從半群恆等式(取 \(t=0\))繼承幾個基本性質:
(i) 全域一致性(global consistency)。軌跡上每一點都送到同一個乾淨端點:
$$\mathbf f^*(\mathbf x(s),s)=\mathbf x(0),\qquad\text{對所有 }s\in[0,T].$$理由是
$$\mathbf f^*(\mathbf x(s),s)=\bm\Psi_{s\to0}\big(\bm\Psi_{0\to s}(\mathbf x(0))\big)=\big(\bm\Psi_{s\to0}\circ\bm\Psi_{0\to s}\big)(\mathbf x(0))=\bm\Psi_{0\to0}(\mathbf x(0))=\mathbf x(0).$$(ii) 自我一致性(self consistency)。同一條軌跡上任兩點的輸出必須相同:
這直接是半群恆等式的另一種讀法:\(\bm\Psi_{s\to0}\circ\bm\Psi_{0\to s}=\bm\Psi_{u\to0}\circ\bm\Psi_{0\to u}\)(兩邊都等於 \(\bm\Psi_{0\to0}=\mathbf I\))。
(iii) 局部一致性(local consistency)。沿著軌跡取值時,consistency function 對 \(s\) 不變:
$$\frac{d}{ds}\,\mathbf f^*(\mathbf x(s),s)=\mathbf 0,\qquad\mathbf f^*(\mathbf x(0),0)=\mathbf x(0).$$這由全域一致性推出:\(\mathbf f^*(\mathbf x(s),s)\) 沿軌跡不隨 \(s\) 改變。
三個性質彼此等價。它們說的都是:沿任何一條解軌跡 \(s\mapsto\mathbf x(s)\),流到原點的映射 \(\mathbf f^*(\mathbf x(s),s)=\bm\Psi_{s\to0}(\mathbf x(s))\) 都給出同一個終點 \(\mathbf x(0)\),和出發時間無關。
三者等價的證明
- (i)⇒(ii):兩邊都等於 \(\mathbf x(0)\)。
- (ii)⇒(i):在 (ii) 取 \(u=0\),再用 \(\mathbf f^*(\cdot,0)=\bm\Psi_{0\to0}=\mathbf I\)。
- (ii)⇒(iii):\(s\mapsto\mathbf f^*(\mathbf x(s),s)\) 是常數函數,導數為 0;邊界條件同上。
- (iii)⇒(i):導數為 0 的函數在區間上是常數,常數由 \(s=0\) 的邊界條件決定,就是 \(\mathbf x(0)\)。
第 9–10 節的離散時間 CM 用的是 (ii):在相鄰兩點 \(s\) 和 \(s-\Delta s\) 強制輸出相同。B30 的連續時間 CM 用的是 (iii)。
SDE 版本的 consistency function:martingale(書的註腳,加上轉述者說明)
書的註腳:ODE 的 consistency function 這個概念,可以推廣到 SDE 的一個函數 \(\mathbf f(\mathbf x,t)\),使 \(\mathbf f(\mathbf x_t,t)\) 對 SDE 的自然 filtration 是一個(局部)martingale,也就是
$$\mathbb E[\mathbf f(\mathbf x_t,t)\mid\mathbf x_s]=\mathbf f(\mathbf x_s,s),\qquad\text{對所有 }t\ge s.$$這個推廣由 Daras et al. (2023)、Lai et al. (2023) 提出或觀察到,兩者的理論關聯整理在 Lai et al. (2023) 的另一篇工作裡。
轉述者說明:ODE 沒有隨機性,「未來的期望值等於現在的值」就退化成「沿軌跡永遠不變」,也就是性質 (ii)。SDE 的軌跡會分岔,單一函數值不可能沿每條路徑都不變,能要求的只是平均上不變。這個觀點在 Demo B 會再出現:CT 在有限格點下的理想解,正好滿足對一條「共用雜訊」馬可夫鏈的 martingale 條件。
Demo A半群、DDIM 目標與一點估計轉述者補充
一維、EDM 的設定 \(x_s=x_0+s\epsilon\)(\(\alpha_s=1,\sigma_s=s\)),\(s\) 從 0.002 到 10。資料是兩個高斯的混合(權重 0.6 / 0.4,中心 −1.2 / 1.3,標準差 0.25 / 0.35),所以後驗、score、PF-ODE 都可以精確計算。橫軸是 \(s\) 的對數刻度,左邊是資料;縱軸是 \(x/\sqrt{1+s^2}\),把隨 \(s\) 變大的雜訊尺度除掉,所有時間都看得清楚(讀數用原本的 \(x\))。黑線是一條精確的 PF-ODE 軌跡,用它在 \(s=0.002\) 的端點 \(x(0)\) 來選;灰線是其他幾條軌跡,可以看到它們互不相交。
在 \(x(s)\)(黑點)往左走一小步到 \(s'=s-\Delta s\)(虛線)。比較三個目標:精確的 \(\bm\Psi_{s\to s'}(x_s)\)(藍點)、一步 DDIM(橙點,CD 用精確老師時的目標)、以及 CT 的一點估計 \(x_0+s'\epsilon\)(綠點雲:\(x_0\) 從後驗 \(p(x_0\mid x_s)\) 抽,\(\epsilon=(x_s-x_0)/s\))。左邊界的強調色點是從 \(x(s)\) 用 PF-ODE 走回去得到的 \(f^*(x(s),s)\)。
讀數(瀏覽器實測,和 Node 原型逐位相同):
- 全域一致性。拖動 \(s\):黑點沿軌跡移動,但從它走回 \(s=0.002\) 得到的 \(f^*(x(s),s)\) 始終等於選定的端點(預設 1.0000,到小數第 4 位)。這就是性質 (i)、(ii)。
- DDIM 目標就是一點估計的平均。預設(端點 1、\(s=1\)、\(\Delta s/s=0.3\)):一點估計 20,000 次抽樣的平均是 0.5852,一步 DDIM 是 0.5869,差 \(1.7\times10^{-3}\),在抽樣誤差之內(標準差 0.329,除以 \(\sqrt{20000}\) 約 0.0023)。這是第 11 節定理證明的第一步。
- 兩種誤差的階數不同。同一點把 \(\Delta s/s\) 從 0.3 降到 0.05(6 倍):DDIM 和精確 flow map 的差從 0.069 降到 0.0014(約 49 倍,比 \(6^2=36\) 還多一些),一點估計的標準差從 0.329 降到 0.055(正好 6 倍)。下圖的兩條線斜率約為 2 和 1。CD 的目標每一步有 \(\mathcal O(\Delta s^2)\) 的偏差,CT 的目標每一步有 \(\mathcal O(\Delta s)\) 的雜訊但平均起來沒有偏差(相對於 DDIM)。
一點估計的標準差有閉式:\(x_{s'}=\tfrac{s'}{s}x_s+\big(1-\tfrac{s'}{s}\big)x_0\),所以 \(\operatorname{Std}(x_{s'}\mid x_s)=\tfrac{\Delta s}{s}\operatorname{Std}(x_0\mid x_s)\)。讀數同時列出抽樣值和公式值。
08CM 的目標與四種訓練目標書 §11.2
CM 要訓練一個神經網路 \(\mathbf f_{\bm\theta}:\mathbb R^D\times[0,T]\to\mathbb R^D\),近似特殊的 flow map \(\bm\Psi_{s\to0}\),也就是 consistency function。關鍵想法是沿 PF-ODE 軌跡強制一致性:在同一條 ODE 軌跡上的狀態,應該送到同一個時間 0 的端點。更精確地說,這對應到半群恆等式裡 \(t=0\)、\(u=s-\Delta s\) 的特例。
實現這個目標的方法不只一種,取決於有沒有預訓練的 diffusion model,以及訓練是在離散時間還是連續時間進行。書用下表總結各種變體:
| 蒸餾(有老師) | 從頭訓練 | |
|---|---|---|
| 離散時間 | \(\mathcal L^N_{\text{CD}}\)(第 9 節) | \(\mathcal L^N_{\text{CT}}\)(第 10 節) |
| 連續時間 | 連續時間 CD(B30) | 連續時間 CT(B30) |
書也用一張圖(在 §11.3)並排示意這幾種目標,那張圖放在 B30。
09Consistency Distillation書 §11.2.1
用半群性質換掉拿不到的目標
原則上,consistency function 可以用最小化 oracle 損失來學:
$$\mathcal L_{\text{oracle-CM}}(\bm\theta):=\mathbb E_s\,\mathbb E_{\mathbf x_s\sim p_s}\Big[w(s)\,d\big(\mathbf f_{\bm\theta}(\mathbf x_s,s),\,\bm\Psi_{s\to0}(\mathbf x_s)\big)\Big].$$這個目標要求每個帶雜訊的樣本 \(\mathbf x_s\) 都被送回它的乾淨端點 \(\bm\Psi_{s\to0}(\mathbf x_s)\)。困難是實務上拿不到 oracle 映射 \(\bm\Psi_{s\to0}(\mathbf x_s)\)。為了克服這點,Song et al. (2023) 利用半群性質:同一條 PF-ODE 軌跡上的一個帶雜訊狀態和它的下一步,必須送到同一個乾淨端點。具體地,oracle 目標被換成一個在軌跡上稍早一點取值的 stop-gradient 目標:
$$\begin{aligned}\bm\Psi_{s\to0}(\mathbf x_s)&=\bm\Psi_{s-\Delta s\to0}\big(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)\big)\\&\approx\mathbf f_{\bm\theta^-}\big(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s),\,s-\Delta s\big),\qquad\Delta s>0,\end{aligned}$$\(\bm\theta^-\) 是 stop-gradient 運算下的參數。另一個困難是中間狀態 \(\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)\) 也沒有閉式,必須近似。有兩種實用的做法。
有預訓練 diffusion model:Consistency Distillation(CD)
假設有預訓練的 diffusion model。CD 用老師只模擬一步反向 ODE,近似中間狀態:
$$\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)\approx\mathtt{Solver}_{s\to s-\Delta s}(\mathbf x_s).$$更具體地,預訓練的 diffusion model 提供 score 的估計 \(\mathbf s_{\bm\phi^\times}(\mathbf x_s,s)\approx\nabla_{\mathbf x_s}\log p_s(\mathbf x_s)\)。用它從 \(\mathbf x_s\) 走一步 DDIM,得到 \(s'=s-\Delta s\) 的近似狀態:
$$\begin{aligned}\bm\Psi_{s\to s-\Delta s}(\mathbf x_s)&\approx\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\sigma_s^2\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)\nabla_{\mathbf x_s}\log p_s(\mathbf x_s)\\&\approx\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\sigma_s^2\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)\mathbf s_{\bm\phi^\times}(\mathbf x_s,s)=:\tilde{\mathbf x}^{\bm\phi^\times}_{s'}.\end{aligned}$$這就是 B25 的 DDIM 更新,寫成 score 的形式
DDIM 的一步是 \(\mathbf x_{s'}=\alpha_{s'}\hat{\mathbf x}_0+\sigma_{s'}\hat{\bm\epsilon}\),其中由 Tweedie 公式
$$\hat{\mathbf x}_0=\frac{\mathbf x_s+\sigma_s^2\nabla\log p_s(\mathbf x_s)}{\alpha_s},\qquad\hat{\bm\epsilon}=\frac{\mathbf x_s-\alpha_s\hat{\mathbf x}_0}{\sigma_s}=-\sigma_s\nabla\log p_s(\mathbf x_s).$$代入:
$$\mathbf x_{s'}=\frac{\alpha_{s'}}{\alpha_s}\big(\mathbf x_s+\sigma_s^2\nabla\log p_s\big)-\sigma_{s'}\sigma_s\nabla\log p_s=\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\sigma_s^2\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)\nabla\log p_s.$$在 EDM 的設定 \(\alpha=1,\sigma_s=s\),這變成 \(\mathbf x_{s'}=\mathbf x_s-(s'-s)\,s\,\nabla\log p_s(\mathbf x_s)\),正好是 PF-ODE \(d\mathbf x/ds=-s\nabla\log p_s\) 的一步 Euler。CM 原論文的 CD 就是用 Euler(以及 Heun)解法寫的。
把這個構造和 stop-gradient 目標結合,得到 oracle 損失 \(\mathcal L_{\text{oracle-CM}}\) 一個實用的離散時間替代。形式上,取分割 \(0=s_1\lt s_2\lt\cdots\lt s_N=T\),CD 的訓練目標是
\(\omega(\cdot)\) 是隨時間變化的權重,\(d(\cdot,\cdot)\) 是距離度量,\(\bm\theta^-\) 是 stop-gradient 的參數,它防止塌縮成平凡解(例如常數預測)。這裡 \(\mathbf x_{s_{i+1}}=\alpha_{s_{i+1}}\mathbf x_0+\sigma_{s_{i+1}}\bm\epsilon\) 是從資料加噪得到的,\(\tilde{\mathbf x}^{\bm\phi^\times}_{s_i}\) 是老師從它走一步 DDIM 到 \(s_i\) 的結果。
平凡解、stop-gradient 和邊界條件
自我一致性 (ii) 單獨看,任何常數函數 \(\mathbf f(\mathbf x,s)\equiv\mathbf c\) 都滿足:所有輸出都一樣,損失為 0。真正排除這種解的,是邊界條件 \(\mathbf f_{\bm\theta}(\mathbf x,0)=\mathbf x\):第 12 節的參數化把它寫死在網路結構裡,最靠近資料的那一格的目標就是 \(\mathbf x\) 本身,正確的資訊從 \(s=0\) 一格一格往雜訊方向傳上去。
stop-gradient 的作用在於讓這種傳遞有方向:目標側 \(\mathbf f_{\bm\theta^-}\) 被當成常數,梯度只推動 \(s_{i+1}\) 那一側去對齊 \(s_i\) 那一側,而不是兩邊互相遷就。CM 論文報告:和直接令 \(\bm\theta^-=\bm\theta\)(兩邊都求梯度)相比,用 EMA 更新 \(\bm\theta^-\leftarrow\operatorname{stopgrad}(\mu\bm\theta^-+(1-\mu)\bm\theta)\) 再加上 stop-gradient,能大幅穩定訓練並改善最終表現(Song et al. 2023 §4)。他們沿用強化學習的說法,把 \(\mathbf f_{\bm\theta^-}\) 叫 target network、\(\mathbf f_{\bm\theta}\) 叫 online network。
10Consistency Training書 §11.2.1
沒有老師時:一點估計的 score
沒有預訓練的 diffusion model 時,oracle score \(\nabla_{\mathbf x}\log p_s(\mathbf x_s)\) 仍然可以用一個簡單的一點近似直接估計(代價是變異數高)。回想它有條件期望的形式:
$$\nabla_{\mathbf x_s}\log p_s(\mathbf x_s)=\mathbb E_{\mathbf x_0\sim p(\mathbf x_0\mid\mathbf x_s)}\big[\nabla_{\mathbf x_s}\log p(\mathbf x_s\mid\mathbf x_0)\big]=\mathbb E_{\mathbf x_0\sim p(\mathbf x_0\mid\mathbf x_s)}\Big[-\frac{\mathbf x_s-\alpha_s\mathbf x_0}{\sigma_s^2}\Big].$$這個恆等式提示一個簡單的單樣本估計量。如果 \(\mathbf x_s\) 是由一對樣本 \((\mathbf x_0,\bm\epsilon)\) 經 \(\mathbf x_s=\alpha_s\mathbf x_0+\sigma_s\bm\epsilon\) 得到的,那麼
$$\widehat{\nabla_{\mathbf x}\log p_s}(\mathbf x_s):=-\frac{\bm\epsilon}{\sigma_s}=-\frac{\mathbf x_s-\alpha_s\mathbf x_0}{\sigma_s^2}$$是 \(\mathbf x_s\) 處 score 的無偏估計(對 \(p(\mathbf x_0\mid\mathbf x_s)\) 條件無偏)。它正是 denoising score matching 當回歸目標的條件 score(B06)。
一點估計代進 DDIM:正好回到同一對 \((\mathbf x_0,\bm\epsilon)\)
把這個估計代進從 \(s\) 到 \(s'=s-\Delta s\) 的一步 DDIM:
$$\begin{aligned}\bm\Psi_{s\to s'}(\mathbf x_s)&\approx\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\sigma_s^2\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)\nabla_{\mathbf x_s}\log p_s(\mathbf x_s)&&\text{(DDIM)}\\&\approx\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\sigma_s^2\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)\widehat{\nabla_{\mathbf x_s}\log p_s}(\mathbf x_s)&&\text{(一點 score)}\\&=\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s-\Big(\frac{\alpha_{s'}}{\alpha_s}-\frac{\sigma_{s'}}{\sigma_s}\Big)(\mathbf x_s-\alpha_s\mathbf x_0)\\&=\alpha_{s'}\mathbf x_0+\sigma_{s'}\bm\epsilon,\end{aligned}$$其中 \(\mathbf x_0\) 是同一個資料樣本,\(\bm\epsilon\) 是用來構造 \(\mathbf x_s\) 的同一個高斯雜訊。
最後一個等號(書的註腳說「初等代數」)
展開第三行:\(\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s-\frac{\alpha_{s'}}{\alpha_s}\mathbf x_s+\alpha_{s'}\mathbf x_0+\frac{\sigma_{s'}}{\sigma_s}(\mathbf x_s-\alpha_s\mathbf x_0)\)。前兩項抵消;最後一項用 \(\mathbf x_s-\alpha_s\mathbf x_0=\sigma_s\bm\epsilon\) 得到 \(\sigma_{s'}\bm\epsilon\)。所以結果是 \(\alpha_{s'}\mathbf x_0+\sigma_{s'}\bm\epsilon\):用同一對 \((\mathbf x_0,\bm\epsilon)\) 直接加噪到 \(s'\)。不需要任何網路。
這給出 oracle 目標 \(\mathcal L_{\text{oracle-CM}}\) 一個不需要老師的離散時間替代:
其中 \(\mathbf x_{s_i}=\alpha_{s_i}\mathbf x_0+\sigma_{s_i}\bm\epsilon\)、\(\mathbf x_{s_{i+1}}=\alpha_{s_{i+1}}\mathbf x_0+\sigma_{s_{i+1}}\bm\epsilon\),共用同一對 \((\mathbf x_0,\bm\epsilon)\)。
變異數,以及為什麼仍然說得通
直接用 \(\alpha_{s'}\mathbf x_0+\sigma_{s'}\bm\epsilon\) 近似 \(\bm\Psi_{s\to s'}(\mathbf x_s)\)、不取期望,會引入高變異數。書的註腳說明:一點(條件)score 估計 \(\widehat{\nabla_{\mathbf x}\log p_s}(\mathbf x_s)\) 可以看成單樣本的 Monte Carlo 估計量,給定 \(\mathbf x_s\) 時條件無偏:把它對(一般拿不到的)乾淨後驗 \(p(\cdot\mid\mathbf x_s)\) 取平均,就還原真正的 score,
$$\nabla_{\mathbf x_s}\log p_s(\mathbf x_s)=\mathbb E_{\mathbf x_0\sim p(\cdot\mid\mathbf x_s)}\Big[\widehat{\nabla_{\mathbf x}\log p_s}(\mathbf x_s)\Big].$$回想 denoising score matching 裡類似的條件期望論證(§6.1 的條件化技巧,B15)。但這裡有一個差別:一點的狀態估計在進入非線性的目標網路和差異度量之前是無偏的,所以兩個損失不必完全相等。給定 \(\mathbf x_s\) 取條件,一階誤差在期望中抵消;在適當的光滑性和動差假設下,剩下的差距是 \(\mathcal O(\Delta s^2)\),下一節把它寫成定理。
11CD 與 CT 差 O(Δs²)書 §11.2.1、附錄 D.5.2
證明概要(書的正文)。首先,用 oracle score 的 DDIM 更新等於條件平均:\(\mathbf x^{\text{DDIM}}_{s'}=\mathbb E[\mathbf x_{s'}\mid\mathbf x_s]\),這也可以從第 10 節的推導對 \(p(\cdot\mid\mathbf x_s)\) 取期望看出。接著,把 \(d(\mathbf f_{\bm\theta}(\mathbf x_s,s),\mathbf f_{\bm\theta^-}(\cdot,s'))\) 在 \(\mathbf x^{\text{DDIM}}_{s'}\) 附近做 Taylor 展開。一點更新沿路徑(同一對 \((\mathbf x_0,\bm\epsilon)\))還原 \(\mathbf x_{s'}\);因為 \(\mathbb E[\mathbf x_{s'}-\mathbf x^{\text{DDIM}}_{s'}\mid\mathbf x_s]=\mathbf 0\),給定 \(\mathbf x_s\) 後線性項消失。在上述光滑性與動差假設下,剩下的期望 Taylor 餘項是 \(\mathcal O(\Delta s^2)\)。
完整證明(書 附錄 D.5.2,逐步展開)
第 1 步:用 oracle score 的 DDIM 更新就是條件平均。記 \(\hat{\mathbf x}_{s'}:=\mathbf x^{\text{DDIM}}_{s'}\)。
$$\begin{aligned}\hat{\mathbf x}_{s'}&=\frac{\alpha_{s'}}{\alpha_s}\big(\mathbf x_s+\sigma_s^2\nabla\log p_s(\mathbf x_s)\big)-\sigma_{s'}\sigma_s\nabla\log p_s(\mathbf x_s)\\&=\alpha_{s'}\,\mathbb E[\mathbf x_0\mid\mathbf x_s]+\sigma_{s'}\Big(\frac{\mathbf x_s-\alpha_s\mathbb E[\mathbf x_0\mid\mathbf x_s]}{\sigma_s}\Big)\\&=\alpha_{s'}\,\mathbb E[\mathbf x_0\mid\mathbf x_s]+\sigma_{s'}\,\mathbb E[\bm\epsilon\mid\mathbf x_s]\\&=\mathbb E[\alpha_{s'}\mathbf x_0+\sigma_{s'}\bm\epsilon\mid\mathbf x_s]=\mathbb E[\mathbf x_{s'}\mid\mathbf x_s].\end{aligned}$$第二個等號用 Tweedie 公式 \(\mathbb E[\mathbf x_0\mid\mathbf x_s]=(\mathbf x_s+\sigma_s^2\nabla\log p_s(\mathbf x_s))/\alpha_s\):第一項直接代入;第二項把 \(-\sigma_s\nabla\log p_s\) 寫成 \((\mathbf x_s-\alpha_s\mathbb E[\mathbf x_0\mid\mathbf x_s])/\sigma_s\)。第三個等號用 \(\bm\epsilon=(\mathbf x_s-\alpha_s\mathbf x_0)/\sigma_s\) 取條件期望。最後用共用雜訊的耦合 \(\mathbf x_{s'}=\alpha_{s'}\mathbf x_0+\sigma_{s'}\bm\epsilon\)。更精確地說應該寫成 \(\mathbb E[\mathbf x_{s'}\mid\mathbf x_s,s]\),因為 \(s\) 一抽定,\(s'=s-\Delta s\) 就確定了。
第 2 步:把 CT 在 \(\hat{\mathbf x}_{s'}\) 附近展開。先抽 \(s\),再確定地令 \(s'=s-\Delta s\)。令 \(h(\mathbf x'):=d\big(\mathbf f_{\bm\theta}(\mathbf x_s,s),\mathbf f_{\bm\theta^-}(\mathbf x',s')\big)\),對它的第二個引數在 \(\hat{\mathbf x}_{s'}\) 做二階 Taylor 展開:
$$h(\mathbf x_{s'})=h(\hat{\mathbf x}_{s'})+\partial_2d\,\big[\partial_1\mathbf f_{\bm\theta^-}(\hat{\mathbf x}_{s'},s')\,(\mathbf x_{s'}-\hat{\mathbf x}_{s'})\big]+\mathcal O\big(\|\mathbf x_{s'}-\hat{\mathbf x}_{s'}\|^2\big),$$\(\partial_2d\) 是 \(d\) 對第二個引數的導數,在 \(\big(\mathbf f_{\bm\theta}(\mathbf x_s,s),\mathbf f_{\bm\theta^-}(\hat{\mathbf x}_{s'},s')\big)\) 取值;\(\partial_1\mathbf f_{\bm\theta^-}\) 是目標網路對狀態的 Jacobian。把 \(\mathcal L_{\text{CT}}=\mathbb E_{s,\mathbf x_s}\mathbb E_{\mathbf x_{s'}\mid\mathbf x_s}[w(s)\,h(\mathbf x_{s'})]\) 拆成三項:
- 零階項不含 \(\mathbf x_{s'}\),由 tower 性質(全期望律)\(\mathbb E_{s,\mathbf x_s}\mathbb E_{\mathbf x_{s'}\mid\mathbf x_s,s}[\cdot]=\mathbb E_{s,\mathbf x_s}[\cdot]\),它正好是 \(\mathcal L_{\text{CM}}\)。
- 一階項:在 \(\mathbb E_{\mathbf x_{s'}\mid\mathbf x_s,s}\) 裡,\(w(s)\)、\(\mathbf f_{\bm\theta}(\mathbf x_s,s)\)、\(\hat{\mathbf x}_{s'}\)、\(s'\) 都不依賴隨機變數 \(\mathbf x_{s'}\)(\((s,\mathbf x_s)\) 固定後它們就固定了),唯一的依賴是 \((\mathbf x_{s'}-\hat{\mathbf x}_{s'})\)。內層期望變成 \(\mathbb E[\mathbf x_{s'}-\hat{\mathbf x}_{s'}\mid\mathbf x_s,s]=\mathbf 0\)(第 1 步),所以整項為 0。
- 餘項:\(\mathcal O\big(\mathbb E\|\mathbf x_{s'}-\hat{\mathbf x}_{s'}\|^2\big)\)。
因此 \(\mathcal L_{\text{CT}}=\mathcal L_{\text{CM}}+\mathcal O\big(\mathbb E\|\mathbf x_{s'}-\hat{\mathbf x}_{s'}\|^2\big)\)。
第 3 步:餘項的階數。
$$\mathbb E\|\mathbf x_{s'}-\hat{\mathbf x}_{s'}\|^2=\mathbb E\,\operatorname{Var}(\mathbf x_{s'}\mid\mathbf x_s,s)\le\mathbb E\|\mathbf x_{s'}-\mathbf x_s\|^2.$$(條件變異數是條件下最小的均方誤差,任何只依賴 \(\mathbf x_s\) 的預測,例如 \(\mathbf x_s\) 本身,誤差都不會更小。)而
$$\mathbf x_{s'}-\mathbf x_s=(\alpha_{s'}-\alpha_s)\mathbf x_0+(\sigma_{s'}-\sigma_s)\bm\epsilon,$$對光滑的時程,\(\alpha_{s'}-\alpha_s=\mathcal O(\Delta s)\)、\(\sigma_{s'}-\sigma_s=\mathcal O(\Delta s)\),所以 \(\mathbb E\|\mathbf x_{s'}-\mathbf x_s\|^2=\mathcal O(\Delta s^2)\),於是 \(\mathbb E\|\mathbf x_{s'}-\hat{\mathbf x}_{s'}\|^2=\mathcal O(\Delta s^2)\)。證畢。
這個 O(Δs²) 該怎麼讀:平方 ℓ₂ 時的精確拆解
取 \(d(\mathbf a,\mathbf b)=\|\mathbf a-\mathbf b\|^2\),固定 \((s,\mathbf x_s)\),記 \(\mathbf a=\mathbf f_{\bm\theta}(\mathbf x_s,s)\)、\(\mathbf B=\mathbf f_{\bm\theta^-}(\mathbf x_{s'},s')\)(隨機,因為 \(\mathbf x_{s'}\) 隨機)。偏差–變異數分解是一個精確的恆等式:
$$\mathbb E\big[\|\mathbf a-\mathbf B\|^2\mid\mathbf x_s\big]=\big\|\mathbf a-\mathbb E[\mathbf B\mid\mathbf x_s]\big\|^2+\mathbb E\big[\|\mathbf B-\mathbb E[\mathbf B\mid\mathbf x_s]\|^2\mid\mathbf x_s\big].$$兩件事由此可見:
- 第二項不依賴 \(\bm\theta\)。它只含目標網路 \(\bm\theta^-\)(stop-gradient),對 \(\bm\theta\) 的梯度是 0。它讓 CT 損失的數值比 CM 大一截,而且在最佳解也不會降到 0;但它不影響訓練的方向。所以「CT 損失降不下去」不代表沒學好。
- 第一項才決定梯度,它是對 \(\mathbb E[\mathbf f_{\bm\theta^-}(\mathbf x_{s'},s')\mid\mathbf x_s]\) 的回歸,而 CM(用 oracle DDIM)是對 \(\mathbf f_{\bm\theta^-}(\mathbb E[\mathbf x_{s'}\mid\mathbf x_s],s')\) 的回歸。兩者的差是目標網路的非線性(Jensen 間隙),一維時約為 \(\tfrac12\mathbf f''_{\bm\theta^-}\operatorname{Var}(\mathbf x_{s'}\mid\mathbf x_s)\),也就是每一格 \(\mathcal O(\Delta s^2)\)。目標網路在某處越彎(例如兩個峰的分界),這個差越大。
CM 論文(Song et al. 2023 定理 2)在 Euler 解法、\(d\) 和目標網路都二次連續可微等假設下證明了 \(\mathcal L^N_{\text{CD}}=\mathcal L^N_{\text{CT}}+o(\Delta t)\),並指出 CT 損失相對 CD 損失:\(N\) 小(\(\Delta t\) 大)時「變異數小、偏差大」,收斂快;\(N\) 大時「變異數大、偏差小」,適合訓練後期。所以他們在 CT 裡讓 \(N\) 隨訓練逐漸變大。
每一格 O(Δs²),N 格加起來呢:有限 N 的理想解
假設網路彈性足夠、每個時間點都有正的權重,並且訓練到損失的最小值(目標側用當前參數,也就是 \(\mathbf f_{\bm\theta^-}=\mathbf f_{\bm\theta}\) 的數值)。平方 \(\ell_2\) 回歸的最小解是條件期望,所以理想解滿足一層一層的遞迴,從邊界 \(\mathbf f(\mathbf x,s_1)=\mathbf x\) 開始:
- CD(精確老師):目標是確定的 \(\mathrm{DDIM}_{s_{i+1}\to s_i}(\mathbf x)\),所以 \(\mathbf f(\mathbf x,s_{i+1})=\mathbf f\big(\mathrm{DDIM}_{s_{i+1}\to s_i}(\mathbf x),s_i\big)\)。展開就是:\(\mathbf f(\cdot,s_N)\) 等於用 \(N-1\) 步 DDIM 解 PF-ODE。這和 CM 論文的定理 1 一致:CD 損失為 0 時,誤差是解法的全域誤差 \(\mathcal O((\Delta t)^p)\)。
- CT:目標是 \(\mathbf x_{s_i}\),給定 \(\mathbf x_{s_{i+1}}=\mathbf x\) 時它是隨機的:\(\mathbf x_{s_i}=\tfrac{\sigma_{s_i}}{\sigma_{s_{i+1}}}\mathbf x+\big(\alpha_{s_i}-\tfrac{\sigma_{s_i}}{\sigma_{s_{i+1}}}\alpha_{s_{i+1}}\big)\mathbf x_0\),\(\mathbf x_0\sim p(\mathbf x_0\mid\mathbf x)\)。所以 \(\mathbf f(\mathbf x,s_{i+1})=\mathbb E\big[\mathbf f(\mathbf x_{s_i},s_i)\mid\mathbf x_{s_{i+1}}=\mathbf x\big]\)。展開:\(\mathbf f(\cdot,s_N)\) 是一條「每步重抽一次後驗、共用雜訊」的反向馬可夫鏈終點的條件平均。形式上這正是前面 SDE 註腳裡的 martingale 條件,只是對象換成這條鏈。
兩個極端:\(N=2\)(只有一個區間 \(T\to s_1\))時,兩者都化成 \(\mathbb E[\mathbf x_{s_1}\mid\mathbf x_T]\approx\mathbb E[\mathbf x_0\mid\mathbf x_T]\),也就是 B28 第 1 節說的「取平均、過度平滑」的 denoiser;\(N\to\infty\) 時鏈的總變異數 \(\sum_i\mathcal O(\Delta s_i^2)\to0\),兩者都趨近真正的 \(\bm\Psi_{s\to0}\)。中間的有限 \(N\),CT 的理想解比 CD 更偏向平均。下面的 Demo B 把兩個理想解精確算出來。
Demo B有限 N 的理想解轉述者補充
同一個一維資料、EDM 設定,格點用 CM 論文的 Karras 格點(\(\rho=7\),\(s_1=0.002\)、\(s_N=10\))。這裡不訓練網路,而是精確計算上面兩個遞迴的解:CD 的理想解是 \(N-1\) 步 DDIM(精確 score);CT 的理想解在 1,201 點的 \(x\) 格點上逐層算條件期望(每層對後驗的兩個高斯成分各用 81 點積分)。上圖是 \(x_T\mapsto f(x_T,T)\) 這個映射:黑線是精確的 \(\bm\Psi_{T\to0}\),藍線是 CD 的理想解,橙色虛線是 CT 的理想解。下圖是把 \(p_T\) 的 2,000 個分層起點送過去得到的一步樣本(藍框 CD、橙色長條 CT),黑線是資料密度。
瀏覽器實測(和 Node 原型逐位相同)。\(W_1\) 是一步樣本和資料的 1-Wasserstein 距離;因為起點是 \(p_T\) 的分層分位數,精確 flow map 的 \(W_1\) 實際上是 0(數值上 \(6\times10^{-6}\)),所以表中的數字全部是有限 \(N\) 造成的偏差。
| \(N\) | 2 | 4 | 8 | 18 | 32 | 64 | 128 |
|---|---|---|---|---|---|---|---|
| CD 理想解 | 1.076 | 0.451 | 0.159 | 0.064 | 0.034 | 0.017 | 0.008 |
| CT 理想解 | 1.076 | 0.602 | 0.431 | 0.252 | 0.176 | 0.115 | 0.077 |
- \(N=2\):兩者相同。映射幾乎是平的,樣本擠在資料平均 −0.2 附近(98% 落在 −0.55 到 0.19 之間),\(W_1=1.076\)。這就是一步 denoiser 的「取平均」。
- CD 的偏差大約和 \(N\) 成反比(從 32 到 64 到 128:0.034、0.017、0.008),這是一階解法 DDIM 的全域誤差。
- CT 的偏差下降得慢得多:\(N\) 加倍只降約 1.5 倍,\(N=128\) 還有 0.077,比 \(N=18\) 的 CD 還差。映射在兩峰分界處被「抹平」成斜坡,樣本落進兩峰之間的低谷。原因是那裡的 \(f\) 最彎,Jensen 間隙最大。
- 這和 CM 論文的設定吻合:他們讓 CT 的 \(N\) 隨訓練增加(CIFAR-10 的排程從 2 格開始,目標值 150 格),而 CD 用 18 格就夠:在 CD,\(N\) 只受老師解法的精度限制;在 CT,\(N\) 還決定了一點估計留下的偏差。
這是理想化的極限(網路無限彈性、資料無限多、訓練到最小值)。真正的網路還有容量和最佳化的誤差;Demo C 訓練真的網路來看它們離這些理想解多遠。
12小結與實作考量書 §11.2.1
總結:CD 利用老師模型做初始化和監督,通常能穩定最佳化、降低變異數。相反地,Consistency Training(CT)不需要預訓練模型,可以完全從頭訓練。儘管有這個差別,CT 是一個完全獨立的生成模型。
參數化與邊界條件
實務上,Song et al. (2023) 採用 Karras et al. (2022) 的 EDM 表述(附錄 D.6,B15),正向加噪核是
$$\mathbf x_s=\mathbf x_0+s\bm\epsilon,$$並用 EDM 提出的網路參數化:
\(\mathbf F_{\bm\theta}\) 是神經網路,係數照 EDM 的式子:
$$c_{\text{in}}(s)=\frac{1}{\sqrt{\sigma_{\text{d}}^2+s^2}},\qquad c_{\text{skip}}(s)=\frac{\sigma_{\text{d}}^2}{\sigma_{\text{d}}^2+s^2},\qquad c_{\text{out}}(s)=\pm\frac{s\,\sigma_{\text{d}}}{\sqrt{\sigma_{\text{d}}^2+s^2}},$$\(\sigma_{\text{d}}\) 是資料的標準差。這個參數化有一個重要的邊界性質
$$\mathbf f_{\bm\theta}(\mathbf x,0)=\mathbf x,$$它在時間 0 強制一致性:沒有雜訊時,網路的輸出等於輸入。(\(s=0\) 時 \(c_{\text{skip}}=1\)、\(c_{\text{out}}=0\)。)
CM 論文的實際細節(Song et al. 2023)
- 邊界放在 \(\epsilon=0.002\),不是 0。論文的時間範圍是 \([\epsilon,T]=[0.002,80]\)(EDM 的設定)。原本的 EDM 係數在 \(\epsilon\ne0\) 時不滿足邊界條件,所以他們改成 \(c_{\text{skip}}(t)=\frac{\sigma_{\text{data}}^2}{(t-\epsilon)^2+\sigma_{\text{data}}^2}\)、\(c_{\text{out}}(t)=\frac{\sigma_{\text{data}}(t-\epsilon)}{\sqrt{\sigma_{\text{data}}^2+t^2}}\),\(\sigma_{\text{data}}=0.5\),使 \(\mathbf f_{\bm\theta}(\mathbf x,\epsilon)=\mathbf x\)(附錄 C)。Demo C 也這樣做。
- 格點用 Karras 的公式 \(t_i=\big(\epsilon^{1/\rho}+\tfrac{i-1}{N-1}(T^{1/\rho}-\epsilon^{1/\rho})\big)^\rho\),\(\rho=7\)。
- 度量 \(d\):比較了平方 \(\ell_2\)、\(\ell_1\) 和 LPIPS(一種學到的感知距離),影像上 LPIPS 最好;權重 \(\lambda(t_n)\equiv1\)。
- CD 在 CIFAR-10 上最好的組合是 LPIPS、Heun 解法、\(N=18\);同樣的 \(N\),二階的 Heun 一致地比一階 Euler 好,和定理 1 相符。
- CT 從隨機初始化訓練,讓 \(N\) 和 EMA 衰減率 \(\mu\) 依排程 \(N(k)\)、\(\mu(k)\) 隨訓練步數變化,可以顯著加快收斂並改善樣本。
- 結果:當作蒸餾方法,CD 在 CIFAR-10 上一步 FID 3.55、兩步 2.93;ImageNet 64×64 一步 6.20、兩步 4.70。當作獨立的生成模型,CT 不需要預訓練模型,一步樣本的品質可以追上或超過 progressive distillation。
13用 CM 取樣書 §11.2.2
訓練好 consistency model \(\mathbf f_{\bm\theta^\times}\)(不論連續或離散時間)之後,可以用一步或幾步生成樣本。
一步生成。從先驗分佈抽初始潛變數 \(\hat{\mathbf x}_T\)(實務上是 \(\mathcal N(\mathbf 0,T^2\mathbf I)\)),一次函數計算就得到乾淨樣本:\(\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_T,T)\)。
多步生成。預先選好時間點 \(T\gt\tau_1\gt\tau_2\gt\cdots\gt\tau_{M-1}=0\),從初始雜訊 \(\hat{\mathbf x}_T\) 出發,交替做「注入雜訊」和「用 consistency model 從較早的時間點大跳到乾淨值」,逐步精修樣本:
$$\hat{\mathbf x}_T\xrightarrow{\text{大跳,得到乾淨值}}\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_T,T)\xrightarrow{\text{加噪到 }\tau_1}\hat{\mathbf x}_{\tau_1}\xrightarrow{\text{大跳}}\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_{\tau_1},\tau_1)\xrightarrow{\text{加噪到 }\tau_2}\cdots$$若一步:\(\mathbf x\leftarrow\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_T,T)\)。
否則:\(\mathbf x\leftarrow\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_T,T)\);對 \(m=1,\dots,M-1\):
抽 \(\bm\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)\);
\(\hat{\mathbf x}_{\tau_m}\leftarrow\alpha_{\tau_m}\mathbf x+\sigma_{\tau_m}\bm\epsilon\);
\(\mathbf x\leftarrow\mathbf f_{\bm\theta^\times}(\hat{\mathbf x}_{\tau_m},\tau_m)\)。
輸出 \(\mathbf x\)。
多步取樣和 ODE 解法的多步不一樣
ODE 解法的多步是沿同一條軌跡分段走;CM 的多步每一步都重新注入新的雜訊,然後跳到另一條軌跡的終點。所以它更像「去噪、再加噪、再去噪」的隨機取樣器,而不是更細的 ODE 積分。它的作用是:把第一步的結果拉回一個比較小的雜訊等級 \(\tau_m\),再用 \(\mathbf f(\cdot,\tau_m)\) 修正;在 \(\tau_m\) 較小時,\(\mathbf f\) 要跳的距離短,通常比較準。代價是如果一步已經很準,額外注入的雜訊和模型在 \(\tau_m\) 的誤差反而可能讓結果變差。Demo C 兩種情況都會量到。
Demo C訓練一個 consistency model轉述者補充
同一個一維資料、EDM 設定、Karras 格點。網路是 \(f_{\bm\theta}(x,s)=c_{\text{skip}}(s)x+c_{\text{out}}(s)F_{\bm\theta}(c_{\text{in}}(s)x,\tfrac14\ln s)\),\(F_{\bm\theta}\) 是 2→32→32→1 的 tanh MLP,邊界移到 \(\epsilon=0.002\)(CM 論文的係數),\(\sigma_{\text{d}}=1.25\)(約為資料的標準差)。損失是平方 \(\ell_2\)、權重 1;目標側用當前參數的 stop-gradient(\(\mu=0\));每次更新 64 個樣本、共 6,000 次,Adam 學習率 \(2\times10^{-3}\),最後 30% 降為 0.3 倍。評估用參數的滑動平均(衰減 0.995),起點是 \(p_T\) 的 2,000 個分層分位數。CD 用的是精確的老師(精確 score 的一步 DDIM),所以這裡只有離散化和網路本身的誤差。
瀏覽器實測(和 Node 原型逐位相同;固定種子,每次重跑結果一樣)。表中是第 6,000 次更新後的 \(W_1\):
| 設定 | 一步 | 理想解 | 2 次 | 4 次 |
|---|---|---|---|---|
| CT,\(N=8\) | 0.408 | 0.431 | 0.232 | 0.165 |
| CT,\(N=18\) | 0.240 | 0.252 | 0.143 | 0.122 |
| CT,\(N=64\) | 0.153 | 0.115 | 0.158 | 0.167 |
| CD,\(N=8\) | 0.170 | 0.159 | 0.100 | 0.106 |
| CD,\(N=18\) | 0.058 | 0.064 | 0.058 | 0.090 |
| CD,\(N=64\) | 0.064 | 0.017 | 0.095 | 0.103 |
- 小 \(N\) 很快收斂到理想解,但理想解本身有偏差。\(N=8\)、18 時,訓練好的網路落在理想解附近(差不到 0.03,有時甚至略好於理想解)。CT 的映射在兩峰分界處是一段緩坡,和 Demo B 一樣。
- 大 \(N\) 偏差小,但 6,000 次更新還沒收斂。\(N=64\) 時 CT 停在 0.153(理想 0.115)、CD 停在 0.064(理想 0.017)。轉述者的解讀:正確的邊界資訊要一格一格從 \(s=0.002\) 往上傳,格點越多,傳到 \(s=T\) 越慢。這符合 CM 論文在 CIFAR-10 上觀察到的取捨:\(N\) 小收斂快但偏差大,\(N\) 大偏差小但收斂慢。
- 多步取樣對「偏向平均」的模型幫助最大。CT \(N=8\) 從一步 0.408 降到 4 次的 0.165,CT \(N=18\) 從 0.240 降到 0.122。但對已經很準的 CD \(N=18\),第 2 次不變、4 次反而變差(0.090);\(N=64\) 尚未收斂的兩個模型,多步也沒有幫助。多步不是免費的改善(第 13 節)。