擴散模型原理 B24 · 取樣就是數值積分
The Principles of Diffusion Models · 第 9 章開頭、§9.1

取樣就是數值積分:在最少的模型呼叫內,把 PF-ODE 積分得夠準

diffusion model 訓練好之後,生成就是從雜訊往資料解一條學出來的微分方程,慢是因為要走很多小步、每一步都呼叫一次神經網路。這一章討論不重新訓練、只換更好的數值解法的加速。這一頁是整章的骨架:先把取樣寫成積分、區分三個彼此獨立的設計選擇,再看 diffusion PF-ODE 的特別結構:雜訊時程是已知的解析函數,只有神經網路的預測是未知的。把 PF-ODE 寫成「已知的線性部分 + 已知係數 × 神經預測」的半線性形式,就能把已知的部分精確積分、只近似神經預測,這是 DDIM、DEIS、DPM-Solver 共同的出發點。

書的範圍:第 9 章開頭、§9.1(含 §9.1.1–9.1.3) 閱讀時間:約 40 分鐘

讀完這頁你應該能夠

  1. 把 diffusion 取樣寫成 empirical PF-ODE 的積分,並區分「模型近似誤差」和「數值離散化誤差」。
  2. 說出解法設計的三個獨立選擇,以及 single-step、multistep、平行於時間三類解法的差別;用 NFE 衡量成本。
  3. 說明為什麼常常不直接預測 score,並推出 score、\(\bm\epsilon\)、\(\mathbf x\) 三種預測下的半線性 PF-ODE 係數。
  4. 由變數常數變易法寫出 PF-ODE 的精確解,推出一階的分解式指數積分器,並說明它和 Euler、傳統指數 Euler 的差別。

前置知識

  • B08、B09:PF-ODE \(\frac{d\mathbf x}{dt}=\mathbf f(\mathbf x,t)-\frac12g^2(t)\nabla\log p_t\),以及 flow map \(\bm\Psi_{s\to t}\)。
  • B16:score、\(\bm\epsilon\)、\(\mathbf x\)、\(\mathbf v\) 四種預測的換算,例如 \(\bm\epsilon^*=-\sigma_t\nabla\log p_t\)。
  • Euler 法、Runge–Kutta、局部誤差與階數:補充課 B。書的附錄 A 會在 B33 轉述;這一頁需要的部分放在第 2 節的補充框。
時間方向與記號。diffusion 的時鐘:\(t=0\) 是資料、\(t=T\) 是雜訊,取樣從 \(T\) 走到 0,所以每一步的 \(t\) 比 \(s\) 小(\(s>t\))。前向的擾動核是 \(\mathbf x_t\mid\mathbf x_0\sim\mathcal N(\alpha_t\mathbf x_0,\sigma_t^2\mathbf I)\);\(\alpha_t'\)、\(\sigma_t'\) 是對 \(t\) 的導數。\(\bm\phi^\times\) 表示訓練好、固定的參數。

「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。

01第 9 章:怎麼生成得快書 第 9 章開頭

diffusion model 把雜訊映到資料樣本的生成過程,可以寫成反向時間的 SDE 或對應的 PF-ODE。這個程序本質上很慢,因為它依賴用很多小積分步逼近解軌跡的數值解法(書的附錄 A 有簡短介紹)。加速推論因此成了核心的研究目標。大致上,現有方法分成兩類:

  • Training-free 方法:這一章的重點。發展更先進的數值解法,在不額外訓練的情況下提高取樣效率。
  • Training-based 方法:第 10、11 章。把預訓練的 diffusion model 蒸餾成快速的生成器,或直接學 ODE 的 flow map(解),只需要少數幾步取樣。

基於 SDE 的取樣器(例如 Euler–Maruyama)因為有隨機性,可能產生更多樣的樣本,但通常需要更多步(Xu et al. 2023)。這一章專注在基於 ODE 的生成,它的原則可以自然地延伸到 SDE 的情形。

書對這一章的學習目標與閱讀建議(轉述)

目標:把 diffusion 取樣看成 PF-ODE 的數值積分問題;區分模型近似誤差和數值離散化誤差;理解 DDIM、DEIS、DPM-Solver、DPM-Solver++ 背後的主要數值想法;把現代的 diffusion 取樣器連到古典的數值方法,包括 Euler、Runge–Kutta(RK)、Adams–Bashforth(AB)和指數積分器。閱讀建議:不熟微分方程或數值解法的讀者可以先看附錄 A。讀這一章時記住一個問題:每個解法精確地積分了什麼,又數值地近似了什麼?本頁涵蓋前兩個目標和第四個的骨架;DDIM 在 B25,DEIS 和 DPM-Solver 在 B26,DPM-Solver++ 在 B27。

02取樣就是數值積分書 §9.1.1

Score SDE 框架(Song et al. 2020)建立了一個關鍵的基礎:把離散時間的 diffusion model 和基於 ELBO 的表述(Sohl-Dickstein et al. 2015;Ho et al. 2020),連到連續時間的 SDE/ODE 生成模型。這個連結給了一種乾淨的思考方式:diffusion model 訓練好之後,生成就是從雜訊往資料解一條學出來的微分方程。

實務上的困難是速度。一個天真的取樣器用很多小數值步追蹤這條反向軌跡,常常需要幾百到幾千次神經網路計算。快速取樣問的是:能不能用少得多的模型呼叫,近似同一個生成過程?

這一章專注在 training-free 的加速:預訓練的 diffusion model 固定不動,我們設計更好的數值解法來取樣。蒸餾、直接少步訓練之類 training-based 的加速方法,在第 10、11 章討論。所以這一章的主要訊息很簡單:

Messagediffusion model 一旦訓練好,training-free 的快速取樣大體上就是一個數值積分問題。

文獻裡有很多有名字的 diffusion 取樣器,讓這個主題看起來比實際上零碎。這一章先介紹它們背後少數幾個數值想法,之後才把熟悉的方法名稱掛上去。這樣的組織讓人看清:這些取樣器不是互不相關的技巧,而是逼近同一條 PF-ODE 軌跡的不同方式。

取樣就是解 empirical PF-ODE

假設有一個預訓練的 diffusion model \(\mathbf s_{\bm\phi^\times}(\mathbf x,t)\approx\nabla_{\mathbf x}\log p_t(\mathbf x)\),或等價地用其他標準參數化之一表示(B16)。Empirical PF-ODE 用這個學到的模型代替真正的 score:

$$\frac{d\mathbf x(t)}{dt}=\mathbf f(\mathbf x(t),t)-\frac12g^2(t)\,\mathbf s_{\bm\phi^\times}(\mathbf x(t),t).$$

從 \(\mathbf x(T)\sim p_{\text{prior}}\) 出發,生成就是把這條 ODE 從 \(t=T\) 倒著積分到 \(t=0\)。對兩個時刻 \(s>t\),精確的 empirical 更新可以寫成積分形式:

$$\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)=\mathbf x_s+\int_s^t\Big[\mathbf f(\mathbf x(\tau),\tau)-\frac12g^2(\tau)\,\mathbf s_{\bm\phi^\times}(\mathbf x(\tau),\tau)\Big]d\tau.$$

這裡 \(\widetilde{\bm\Psi}_{s\to t}\) 是 empirical PF-ODE 的 flow map:把 oracle score 換成學到的模型得到的。和全書一樣,flow map 是古典意義的 ODE 解映射(B09)。對應的 oracle flow map 記作 \(\bm\Psi_{s\to t}\)。empirical flow map 是要近似 oracle 的:\(\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)\approx\bm\Psi_{s\to t}(\mathbf x_s)\)。

因為這個積分一般沒有閉式,數值取樣器把反向區間離散成一個遞減的格點

$$T=t_0>t_1>\cdots>t_M=0,$$

從 \(\tilde{\mathbf x}_{t_0}=\mathbf x_T\sim p_{\text{prior}}\) 出發,產生序列 \(\tilde{\mathbf x}_{t_0},\tilde{\mathbf x}_{t_1},\dots,\tilde{\mathbf x}_{t_M}\),其中 \(\tilde{\mathbf x}_{t_i}\) 近似 \(\widetilde{\bm\Psi}_{T\to t_i}(\mathbf x_T)\)。最後一個 \(\tilde{\mathbf x}_{t_M}\) 就是生成的樣本。所以這一章每個 training-free 解法都在回答同一個問題:

核心問題怎麼用盡量少的模型計算,準確地近似 PF-ODE 的積分?
兩種誤差:模型的,和數值的(轉述者補充)

書在學習目標裡要求區分這兩者,可以用一個三角不等式寫清楚。最後的樣本和「oracle 會給的樣本」之間的差:

$$\big\|\tilde{\mathbf x}_{t_M}-\bm\Psi_{T\to0}(\mathbf x_T)\big\|\le\underbrace{\big\|\tilde{\mathbf x}_{t_M}-\widetilde{\bm\Psi}_{T\to0}(\mathbf x_T)\big\|}_{\text{離散化誤差:解法的事}}+\underbrace{\big\|\widetilde{\bm\Psi}_{T\to0}(\mathbf x_T)-\bm\Psi_{T\to0}(\mathbf x_T)\big\|}_{\text{模型誤差:訓練的事}}.$$

這一章的解法只能減少第一項。步數再多,第二項也不會變小:它是「學到的 ODE」和「真正的 ODE」本身的差。所以當離散化誤差已經比模型誤差小很多時,再加步數就是白費。Demo C 可以切換成一個「有偏差的模型」看到這個下限。實務上我們拿不到 \(\bm\Psi\),生成品質(例如 FID)同時反映兩者。

解法設計的三個獨立選擇

引入遞減的時間格點之後,可以分清三個在 diffusion 取樣裡常常纏在一起的選擇:

  1. 預測的參數化。預訓練的 diffusion model 提供哪個量:score \(\mathbf s_{\bm\phi^\times}\)、雜訊 \(\bm\epsilon_{\bm\phi^\times}\)、乾淨資料 \(\mathbf x_{\bm\phi^\times}\),還是速度 \(\mathbf v_{\bm\phi^\times}\)?
  2. 時間的參數化。用哪個變數來參數化沿著同一條連續軌跡的進度?原本的 diffusion 時間 \(t\) 是一個選擇;其他的重新參數化之後在用得到時再介紹(例如 B26 的 log-SNR)。
  3. 數值近似。解法在一個有限區間內怎麼近似那個未知的、依賴模型的量?可以只用目前的計算、在這一步內多做幾次計算,或重用前幾步的計算。

這個區分貫穿整章。前兩個選擇決定交給解法的數值形式,第三個決定解法怎麼使用手上的模型計算。

解法怎麼使用模型計算

組織數值解法的一個好方法,是問下一步更新的資訊從哪裡來。從目前的狀態出發,解法可以在這一步之內取得額外的資訊,也可以重用前幾步的資訊。

  • Single-step 方法只用目前的狀態和同一個時間區間內產生的計算,建出下一個狀態。Euler 法是最簡單的例子,只用目前的速度。更高階的 Runge–Kutta(RK)方法可能先在一個或多個中間狀態算速度,再完成這一步。所以「single-step」不是「一次函數計算」,而是不需要先前已完成的步驟的資訊。
  • Multistep 方法重用先前已完成步驟的資訊。存下來的模型計算告訴我們動態最近怎麼變化,讓我們不必在這一步內多做幾次計算就能得到高階更新。Adams–Bashforth(AB)家族是代表性的古典例子。
  • 改變時間上的排程。不嚴格依序計算所有時間點,而是先在好幾個時刻初始化狀態,再反覆修正,直到它們和 ODE 一致。這種不動點迭代讓不同時間點的模型計算可以平行進行。
四個古典例子(書的附錄 A 的重點,轉述者整理)

考慮 \(\frac{d\mathbf x}{dt}=\mathbf v(\mathbf x,t)\)、\(t_{n+1}=t_n+h\)。\(h\) 帶正負號:正向積分 \(h>0\),diffusion 取樣倒著走 \(h<0\);同樣的公式兩個方向都能用。

  • Euler(single-step,1 次計算):\(\mathbf x_{n+1}=\mathbf x_n+h\,\mathbf v(\mathbf x_n,t_n)\)。局部誤差 \(\mathcal O(h^2)\),全域誤差 \(\mathcal O(h)\):一階。
  • Heun/RK2(single-step,2 次計算):先用 Euler 預測 \(\hat{\mathbf x}=\mathbf x_n+h\mathbf v(\mathbf x_n,t_n)\),再平均兩端的斜率 \(\mathbf x_{n+1}=\mathbf x_n+\frac h2\big[\mathbf v(\mathbf x_n,t_n)+\mathbf v(\hat{\mathbf x},t_{n+1})\big]\)。二階。經典的 RK4 用 4 次計算得到四階。
  • Adams–Bashforth 2(multistep,每步 1 次新計算):\(\mathbf x_{n+1}=\mathbf x_n+h\big[\tfrac32\mathbf v_n-\tfrac12\mathbf v_{n-1}\big]\):用上一步存下的 \(\mathbf v_{n-1}\) 做線性外插。二階。
  • Picard 迭代(平行於時間):把整條軌跡當未知數,反覆做 \(\mathbf x^{(k+1)}(t)=\mathbf x(0)+\int_0^t\mathbf v(\mathbf x^{(k)}(\tau),\tau)d\tau\)。每次迭代裡所有時間點的 \(\mathbf v\) 可以同時算。

書的心智圖:時間步進分成 single-step(Euler、RK)和 multistep(AB);平行於時間的是 Picard 不動點迭代;同樣的數值想法可以往前或往後用。RK 從「這一步之內」拿更多資訊,AB 從「過去」拿。補充課 B 有 Euler 和 RK 的互動 demo。

計算成本與實際表現

一個數值時間步不一定對應一次神經網路計算。Euler 每步用一次,高階 RK 可能要好幾次;multistep 方法則重用存下的計算,初始化之後通常每步只要一次新的計算。所以取樣成本用函數計算次數(NFE, number of function evaluations)來衡量:如果一個方法每步大約用 \(m\) 次模型計算、走 \(M\) 步,

$$\mathrm{NFE}\approx mM.$$

例如 classifier-free guidance(B21)每步同時需要條件和無條件的模型預測,所以每步的神經網路計算成本大約加倍。

這個古典分類告訴我們數值資訊從哪裡來、要花多少模型計算。diffusion PF-ODE 還多提供一個機會:向量場的每一部分並非同樣未知。依預測的參數化,動態的一部分由雜訊時程解析地決定,只有剩下的量需要神經網路計算。接下來看暴露這個分離怎麼改變 PF-ODE 的數值形式,以及它怎麼啟發 diffusion 專用的積分器。

03不直接預測 score,以及同一條 PF-ODE 的兩種寫法書 §9.1.2 I–II

附錄 A 的古典數值方法透過向量場的計算處理一般的 ODE。diffusion PF-ODE 多了結構:雜訊時程是解析已知的,diffusion model 的預測則由神經網路提供。這帶來一個機會:解法不必用同樣的方式數值近似動態的每一部分,可以把已知的、依賴時程的項保留成解析的,只近似依賴模型的預測。這個結構暴露得多清楚,取決於預測的參數化。

I. score 以外的參數化

PF-ODE 雖然可以用 score 寫,現代的實作常用雜訊、乾淨資料或速度預測。這些參數化在代數上相連,但暴露出不同的數值結構。

還有一個重要的穩定性理由,讓很多解法避免直接預測 score。\(t\to0\) 時,真正的 score \(\nabla_{\mathbf x}\log p_t(\cdot)\) 可能變化得非常劇烈,特別是資料分佈集中在一個低維流形附近時(Kim et al. 2022)。這讓一個直接學 score 的神經網路很難在小雜訊等級保持準確。書的腳註把這個尺度說得很具體:

$$\mathbb E\|\bm\epsilon^*(\mathbf x_t,t)\|_2^2\le D,\qquad\mathbb E\|\mathbf s^*(\mathbf x_t,t)\|_2^2=\sigma_t^{-2}\,\mathbb E\|\bm\epsilon^*(\mathbf x_t,t)\|_2^2\le\frac{D}{\sigma_t^2},$$

其中 \(\bm\epsilon^*(\mathbf x_t,t)=\mathbb E[\bm\epsilon\mid\mathbf x_t]=-\sigma_t\nabla_{\mathbf x}\log p_t(\mathbf x_t)\) 是 oracle 雜訊預測器,\(D\) 是資料維度。oracle 雜訊預測器的期望平方範數有一致的上界;score 則要乘上 \(1/\sigma_t\),\(\sigma_t\) 變小時尺度越來越差。這讓直接的 score 參數化在小雜訊時數值上比較不利。

腳註的兩步

正交分解。條件期望是 \(L^2\) 裡的正交投影:\(\bm\epsilon-\bm\epsilon^*\) 和任何 \(\mathbf x_t\) 的函數不相關,特別是和 \(\bm\epsilon^*\) 本身。所以展開 \(\bm\epsilon=\bm\epsilon^*+(\bm\epsilon-\bm\epsilon^*)\) 的平方,交叉項的期望為 0:

$$\mathbb E\|\bm\epsilon\|^2=\mathbb E\|\bm\epsilon^*\|^2+\mathbb E\|\bm\epsilon-\bm\epsilon^*\|^2\quad\Longrightarrow\quad\mathbb E\|\bm\epsilon^*\|^2\le\mathbb E\|\bm\epsilon\|^2=D.$$

(交叉項:\(\mathbb E[\bm\epsilon^{*\top}(\bm\epsilon-\bm\epsilon^*)]=\mathbb E\big[\bm\epsilon^{*\top}\,\mathbb E[\bm\epsilon-\bm\epsilon^*\mid\mathbf x_t]\big]=0\)。)

換成 score。\(\mathbf s^*=-\bm\epsilon^*/\sigma_t\),所以 \(\mathbb E\|\mathbf s^*\|^2=\sigma_t^{-2}\mathbb E\|\bm\epsilon^*\|^2\le D/\sigma_t^2\)。直觀上:網路輸出 \(\bm\epsilon\) 時,目標永遠是「單位大小」的東西;輸出 score 時,目標的大小隨 \(1/\sigma_t\) 變大,網路要在很寬的尺度範圍內都準。

因此一個廣泛使用的替代,是預測雜訊 \(\bm\epsilon_{\bm\phi^\times}\),或乾淨資料、速度之類相關的目標。雜訊預測下,score 的近似是

$$\mathbf s_{\bm\phi^\times}(\mathbf x,t)=-\frac{1}{\sigma_t}\,\bm\epsilon_{\bm\phi^\times}(\mathbf x,t).$$

這些參數化在代數上相連,但神經網路提供哪個量,只是解法設計的一部分。接著看同一條 PF-ODE 在這些參數化下的數值樣子。

Demo Ascore 和 ε 的大小轉述者補充

一維資料(\(D=1\)),DDPM 式 VP 時程(\(\beta(t)=0.1+19.9t\))。對每個 \(t\),用數值積分算出 \(\mathbb E\|\bm\epsilon^*\|^2\) 和 \(\mathbb E\|\mathbf s^*\|^2\)(對 \(p_t\) 取期望,score 精確),畫在對數座標上,對照腳註的兩個上界 \(D=1\) 和 \(D/\sigma_t^2\)。

E‖ε*‖²E‖s*‖²上界 D = 1 與 D / σ_t²

瀏覽器實測:

資料\(t=1\)\(t=0.1\)(\(\sigma_t=0.322\))\(t=0.01\)(\(\sigma_t=0.045\))\(t=0.002\)(\(\sigma_t=0.016\))
標準差 0.021.000 / 1.0000.953 / 9.180.833 / 4180.375 / 1,560
標準差 0.21.000 / 1.0000.661 / 6.370.048 / 23.90.006 / 24.9
標準差 11.000 / 1.0000.059 / 0.5660.001 / 0.5510.000 / 0.550

每格是 \(\mathbb E\|\bm\epsilon^*\|^2\) / \(\mathbb E\|\mathbf s^*\|^2\)。\(\bm\epsilon^*\) 的期望平方範數在所有情形、所有時刻都不超過 \(D=1\);score 的則取決於資料相對於雜訊有多窄。資料很窄時(像集中在低維流形上的影像),\(t=0.002\) 的 \(\mathbb E\|\mathbf s^*\|^2\) 到了 1,560,大約是 \(1/(\sigma_t^2+0.02^2)\):網路要在從 1 到上千的尺度範圍內都輸出準確的 score。資料寬時 score 一直不大(0.55),上界 \(D/\sigma_t^2\) 這時很鬆。注意 \(\bm\epsilon^*\) 在小雜訊時可能趨近 0,這並不矛盾:腳註給的是上界。資料比雜訊寬很多時,從 \(\mathbf x_t\) 幾乎讀不出雜訊是多少,最好的猜測就是接近 0(標準差 1、\(t=0.002\) 時 0.000);資料很窄時,\(\mathbf x_t\) 幾乎直接透露雜訊,\(\bm\epsilon^*\) 接近真正的 \(\bm\epsilon\),期望平方範數接近上界 1(標準差 0.02、\(t=0.01\) 時 0.833)。

04半線性 PF-ODE 的指數積分器書 §9.1.2 II–III

II. 同一條 PF-ODE,兩種數值形式

選好預測的參數化之後,同一條 PF-ODE 可以用兩種特別有用的形式交給數值解法。

直接速度形式。最直接的表示是

$$\frac{d\mathbf x(t)}{dt}=\mathbf v_{\bm\phi^\times}(\mathbf x(t),t).$$

在 \(\mathbf v\)-預測下,模型直接提供完整的 empirical PF-ODE 速度 \(\mathbf v_{\bm\phi^\times}(\mathbf x(t),t)\),數值積分方法因此把整個右手邊當成一體來離散。

分解的半線性形式。score、雜訊、乾淨資料預測天然地暴露更多依賴時程的結構。三種情形下,PF-ODE 都可以寫成一般的半線性(semilinear)形式:

$$\frac{d\mathbf x(t)}{dt}=\underbrace{a(t)\mathbf x(t)}_{\text{已知的線性部分}}+\underbrace{b(t)}_{\text{已知係數}}\underbrace{\mathbf N_{\bm\phi^\times}(\mathbf x(t),t)}_{\text{神經網路計算}},\qquad\mathbf N_{\bm\phi^\times}\in\{\mathbf s_{\bm\phi^\times},\bm\epsilon_{\bm\phi^\times},\mathbf x_{\bm\phi^\times}\}.$$

\(a(t)\)、\(b(t)\) 是由雜訊時程決定的已知函數,\(\mathbf N_{\bm\phi^\times}\) 是神經預測。(書的腳註:在標準的半線性記號裡,\(b(t)\mathbf N_{\bm\phi^\times}\) 可以合成一個非線性項。書把兩個因子分開,是因為 \(b(t)\) 從雜訊時程解析已知,而 \(\mathbf N_{\bm\phi^\times}\) 要神經網路計算;這讓解法可以在積分裡只近似神經預測,同時保留並解析地積分已知的係數。)「半線性」指的就是這個分解:第一項對狀態 \(\mathbf x(t)\) 是線性的,神經項則可能非線性地依賴 \(\mathbf x(t)\)。這個分法不唯一,但數值上特別有用,因為已知的線性部分常常可以解析處理,只剩神經的貢獻要數值近似。

三種標準的半線性參數化對應的 \(a(t)\)、\(b(t)\)、\(\mathbf N_{\bm\phi^\times}\) 如下表。(書的腳註:之後各節會在 SDE 係數 \((f(t),g(t))\) 和高斯擾動核之間切換,兩者的關係是 \(f(t)=\alpha_t'/\alpha_t\)、\(g^2(t)=\frac{d}{dt}(\sigma_t^2)-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2=2\sigma_t\sigma_t'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\)。)

書的表:score、雜訊、乾淨資料預測下分解的 PF-ODE 形式。
預測\(a(t)\)\(b(t)\)\(\mathbf N_{\bm\phi^\times}\)
\(\mathbf s\)-預測\(f(t)\)\(-\tfrac12g^2(t)\)\(\mathbf s_{\bm\phi^\times}\)
\(\bm\epsilon\)-預測\(f(t)\)\(\dfrac{g^2(t)}{2\sigma_t}\)\(\bm\epsilon_{\bm\phi^\times}\)
\(\mathbf x\)-預測\(\dfrac{\sigma_t'}{\sigma_t}\)\(\alpha_t\Big(\dfrac{\alpha_t'}{\alpha_t}-\dfrac{\sigma_t'}{\sigma_t}\Big)\)\(\mathbf x_{\bm\phi^\times}\)
\(f\)、\(g^2\) 的關係,以及表的三列

\(f\) 和 \(g^2\)。線性 SDE \(d\mathbf x=f(t)\mathbf x\,dt+g(t)d\mathbf w\) 的平均滿足 \(\frac{d}{dt}\mathbb E[\mathbf x_t\mid\mathbf x_0]=f\,\mathbb E[\mathbf x_t\mid\mathbf x_0]\),所以 \(\alpha_t'=f\alpha_t\),\(f=\alpha_t'/\alpha_t\)。變異數(每一維)滿足 \(\frac{d}{dt}\sigma_t^2=2f\sigma_t^2+g^2\)(B10),所以 \(g^2=\frac{d}{dt}\sigma_t^2-2f\sigma_t^2=2\sigma_t\sigma_t'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\)。

前兩列。PF-ODE 是 \(\frac{d\mathbf x}{dt}=f\mathbf x-\frac12g^2\mathbf s\),直接讀出 \(\mathbf s\)-列。代入 \(\mathbf s=-\bm\epsilon/\sigma_t\) 得 \(f\mathbf x+\frac{g^2}{2\sigma_t}\bm\epsilon\)。

\(\mathbf x\)-列。用 \(\mathbf s=-(\mathbf x-\alpha_t\hat{\mathbf x}_0)/\sigma_t^2\)(Tweedie 改寫,B16),以及 \(\frac12g^2=\sigma_t\sigma_t'-f\sigma_t^2\):

$$-\tfrac12g^2\mathbf s=\Big(\frac{\sigma_t'}{\sigma_t}-f\Big)(\mathbf x-\alpha_t\hat{\mathbf x}_0)\;\Longrightarrow\;\frac{d\mathbf x}{dt}=\frac{\sigma_t'}{\sigma_t}\mathbf x+\alpha_t\Big(f-\frac{\sigma_t'}{\sigma_t}\Big)\hat{\mathbf x}_0,$$

其中 \(f=\alpha_t'/\alpha_t\),就是表的第三列。注意 \(\mathbf x\)-形式的線性係數 \(\sigma_t'/\sigma_t\) 和另外兩列不同:已知的線性部分本身取決於選了哪種預測。

例如在雜訊預測下,

$$\frac{d\mathbf x(t)}{dt}=\underbrace{f(t)\mathbf x(t)}_{\text{線性部分}}+\underbrace{\frac12\frac{g^2(t)}{\sigma_t}\bm\epsilon_{\bm\phi^\times}(\mathbf x(t),t)}_{\text{非線性的神經部分}}.$$

神經預測前面的係數完全由雜訊時程決定,第二項裡唯一學到的量是 \(\bm\epsilon_{\bm\phi^\times}(\mathbf x(t),t)\)。

在 oracle 層級,score、雜訊、乾淨資料、速度預測是同一條 PF-ODE 完全等價的表示。對 empirical 模型,如果不同的預測參數化是從同一個模型輸出經過精確的代數換算得到的(B16),同樣的等價也成立:同一條 empirical PF-ODE 可以用任何一種預測表示,公式看起來不同是因為暴露了不同的數值結構,但描述的是同一個學到的連續動態。可是如果為不同的預測目標各自獨立訓練網路,它們的 empirical PF-ODE 不必完全一致;這時取樣器之間的差異可能同時反映模型近似和數值離散化。

III. 半線性 PF-ODE 的指數積分器

分解的半線性形式把解析已知的線性動態和依賴模型的預測分開。對 \(s>t\),定義積分因子

$$\mathcal E(s\to t):=\exp\Big(\int_s^ta(u)\,du\Big).$$

變數常數變易公式(variation of constants)給出 empirical PF-ODE 的精確 flow:

精確解 $$\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)=\mathcal E(s\to t)\,\mathbf x_s+\int_s^t\mathcal E(\tau\to t)\,b(\tau)\,\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\,d\tau.$$
變數常數變易法(書的附錄 A 的三步)

第一步:用積分因子把線性項吸掉。把方程寫成 \(\frac{d\mathbf x}{dt}-a(t)\mathbf x=b(t)\mathbf N\),兩邊乘上 \(\mathcal E^{-1}(s\to t)=\exp(-\int_s^ta)\)。因為 \(\frac{d}{dt}\mathcal E^{-1}(s\to t)=-a(t)\mathcal E^{-1}(s\to t)\),左邊是乘積法則的結果:

$$\frac{d}{dt}\Big[\mathcal E^{-1}(s\to t)\,\mathbf x(t)\Big]=\mathcal E^{-1}(s\to t)\,b(t)\,\mathbf N(\mathbf x(t),t).$$

第二步:從 \(s\) 積到 \(t\)。左邊變成 \(\mathcal E^{-1}(s\to t)\mathbf x(t)-\mathbf x(s)\)。

第三步:乘回 \(\mathcal E(s\to t)\)。因為 \(\mathcal E(s\to t)\mathcal E^{-1}(s\to\tau)=\exp(\int_\tau^ta)=\mathcal E(\tau\to t)\),得到上面的精確解。這個步驟沒有任何近似;困難全在剩下的積分裡的 \(\mathbf N\),它依賴未知的軌跡 \(\mathbf x_\tau\)。積分方向從 \(s\) 到 \(t\lt s\) 也沒關係,公式對有號的區間都成立。

例如在雜訊預測下,\(a(t)=f(t)\)、\(b(t)=\frac12g^2(t)/\sigma_t\)、\(\mathbf N_{\bm\phi^\times}=\bm\epsilon_{\bm\phi^\times}\),所以

$$\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)=\underbrace{\mathcal E(s\to t)\mathbf x_s}_{\text{精確的線性演化}}+\frac12\int_s^t\frac{g^2(\tau)}{\sigma_\tau}\,\mathcal E(\tau\to t)\,\bm\epsilon_{\bm\phi^\times}(\mathbf x_\tau,\tau)\,d\tau,\qquad\mathcal E(s\to t)=\exp\Big(\int_s^tf(u)\,du\Big).$$
在 VP 時程下,這兩個已知的量長什麼樣(轉述者補充)

因為 \(f=\alpha_t'/\alpha_t=(\log\alpha_t)'\),積分因子是 \(\mathcal E(s\to t)=\alpha_t/\alpha_s\)。用 \(g^2=2\sigma_t\sigma_t'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\) 可以驗證 \(\mathcal E(\tau\to t)\frac{g^2(\tau)}{2\sigma_\tau}=\alpha_t\frac{d}{d\tau}\Big(\frac{\sigma_\tau}{\alpha_\tau}\Big)\),所以凍結 \(\bm\epsilon\) 之後那個係數積分有閉式 \(\alpha_t\big(\frac{\sigma_t}{\alpha_t}-\frac{\sigma_s}{\alpha_s}\big)\)。B25 會看到這正是 DDIM。在 Node 裡用數值積分(中點法 400 點)和這個閉式各算一次,相對差在 \(2\times10^{-5}\) 以下,就是數值積分本身的誤差;Demo C 用的是數值積分。

數值上的機會現在很清楚:積分因子和係數 \(b(\tau)\) 由 diffusion 時程決定,積分裡唯一未知的量是沿著軌跡算的神經預測。把這些已知的因子明確保留下來,就能讓一階近似只作用在神經預測上,而不是把係數加權的乘積 \(b(\tau)\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\) 當成一個未知的殘差一起近似。

為什麼分解的指數積分器形式有幫助

和一般的 Euler 比較:從一個精確的 empirical PF-ODE 狀態 \(\mathbf x_s\) 往回走一步到 \(t\lt s\)。定義 \(\Delta s:=s-t>0\)、\(\mathbf N_s:=\mathbf N_{\bm\phi^\times}(\mathbf x_s,s)\)。

一般的 Euler 把整個 PF-ODE 速度當成局部常數:在 \(\tau\in[t,s]\) 上 \(a(\tau)\mathbf x_\tau+b(\tau)\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\approx a(s)\mathbf x_s+b(s)\mathbf N_s\),得到

$$\tilde{\mathbf x}_t^{\text{Euler}}=\mathbf x_s-\Delta s\big[a(s)\mathbf x_s+b(s)\mathbf N_s\big].$$

另一種做法是只把神經預測固定成 \(\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\approx\mathbf N_s\),同時保留精確解裡已知的時程依賴。這給出一階的分解式指數積分器更新:

$$\tilde{\mathbf x}_t^{\text{EI}}=\mathcal E(s\to t)\,\mathbf x_s+\Big[\int_s^t\mathcal E(\tau\to t)\,b(\tau)\,d\tau\Big]\mathbf N_s.$$

(書的腳註:這個更新在原本的狀態和時間變數下不是一般的 Euler。把狀態做積分因子變換,並在得到的時間座標單調的區間上做對應的時間重新參數化之後,它可以寫成一個普通的顯式 Euler 步。書在 DDIM 一節(B25)把這個連結具體化。)

兩種方法每步都用一次神經網路計算。一般 Euler 凍結整個 PF-ODE 速度,分解式更新保留已知的時程依賴、只凍結神經預測。這個分解很重要:如果把 \(b(\tau)\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\) 當成單一個殘差固定住,得到的是傳統的指數 Euler。所以分解式更新在積分裡多保留了一個已知量 \(b(\tau)\);當 \(b(\tau)\) 在這一步內是常數時,兩者一致。

三種一步法並列(轉述者整理)
$$\begin{aligned}\text{Euler:}&\quad\mathbf x_s-\Delta s\big[a(s)\mathbf x_s+b(s)\mathbf N_s\big],\\\text{傳統指數 Euler:}&\quad\mathcal E(s\to t)\mathbf x_s+\Big[\int_s^t\mathcal E(\tau\to t)\,d\tau\Big]\,b(s)\mathbf N_s,\\\text{分解式指數積分器:}&\quad\mathcal E(s\to t)\mathbf x_s+\Big[\int_s^t\mathcal E(\tau\to t)\,b(\tau)\,d\tau\Big]\mathbf N_s.\end{aligned}$$

從上往下,被當成「這一步內不變」的東西越來越少:整個速度 → \(b\mathbf N\) → 只有 \(\mathbf N\)。Demo C 三個都跑。

一個凍結預測的簡單例子。假設在這一步內 \(a(t)\equiv a\)、\(b(t)\equiv b\)、\(\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)\equiv\mathbf N_s\)。對 \(a\ne0\),

$$\tilde{\mathbf x}_t^{\text{EI}}=e^{-a\Delta s}\mathbf x_s+\frac ba\big(e^{-a\Delta s}-1\big)\mathbf N_s,\qquad\tilde{\mathbf x}_t^{\text{Euler}}=(1-a\Delta s)\mathbf x_s-b\Delta s\,\mathbf N_s.$$

展開分解式更新:

$$\tilde{\mathbf x}_t^{\text{EI}}=\tilde{\mathbf x}_t^{\text{Euler}}+\frac{(\Delta s)^2}{2}\big[a^2\mathbf x_s+ab\,\mathbf N_s\big]+\mathcal O\big((\Delta s)^3\big).$$
兩個式子怎麼來

常係數時 \(\mathcal E(s\to t)=e^{a(t-s)}=e^{-a\Delta s}\),而 \(\int_s^te^{a(t-\tau)}b\,d\tau=\frac ba\big(e^{a(t-s)}-1\big)=\frac ba(e^{-a\Delta s}-1)\)。展開 \(e^{-a\Delta s}=1-a\Delta s+\frac{a^2\Delta s^2}2+\mathcal O(\Delta s^3)\):第一項給 \((1-a\Delta s)\mathbf x_s+\frac{a^2\Delta s^2}2\mathbf x_s\),第二項給 \(\frac ba\big(-a\Delta s+\frac{a^2\Delta s^2}2\big)\mathbf N_s=-b\Delta s\mathbf N_s+\frac{ab\Delta s^2}2\mathbf N_s\)。合起來就是 Euler 加上 \(\frac{\Delta s^2}2(a^2\mathbf x_s+ab\mathbf N_s)\)。

所以小步時兩者在一階上一致,分解式更新則保留了已知動態的高階效應。大步時這個差別可能很重要。例如 \(a>0\) 時,精確的乘數 \(e^{-a\Delta s}\) 對每個 \(\Delta s>0\) 都是正的、有收縮性的,而 Euler 的近似 \(1-a\Delta s\) 在 \(a\Delta s>1\) 時變成負的,在 \(a\Delta s>2\) 時絕對值超過 1。一般 Euler 因此可能扭曲那些分解形式已經解析處理好的動態。

\(a>0\) 在 diffusion 裡什麼時候出現(轉述者補充)

看上面的表:\(\mathbf x\)-預測的線性係數是 \(a(t)=\sigma_t'/\sigma_t\)。VP 時程下 \(\sigma_t\) 隨 \(t\) 增加,所以 \(a>0\),而且 \(t\to0\) 時 \(\sigma_t\to0\),\(\sigma_t'/\sigma_t\) 會變得很大(DDPM 式時程下,\(t\) 小時介於 \(1/(2t)\) 和 \(1/t\) 之間)。倒著走時,乘數 \(e^{-a\Delta s}=\sigma_t/\sigma_s\):狀態按雜訊等級的比例縮小,永遠是正的。Euler 的 \(1-a\Delta s\) 在接近資料的那幾步就可能出事。\(\bm\epsilon\)-預測下的線性係數則是 \(f=-\beta/2\lt0\),乘數 \(\alpha_t/\alpha_s>1\),沒有變號問題。Demo B 畫出這兩個乘數。

在完整的 PF-ODE 裡,神經預測一般會沿軌跡變化。把分解式更新從精確解裡減掉:

$$\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)-\tilde{\mathbf x}_t^{\text{EI}}=\int_s^t\mathcal E(\tau\to t)\,b(\tau)\Big[\mathbf N_{\bm\phi^\times}(\mathbf x_\tau,\tau)-\mathbf N_s\Big]d\tau.$$

所以把已知的、依賴時程的動態解析處理之後,剩下的離散化誤差由神經預測沿軌跡的變化決定。這個分離是之後好幾個 diffusion 專用解法以不同方式利用的基本數值原則。

這個式子的另一面(轉述者補充)

它也說明了分解式更新什麼時候不划算:如果 \(\mathbf N\) 沿軌跡變化很大,而整個速度 \(a\mathbf x+b\mathbf N\) 反而接近常數(兩項互相抵消),那凍結 \(\mathbf N\) 會比凍結整個速度更糟。一維的例子:資料是很寬的高斯時,PF-ODE 的軌跡幾乎不動、速度幾乎是 0,但 \(\bm\epsilon^*\approx\sigma_tx\) 隨 \(\sigma_t\) 變化很大。Demo C 量到了這兩種情形。實際的影像資料集中在低維流形附近、遠比雜訊尺度窄,比較接近「\(\mathbf N\) 幾乎不變」的那一端,這和實務上 DDIM 類方法的好表現一致。

Demo B凍結預測時的兩個乘數轉述者補充

上圖是書的常係數例子:倒著走一步時,狀態 \(\mathbf x_s\) 前面的乘數,精確(分解式指數積分器)是 \(e^{-a\Delta s}\),Euler 是 \(1-a\Delta s\)。下圖是 DDPM 式 VP 時程下兩種預測的線性係數 \(a(t)\):\(\bm\epsilon\)-預測的 \(f(t)=-\beta(t)/2\),\(\mathbf x\)-預測的 \(\sigma_t'/\sigma_t\)。

精確 e^{−aΔs}Euler 1 − aΔs
x-預測:σ′/σε-預測:f = −β/2

05從數值想法到 diffusion 取樣器書 §9.1.3

這一章其餘的部分,說明這些數值想法怎麼出現在現代的 diffusion 取樣器裡:

  • DDIM(§9.2,B25):用目前的模型預測建一個一階更新。
  • DEIS(§9.3,B26):用前幾步的預測建高階近似。
  • DPM-Solver(§9.4,B26):用這一步內額外的模型計算發展高階更新。
  • DPM-Solver++(§9.5,B27):基於乾淨資料預測的兩個對應變體:single-step 的 DPM-Solver++(2S) 在這一步內做額外計算,multistep 的 DPM-Solver++(2M) 重用前幾步的預測。
  • ParaDiGMS(§9.6,B27):透過不動點迭代一起更新好幾個時間點,讓計算可以跨時間平行。

下表把這些 diffusion 取樣器和古典的數值想法連起來:

古典想法更新怎麼建構diffusion 的例子位置
Euler 型的一階更新用這一步開頭的模型預測,推進到下一個狀態。DDIM;DPM-Solver-1§9.2、§9.4
RK 型的分段更新完成這一步之前,先在額外的中間狀態計算模型。高階 DPM-Solver;DPM-Solver++(2S)§9.4、§9.5
AB 型的 multistep 更新重用前幾步的模型預測建構下一個更新。DEIS;DPM-Solver++(2M)§9.3、§9.5
Picard 型的不動點迭代一起更新好幾個時間點,反覆精煉它們的狀態。ParaDiGMS§9.6

這些連結為後面的方法提供一張高層次的數值路線圖。diffusion 解法還受益於 PF-ODE 特有的結構,包括不同的預測參數化、解析已知的時程係數,以及其他的時間參數化。為了系統地呈現,之後每一節都採用相同的大結構:先推導 diffusion 解法、說明它利用的數值想法,再連到對應的古典解法原理,最後和這一章其他的 diffusion 解法對照。這讓共同的數值骨架和區分各方法的 diffusion 專屬成分都清楚可見。

Demo C五種一步法的誤差與 NFE轉述者補充

一維資料、DDPM 式 VP 時程,模型用精確的 \(\bm\epsilon^*\)(高斯混合可以算出來),所以這裡只有離散化誤差。300 個起點 \(\mathbf x_T\sim\mathcal N(0,1)\),時間格點在 \(t\) 上均勻、從 \(T=1\) 走到 \(t_M=0.002\)(\(t=0\) 時 \(\sigma_t=0\),\(\bm\epsilon\) 和 \(\mathbf x\)-形式的係數會發散,實務上都停在一個小的 \(t\))。參考答案 \(\widetilde{\bm\Psi}\) 用 RK4 走 4,000 步。誤差是 \(|\tilde x_{t_M}-\widetilde{\bm\Psi}_{T\to t_M}(x_T)|\) 的平均。五種方法:Euler、Heun(RK2,每步 2 NFE)、RK4(每步 4 NFE),三者都用直接速度形式;傳統指數 Euler 和分解式指數積分器(\(\bm\epsilon\)-預測),每步 1 NFE。

分解式指數積分器傳統指數 EulerEulerHeunRK4模型誤差(只在「有偏差」時)

瀏覽器實測(和 Node 原型一致;每種資料約 1–2 秒)。精確模型下的離散化誤差:

資料方法NFE 481632128
一個窄峰分解式指數積分器0.00710.00680.00620.00520.0025
傳統指數 Euler0.0240.0150.00710.00390.0013
Euler0.210.0660.0200.00620.00093
Heun> 32.70.460.0650.0022
RK4> 32.90.740.120.0014
兩個窄峰分解式指數積分器0.390.100.0120.00400.0022
Euler0.370.140.0250.00580.00075
Heun> 3> 30.630.0650.0024
兩個寬峰分解式指數積分器0.340.150.0750.0380.0095
Euler0.0990.0240.00900.00420.0010
RK40.200.0610.00720.00029\(6.9\times10^{-7}\)

(1) 資料幾乎是一個點時,分解式指數積分器大勝。4 NFE 的誤差 0.0071,Euler 是 0.21,差了 30 倍;傳統指數 Euler(0.024)介於中間,因為它多凍結了 \(b(\tau)\)。原因就是局部誤差的式子:沿著精確軌跡,\(\bm\epsilon^*\) 在大部分時間幾乎不變(單一高斯時 \(\bm\epsilon^*=\sigma_tz/\sqrt{\alpha_t^2\cdot0.02^2+\sigma_t^2}\),\(\sigma_t\gg0.02\) 時就是固定的 \(z\)),凍結它幾乎不犯錯。(2) 大步的高階方法會壞掉。同一份資料,Heun 和 RK4 在 4、8 NFE 的誤差都超過 2:接近 \(t=0\) 時速度場對 \(x\) 非常敏感(剛性),大步的 Euler 型中間預測一下子就衝出去。(3) 但它不是處處都贏。單一窄峰時,到了 128 NFE,Euler(0.00093)反而比分解式(0.0025)準:在最後一段 \(\sigma_t\) 小到和 0.02 相當,\(\bm\epsilon^*\) 開始快速變化。兩個寬峰時,Euler 從頭到尾都準得多(4 NFE:0.099 對 0.34):這時 PF-ODE 的總速度接近 0,\(\bm\epsilon^*\) 卻隨 \(\sigma_t\) 變化很大,凍結 \(\bm\epsilon\) 反而犯大錯。兩個窄峰介於中間:8 到 32 NFE 分解式比較好,128 NFE 時 Euler 比較好。這三個情形都是「誤差由神經預測沿軌跡的變化決定」的直接結果。(4) 模型誤差的下限。把模型切成「有偏差」(兩團的位置和寬度各偏一點),模型誤差是:一個窄峰 0.050、兩個窄峰 0.041、兩個寬峰 0.044。單一窄峰時,分解式在 4 NFE 的總誤差就已經是 0.050,等於下限,再加步數完全沒用。總誤差偶爾會低於下限(例如 Heun 32 NFE 是 0.014):兩種誤差的方向碰巧相反、互相抵消,三角不等式只是上界。

與 CS236 的對照

本頁CS236 複習頁
PF-ODE、用 ODE 解法取樣第 14 講
DDIM 與少步取樣的動機第 17 講
Euler、RK、局部誤差與階數、剛性補充課 B
條件期望是正交投影補充課 A

常見誤解

誤解:「single-step 方法每步只呼叫一次模型」。single-step 是指不用前幾步的資訊;RK 方法在同一步內可以呼叫好幾次(第 2 節)。
誤解:「步數夠多,生成就完美」。步數只減少離散化誤差;學到的 ODE 和真正的 ODE 之間的模型誤差不會因此變小(第 2 節、Demo C)。
誤解:「換一種預測參數化,就是換了一條 ODE」。從同一個模型輸出精確換算時,是同一條 empirical PF-ODE,只是數值形式不同;獨立訓練的不同目標才可能是不同的 ODE(第 4 節)。
誤解:「分解式指數積分器就是指數 Euler」。傳統的指數 Euler 把 \(b(\tau)\mathbf N\) 一起凍結;分解式只凍結 \(\mathbf N\),保留 \(b(\tau)\) 在積分裡(第 4 節)。
誤解:「高階方法一定比較好」。步太大時,對剛性的動態,Heun 和 RK4 可能直接發散;Demo C 在窄峰資料、少步數時看得到。
誤解:「指數積分器在任何情況都比 Euler 準」。它的誤差由神經預測沿軌跡的變化決定;預測變化大而總速度接近常數時,它可能比 Euler 差(第 4 節、Demo C)。

自我測驗

1. 寫出 empirical PF-ODE 的積分形式。\(\widetilde{\bm\Psi}\) 和 \(\bm\Psi\) 差在哪?
\(\widetilde{\bm\Psi}_{s\to t}(\mathbf x_s)=\mathbf x_s+\int_s^t[\mathbf f-\frac12g^2\mathbf s_{\bm\phi^\times}]d\tau\)。\(\widetilde{\bm\Psi}\) 用學到的 score,\(\bm\Psi\) 用真正的 score;兩者的差是模型誤差,和解法無關。
2. 解法設計的三個獨立選擇是什麼?
預測的參數化(\(\mathbf s,\bm\epsilon,\mathbf x,\mathbf v\))、時間的參數化(\(t\) 或其他)、數值近似(只用目前、這一步內多算、或重用過去)。
3. 為什麼 \(\mathbb E\|\bm\epsilon^*\|^2\le D\)?這對 score 預測意味著什麼?
條件期望是正交投影:\(\mathbb E\|\bm\epsilon\|^2=\mathbb E\|\bm\epsilon^*\|^2+\mathbb E\|\bm\epsilon-\bm\epsilon^*\|^2\)。score 是 \(-\bm\epsilon^*/\sigma_t\),期望平方範數上界是 \(D/\sigma_t^2\),小雜訊時尺度很差。
4. 推出 \(\mathbf x\)-預測下的 \(a(t)\) 和 \(b(t)\)。
把 \(\mathbf s=-(\mathbf x-\alpha_t\hat{\mathbf x}_0)/\sigma_t^2\) 和 \(\frac12g^2=\sigma_t\sigma_t'-f\sigma_t^2\) 代入 \(f\mathbf x-\frac12g^2\mathbf s\),得 \(\frac{\sigma_t'}{\sigma_t}\mathbf x+\alpha_t(\frac{\alpha_t'}{\alpha_t}-\frac{\sigma_t'}{\sigma_t})\hat{\mathbf x}_0\)。
5. 分解式指數積分器、傳統指數 Euler、Euler 各凍結了什麼?
分解式:只凍結 \(\mathbf N\);傳統指數 Euler:凍結 \(b\mathbf N\);Euler:凍結整個速度 \(a\mathbf x+b\mathbf N\)。三者每步都只要一次 NFE。
6. 常係數、凍結預測時,什麼條件下 Euler 的乘數會變號?什麼時候會放大?
\(1-a\Delta s\lt0\) 當 \(a\Delta s>1\);\(|1-a\Delta s|>1\) 當 \(a\Delta s>2\)(\(a>0\) 時)。精確的 \(e^{-a\Delta s}\) 永遠在 \((0,1)\)。
7. 分解式指數積分器的局部誤差由什麼決定?
\(\int_s^t\mathcal E(\tau\to t)b(\tau)[\mathbf N(\mathbf x_\tau,\tau)-\mathbf N_s]d\tau\):神經預測沿軌跡偏離起點值的程度。