取樣即解微分方程:離散化、步數與 NFE
把抽象的「解 ODE」變成你真的會在意的工程數字。
到這裡,「生成」已經有了一個乾淨的定義:從 出發,沿著學到的速度場把 ODE 積分到 。但電腦不會「連續積分」——它只能一小步一小步地走。這一篇就看這件事帶來的代價,以及為什麼它催生了一整類研究。
換個角度:生成是「一步一步走完一條積分」
理想的 ODE 是「每一瞬間都重新看方向」。實作上我們把時間切成幾段,每段只看一次方向、然後直直走一小段:
這就是 Euler 法。每呼叫一次 ,叫做一次 function evaluation;走幾步,就大致呼叫幾次。生成的速度與成本,幾乎就由這個次數決定。
先記這一句
取樣品質和取樣速度,往往是同一枚硬幣的兩面:步數多,路徑跟得準但慢;步數少,快但會偏。研究的目標,是用更少步走得更準。
每呼叫一次網路就是一次 NFE(number of function evaluations)。一張高品質 diffusion 圖可能要幾十到上千 NFE——這就是它「慢」的根源。下面這個(沿用自 Flow Matching 系列的)demo,讓你直接看見步數變少時,離散化造成的偏移如何放大:
把畫面寫成數學
用有限步去近似一條連續軌跡,必然會有誤差——步子邁得越大,「以直線代替曲線」的偏差就越明顯,這個偏差叫 truncation error。直覺很簡單:步數多 → 跟得準但慢;步數少 → 快但容易偏。研究因此沿兩條路走:
- 更聰明的走法:在同樣的步數(NFE)下把誤差壓低(例如 DDIM 這類更準的 sampler)。
- 更好走的路 / 蒸餾:把模型或路徑改造成「少步、甚至一步就夠」(rectified flow、consistency models 等)。
(誤差怎麼隨步長精確地縮放、各種高階 solver 的細節,屬於更技術的內容,留給 Diffusion & Flow Models 課程。)
幾個容易想歪的地方
這怎麼接到論文?
「取樣 = 解微分方程」這個視角,把 DDIM、DPM-Solver 這類快速 sampler,和 rectified flow、consistency models 這類少步模型,放進同一個問題裡:如何用更少的 NFE 得到更好的樣本? 這也是 diffusion / flow 走向實用、即時生成的主戰場。
下一步
我們已經把「生成」從抽象的解 ODE,落到「走幾步、多準、多貴」的具體取捨。到這裡,noise、score、velocity 三種訊號,加上「怎麼取樣」這一步,都湊齊了。下一篇 三種語言 把它們收成一句話,作為整門課的收尾。
參考文獻
- Song, J., Meng, C., Ermon, S. Denoising Diffusion Implicit Models. ICLR 2021.
- Lu, C., et al. DPM-Solver. NeurIPS 2022.
- Song, Y., et al. Consistency Models. ICML 2023.