擴散模型原理 B04 · DDPM
The Principles of Diffusion Models · 第 2 章 §2.2–2.3

DDPM:把 encoder 固定成加雜訊,只學怎麼一步步去雜訊

DDPM 沿用階層式 VAE 的框架,但做了一個關鍵改動:encoder 不再學,而是固定成「每一步加一點高斯雜訊」的前向過程;只學反向的去雜訊。真正的反向一步 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 算不出來,但多加一個條件 \(\mathbf x_0\) 之後就變成封閉解的高斯,而且學它和學原本的目標是同一件事。這一頁從這個 conditioning trick 出發,推到實務上「預測雜訊」的簡單損失、DDPM 的 ELBO,以及「先去雜訊、再加回較少雜訊」的取樣。

書的範圍:第 2 章 §2.2(含 §2.2.1–2.2.6)、§2.3;附錄 D.1 的兩個證明 閱讀時間:約 50 分鐘

讀完這頁你應該能夠

  1. 寫出 DDPM 的前向轉移與一步到位的擾動核 \(p_i(\mathbf x_i\mid\mathbf x_0)=\mathcal N(\bar\alpha_i\mathbf x_0,(1-\bar\alpha_i^2)\mathbf I)\),並推導它。
  2. 說明為什麼 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 算不出來,而 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 是封閉解的高斯;證明「對條件分佈做 KL 匹配」和「對邊際分佈做 KL 匹配」有相同的最佳解。
  3. 從平均匹配的損失推到 \(\boldsymbol\epsilon\)-prediction 的 \(\mathcal L_{\text{simple}}\) 與 \(\mathbf x\)-prediction,說出它們的最佳解是條件期望。
  4. 寫出 DDPM 的 ELBO 三項,並推導它。
  5. 寫出 DDPM 的取樣更新,用「去雜訊、再加回較少雜訊」解讀它,並說明 DDPM 為什麼需要很多小步、因此取樣很慢。

前置知識

  • B02:加雜訊 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\)、平方誤差的最佳解是條件期望、「預測乾淨訊號再重新混合」的取樣。
  • B03:ELBO、Jensen 不等式、階層式 VAE 的 ELBO。
  • 兩個高斯相乘仍是高斯(指數裡的二次式配方);兩個同變異數高斯之間的 KL。可以參考 CS236 補充課 A。
記號:這本書的 \(\beta_i\) 是標準差,不是變異數。書寫 \(p(\mathbf x_i\mid\mathbf x_{i-1})=\mathcal N(\sqrt{1-\beta_i^2}\,\mathbf x_{i-1},\beta_i^2\mathbf I)\),而 Ho et al. (2020) 原始論文和 CS236 第 16 講寫 \(\mathcal N(\sqrt{1-\beta_t}\,\mathbf x_{t-1},\beta_t\mathbf I)\)。所以書的 \(\beta_i^2\) 對應論文的 \(\beta_t\),書的 \(\bar\alpha_i\) 對應論文的 \(\sqrt{\bar\alpha_t}\)。兩者描述的是同一個過程(書的註腳也說明了這點),對照時要換算。

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

01DDPM 是什麼書 §2.2

Denoising Diffusion Probabilistic Models(DDPM,Sohl-Dickstein et al. 2015;Ho et al. 2020)是 diffusion 建模的基石。概念上它和 VAE、階層式 VAE 一樣在變分框架裡運作,但多了一個巧妙的轉折,解決了前輩們遇到的一些困難。DDPM 的核心是兩個隨機過程:

  • 前向過程(固定的 encoder):透過轉移核 \(p(\mathbf x_i\mid\mathbf x_{i-1})\),分很多步逐漸注入高斯雜訊破壞資料,最後資料變成各向同性的高斯分佈,也就是純雜訊。換句話說,encoder 是固定的,不用學。
  • 反向去雜訊過程(可學的 decoder):一個神經網路透過參數化的分佈 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\) 學會把雜訊破壞倒回去。從純雜訊出發,反覆去雜訊,生成逼真的樣本。關鍵在於:每一步去雜訊都比 VAE 那樣一次從頭生成整個樣本容易得多。

把 encoder 固定下來、只專注學逐步生成的軌跡,讓 DDPM 有了出色的穩定性和表達力。

依書中的圖重繪(§2.2):DDPM。上排(灰色)是固定的前向過程 \(p(\mathbf x_1\mid\mathbf x_0),p(\mathbf x_2\mid\mathbf x_1),\dots,p(\mathbf x_L\mid\mathbf x_{L-1})\),逐步加高斯雜訊;下排是學到的反向過程 \(p_{\bm\phi}(\mathbf x_{L-1}\mid\mathbf x_L),\dots,p_{\bm\phi}(\mathbf x_0\mid\mathbf x_1)\),一步步去雜訊生成新樣本。和 B03 的階層式 VAE 圖比較:形狀完全一樣,只是上排不再可學。

書說這一節先專注在 DDPM,更一般、更有彈性的框架留到 §4.5(B10 第 3 節)。

02前向過程:固定的 encoder書 §2.2.1

DDPM 的前向過程是一個固定、不可訓練的操作,扮演 encoder 的角色:它分很多步逐漸對原始資料加雜訊,最後變成簡單的先驗分佈 \(p_{\text{prior}}:=\mathcal N(\mathbf 0,\mathbf I)\)。

書中的圖:DDPM 的前向過程,一張貓的照片逐步加雜訊
書中的圖(§2.2.1):DDPM 的前向過程。從 \(\mathbf x_0\sim p_{\text{data}}\)(貓的照片)開始,每一步「Add noise」,經過 \(p(\mathbf x_1\mid\mathbf x_0),p(\mathbf x_2\mid\mathbf x_1),\dots,p(\mathbf x_L\mid\mathbf x_{L-1})\),照片越來越灰、越來越糊,到 \(\mathbf x_L\) 已經只剩雜訊。箭頭下的小方塊是每一步加進去的雜訊。圖片出處:Lai et al. (2026),作者自繪。

固定的高斯轉移

每一步由一個固定的高斯轉移核支配:

$$p(\mathbf x_i\mid\mathbf x_{i-1}):=\mathcal N\big(\mathbf x_i;\sqrt{1-\beta_i^2}\,\mathbf x_{i-1},\,\beta_i^2\mathbf I\big).$$

過程從 \(\mathbf x_0\) 開始,它是從真實資料分佈 \(p_{\text{data}}\) 抽出的樣本。\(\{\beta_i\}_{i=1}^L\) 是事先決定、單調遞增的雜訊時程(noise schedule),每個 \(\beta_i\in(0,1)\) 控制第 \(i\) 步注入的高斯雜訊大小。為了方便,定義 \(\alpha_i:=\sqrt{1-\beta_i^2}\)。這個定義恰好等價於下面這個直覺的逐步更新:

$$\mathbf x_i=\alpha_i\mathbf x_{i-1}+\beta_i\boldsymbol\epsilon_i,$$

其中 \(\boldsymbol\epsilon_i\sim\mathcal N(\mathbf 0,\mathbf I)\) 彼此獨立同分佈。意思是每一步把前一個狀態 \(\mathbf x_{i-1}\) 縮小成 \(\alpha_i\) 倍,再加上大小為 \(\beta_i\) 的高斯雜訊。(注意 \(\alpha_i^2+\beta_i^2=1\):縮小訊號正好騰出空間給雜訊,所以如果 \(\mathbf x_{i-1}\) 的變異數是 1,\(\mathbf x_i\) 的變異數也還是 1。)

擾動核與先驗分佈

把轉移核遞迴地套用,得到「給定原始資料 \(\mathbf x_0\)、第 \(i\) 步帶雜訊樣本」的封閉形式:

$$p_i(\mathbf x_i\mid\mathbf x_0)=\mathcal N\big(\mathbf x_i;\,\bar\alpha_i\mathbf x_0,\,(1-\bar\alpha_i^2)\mathbf I\big),\qquad\bar\alpha_i:=\prod_{k=1}^i\sqrt{1-\beta_k^2}=\prod_{k=1}^i\alpha_k.$$

所以可以直接從 \(\mathbf x_0\) 一步抽出 \(\mathbf x_i\):

$$\mathbf x_i=\bar\alpha_i\mathbf x_0+\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon,\qquad\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I).$$
擾動核的推導(歸納法)

\(i=1\):\(\mathbf x_1=\alpha_1\mathbf x_0+\beta_1\boldsymbol\epsilon_1\),平均 \(\bar\alpha_1\mathbf x_0\)、變異數 \(\beta_1^2=1-\alpha_1^2=1-\bar\alpha_1^2\)。

假設 \(\mathbf x_{i-1}=\bar\alpha_{i-1}\mathbf x_0+\sqrt{1-\bar\alpha_{i-1}^2}\,\bar{\boldsymbol\epsilon}\),代入 \(\mathbf x_i=\alpha_i\mathbf x_{i-1}+\beta_i\boldsymbol\epsilon_i\):

$$\mathbf x_i=\alpha_i\bar\alpha_{i-1}\mathbf x_0+\underbrace{\alpha_i\sqrt{1-\bar\alpha_{i-1}^2}\,\bar{\boldsymbol\epsilon}+\beta_i\boldsymbol\epsilon_i}_{\text{兩個獨立的零平均高斯相加}}.$$

第一項是 \(\bar\alpha_i\mathbf x_0\)。雜訊部分仍是零平均高斯,變異數相加:\(\alpha_i^2(1-\bar\alpha_{i-1}^2)+\beta_i^2=\alpha_i^2-\bar\alpha_i^2+1-\alpha_i^2=1-\bar\alpha_i^2\)。得證。

如果雜訊時程 \(\{\beta_i\}_{i=1}^L\) 是遞增的序列,前向過程的分佈會收斂:

$$p_L(\mathbf x_L\mid\mathbf x_0)\longrightarrow\mathcal N(\mathbf 0,\mathbf I)\qquad\text{當 }L\to\infty,$$

這也是選 \(p_{\text{prior}}:=\mathcal N(\mathbf 0,\mathbf I)\) 當先驗的理由:它完全不依賴資料 \(\mathbf x_0\)。

為什麼會收斂、和 B02 的旋鈕是什麼關係

\(\bar\alpha_L=\prod_k\alpha_k\) 是很多個小於 1 的數相乘,步數夠多、雜訊夠大時會趨近 0,於是平均 \(\bar\alpha_L\mathbf x_0\to\mathbf 0\)、變異數 \(1-\bar\alpha_L^2\to1\),不論 \(\mathbf x_0\) 是什麼。本頁的 demo 用的時程讓 \(\bar\alpha_L^2\approx4\times10^{-5}\)。

對照 B02 的一般寫法 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\):DDPM 是 B02 的「信號旋鈕」取 \(\bar\alpha_i\)、「雜訊旋鈕」取 \(\sqrt{1-\bar\alpha_i^2}\) 的特例,兩者平方和恆為 1(B02 Demo A 的第二種旋鈕就是這一類)。注意記號:B02 的 \(\alpha_t\) 對應這裡的 \(\bar\alpha_i\),不是每一步的 \(\alpha_i\)。

03反向過程與 conditioning trick書 §2.2.2

DDPM 的精髓在於把前向過程造成的、受控制的劣化倒回去:從純粹、沒有結構的雜訊 \(\mathbf x_L\sim p_{\text{prior}}\) 出發,一步一步去雜訊,直到浮現一個連貫、有意義的資料樣本。這個反向生成是一條 Markov 鏈。

書中的圖:DDPM 的反向去雜訊過程
書中的圖(§2.2.2):DDPM 的反向(去雜訊)過程。由右往左:從雜訊 \(\mathbf x_L\sim p_{\text{prior}}\) 開始,依序對 \(i=L,\dots,1\) 抽 \(\mathbf x_{i-1}\sim p(\mathbf x_{i-1}\mid\mathbf x_i)\)(每一步「Denoise」),最後得到一張新生成的資料 \(\mathbf x_0\)。真正的轉移 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 是未知的,所以要去近似它。圖片出處:Lai et al. (2026),作者自繪。
書中的問題能不能精確算出,或至少有效地近似,這些反向轉移核 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)?尤其是考慮到 \(\mathbf x_i\sim p_i(\mathbf x_i)\) 的分佈相當複雜。

原始 DDPM 論文是直接推導複雜的 ELBO(本頁第 6 節)。書換一條比較直覺的路:利用條件機率得到一個好處理的訓練目標。

目標:匹配反向轉移

為了能生成,要近似未知的真反向轉移核 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)。引入可學的參數化模型 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\),訓練它最小化期望 KL:

$$\mathbb E_{p_i(\mathbf x_i)}\Big[\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_{i-1}\mid\mathbf x_i)\,\Vert\,p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\big)\Big].$$

但目標分佈 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 本身很難直接算。由貝氏定理,

$$p(\mathbf x_{i-1}\mid\mathbf x_i)=p(\mathbf x_i\mid\mathbf x_{i-1})\underbrace{\frac{p_{i-1}(\mathbf x_{i-1})}{p_i(\mathbf x_i)}}_{\text{算不出來}}.$$

其中的邊際分佈是對未知資料分佈的期望:

$$p_i(\mathbf x_i)=\int p_i(\mathbf x_i\mid\mathbf x_0)\,p_{\text{data}}(\mathbf x_0)\,d\mathbf x_0,$$

\(p_{i-1}(\mathbf x_{i-1})\) 也一樣。因為 \(p_{\text{data}}\) 未知,這些積分沒有封閉解,頂多能用樣本近似,所以實務上拿不到精確的密度。

書中的圖:DDPM 的 conditioning trick,邊際與條件的反向分佈
書中的圖(§2.2.2):DDPM 的 conditioning trick。左(Marginal):對一個固定的帶雜訊樣本 \(\mathbf x_i\),反向分佈 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)(紅色)要對所有可能產生 \(\mathbf x_i\) 的乾淨樣本取平均,所以可能是複雜的混合分佈(圖中是三個團組成的不規則形狀)。右(Conditional):訓練時,產生 \(\mathbf x_i\) 的那個乾淨樣本 \(\mathbf x_0\) 是已知的。以它為條件,\(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\)(綠色)就是平均和變異數都有封閉解的單一高斯,可以當成簡單的回歸目標。雖然每筆訓練資料只以一個乾淨樣本為條件,把條件化的訓練目標對所有樣本平均,得到的最佳模型和直接學邊際反向分佈相同(下面的定理)。圖片出處:Lai et al. (2026),作者在 AI 輔助下繪製。

用條件化克服難處

DDPM 的核心洞見:把反向轉移再以一個乾淨的資料樣本 \(\mathbf x_0\) 為條件。這一小步把算不出來的核變成數學上好處理的形式:

$$p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)=p(\mathbf x_i\mid\mathbf x_{i-1})\,\frac{p(\mathbf x_{i-1}\mid\mathbf x_0)}{p_i(\mathbf x_i\mid\mathbf x_0)}.$$

能好處理,來自前向過程的兩個性質:

  • Markov 性:\(p(\mathbf x_i\mid\mathbf x_{i-1},\mathbf x_0)=p(\mathbf x_i\mid\mathbf x_{i-1})\),下一步只看現在、不看更早。
  • 所有分佈都是高斯:右邊三個都是已知的高斯(轉移核和兩個擾動核)。

因此 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 本身是高斯,有封閉形式(下面的 Lemma)。更關鍵的是,這個條件化策略導出的好處理目標,在功能上和看似算不出來的邊際 KL 等價:

書中的定理:邊際與條件 KL 最小化等價 $$\mathbb E_{p_i(\mathbf x_i)}\Big[\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_{i-1}\mid\mathbf x_i)\Vert p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\big)\Big]=\mathbb E_{p_{\text{data}}(\mathbf x_0)}\mathbb E_{p_i(\mathbf x_i\mid\mathbf x_0)}\Big[\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\Vert p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\big)\Big]+C,$$ 其中 \(C\) 是和 \(\bm\phi\) 無關的常數。而且最小化它的解滿足 $$p^*(\mathbf x_{i-1}\mid\mathbf x_i)=\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}\big[p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\big]=p(\mathbf x_{i-1}\mid\mathbf x_i),\qquad\mathbf x_i\sim p_i.$$
證明(書的附錄 D.1,整理成四步)

1. 展開右邊。把 KL 的定義寫出來,右邊(不含 \(C\))是

$$\iiint p(\mathbf x_0,\mathbf x_i)\,p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\log\frac{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}{p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)}\,d\mathbf x_{i-1}\,d\mathbf x_0\,d\mathbf x_i.$$

2. 換成巢狀期望。用 \(p(\mathbf x_0,\mathbf x_i)=p(\mathbf x_i)\,p(\mathbf x_0\mid\mathbf x_i)\),寫成 \(\mathbb E_{p(\mathbf x_i)}\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}\mathbb E_{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}[\cdots]\)。

3. 拆 log。在中間插入真反向核 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\):

$$\log\frac{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}{p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)}=\log\frac{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}{p(\mathbf x_{i-1}\mid\mathbf x_i)}+\log\frac{p(\mathbf x_{i-1}\mid\mathbf x_i)}{p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)}.$$

第二項不含 \(\mathbf x_0\)。由全機率,\(\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}\mathbb E_{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}[g(\mathbf x_{i-1})]=\mathbb E_{p(\mathbf x_{i-1}\mid\mathbf x_i)}[g(\mathbf x_{i-1})]\),所以第二項的期望正是邊際 KL。第一項的期望則是 \(\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}[\mathcal D_{\mathrm{KL}}(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\Vert p(\mathbf x_{i-1}\mid\mathbf x_i))]\),和 \(\bm\phi\) 無關。

4. 合起來。

$$\text{條件 KL 的期望}=\underbrace{\mathbb E_{p(\mathbf x_i)}\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}\big[\mathcal D_{\mathrm{KL}}(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\Vert p(\mathbf x_{i-1}\mid\mathbf x_i))\big]}_{\text{和 }\bm\phi\text{ 無關}}+\text{邊際 KL 的期望}.$$

移項就是定理(所以定理裡的 \(C\) 是這個非負量的負號)。最佳解:KL 在兩個分佈相等時最小,所以模型夠有表達力時 \(p^*=p(\mathbf x_{i-1}\mid\mathbf x_i)\);而由全機率 \(p(\mathbf x_{i-1}\mid\mathbf x_i)=\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}[p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)]\)。

這個「條件化得到好處理目標」的觀點是 DDPM 的基礎,也揭露了它和其他重要 diffusion 模型之間深刻的共通點(第 3、5 章會再看到同一個技巧)。

它說的是:最小化邊際分佈之間的 KL,在數學上等同於最小化特定條件分佈之間的 KL。後者特別有用,因為關鍵的條件分佈有方便的封閉形式:

書中的 Lemma:反向條件轉移核 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 是高斯: $$p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)=\mathcal N\big(\mathbf x_{i-1};\,\bm\mu(\mathbf x_i,\mathbf x_0,i),\,\sigma^2(i)\mathbf I\big),$$ $$\bm\mu(\mathbf x_i,\mathbf x_0,i):=\frac{\bar\alpha_{i-1}\beta_i^2}{1-\bar\alpha_i^2}\,\mathbf x_0+\frac{(1-\bar\alpha_{i-1}^2)\,\alpha_i}{1-\bar\alpha_i^2}\,\mathbf x_i,\qquad\sigma^2(i):=\frac{1-\bar\alpha_{i-1}^2}{1-\bar\alpha_i^2}\,\beta_i^2.$$
Lemma 的推導:兩個高斯相乘

只看 \(\mathbf x_{i-1}\) 的函數,條件分佈正比於 \(p(\mathbf x_i\mid\mathbf x_{i-1})\,p(\mathbf x_{i-1}\mid\mathbf x_0)\),也就是

$$\exp\!\Big(-\frac{\Vert\mathbf x_i-\alpha_i\mathbf x_{i-1}\Vert^2}{2\beta_i^2}\Big)\exp\!\Big(-\frac{\Vert\mathbf x_{i-1}-\bar\alpha_{i-1}\mathbf x_0\Vert^2}{2(1-\bar\alpha_{i-1}^2)}\Big).$$

指數是 \(\mathbf x_{i-1}\) 的二次式,所以是高斯。精確度(變異數的倒數)是兩個係數相加:

$$\frac1{\sigma^2(i)}=\frac{\alpha_i^2}{\beta_i^2}+\frac1{1-\bar\alpha_{i-1}^2}=\frac{\alpha_i^2(1-\bar\alpha_{i-1}^2)+\beta_i^2}{\beta_i^2(1-\bar\alpha_{i-1}^2)}=\frac{1-\bar\alpha_i^2}{\beta_i^2(1-\bar\alpha_{i-1}^2)},$$

最後一步用 \(\alpha_i^2+\beta_i^2=1\) 和 \(\alpha_i\bar\alpha_{i-1}=\bar\alpha_i\)。平均是「精確度加權的平均」:

$$\bm\mu=\sigma^2(i)\Big(\frac{\alpha_i}{\beta_i^2}\mathbf x_i+\frac{\bar\alpha_{i-1}}{1-\bar\alpha_{i-1}^2}\mathbf x_0\Big)=\frac{(1-\bar\alpha_{i-1}^2)\alpha_i}{1-\bar\alpha_i^2}\mathbf x_i+\frac{\bar\alpha_{i-1}\beta_i^2}{1-\bar\alpha_i^2}\mathbf x_0.$$

書在 Lemma 裡用 \(\mathbf x\) 代表乾淨樣本,這裡統一寫成 \(\mathbf x_0\)。§4.5.2(B10 第 4 節)會給一個更一般、不限於 DDPM 加雜訊方式的版本。

Demo A反向一步長什麼樣:混合分佈與單一高斯轉述者補充

一維資料只有三個點:\(-1.5\)、\(0.3\)、\(1.8\)(權重 0.35、0.40、0.25)。雜訊時程用連續的 \(\bar\alpha(t)^2=e^{-(0.1t+9.95t^2)}\),切成 \(L\) 步:\(\bar\alpha_i=\bar\alpha(i/L)\)。選一個步數 \(i\) 和一個帶雜訊的值 \(\mathbf x_i\),畫出:

  • 三條虛線:以每個資料點為條件的 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\)(Lemma 的高斯),高度乘上後驗權重 \(p(\mathbf x_0\mid\mathbf x_i)\);
  • 綠色:它們的和,也就是真正的反向一步 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)(定理的最後一式);
  • 藍色:DDPM 的模型,變異數固定為 \(\sigma^2(i)\)、平均取最佳值的單一高斯。
真正的 p(xi−1 | xi)DDPM 的單一高斯各資料點的條件高斯(虛線)

先用預設值(比例 0.20、\(\mathbf x_i=-0.5\),正好在 \(-1.5\) 和 \(0.3\) 兩團之間),只改 \(L\):

\(L\)1020501001000
KL2.080.300.0390.009\(9\times10^{-5}\)
  • \(L\) 小:每一步的 \(\beta_i\) 很大,條件高斯彼此分得開,真正的反向一步是明顯的雙峰,單一高斯只能放在兩峰中間,KL 很大。
  • \(L\) 大:每一步的 \(\beta_i\) 很小,條件高斯幾乎疊在一起,真正的反向一步幾乎就是一個高斯,KL 趨近 0。
  • 不是每一步都這麼糟:把比例拉到 0.5 以上(高雜訊),即使 \(L=10\),KL 也只有 0.01 左右;這時 \(\mathbf x_i\) 已經被雜訊淹沒,每個 \(\mathbf x_0\) 給的條件高斯都差不多。困難集中在低雜訊、\(\mathbf x_i\) 落在兩團之間的地方。

\(i\) 是比例乘 \(L\) 再四捨五入,而且至少為 2(\(i=1\) 時 \(\sigma(1)=0\),反向一步是確定的)。所以 \(L=5\) 時最小只能到 \(i=2\),也就是比例 0.4,和其他 \(L\) 不能直接比。

這正是第 7 節說的 DDPM 為什麼要用很多小步:單一高斯只在步子小的時候夠用。

04建模反向轉移書 §2.2.3

這一節決定模型 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\) 的形式。有了定理的等價性,以及反向條件分佈是高斯這件事,DDPM 假設每個反向轉移都是高斯:

$$p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i):=\mathcal N\big(\mathbf x_{i-1};\,\bm\mu_{\bm\phi}(\mathbf x_i,i),\,\sigma^2(i)\mathbf I\big),$$

其中 \(\bm\mu_{\bm\phi}(\cdot,i):\mathbb R^D\to\mathbb R^D\) 是可學的平均函數,變異數 \(\sigma^2(i)>0\) 固定成 Lemma 裡的值。

把所有層的分佈都匹配起來,對時間步加總、以資料 \(\mathbf x_0\sim p_{\text{data}}\) 為條件的 KL 記作

$$\mathcal L_{\text{diffusion}}(\mathbf x_0;\bm\phi):=\sum_{i=2}^L\mathbb E_{p_i(\mathbf x_i\mid\mathbf x_0)}\Big[\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\,\Vert\,p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\big)\Big].$$

因為兩個分佈都是高斯、而且變異數相同,這個目標有封閉形式,化簡成

$$\mathcal L_{\text{diffusion}}(\mathbf x_0;\bm\phi)=\sum_{i=2}^L\frac1{2\sigma^2(i)}\,\mathbb E_{p_i(\mathbf x_i\mid\mathbf x_0)}\big\Vert\bm\mu_{\bm\phi}(\mathbf x_i,i)-\bm\mu(\mathbf x_i,\mathbf x_0,i)\big\Vert_2^2+C.$$
同變異數高斯之間的 KL

\(\mathcal D_{\mathrm{KL}}\big(\mathcal N(\bm\mu_1,s^2\mathbf I)\Vert\mathcal N(\bm\mu_2,s^2\mathbf I)\big)=\mathbb E_1\big[\tfrac{\Vert\mathbf x-\bm\mu_2\Vert^2-\Vert\mathbf x-\bm\mu_1\Vert^2}{2s^2}\big]=\tfrac{\Vert\bm\mu_1-\bm\mu_2\Vert^2}{2s^2}\)(正規化常數相同,互相抵消;展開平方後交叉項期望為 0)。這裡兩個高斯的變異數都是 \(\sigma^2(i)\),所以化簡後的 \(C\) 實際上是 0;書寫成 \(+C\) 並不影響結論。

對資料分佈取平均、略去不影響最佳化的常數,DDPM 最終的訓練目標是

$$\mathcal L_{\text{DDPM}}(\bm\phi):=\sum_{i=2}^L\frac1{2\sigma^2(i)}\,\mathbb E_{\mathbf x_0}\mathbb E_{p_i(\mathbf x_i\mid\mathbf x_0)}\Big[\big\Vert\bm\mu_{\bm\phi}(\mathbf x_i,i)-\bm\mu(\mathbf x_i,\mathbf x_0,i)\big\Vert_2^2\Big],\qquad\mathbf x_0\sim p_{\text{data}}.$$

書特別點出:前向擾動核 \(p_i(\mathbf x_i\mid\mathbf x_0)\) 在這個目標裡扮演重要的計算角色。因為每一步前向轉移都是線性高斯,合起來也有封閉的高斯形式(第 2 節),所以選定時間步 \(i\) 之後,可以直接從 \(\mathbf x_0\) 抽 \(\mathbf x_i\),不必先生成中間的 \(\mathbf x_1,\dots,\mathbf x_{i-1}\)。每一項損失只需要一個乾淨樣本、一個時間步和一個直接加雜訊的樣本就能估計,隨機訓練因此很有效率。

05實務:預測雜訊,或預測乾淨資料書 §2.2.4

\(\boldsymbol\epsilon\)-prediction

典型的 DDPM 實作並不直接用平均預測的損失,而是採用一個等價的重新參數化:\(\boldsymbol\epsilon\)-prediction(預測雜訊)。回想前向過程產生帶雜訊樣本的方式:

$$\mathbf x_i=\bar\alpha_i\mathbf x_0+\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon,\qquad\mathbf x_0\sim p_{\text{data}},\ \boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I).$$

用它把 Lemma 的反向平均改寫成

$$\bm\mu(\mathbf x_i,\mathbf x_0,i)=\frac1{\alpha_i}\Big(\mathbf x_i-\frac{1-\alpha_i^2}{\sqrt{1-\bar\alpha_i^2}}\,\boldsymbol\epsilon\Big).$$
改寫的推導

把 \(\mathbf x_0=(\mathbf x_i-\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon)/\bar\alpha_i\) 代入 Lemma 的 \(\bm\mu\),並用 \(\bar\alpha_{i-1}/\bar\alpha_i=1/\alpha_i\):

$$\bm\mu=\frac{\beta_i^2}{\alpha_i(1-\bar\alpha_i^2)}\big(\mathbf x_i-\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon\big)+\frac{(1-\bar\alpha_{i-1}^2)\alpha_i}{1-\bar\alpha_i^2}\mathbf x_i.$$

\(\mathbf x_i\) 的係數:\(\frac{\beta_i^2+\alpha_i^2(1-\bar\alpha_{i-1}^2)}{\alpha_i(1-\bar\alpha_i^2)}=\frac{1-\bar\alpha_i^2}{\alpha_i(1-\bar\alpha_i^2)}=\frac1{\alpha_i}\)。\(\boldsymbol\epsilon\) 的係數:\(-\frac{\beta_i^2}{\alpha_i\sqrt{1-\bar\alpha_i^2}}=-\frac{1-\alpha_i^2}{\alpha_i\sqrt{1-\bar\alpha_i^2}}\)。

這啟發了一個參數化:用神經網路 \(\boldsymbol\epsilon_{\bm\phi}(\mathbf x_i,i)\) 直接預測雜訊,

$$\bm\mu_{\bm\phi}(\mathbf x_i,i)=\frac1{\alpha_i}\Big(\mathbf x_i-\frac{1-\alpha_i^2}{\sqrt{1-\bar\alpha_i^2}}\underbrace{\boldsymbol\epsilon_{\bm\phi}(\mathbf x_i,i)}_{\boldsymbol\epsilon\text{-prediction}}\Big).$$

代回原本的損失,就變成預測雜訊和真實雜訊之間的平方誤差:

$$\big\Vert\bm\mu_{\bm\phi}(\mathbf x_i,i)-\bm\mu(\mathbf x_i,\mathbf x_0,i)\big\Vert_2^2\propto\big\Vert\boldsymbol\epsilon_{\bm\phi}(\mathbf x_i,i)-\boldsymbol\epsilon\big\Vert_2^2,$$

差一個依賴 \(i\) 的權重(兩個平均裡的 \(\mathbf x_i\) 項互相抵消,剩下 \(\big(\frac{1-\alpha_i^2}{\alpha_i\sqrt{1-\bar\alpha_i^2}}\big)^2\) 倍的雜訊誤差)。直覺上,模型像個「雜訊偵探」:估計前向過程在每一步加進去的隨機雜訊。從髒樣本減掉這個估計,就更接近乾淨的原圖;一步一步重複,就能從純雜訊重建資料。

簡化的損失

實務上再把權重項拿掉,得到廣泛使用的 DDPM 訓練損失:

$$\mathcal L_{\text{simple}}(\bm\phi):=\mathbb E_i\,\mathbb E_{\mathbf x_0\sim p_{\text{data}}}\,\mathbb E_{\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)}\Big[\big\Vert\boldsymbol\epsilon_{\bm\phi}(\mathbf x_i,i)-\boldsymbol\epsilon\big\Vert_2^2\Big],\qquad\mathbf x_i=\bar\alpha_i\mathbf x_0+\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon.$$

因為目標雜訊在每個時間步的變異數都是 1,這個 \(\ell_2\) 損失在所有時間步的尺度一致,不會出現目標消失或爆炸,也就不需要另外加權。

重要的是,\(\mathcal L_{\text{DDPM}}\) 和 \(\mathcal L_{\text{simple}}\) 有相同的最佳解,因為 \(\mathcal L_{\text{simple}}\) 本質上是一個最小平方問題(§4.3.1 與 §6.3.1 會正式證明類似的命題,見 B09 第 4 節、B16 第 2 節):

$$\boldsymbol\epsilon^*(\mathbf x_i,i)=\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i],\qquad\mathbf x_i\sim p_i.$$

書的註腳:拿掉 ELBO 推出的權重會改變訓練目標,但不改變母體最佳的預測 \(\boldsymbol\epsilon^*(\mathbf x_i,i)=\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i]\)。所以加權和簡化的損失有相同的理想預測器,只是訓練時強調不同的雜訊等級;實務上這個權重仍會影響最佳化和表現。

直覺上,\(\boldsymbol\epsilon\)-prediction 網路估計的是「前向過程為了產生 \(\mathbf x_i\) 加進去的雜訊」。即使 \(\mathbf x_i\) 不能唯一決定原本的乾淨樣本,在最佳時這個估計會等於真實雜訊的條件期望。

為什麼每個時間步各自的最佳解不受權重影響

網路對每個時間步 \(i\) 都可以給不同的輸出(\(i\) 是輸入的一部分),所以總損失對 \(i\) 的加權和裡,每一項可以各自被最小化。只要每個權重都是正的,每一項的最小平方解都是 \(\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i]\),權重只決定「網路容量有限、做不到完美時,優先把哪些時間步做好」。

另一個等價參數化:\(\mathbf x\)-prediction

Lemma 的反向平均也啟發了另一個等價的參數化:\(\mathbf x\)-prediction(預測乾淨資料)。訓練一個神經網路 \(\mathbf x_{\bm\phi}(\mathbf x_i,i)\),從雜訊等級 \(i\) 的帶雜訊輸入 \(\mathbf x_i\sim p_i\) 預測乾淨(去雜訊後)的樣本。把反向平均裡真正的 \(\mathbf x_0\) 換成 \(\mathbf x_{\bm\phi}(\mathbf x_i,i)\):

$$\bm\mu_{\bm\phi}(\mathbf x_i,i)=\frac{\bar\alpha_{i-1}\beta_i^2}{1-\bar\alpha_i^2}\,\mathbf x_{\bm\phi}(\mathbf x_i,i)+\frac{(1-\bar\alpha_{i-1}^2)\alpha_i}{1-\bar\alpha_i^2}\,\mathbf x_i.$$

和 \(\boldsymbol\epsilon\)-prediction 類似,訓練目標可以寫成

$$\big\Vert\bm\mu_{\bm\phi}(\mathbf x_i,i)-\bm\mu(\mathbf x_i,\mathbf x_0,i)\big\Vert_2^2\propto\big\Vert\mathbf x_{\bm\phi}(\mathbf x_i,i)-\mathbf x_0\big\Vert_2^2,\qquad\mathbf x_0\sim p_{\text{data}},$$

模型被訓練成從帶雜訊版本預測原始資料樣本。這把平均匹配的損失化成

$$\mathbb E_i\,\mathbb E_{\mathbf x_0\sim p_{\text{data}}}\,\mathbb E_{\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)}\Big[\omega_i\big\Vert\mathbf x_{\bm\phi}(\mathbf x_i,i)-\mathbf x_0\big\Vert_2^2\Big],$$

\(\omega_i\) 是某個權重函數。因為這是最小平方問題,最佳解是

$$\mathbf x^*(\mathbf x_i,i)=\mathbb E[\mathbf x_0\mid\mathbf x_i],\qquad\mathbf x_i\sim p_i,$$

也就是說,模型應該預測「看到帶雜訊觀測 \(\mathbf x_i\) 之後,乾淨資料的期望值」(這正是 B02 的網路學到的東西)。

\(\mathbf x\)-prediction 和 \(\boldsymbol\epsilon\)-prediction 在數學上等價,透過前向過程連起來:

$$\mathbf x_i=\bar\alpha_i\,\mathbf x_{\bm\phi}(\mathbf x_i,i)+\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon_{\bm\phi}(\mathbf x_i,i).$$

也就是說,可以預測乾淨樣本,也可以預測雜訊,只要兩者照前向加雜訊的方式組合起來能重現 \(\mathbf x_i\)。

06DDPM 的 ELBO書 §2.2.5

反向轉移定好之後,DDPM 的聯合生成分佈是

$$p_{\bm\phi}(\mathbf x_0,\mathbf x_{1:L}):=p_{\bm\phi}(\mathbf x_0\mid\mathbf x_1)\,p_{\bm\phi}(\mathbf x_1\mid\mathbf x_2)\cdots p_{\bm\phi}(\mathbf x_{L-1}\mid\mathbf x_L)\,p_{\text{prior}}(\mathbf x_L),$$

資料的邊際生成模型是 \(p_{\bm\phi}(\mathbf x_0):=\int p_{\bm\phi}(\mathbf x_0,\mathbf x_{1:L})\,d\mathbf x_{1:L}\)。

事實上,用 \(\mathcal L_{\text{diffusion}}\) 訓練 DDPM 可以嚴格地建立在最大概似估計上:它的目標構成一個 ELBO,和 VAE、HVAE 的一樣,是 log 密度的下界。

書中的定理:DDPM 的 ELBO $$-\log p_{\bm\phi}(\mathbf x_0)\le-\mathcal L_{\text{ELBO}}(\mathbf x_0;\bm\phi):=\mathcal L_{\text{prior}}(\mathbf x_0)+\mathcal L_{\text{recon.}}(\mathbf x_0;\bm\phi)+\mathcal L_{\text{diffusion}}(\mathbf x_0;\bm\phi),$$ $$\mathcal L_{\text{prior}}(\mathbf x_0):=\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_L\mid\mathbf x_0)\,\Vert\,p_{\text{prior}}(\mathbf x_L)\big),\qquad\mathcal L_{\text{recon.}}(\mathbf x_0;\bm\phi):=\mathbb E_{p(\mathbf x_1\mid\mathbf x_0)}\big[-\log p_{\bm\phi}(\mathbf x_0\mid\mathbf x_1)\big],$$ $$\mathcal L_{\text{diffusion}}(\mathbf x_0;\bm\phi)=\sum_{i=2}^L\mathbb E_{p_i(\mathbf x_i\mid\mathbf x_0)}\Big[\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\,\Vert\,p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\big)\Big].$$
證明(書的附錄 D.1,補上書略過的重新分組)

步驟 1:Jensen。以前向過程 \(p(\mathbf x_{1:L}\mid\mathbf x_0)=\prod_{i=1}^Lp(\mathbf x_i\mid\mathbf x_{i-1})\) 當「encoder」,和 B03 一樣乘除再用 Jensen:

$$\log p_{\bm\phi}(\mathbf x_0)\ge\mathbb E_{p(\mathbf x_{1:L}\mid\mathbf x_0)}\!\left[\log\frac{p_{\bm\phi}(\mathbf x_0,\mathbf x_{1:L})}{p(\mathbf x_{1:L}\mid\mathbf x_0)}\right]=:\mathcal L_{\text{ELBO}}(\mathbf x_0;\bm\phi).$$

步驟 2:把分母倒過來寫。關鍵是前向過程的另一種分解(由 Markov 性與貝氏定理):

$$p(\mathbf x_{1:L}\mid\mathbf x_0)=p(\mathbf x_L\mid\mathbf x_0)\prod_{i=2}^Lp(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0).$$

(轉述者補充這一式的由來:對每個 \(i\ge2\),\(p(\mathbf x_i\mid\mathbf x_{i-1})=p(\mathbf x_i\mid\mathbf x_{i-1},\mathbf x_0)=p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\,\frac{p(\mathbf x_i\mid\mathbf x_0)}{p(\mathbf x_{i-1}\mid\mathbf x_0)}\)。把 \(i=2,\dots,L\) 乘起來,分數部分逐項相消只剩 \(\frac{p(\mathbf x_L\mid\mathbf x_0)}{p(\mathbf x_1\mid\mathbf x_0)}\),再乘上 \(i=1\) 的 \(p(\mathbf x_1\mid\mathbf x_0)\) 就得到上式。)

步驟 3:代入、配對。分子是 \(p_{\text{prior}}(\mathbf x_L)\prod_{i=1}^Lp_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\),於是

$$-\mathcal L_{\text{ELBO}}=\mathbb E_{p(\mathbf x_{1:L}\mid\mathbf x_0)}\!\left[\log\frac{p(\mathbf x_L\mid\mathbf x_0)}{p_{\text{prior}}(\mathbf x_L)}+\sum_{i=2}^L\log\frac{p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)}{p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)}-\log p_{\bm\phi}(\mathbf x_0\mid\mathbf x_1)\right].$$

步驟 4:每項只對用到的變數取期望。第一項只含 \(\mathbf x_L\),期望是 \(\mathcal L_{\text{prior}}\);最後一項只含 \(\mathbf x_1\),是 \(\mathcal L_{\text{recon.}}\);中間第 \(i\) 項含 \(\mathbf x_{i-1},\mathbf x_i\),先對 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 取期望得到 KL,再對 \(p(\mathbf x_i\mid\mathbf x_0)\) 取期望,加總就是 \(\mathcal L_{\text{diffusion}}\)。

ELBO 由三項組成:

  • \(\mathcal L_{\text{prior}}\):只要把雜訊時程 \(\{\beta_i\}\) 選得讓 \(p(\cdot\mid\mathbf x_0)\approx p_{\text{prior}}(\cdot)\),這一項就可以忽略。它也不含 \(\bm\phi\)。
  • \(\mathcal L_{\text{recon.}}\):可以用 Monte Carlo 估計來近似並最佳化,實作細節見 Ho et al. (2020)、Kingma et al. (2021)。
  • \(\mathcal L_{\text{diffusion}}\):在每一步 \(i\) 把反向條件分佈 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\) 匹配到 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\),正是第 4 節的目標。

ELBO 也可以透過資料處理不等式來解讀(B03 第 5 節的聯合 KL 上界),潛在變數取 \(\mathbf z=\mathbf x_{1:L}\):

$$\mathcal D_{\mathrm{KL}}\big(p_{\text{data}}(\mathbf x_0)\,\Vert\,p_{\bm\phi}(\mathbf x_0)\big)\le\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_0,\mathbf x_{1:L})\,\Vert\,p_{\bm\phi}(\mathbf x_0,\mathbf x_{1:L})\big),$$

其中 \(p(\mathbf x_0,\mathbf x_{1:L}):=p_{\text{data}}(\mathbf x_0)\,p(\mathbf x_1\mid\mathbf x_0)\,p(\mathbf x_2\mid\mathbf x_1)\cdots p(\mathbf x_L\mid\mathbf x_{L-1})\) 是沿著前向過程的聯合分佈。

書中的 RemarkDiffusion 的變分觀點以特別方便的方式嵌進階層式潛在變數的圖像:「encoder」是固定的前向加雜訊鏈,所以沒有需要學的推論網路。ELBO 仍然拆成逐步的 KL 項,加上終點的先驗項和重建項。讓 DDPM 訓練特別好處理的,是在線性高斯的前向過程下,這些逐步的 KL 項可以改寫成有封閉解目標的簡單去雜訊回歸問題。所以關鍵的簡化不是「沒有逐層的 KL」,而是前向過程固定,把它們變成能有效率抽樣的監督式去雜訊目標。

07取樣書 §2.2.6

訓練好 \(\boldsymbol\epsilon\)-prediction 模型 \(\boldsymbol\epsilon_{\bm\phi^\times}(\mathbf x_i,i)\) 之後(上標 \(\times\) 表示訓練完、參數凍結),用參數化的轉移 \(p_{\bm\phi^\times}(\mathbf x_{i-1}\mid\mathbf x_i)\) 依序取樣。具體地,從隨機種子 \(\mathbf x_L\sim p_{\text{prior}}=\mathcal N(\mathbf 0,\mathbf I)\) 出發,對 \(i=L,L-1,\dots,1\) 遞迴地照下面的規則更新:

$$\mathbf x_{i-1}\leftarrow\underbrace{\frac1{\alpha_i}\Big(\mathbf x_i-\frac{1-\alpha_i^2}{\sqrt{1-\bar\alpha_i^2}}\,\boldsymbol\epsilon_{\bm\phi^\times}(\mathbf x_i,i)\Big)}_{\bm\mu_{\bm\phi^\times}(\mathbf x_i,i)}+\sigma(i)\,\boldsymbol\epsilon_i,\qquad\boldsymbol\epsilon_i\sim\mathcal N(\mathbf 0,\mathbf I).$$

這個「去雜訊」過程一直進行到得到 \(\mathbf x_0\),就是最後生成的乾淨樣本。

另一種解讀:先去雜訊,再加回較少的雜訊

把更新規則改寫,讓雜訊等級的結構看得更清楚。由 \(\mathbf x\)/\(\boldsymbol\epsilon\) 的關係,預測的雜訊可以用目前的樣本和預測的乾淨樣本表示:

$$\boldsymbol\epsilon_{\bm\phi^\times}(\mathbf x_i,i)=\frac{\mathbf x_i-\bar\alpha_i\,\mathbf x_{\bm\phi^\times}(\mathbf x_i,i)}{\sqrt{1-\bar\alpha_i^2}}.$$

代入取樣規則並整理,得到

$$\mathbf x_{i-1}\leftarrow\bar\alpha_{i-1}\,\mathbf x_{\bm\phi^\times}(\mathbf x_i,i)+\underbrace{\sqrt{1-\bar\alpha_{i-1}^2-\tilde\beta_i^2}\;\boldsymbol\epsilon_{\bm\phi^\times}(\mathbf x_i,i)+\tilde\beta_i\,\boldsymbol\epsilon_i}_{\text{合起來的標準差}=\sqrt{1-\bar\alpha_{i-1}^2}},$$

其中 \(\tilde\beta_i^2=\frac{(1-\bar\alpha_{i-1}^2)(1-\alpha_i^2)}{1-\bar\alpha_i^2}\) 是 DDPM 的後驗變異數(就是前面的 \(\sigma^2(i)\))。

書的註腳:係數 \(\sqrt{1-\bar\alpha_{i-1}^2-\tilde\beta_i^2}\) 化簡成 \(\frac{\alpha_i(1-\bar\alpha_{i-1}^2)}{\sqrt{1-\bar\alpha_i^2}}\),永遠非負,所以根號有定義。

整理的過程與註腳的化簡

用 \(\mathbf x\)-prediction 形式的平均 \(\bm\mu=\frac{\bar\alpha_{i-1}\beta_i^2}{1-\bar\alpha_i^2}\hat{\mathbf x}+\frac{(1-\bar\alpha_{i-1}^2)\alpha_i}{1-\bar\alpha_i^2}\mathbf x_i\)(\(\hat{\mathbf x}:=\mathbf x_{\bm\phi^\times}\)),再把 \(\mathbf x_i=\bar\alpha_i\hat{\mathbf x}+\sqrt{1-\bar\alpha_i^2}\,\hat{\boldsymbol\epsilon}\) 代入:

\(\hat{\mathbf x}\) 的係數:\(\frac{\bar\alpha_{i-1}\beta_i^2+(1-\bar\alpha_{i-1}^2)\alpha_i\bar\alpha_i}{1-\bar\alpha_i^2}=\bar\alpha_{i-1}\frac{\beta_i^2+\alpha_i^2-\alpha_i^2\bar\alpha_{i-1}^2}{1-\bar\alpha_i^2}=\bar\alpha_{i-1}\)。

\(\hat{\boldsymbol\epsilon}\) 的係數:\(\frac{(1-\bar\alpha_{i-1}^2)\alpha_i\sqrt{1-\bar\alpha_i^2}}{1-\bar\alpha_i^2}=\frac{\alpha_i(1-\bar\alpha_{i-1}^2)}{\sqrt{1-\bar\alpha_i^2}}\)。

它的平方等於 \(1-\bar\alpha_{i-1}^2-\tilde\beta_i^2\):

$$1-\bar\alpha_{i-1}^2-\frac{(1-\bar\alpha_{i-1}^2)(1-\alpha_i^2)}{1-\bar\alpha_i^2}=(1-\bar\alpha_{i-1}^2)\frac{\alpha_i^2-\bar\alpha_i^2}{1-\bar\alpha_i^2}=\frac{\alpha_i^2(1-\bar\alpha_{i-1}^2)^2}{1-\bar\alpha_i^2}.$$

而且剩下兩個雜訊係數的平方和是

$$\big(1-\bar\alpha_{i-1}^2-\tilde\beta_i^2\big)+\tilde\beta_i^2=1-\bar\alpha_{i-1}^2,$$

所以這次更新的雜訊等級結構,和前向過程在第 \(i-1\) 級的邊際分佈完全一樣。這回到了 B02 的第一個操作性取樣範本:預測乾淨的部分,再把樣本改寫到較低的雜訊等級。DDPM 是用隨機的方式做這個改寫:把從 \(\mathbf x_i\) 估計出的雜訊方向,和一份全新的高斯雜訊結合起來。確定性的取樣器(例如 DDIM)沿用同樣的基本想法,只是拿掉新的隨機性,並調整剩下的雜訊係數(第 9 章)。

把上式和前向邊際 \(\mathbf x_{i-1}=\bar\alpha_{i-1}\mathbf x_0+\sqrt{1-\bar\alpha_{i-1}^2}\,\bar{\boldsymbol\epsilon}\) 比較,結構完全相同:訊號係數 \(\bar\alpha_{i-1}\)、雜訊標準差 \(\sqrt{1-\bar\alpha_{i-1}^2}\),只是未知的 \(\mathbf x_0\) 換成網路的預測 \(\mathbf x_{\bm\phi^\times}(\mathbf x_i,i)\)。換句話說,DDPM 的每一步都是先預測乾淨資料,再把它重新加雜訊到恰好第 \(i-1\) 級。所以可以把 DDPM 取樣看成交替做兩件事:

  1. 去雜訊:從目前的帶雜訊輸入 \(\mathbf x_i\) 估計乾淨資料 \(\mathbf x_{\bm\phi^\times}(\mathbf x_i,i)\)。
  2. 重新加雜訊:在降低後的第 \(i-1\) 級把雜訊加回去,得到雜訊等級和前向過程第 \(i-1\) 步相符的樣本 \(\mathbf x_{i-1}\)。

不過,就算 \(\mathbf x_{\bm\phi^\times}\) 被訓練成最佳的去雜訊器(條件期望),它也只能預測給定 \(\mathbf x_i\) 時的平均乾淨樣本。這個限制會讓預測模糊,尤其在高雜訊等級,從嚴重破壞的輸入很難還原細節結構。從這個角度看,diffusion 取樣從高雜訊走到低雜訊,逐步精修對乾淨訊號的估計:前面的步驟決定整體結構,後面的步驟補上細節,樣本隨著雜訊去除越來越逼真。

書中的圖:DDPM 取樣的去雜訊再加雜訊觀點
書中的圖(§2.2.6):DDPM 取樣的「先去雜訊、再加雜訊」觀點。同心的外圈是 \(p_{\text{prior}}=\mathcal N(\mathbf 0,\mathbf I)\),往內依序是 \(p_{L-1}\)、\(p_{L-2}\)、…,最中間的黑色輪廓是 \(p_{\text{data}}\)。從深橘色的起點 \(\mathbf x_L\sim p_{\text{prior}}\) 出發,模型先估計乾淨訊號(淺橘色點,\(\mathbf x\)-prediction,落在 \(p_{\text{data}}\) 附近),再把這個估計重新加雜訊到第 \(i-1\) 級,得到下一個點 \(\mathbf x_{L-1}\)、\(\mathbf x_{L-2}\)…(半橘色點)。虛線是「預測」,實線是「更新」,越往後預測越靠近真正的資料。圖片出處:Lai et al. (2026),作者自繪。

DDPM 取樣很慢

DDPM(也就是 diffusion model)的取樣天生就慢。原始的寫法和實作通常要大約 1,000 步去雜訊才能生成一個樣本。因為取樣是一長串小幅度的修正:每一步把目前的帶雜訊樣本稍微往乾淨推一點,下一步又必須從上一步的結果開始。所以標準 DDPM 取樣是逐時間步、強烈循序的,好的品質通常需要很多這樣的步驟,才能緊貼反向 diffusion 的路徑。

定理說,有表達力的 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\) 理論上可以完全匹配真正的反向分佈。但實務上 \(p_{\bm\phi}\) 通常被建模成高斯,表達力有限:

  • 前向雜訊尺度 \(\beta_i\) 小的時候,真正的反向分佈近似高斯,可以準確近似;
  • \(\beta_i\) 大的時候,反向分佈會出現多峰或強烈的非高斯性,單一高斯抓不住(Demo A)。

為了保持準確,DDPM 用很多小的 \(\beta_i\) 步,形成一條循序的鏈:每一步依賴前一步,每一步都要算一次網路 \(\boldsymbol\epsilon_{\bm\phi^\times}(\mathbf x_i,i)\)。這需要 \(\mathcal O(L)\) 次循序的計算,沒辦法平行化,生成因此很慢。第 4 章會從微分方程的角度給這個取樣瓶頸一個更有原則的解釋,進而引出加速生成的連續時間數值方法。

Demo B訓練一個預測雜訊的網路,再用 DDPM 取樣轉述者補充

一維資料:三個窄峰(位置 \(-1.5\)、\(0.3\)、\(1.8\),權重 0.35、0.40、0.25,每個標準差 0.1)。按「訓練」:一個兩層、每層 48 個神經元的 MLP,用 \(\mathcal L_{\text{simple}}\) 訓練 4,000 步(\(L=100\),時程同 Demo A),約 2–4 秒。訓練完自動用第 7 節的更新式各取 4,000 個樣本兩次:一次用訓練出的網路,一次用這個資料分佈下可以精確算出的最佳解 \(\boldsymbol\epsilon^*=\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i]\)。下圖是用精確 \(\boldsymbol\epsilon^*\) 取樣的 30 條軌跡(橫軸是步數,從右邊的 \(i=L\) 走到左邊的 0)。

真正的資料密度訓練出的網路取樣用精確 ε* 取樣
取樣軌跡:從右邊的純雜訊(i = L)走到左邊的資料(i = 0)

瀏覽器實測(固定種子,約 4 秒):

−1.50.31.8
真正的權重35%40%25%
訓練出的網路37.0%37.0%25.9%
精確 \(\boldsymbol\epsilon^*\)35.7%40.6%23.7%
  • 反向鏈確實把雜訊送回資料分佈:用精確 \(\boldsymbol\epsilon^*\) 時,三團的比例和真正的權重相差不到 1.5 個百分點(4,000 個樣本的抽樣誤差約 ±0.8 個百分點),峰的寬度也對。這說明只要每一步的 \(\boldsymbol\epsilon\) 預測是對的,\(L=100\) 個高斯小步就夠了。
  • 網路的誤差會變成模糊:訓練出的網路和 \(\boldsymbol\epsilon^*\) 的均方根差距是 0.168,比例仍然接近,但峰明顯比較寬,峰之間也有零星樣本。資料的峰很窄(標準差 0.1),最後幾步需要很準的雜訊預測才能把樣本收緊;小網路、短訓練做不到。
  • coarse-to-fine:軌跡圖右半段(\(i\) 從 100 到 50 左右)軌跡只在雜訊裡游走、彼此交錯;大約 \(i\approx40\) 起開始分流到三個峰;\(i\approx20\) 以後只剩很小的修正。這對應第 7 節說的「前面的步驟決定整體結構,後面的步驟補上細節」。

08本章小結書 §2.3

這一章從變分的鏡頭追溯了 diffusion model 的源頭:

  • 從 VAE 出發:透過 ELBO 學資料和有結構的潛在空間之間的機率映射。階層式 VAE 把潛在層疊起來,引入「由粗到細、逐步生成」這個強大的概念;但這些模型在訓練穩定性和樣本品質上有困難。
  • DDPM 是這個變分框架裡的關鍵演進:把 encoder 固定成逐步加雜訊的過程,只學反向的去雜訊步驟,漂亮地避開了階層式 VAE 的訓練不穩定。DDPM 也是靠最大化 log-likelihood 的變分下界來訓練,訓練目標拆成一連串簡單的去雜訊任務。
  • 讓這一切好處理的,是一個強大的條件化策略:把算不出來的邊際目標變成好處理的條件目標。這是 diffusion model 反覆出現的主題。

變分框架為 DDPM 提供了完整而有力的基礎,但它不是理解 DDPM 的唯一方式。另一個同樣根本的觀點來自 energy-based 建模的原理,下一章探討這個 score 觀點:

  1. 重點從學去雜訊的轉移機率 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\),轉成直接學資料 log 密度的梯度,也就是 score function。
  2. 會看到這個源自 EBM 的方法如何發展出 Noise Conditional Score Networks(NCSN),並揭露 DDPM 學的雜訊預測(\(\boldsymbol\epsilon\)-prediction)和 score function 之間深刻的數學等價。

這個觀點不只提供新的洞見,也是之後要發展的、統一的連續時間 diffusion 框架的另一塊基石。

與 CS236 的對照

本頁CS236 複習頁
DDPM 即階層式 VAE、前向閉式、反向後驗、ELBO、\(\boldsymbol\epsilon\)-prediction(記號:\(\beta_t\) 是變異數)第 16 講
\(\boldsymbol\epsilon\)-prediction 與 score 的關係(下一章)第 13 講(denoising score matching、Tweedie)
確定性取樣(DDIM)、加速第 17 講
高斯相乘、高斯之間的 KL、條件期望補充課 A

常見誤解

誤解:「DDPM 的網路學的是 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\)」。網路看不到 \(\mathbf x_0\),它學的是 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\)。條件分佈只是訓練時的回歸目標;定理保證對它做 KL 匹配,最佳解恰好是邊際的 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)(第 3 節)。
誤解:「\(\mathcal L_{\text{simple}}\) 拿掉權重,所以學到的東西和 ELBO 不一樣」。拿掉權重改變了各時間步的重要性,但不改變每一步的最佳預測 \(\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i]\)(第 5 節的註腳與補充)。
誤解:「訓練時要從 \(\mathbf x_0\) 一步一步加雜訊到 \(\mathbf x_i\)」。擾動核有封閉形式,選定 \(i\) 後直接 \(\mathbf x_i=\bar\alpha_i\mathbf x_0+\sqrt{1-\bar\alpha_i^2}\,\boldsymbol\epsilon\) 一步抽出(第 2、4 節)。
誤解:「DDPM 慢,是因為網路太大」。根本原因是每一步的反向分佈被建模成單一高斯,只有在步子很小時才準,所以需要 \(\mathcal O(L)\) 次無法平行的網路計算(第 7 節、Demo A)。
誤解:「這本書的 \(\beta_i\) 和 DDPM 論文的 \(\beta_t\) 一樣」。書的 \(\beta_i\) 是標準差,論文的 \(\beta_t\) 是變異數;書的 \(\bar\alpha_i\) 是論文 \(\bar\alpha_t\) 的平方根(前置知識的提醒)。

自我測驗

1. 推導 \(p_i(\mathbf x_i\mid\mathbf x_0)=\mathcal N(\bar\alpha_i\mathbf x_0,(1-\bar\alpha_i^2)\mathbf I)\)。為什麼 \(\alpha_i^2+\beta_i^2=1\) 很方便?
歸納:\(\mathbf x_i=\alpha_i\mathbf x_{i-1}+\beta_i\boldsymbol\epsilon_i\),平均乘 \(\alpha_i\),雜訊變異數 \(\alpha_i^2(1-\bar\alpha_{i-1}^2)+\beta_i^2=1-\bar\alpha_i^2\)。因為 \(\alpha_i^2+\beta_i^2=1\),變異數 1 的分佈經過一步仍是變異數 1,最後收斂到 \(\mathcal N(\mathbf 0,\mathbf I)\)。
2. 為什麼 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 算不出來,\(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 卻可以?
前者由貝氏定理需要邊際 \(p_{i-1},p_i\),它們是對未知 \(p_{\text{data}}\) 的積分。後者用 Markov 性寫成 \(p(\mathbf x_i\mid\mathbf x_{i-1})p(\mathbf x_{i-1}\mid\mathbf x_0)/p(\mathbf x_i\mid\mathbf x_0)\),三個都是已知的高斯,乘除後仍是高斯。
3. 為什麼用條件 KL 訓練,最佳解仍是真正的 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\)?
插入真反向核拆 log:條件 KL 的期望=一個和 \(\bm\phi\) 無關的非負常數+邊際 KL 的期望。所以兩者只差常數,最佳解相同;而 \(p(\mathbf x_{i-1}\mid\mathbf x_i)=\mathbb E_{p(\mathbf x_0\mid\mathbf x_i)}[p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)]\)。
4. 從平均匹配推到 \(\boldsymbol\epsilon\)-prediction:反向平均用 \(\boldsymbol\epsilon\) 怎麼寫?\(\mathcal L_{\text{simple}}\) 的最佳解是什麼?
\(\bm\mu=\frac1{\alpha_i}\big(\mathbf x_i-\frac{1-\alpha_i^2}{\sqrt{1-\bar\alpha_i^2}}\boldsymbol\epsilon\big)\),所以平均誤差正比於雜訊誤差。\(\mathcal L_{\text{simple}}\) 是最小平方,最佳解 \(\boldsymbol\epsilon^*(\mathbf x_i,i)=\mathbb E[\boldsymbol\epsilon\mid\mathbf x_i]\)。
5. DDPM 的 ELBO 有哪三項?哪一項不含 \(\bm\phi\)?
\(\mathcal L_{\text{prior}}=\mathcal D_{\mathrm{KL}}(p(\mathbf x_L\mid\mathbf x_0)\Vert p_{\text{prior}})\)(不含 \(\bm\phi\),時程夠長就很小)、\(\mathcal L_{\text{recon.}}=\mathbb E[-\log p_{\bm\phi}(\mathbf x_0\mid\mathbf x_1)]\)、\(\mathcal L_{\text{diffusion}}=\sum_{i\ge2}\mathbb E[\mathcal D_{\mathrm{KL}}(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\Vert p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i))]\)。
6. 用「去雜訊、再加雜訊」解讀 DDPM 的一步。
\(\mathbf x_{i-1}=\bar\alpha_{i-1}\hat{\mathbf x}+\sqrt{1-\bar\alpha_{i-1}^2-\tilde\beta_i^2}\,\hat{\boldsymbol\epsilon}+\tilde\beta_i\boldsymbol\epsilon_i\):先預測乾淨資料 \(\hat{\mathbf x}\),再用「估計的雜訊方向+新雜訊」把它加回總標準差 \(\sqrt{1-\bar\alpha_{i-1}^2}\),恰好是前向第 \(i-1\) 級的雜訊等級。
7. 為什麼 DDPM 需要很多步?
反向一步被建模成單一高斯。步子小(\(\beta_i\) 小)時真反向分佈近似高斯;步子大時它是多峰的,單一高斯近似不了。所以要用很多小步,每步一次網路計算、而且必須循序,取樣就慢。