DDPM:把 encoder 固定成加雜訊,只學怎麼一步步去雜訊
DDPM 沿用階層式 VAE 的框架,但做了一個關鍵改動:encoder 不再學,而是固定成「每一步加一點高斯雜訊」的前向過程;只學反向的去雜訊。真正的反向一步 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 算不出來,但多加一個條件 \(\mathbf x_0\) 之後就變成封閉解的高斯,而且學它和學原本的目標是同一件事。這一頁從這個 conditioning trick 出發,推到實務上「預測雜訊」的簡單損失、DDPM 的 ELBO,以及「先去雜訊、再加回較少雜訊」的取樣。
讀完這頁你應該能夠
- 寫出 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)\),並推導它。
- 說明為什麼 \(p(\mathbf x_{i-1}\mid\mathbf x_i)\) 算不出來,而 \(p(\mathbf x_{i-1}\mid\mathbf x_i,\mathbf x_0)\) 是封閉解的高斯;證明「對條件分佈做 KL 匹配」和「對邊際分佈做 KL 匹配」有相同的最佳解。
- 從平均匹配的損失推到 \(\boldsymbol\epsilon\)-prediction 的 \(\mathcal L_{\text{simple}}\) 與 \(\mathbf x\)-prediction,說出它們的最佳解是條件期望。
- 寫出 DDPM 的 ELBO 三項,並推導它。
- 寫出 DDPM 的取樣更新,用「去雜訊、再加回較少雜訊」解讀它,並說明 DDPM 為什麼需要很多小步、因此取樣很慢。
前置知識
- B02:加雜訊 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\)、平方誤差的最佳解是條件期望、「預測乾淨訊號再重新混合」的取樣。
- B03:ELBO、Jensen 不等式、階層式 VAE 的 ELBO。
- 兩個高斯相乘仍是高斯(指數裡的二次式配方);兩個同變異數高斯之間的 KL。可以參考 CS236 補充課 A。
「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟或附錄 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 有了出色的穩定性和表達力。
書說這一節先專注在 DDPM,更一般、更有彈性的框架留到 §4.5(B10 第 3 節)。
02前向過程:固定的 encoder書 §2.2.1
DDPM 的前向過程是一個固定、不可訓練的操作,扮演 encoder 的角色:它分很多步逐漸對原始資料加雜訊,最後變成簡單的先驗分佈 \(p_{\text{prior}}:=\mathcal N(\mathbf 0,\mathbf I)\)。
固定的高斯轉移
每一步由一個固定的高斯轉移核支配:
$$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 論文是直接推導複雜的 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 的核心洞見:把反向轉移再以一個乾淨的資料樣本 \(\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 等價:
證明(書的附錄 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 的推導:兩個高斯相乘
只看 \(\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)\)、平均取最佳值的單一高斯。
先用預設值(比例 0.20、\(\mathbf x_i=-0.5\),正好在 \(-1.5\) 和 \(0.3\) 兩團之間),只改 \(L\):
| \(L\) | 10 | 20 | 50 | 100 | 1000 |
|---|---|---|---|---|---|
| KL | 2.08 | 0.30 | 0.039 | 0.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 密度的下界。
證明(書的附錄 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})\) 是沿著前向過程的聯合分佈。
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 取樣看成交替做兩件事:
- 去雜訊:從目前的帶雜訊輸入 \(\mathbf x_i\) 估計乾淨資料 \(\mathbf x_{\bm\phi^\times}(\mathbf x_i,i)\)。
- 重新加雜訊:在降低後的第 \(i-1\) 級把雜訊加回去,得到雜訊等級和前向過程第 \(i-1\) 步相符的樣本 \(\mathbf x_{i-1}\)。
不過,就算 \(\mathbf x_{\bm\phi^\times}\) 被訓練成最佳的去雜訊器(條件期望),它也只能預測給定 \(\mathbf x_i\) 時的平均乾淨樣本。這個限制會讓預測模糊,尤其在高雜訊等級,從嚴重破壞的輸入很難還原細節結構。從這個角度看,diffusion 取樣從高雜訊走到低雜訊,逐步精修對乾淨訊號的估計:前面的步驟決定整體結構,後面的步驟補上細節,樣本隨著雜訊去除越來越逼真。
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)。
瀏覽器實測(固定種子,約 4 秒):
| −1.5 | 0.3 | 1.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 觀點:
- 重點從學去雜訊的轉移機率 \(p_{\bm\phi}(\mathbf x_{i-1}\mid\mathbf x_i)\),轉成直接學資料 log 密度的梯度,也就是 score function。
- 會看到這個源自 EBM 的方法如何發展出 Noise Conditional Score Networks(NCSN),並揭露 DDPM 學的雜訊預測(\(\boldsymbol\epsilon\)-prediction)和 score function 之間深刻的數學等價。
這個觀點不只提供新的洞見,也是之後要發展的、統一的連續時間 diffusion 框架的另一塊基石。