← 返回筆記

研究領域 / Flow-Based Generative Models / From Noise to Data / 2026年6月

取樣即解微分方程:離散化、步數與 NFE

可閱讀 4 分鐘閱讀

把抽象的「解 ODE」變成你真的會在意的工程數字。

到這裡,「生成」已經有了一個乾淨的定義:從 x0N(0,I)x_0 \sim \mathcal{N}(0,I) 出發,沿著學到的速度場把 ODE 積分到 t=1t=1。但電腦不會「連續積分」——它只能一小步一小步地走。這一篇就看這件事帶來的代價,以及為什麼它催生了一整類研究。

換個角度:生成是「一步一步走完一條積分」

理想的 ODE 是「每一瞬間都重新看方向」。實作上我們把時間切成幾段,每段只看一次方向、然後直直走一小段:

xk+1=xk+Δtvθ(xk,tk).x_{k+1} = x_k + \Delta t \cdot v_\theta(x_k, t_k).

這就是 Euler 法。每呼叫一次 vθv_\theta,叫做一次 function evaluation;走幾步,就大致呼叫幾次。生成的速度與成本,幾乎就由這個次數決定。

先記這一句

取樣品質和取樣速度,往往是同一枚硬幣的兩面:步數多,路徑跟得準但慢;步數少,快但會偏。研究的目標,是用更少步走得更準。

每呼叫一次網路就是一次 NFE(number of function evaluations)。一張高品質 diffusion 圖可能要幾十到上千 NFE——這就是它「慢」的根源。下面這個(沿用自 Flow Matching 系列的)demo,讓你直接看見步數變少時,離散化造成的偏移如何放大:

把畫面寫成數學

用有限步去近似一條連續軌跡,必然會有誤差——步子邁得越大,「以直線代替曲線」的偏差就越明顯,這個偏差叫 truncation error。直覺很簡單:步數多 → 跟得準但慢;步數少 → 快但容易偏。研究因此沿兩條路走:

  1. 更聰明的走法:在同樣的步數(NFE)下把誤差壓低(例如 DDIM 這類更準的 sampler)。
  2. 更好走的路 / 蒸餾:把模型或路徑改造成「少步、甚至一步就夠」(rectified flow、consistency models 等)。

(誤差怎麼隨步長精確地縮放、各種高階 solver 的細節,屬於更技術的內容,留給 Diffusion & Flow Models 課程。)

幾個容易想歪的地方

想一想為什麼研究者那麼在意把 NFE(函式評估次數)降下來?

想一想把取樣步數從 100 步砍到 5 步,最直接的風險是什麼?

這怎麼接到論文?

「取樣 = 解微分方程」這個視角,把 DDIM、DPM-Solver 這類快速 sampler,和 rectified flow、consistency models 這類少步模型,放進同一個問題裡:如何用更少的 NFE 得到更好的樣本? 這也是 diffusion / flow 走向實用、即時生成的主戰場。

下一步

我們已經把「生成」從抽象的解 ODE,落到「走幾步、多準、多貴」的具體取捨。到這裡,noise、score、velocity 三種訊號,加上「怎麼取樣」這一步,都湊齊了。下一篇 三種語言 把它們收成一句話,作為整門課的收尾。

參考文獻

  1. Song, J., Meng, C., Ermon, S. Denoising Diffusion Implicit Models. ICLR 2021.
  2. Lu, C., et al. DPM-Solver. NeurIPS 2022.
  3. Song, Y., et al. Consistency Models. ICML 2023.