JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

擴散模型:從 DDPM 到 SDE 與 ODE

一步步用雜訊摧毀資料,再學著把它逆轉回來。同一個模型可以讀成馬可夫鏈、隨機微分方程,或一個確定性 ODE——每種讀法都換來不同的好處。

去雜訊的核心概念

去雜訊擴散機率模型(denoising diffusion probabilistic models, DDPM)定義一個固定的前向過程,在 T 步內逐漸加入高斯雜訊,直到資料與純雜訊無法區分。由於每一步都是高斯、且排程固定,任一步 t 的邊際都有封閉形式——你可以從 *x_0* 一步直接跳到 x_t。模型只學反向的鏈:給定加噪的 x_t,預測雜訊稍少的 *x_{t−1}*。

這正是打破指南 1 中生成三難的那筆交易。我們不要求一個網路一躍從雜訊跳到逼真影像,而是要它做一連串微小、局部高斯的修正。每一步都是容易的回歸;難度被攤提到數百步之上。

扩散过程正向逐步加噪,再学习逆转它:把纯噪声一步步去噪还原成样本。

一组图像从左侧的随机噪声逐步变为右侧的清晰图像。

訓練其實就是掃過時間的去雜訊分數匹配

這裡上一篇指南就回本了。DDPM 的訓練損失化約成預測在隨機抽取的時間步加入的雜訊 ε——而預測 ε 正是去雜訊分數匹配,因為最佳雜訊預測器與加噪邊際的分數 *∇ log p_t(x_t)* 成正比。所以一個 DDPM 就是一個在每一個雜訊尺度同時估計分數的分數匹配模型,這也是它又叫分數式擴散的原因。單尺度朗之萬所缺的退火,現在內建了。

# DDPM training step
t   = randint(1, T)               # random noise level
eps = randn_like(x0)
xt  = sqrt(abar[t]) * x0 + sqrt(1 - abar[t]) * eps  # closed-form
loss = mse(eps_net(xt, t), eps)   # predict the injected noise
一步前向跳到 x_t,一次 ε 預測。簡單、穩定,且等價於在雜訊尺度 t 的分數匹配。

連續觀點:前向與反向 SDE

讓步數趨於無限,這條鏈就變成一個隨機微分方程(stochastic differential equation, SDE):一個把資料平滑驅動成雜訊的前向 SDE。Anderson 的經典結果指出,這個前向 SDE 對應一個反向時間的 SDE,能把雜訊變回資料——而那個反向方程裡唯一的未知量,就是分數 *∇ log p_t(x),正是我們訓練出來的東西。DDPM、分數式模型,以及一整個雜訊排程動物園,都成為這個連續框架的特例*。

dx=\left[f(x,t)-g(t)^{2}\,\nabla_{x}\log p_t(x)\right]dt+g(t)\,d\bar{w}

逆时间随机微分方程:减去由分数缩放的漂移项并注入噪声,把噪声驱回数据。

確定性的雙胞胎:機率流 ODE 與 DDIM

每個擴散 SDE 都有一個確定性的夥伴,即機率流 ODE(probability-flow ODE),其軌跡在每個時間都帶有完全相同的邊際分布 p_t——但不注入任何雜訊。解一個 ODE 遠比模擬 SDE 便宜,你可以用高階求解器,而且由於從雜訊到資料的映射現在是確定且可逆的,你能得到任一樣本明確定義的潛在編碼(對編輯與精確概似都有用)。

\frac{dx}{dt}=f(x,t)-\tfrac{1}{2}\,g(t)^{2}\,\nabla_{x}\log p_t(x)

概率流常微分方程:与 SDE 共享相同边缘分布 p_t 的确定性孪生方程,分数项减半且不注入噪声。

DDIM 是實現這條確定性路徑的離散、非馬可夫取樣器。它與 DDPM 共用訓練,但重新詮釋取樣,讓你能跳過排程的大段,把一千步降到幾十步而幾乎不損品質。DDIM 是「慢速隨機 DDPM」與「快速確定性 ODE」之間實用的橋。

操控分數:無分類器引導

要讓擴散模型遵循提示詞,你把分數條件化在標籤或文字 c 上。無分類器引導(classifier-free guidance)用同一個網路(隨機丟棄 c)同時訓練條件分數 *∇ log p_t(x | c)* 與無條件分數 *∇ log p_t(x),取樣時則沿著兩者之差*外插:一個引導權重把樣本推向更強烈符合類別的區域。它是現代文字生成影像(text-to-image)系統,以及(搭配 VAE 前端的)潛在擴散(latent diffusion)背後的主力。

\tilde{\epsilon}_\theta(x_t,c)=(1+w)\,\epsilon_\theta(x_t,c)-w\,\epsilon_\theta(x_t)

无分类器引导:以权重 w 将条件预测沿远离无条件预测的方向外推。

誠實的提醒:引導以多樣性換取保真度。把權重拉高,樣本看起來更銳利、更貼合提示詞,卻會崩向少數原型、過飽和,並失去分布的尾端。選擇權重是一個真正的偏差—變異數旋鈕,不是免費的品質開關——每當某個展示乾淨得可疑時,你都該對這個反覆出現的主題保持懷疑。