去雜訊的核心概念
去雜訊擴散機率模型(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
連續觀點:前向與反向 SDE
讓步數趨於無限,這條鏈就變成一個隨機微分方程(stochastic differential equation, SDE):一個把資料平滑驅動成雜訊的前向 SDE。Anderson 的經典結果指出,這個前向 SDE 對應一個反向時間的 SDE,能把雜訊變回資料——而那個反向方程裡唯一的未知量,就是分數 *∇ log p_t(x),正是我們訓練出來的東西。DDPM、分數式模型,以及一整個雜訊排程動物園,都成為這個連續框架的特例*。
逆时间随机微分方程:减去由分数缩放的漂移项并注入噪声,把噪声驱回数据。
確定性的雙胞胎:機率流 ODE 與 DDIM
每個擴散 SDE 都有一個確定性的夥伴,即機率流 ODE(probability-flow ODE),其軌跡在每個時間都帶有完全相同的邊際分布 p_t——但不注入任何雜訊。解一個 ODE 遠比模擬 SDE 便宜,你可以用高階求解器,而且由於從雜訊到資料的映射現在是確定且可逆的,你能得到任一樣本明確定義的潛在編碼(對編輯與精確概似都有用)。
概率流常微分方程:与 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)背後的主力。
无分类器引导:以权重 w 将条件预测沿远离无条件预测的方向外推。
誠實的提醒:引導以多樣性換取保真度。把權重拉高,樣本看起來更銳利、更貼合提示詞,卻會崩向少數原型、過飽和,並失去分布的尾端。選擇權重是一個真正的偏差—變異數旋鈕,不是免費的品質開關——每當某個展示乾淨得可疑時,你都該對這個反覆出現的主題保持懷疑。