Score-based diffusion:diffusion model 就是一個階層式 VAE
第 13–14 講從 score 出發,得到「加雜訊、學去雜訊、再從雜訊走回資料」。這講換一個角度:把「一步一步加雜訊」看成一個固定的編碼器,把「一步一步去雜訊」看成可學的解碼器,整個模型就是一個有 \(T\) 層潛在變數的階層式 VAE,用 ELBO 訓練。關鍵結果是:只要解碼器用「預測雜訊再減掉」的參數化,ELBO 就化簡成 denoising score matching,這就是 DDPM。最後讓步數趨於無限:VAE 變成 SDE,SDE 再換成 ODE,就變成一個能算精確 likelihood 的 flow。三種觀點(score、VAE、flow)描述的是同一個模型。
讀完這頁你應該能夠
- 寫出 DDPM 的前向過程 \(q(\mathbf x_t\mid\mathbf x_{t-1})\),推出閉式的 \(q(\mathbf x_t\mid\mathbf x_0)\),說明它為什麼讓訓練有效率。
- 說明為什麼 diffusion model 是一個「編碼器固定、解碼器可學」的階層式 VAE,寫出它的 ELBO。
- 寫出 ELBO 拆成 \(L_T + \sum L_{t-1} + L_0\) 的形式,以及 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\) 的閉式。
- 說明 \(\boldsymbol\epsilon\) 參數化如何把 ELBO 化成 denoising score matching,以及 \(\boldsymbol\epsilon_\theta = -\sqrt{1-\bar\alpha_t}\,\mathbf s_\theta\)。
- 寫出 DDPM 的訓練與取樣演算法,說明取樣為什麼像 Langevin,也是反向 SDE 的一種離散化(predictor)。
- 說明實務上用 \(\lambda_t = 1\)(\(L_{\text{simple}}\))而不是真正的 ELBO 權重的原因與代價。
前置知識檢查
- 第 5–6 講:VAE、ELBO \(\mathbb E_q[\log p(\mathbf x,\mathbf z) - \log q(\mathbf z\mid\mathbf x)]\)、reparameterization、兩個高斯之間的 KL。
- 第 13 講:denoising score matching、Tweedie 公式(最佳去雜訊器 ↔ score)。
- 第 14 講:NCSN、annealed Langevin、score SDE、反向 SDE、predictor–corrector、probability flow ODE。這講的後半段(投影片 22–31)是它的複習,本頁只補新的角度。
投影片只有 pptx,用 ONLYOFFICE 轉成 PDF 後看圖;公式多半是圖片,以圖為準。第 16 講的影片只講到投影片 31(ODE 與 likelihood);投影片 32–47(加速取樣、蒸餾、latent diffusion、classifier-free guidance)是在第 17 講的影片裡講完的,見 §9。標「出處」的補充來自 Ho, Jain & Abbeel (2020)(DDPM,arXiv 2006.11239)原文、Song et al. (2021)(arXiv 2011.13456)附錄、Lai et al. (2026)(arXiv 2510.21890v3)第 2 章。
01回顧:score-based model(投影片 2–8)
今天的計畫(投影片 2):(1) 回顧 score-based model;(2) diffusion model 就是 score-based model;(3) diffusion model 是(階層式)VAE;(4) diffusion model 是 normalizing flow;(5) 有效率的取樣;(6) 可控制的生成。00:05
- Score-based model:用神經網路表示 score \(\nabla_{\mathbf x}\log p(\mathbf x)\),一個告訴你往哪走 likelihood 上升最快的向量場。原始的 score matching 要算 Jacobian 的 trace,不能擴展。01:37
- Denoising score matching:改估計加了高斯雜訊的 \(q_\sigma\) 的 score,等價於訓練一個去雜訊器:\(\frac12\mathbb E\big[\Vert\mathbf s_\theta(\mathbf x+\sigma\mathbf z) + \mathbf z/\sigma\Vert^2\big]\)。不用算 trace,但估到的是 \(\nabla\log q_\sigma\neq\nabla\log p_{\text{data}}\)。03:10
- 多個雜訊尺度 + annealed Langevin:一個以 σ 為條件的網路估計所有尺度的 score;從大雜訊開始跑 Langevin,逐層降低雜訊。看起來像「從純雜訊開始,一點一點把雜訊去掉」。06:48
投影片 9 的圖(「Sampling as Iterative Denoising」):一排人臉從左邊的清楚照片 \(\mathbf x_0\),越往右雜訊越多,最右邊 \(\mathbf x_T\) 是純雜訊;上方箭頭由左往右標「Inverse process: iteratively add Gaussian noise」,下方箭頭由右往左,每一段標「Langevin」,標「Iteratively remove noise」、「Start from pure noise」。左端標 \(q_0(\mathbf x) = p_{\text{data}}(\mathbf x)\),右端標 \(q_T(\mathbf x)\approx\pi(\mathbf x)\)。09:27
02加雜訊的過程 = 一個固定的編碼器(投影片 10–12)
把剛才的圖反過來看:從資料往右,每一步加一點高斯雜訊。11:31
- 平均是上一步稍微縮小 \(\sqrt{1-\beta_t}\) 倍,再加變異數 \(\beta_t\) 的雜訊。老師說縮放不是重點;DDPM 這樣設計是為了讓總變異數保持在 1 附近(見下方推導)。13:04
- 這是一個 Markov 過程:\(\mathbf x_t\) 只依賴 \(\mathbf x_{t-1}\)。給定 \(\mathbf x_0\),所有 \(\mathbf x_{1:T}\) 的聯合分佈就是這些條件分佈的乘積,像一個比較簡單的 autoregressive model。14:07
- 記號用 \(q\),因為它會是 VAE 的編碼器:把 \(\mathbf x_0\) 隨機地映射到潛在變數 \(\mathbf x_1,\dots,\mathbf x_T\)。和一般 VAE 不同,這個編碼器沒有任何要學的東西,只是加雜訊。它的輸出維度是 \(T\) 倍的資料維度,而且不可逆。15:11
多步轉移也是高斯,而且有閉式(投影片 11)
兩個重要後果:16:44
- 和 score-based model 的加雜訊分佈一樣:取 \(\mathbf x_0\)、加上對應雜訊量的高斯雜訊,正是 denoising score matching 產生訓練資料的方式。
- 任何 \(t\) 都能直接取樣:要 \(\mathbf x_t\) 不用模擬整條鏈,一步就到:\(\mathbf x_t = \sqrt{\bar\alpha_t}\mathbf x_0 + \sqrt{1-\bar\alpha_t}\boldsymbol\epsilon\)。
推導:為什麼 \(q(\mathbf x_t\mid\mathbf x_0)\) 是這個高斯
令 \(\alpha_t = 1-\beta_t\)。每一步 \(\mathbf x_t = \sqrt{\alpha_t}\mathbf x_{t-1} + \sqrt{1-\alpha_t}\,\boldsymbol\epsilon_t\),\(\boldsymbol\epsilon_t\) 獨立。假設 \(\mathbf x_{t-1} = \sqrt{\bar\alpha_{t-1}}\mathbf x_0 + \sqrt{1-\bar\alpha_{t-1}}\,\bar{\boldsymbol\epsilon}\),代入:
獨立高斯相加,變異數相加:\(\alpha_t(1-\bar\alpha_{t-1}) + 1-\alpha_t = 1-\alpha_t\bar\alpha_{t-1} = 1-\bar\alpha_t\)。所以 \(\mathbf x_t = \sqrt{\bar\alpha_t}\mathbf x_0 + \sqrt{1-\bar\alpha_t}\boldsymbol\epsilon\),由歸納法成立。也可以看出,若 \(\mathbf x_0\) 的變異數是 1,每一步的總變異數 \(\bar\alpha_t\cdot1 + (1-\bar\alpha_t) = 1\) 都保持不變,所以叫 variance preserving。
為什麼叫 diffusion(投影片 12)
投影片 12 的圖(「Diffusion perspective」):左邊是資料分佈(一維,兩個峰);下面一排是 \(q_0(\mathbf x) = p_{\text{data}}(\mathbf x)\) 和三個越來越模糊的 perturbed distribution,用垂直的色帶畫(黃色是高密度);最右邊 \(q_T(\mathbf x)\approx\pi(\mathbf x)\) 是一個單峰的高斯。18:51
從一個資料點出發,每一步加一點雜訊,機率質量會逐漸擴散到整個空間,就像熱在金屬中擴散。原本兩個峰中間沒有質量,加一點雜訊後中間就有了,加很多雜訊後一切都變成高斯。20:25
- 這個過程要滿足的條件:(1) 會破壞結構,最後得到一個容易取樣的分佈;(2) 能有效率地模擬任何一個時間切片(訓練目標會是 denoising score matching,需要從任何 \(q(\mathbf x_t\mid\mathbf x_0)\) 取樣)。21:28
- 資料分佈不必是高斯,可以是遠離高斯的自然影像分佈;必須是連續的(離散資料可以先嵌入連續空間,例如之後的 latent diffusion)。重要的是轉移核是高斯,讓結構以可控的方式被破壞;雜訊夠大時訊雜比極低,從純雜訊取樣就等於從「資料 + 大量雜訊」取樣。23:01
延伸 補充課 A §10 高斯相加:q(x_t | x₀) 為什麼有閉式;補充課 E §4 OU 過程與精確的一步
Demo A前向過程:一步一步加雜訊 = 一步到位
一維資料:\(0.3\,\mathcal N(-1,0.1^2) + 0.7\,\mathcal N(1,0.1^2)\)。上圖是 \(q_t(x)\) 隨 \(t\) 的熱圖(每個 \(q_t\) 都能精確算,因為資料是高斯混合)。拖動 \(t\):右下比較兩種取樣 \(\mathbf x_t\) 的方式,一是真的跑 \(t\) 步 \(q(\mathbf x_s\mid\mathbf x_{s-1})\),二是用閉式一步到位。下方是兩種常見 noise schedule 的 \(\bar\alpha_t\)。
- 兩種取樣的直方圖在每個 \(t\) 都重疊,而且都貼著精確的 \(q_t\):訓練時可以直接跳到任何 \(t\)。
- Linear schedule 在 \(t = 1000\) 時 \(\bar\alpha_T\approx4\times10^{-5}\),\(q(\mathbf x_T\mid\mathbf x_0)\) 和 \(\mathcal N(0,1)\) 的 KL 小於 \(10^{-4}\) nats,所以 \(L_T\) 可以忽略(DDPM 論文報告約 \(10^{-5}\) bits/dim)。
- Linear schedule 大約在 \(t\approx600\) 之後 \(\bar\alpha_t\) 就接近 0,後面幾百步的影像幾乎都是純雜訊;cosine schedule 讓 \(\bar\alpha_t\) 更平均地下降,Nichol & Dhariwal (2021) 用它改善了低解析度影像上的結果。
03反向過程 = 可學的解碼器(投影片 13–15)
如果能把這個過程倒過來,就能生成:先從 \(\pi(\mathbf x_T)\)(例如 \(\mathcal N(0,I)\))抽 \(\mathbf x_T\),再依序從真正的去雜訊分佈 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\) 取樣,一路走回 \(\mathbf x_0\)。問題是:前向的 \(q(\mathbf x_t\mid\mathbf x_{t-1})\) 是高斯、我們知道,但反向的 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\) 不知道。解法:學一個變分近似。25:09
- 就像 VAE 的解碼器:從簡單的 prior 抽潛在變數,餵進神經網路得到高斯的參數,再從那個高斯取樣。差別在於這裡要一層一層地做 \(T\) 次。27:43
- 選 \(\beta_t\) 讓 \(\bar\alpha_T\to0\):雜訊夠多時,不管從哪裡出發看起來都一樣,忘記了初始條件,所以從 prior 出發是合理的。29:51
- 取樣是隨機的:網路的部分是確定性的,但就像 VAE 的解碼器,最後要從一個高斯抽樣。這時還沒有 Langevin;如果願意花更多計算,可以在每一步加跑 Langevin 來修正錯誤(就是之後的 corrector)。31:24
投影片 15 的圖(「Diffusion model as a hierarchical VAE」):同一排人臉,上方標「Encoder (fixed): \(q(\mathbf x_{1:T}\mid\mathbf x_0) = \prod q(\mathbf x_t\mid\mathbf x_{t-1})\)」,右邊標「\(p(\mathbf x_T)\):Prior over latents」,下方標「Decoder (learnable): \(p_\theta(\mathbf x_{0:T}) = p(\mathbf x_T)\prod p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\)」。32:55
04從 VAE 到階層式 VAE,再到 DDPM(投影片 16–18)
| VAE | 兩層階層式 VAE | Diffusion model | |
|---|---|---|---|
| 潛在變數 | \(\mathbf z\) | \(\mathbf z_1,\mathbf z_2\) | \(\mathbf x_1,\dots,\mathbf x_T\)(和資料同維度) |
| Prior | \(\mathcal N(0,I)\) | \(p(\mathbf z_2) = \mathcal N(0,I)\) | \(p(\mathbf x_T) = \mathcal N(0,I)\) |
| 解碼器(可學) | \(p_\theta(\mathbf x\mid\mathbf z)\) | \(p(\mathbf z_1\mid\mathbf z_2)\,p(\mathbf x\mid\mathbf z_1)\) | \(\prod_tp_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\) |
| 編碼器 | \(q_\phi(\mathbf z\mid\mathbf x)\),可學 | \(q(\mathbf z_1,\mathbf z_2\mid\mathbf x)\),可學 | \(\prod_tq(\mathbf x_t\mid\mathbf x_{t-1})\),固定 |
| 訓練 | 最大化 ELBO \(\mathbb E_{q}\big[\log\frac{p(\mathbf x,\text{latents})}{q(\text{latents}\mid\mathbf x)}\big]\) | ||
把 VAE 的單一 \(\mathbf z\) 換成兩層,生成時先從 prior 抽 \(\mathbf z_2\),經過第一個解碼器得到 \(\mathbf z_1\),再經過第二個解碼器得到 \(\mathbf x\);ELBO 的形式完全一樣。Diffusion model 只是有 \(T\) 層、而且編碼器固定。35:28
把 \(L\) 拆成每一步的 KL(DDPM 論文的式 (5))
直接對 \(L\) 做 Monte Carlo 估計,變異數很大。技巧是用 Bayes 法則把每一個前向步驟改寫成「以 \(\mathbf x_0\) 為條件的後驗」:由 Markov 性質,\(q(\mathbf x_t\mid\mathbf x_{t-1}) = q(\mathbf x_t\mid\mathbf x_{t-1},\mathbf x_0) = \frac{q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,q(\mathbf x_t\mid\mathbf x_0)}{q(\mathbf x_{t-1}\mid\mathbf x_0)}\)。代入 \(L\),\(q(\mathbf x_t\mid\mathbf x_0)/q(\mathbf x_{t-1}\mid\mathbf x_0)\) 這些比值會連鎖相消,最後得到
- \(L_T\):編碼器的終點和 prior 有多接近。沒有可學參數,選好 schedule 就幾乎是 0。
- \(L_{t-1}\):解碼器的每一步要模仿「知道答案 \(\mathbf x_0\) 時的反向一步」。這個條件後驗是高斯、有閉式(下式),所以每個 KL 都是兩個高斯之間的 KL,可以精確算,不用高變異的 Monte Carlo。
- \(L_0\):最後一步的重建項,像 VAE 的重建 loss。
(這是高斯的共軛:prior \(q(\mathbf x_{t-1}\mid\mathbf x_0)\) 乘上 likelihood \(q(\mathbf x_t\mid\mathbf x_{t-1})\),配方得到的後驗。\(\tilde{\boldsymbol\mu}_t\) 是 \(\mathbf x_0\) 和 \(\mathbf x_t\) 的加權平均。)
直覺:真正的反向一步 \(q(\mathbf x_{t-1}\mid\mathbf x_t) = \mathbb E_{q(\mathbf x_0\mid\mathbf x_t)}[q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)]\) 是對所有可能的 \(\mathbf x_0\) 取平均的混合分佈,很難直接學;但訓練時我們知道是哪個 \(\mathbf x_0\) 產生了 \(\mathbf x_t\),條件後驗就只是一個高斯。對所有 \(\mathbf x_0\) 平均之後,最佳解和直接學邊際反向分佈一樣。
出處:Ho et al. (2020) §2 式 (5)–(7);Lai et al. (2026) §2.2.2 Theorem「Equivalence Between Marginal and Conditional KL Minimization」與 Lemma「Reverse Conditional Transition Kernel」。
05ELBO 化簡成 denoising score matching(投影片 19–21)
關鍵是解碼器平均值的參數化:預測加進去的雜訊,再把它減掉:39:05
代進 \(L_{t-1}\),ELBO 就變成(投影片 19):40:06
ELBO loss 化簡成 denoising score matching!取資料、抽一個雜訊向量、把加了雜訊的影像餵給網路 \(\boldsymbol\epsilon_\theta\),要它猜出加進去的雜訊。雖然整個推導是從 VAE 出發,實際上做的事是估計各個雜訊尺度下的 score。40:38
推導:\(L_{t-1}\) 怎麼變成 \(\lambda_t\Vert\boldsymbol\epsilon-\boldsymbol\epsilon_\theta\Vert^2\),以及 \(\boldsymbol\epsilon_\theta\) 和 score 的關係
步驟 1:兩個變異數同為 \(\sigma_t^2\) 的高斯之間,\(D_{\mathrm{KL}} = \frac1{2\sigma_t^2}\Vert\tilde{\boldsymbol\mu}_t - \boldsymbol\mu_\theta\Vert^2\) + 常數(若 \(\sigma_t^2\neq\tilde\beta_t\),常數項裡有變異數不匹配的部分,與 \(\theta\) 無關)。
步驟 2:用 \(\mathbf x_0 = (\mathbf x_t - \sqrt{1-\bar\alpha_t}\boldsymbol\epsilon)/\sqrt{\bar\alpha_t}\) 把 \(\tilde{\boldsymbol\mu}_t\) 改寫成 \(\mathbf x_t\) 和 \(\boldsymbol\epsilon\) 的函數:
所以 \(\boldsymbol\mu_\theta\) 唯一要猜的是 \(\boldsymbol\epsilon\)(\(\mathbf x_t\) 是輸入,已知)。用同樣的形式參數化 \(\boldsymbol\mu_\theta\),差就只剩 \(\boldsymbol\epsilon\) 的差:
步驟 3(和 score 的關係):條件分佈的 score 是 \(\nabla_{\mathbf x_t}\log q(\mathbf x_t\mid\mathbf x_0) = -\frac{\mathbf x_t - \sqrt{\bar\alpha_t}\mathbf x_0}{1-\bar\alpha_t} = -\frac{\boldsymbol\epsilon}{\sqrt{1-\bar\alpha_t}}\)。所以預測 \(\boldsymbol\epsilon\) 的 L2 loss 就是 denoising score matching,最佳解滿足(第 13 講的 Tweedie / DSM)
這也是投影片 20 下方那行 \(\boldsymbol\epsilon_\theta(\cdot,\sigma_i) := \sigma_i\mathbf s_\theta(\cdot,\sigma_i)\)(差一個負號)的意思:NCSN 的 score 網路和 DDPM 的雜訊網路只差一個縮放。
出處:Ho et al. (2020) §3.2 式 (8)–(12)。
訓練與取樣(投影片 20)
Algorithm 1 Training
1: repeat
2: x₀ ~ q(x₀)
3: t ~ Uniform({1,…,T})
4: ε ~ N(0, I)
5: 對 ∇_θ ‖ε − ε_θ(√ᾱ_t x₀ + √(1−ᾱ_t) ε, t)‖²
做一步梯度下降
6: until converged
Algorithm 2 Sampling
1: x_T ~ N(0, I)
2: for t = T, …, 1 do
3: z ~ N(0, I)(t = 1 時 z = 0)
4: x_{t−1} = 1/√α_t · ( x_t − (1−α_t)/√(1−ᾱ_t) · ε_θ(x_t, t) )
+ σ_t z
5: end for
6: return x₀
- 訓練就是 denoising score matching:取資料、隨機選一個 \(t\)、加上對應量的雜訊、讓網路預測雜訊。51:24
- 取樣和 Langevin 非常像:從純雜訊開始,每一步沿著 \(\boldsymbol\epsilon_\theta\)(也就是 score 的方向)走,再加一點雜訊(因為要從高斯 \(p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\) 取樣)。差別只在縮放和加多少雜訊。score-based model 用 Langevin 取樣,DDPM 直接走解碼器。41:39
- 架構(投影片 21):和 noise conditional score network 一樣,一個網路吃 \(\mathbf x_t\) 和 \(t\)(\(t\) 先編碼成向量、經過全連接層),在所有 \(t\) 之間共享(amortize),而不是 1,000 個不同的解碼器。因為是影像進、影像出的密集預測,通常用 U-Net;也有人用 Transformer。51:55
投影片 21 的圖:左邊一張加了雜訊的貓 \(\mathbf x_t\),進入紫色的 U-Net(先一路縮小、再一路放大,同層之間有 skip connection);下面一個「Time Representation」的向量經過「Fully-connected Layers」送進 U-Net 的每一層;輸出 \(\boldsymbol\epsilon_\theta(\mathbf x_t,t)\) 是一張雜訊圖。
DDPM 的一步,就是反向 SDE 的一步 Euler–Maruyama
令 \(\mathbf s_\theta = -\boldsymbol\epsilon_\theta/\sqrt{1-\bar\alpha_t}\)。DDPM 的取樣規則可以寫成
另一方面,DDPM 的前向過程在 \(T\to\infty\) 時是 VP SDE \(d\mathbf x = -\frac12\beta(t)\mathbf x\,dt + \sqrt{\beta(t)}\,d\mathbf w\),它的反向 SDE(第 14 講的 Anderson 公式)是 \(d\mathbf x = [-\frac12\beta\mathbf x - \beta\nabla\log p_t]dt + \sqrt\beta\,d\bar{\mathbf w}\)。往回走一步(\(dt = -\Delta t\)、\(\beta(t)\Delta t = \beta_t\))正好是上式右邊。所以 DDPM 的 ancestral sampling 是反向 VP SDE 的一種離散化,忽略的只是 \(O(\beta_t^2)\) 的項。Score SDE 論文用的 \(\beta(t)\) 從 0.1 線性增加到 20,就是為了對應 DDPM 的 \(\beta_1 = 10^{-4}\)、\(\beta_T = 0.02\)、\(T = 1000\)。
出處:Song et al. (2021) 附錄 E「Reverse diffusion sampling」的推導與附錄 B(VP SDE 的設定)。
\(\lambda_t\):真正的 ELBO 權重 vs. 實務上的 \(\lambda_t = 1\)
真正的 ELBO 要用 \(\lambda_t = \frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}\)。Ho et al. 發現直接設 \(\lambda_t = 1\)(\(L_{\text{simple}}\))樣本品質好得多:在 CIFAR-10 上,\(L_{\text{simple}}\) 的 FID 是 3.17(IS 9.46),NLL \(\le3.75\) bits/dim;用真正的 ELBO(\(L\),固定等向變異數)訓練,NLL 稍好(\(\le3.70\)),但 FID 是 13.51。原因:在他們的設定下,\(L_{\text{simple}}\) 相對地降低了小 \(t\) 的權重,那些項是在去除幾乎看不見的雜訊;讓網路把力氣花在大 \(t\)、比較難的去雜訊上,樣本比較好。
他們還發現,CIFAR-10 上無損碼長 3.75 bits/dim 中,有 1.97 bits/dim 是 \(L_0\)(「失真」),「超過一半的碼長描述的是看不見的細節」:diffusion model 是很好的有損壓縮器,likelihood 卻不是最頂尖的。這呼應第 15 講:likelihood 和樣本品質是兩回事。
出處:Ho et al. (2020) §3.4、Table 1–2、§4.3 "Progressive coding"。
06課堂問答:為什麼要這樣設計?
這講中段有一連串學生提問(錄音只收到老師的回答),整理如下。
Demo BELBO 有多緊?步數 T 與解碼器變異數
一維資料 \(\frac12\mathcal N(-1,0.1^2) + \frac12\mathcal N(1,0.1^2)\)。因為是高斯混合,對任何 \(\mathbf x_t\) 都能精確算出 \(\mathbb E[\mathbf x_0\mid\mathbf x_t]\),於是可以用最佳的解碼器平均值 \(\boldsymbol\mu^*(\mathbf x_t) = \mathbb E[\tilde{\boldsymbol\mu}_t(\mathbf x_t,\mathbf x_0)\mid\mathbf x_t]\)(等於完美訓練的 \(\boldsymbol\epsilon_\theta\)),直接算 ELBO 的每一項,看它和真正的 \(-\mathbb E[\log p_{\text{data}}(\mathbf x_0)]\) 差多少。每個 \(T\) 都用同一個連續的 schedule(VP,\(\beta(s)\) 從 0.1 到 20)切成 \(T\) 段,所以終點 \(\bar\alpha_T\) 都一樣;只有步數不同。
- T = 1 就是一個普通的 VAE:一步從雜訊到資料,解碼器是單一高斯,差距約 1.6 nats(高斯解碼器無法表示兩個峰)。
- 步數增加,每一步的真實反向分佈 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\) 越來越接近高斯,高斯解碼器越來越夠用:用 \(\sigma_t^2 = \beta_t\) 時,差距從 T = 10 的約 1.1 nats、T = 100 的約 0.18,降到 T = 1,000 的約 0.02 nats(Monte Carlo 估計,有約 ±0.02 的雜訊)。這是「拆成很多小步」的定量版本。
- 解碼器變異數很重要:用 \(\sigma_t^2 = \tilde\beta_t\) 時,差距停在約 0.4 nats 降不下去。原因在最初幾步:資料本身有寬度(這裡是 0.1),真正的反向變異數接近 \(\beta_t\),而 \(\tilde\beta_t\)(「\(\mathbf x_0\) 是一個確定點」時的最佳值)在 \(t\) 很小時遠小於 \(\beta_t\)。Ho et al. 指出這兩個是兩個極端(反向過程熵的上界與下界),實驗上樣本品質相近;Nichol & Dhariwal (2021) 進一步指出,最初幾步對 ELBO 的貢獻最大,變異數的選擇會影響 likelihood,於是改成學變異數,改善了 log-likelihood。
- 下圖是每一步的 KL \(L_{t-1}\):T = 1,000 時,Σ\(L_{t-1}\) 有一半集中在最初約 12 步(\(t\le12\)),也就是雜訊極小、在描述資料「精細細節」的地方。這和 Ho et al. 在 CIFAR-10 上的觀察一致:大部分的無損碼長花在看不見的細節上;\(L_{\text{simple}}\) 降低這些步的權重,樣本反而更好。
Demo C在瀏覽器裡訓練一個 DDPM
完全照 Algorithm 1–2,只是資料是 2 維。\(T = 100\)(同一個 VP schedule),\(\boldsymbol\epsilon_\theta\) 是 21→64→64→2 的 MLP:輸入是 \(\mathbf x_t\)、\(t\) 的 sin/cos 編碼,以及 \(\mathbf x_t\) 的幾個 sin/cos 特徵(低維的玩具資料上,這種 Fourier feature 能讓小網路學得更精細)。用 \(L_{\text{simple}}\) 訓練 4,000 步(batch 64,學習率 cosine 衰減)。
- \(\mathbf x_t\):從 \(t = 100\) 的純雜訊開始,大約到 \(t = 30\) 之前都還是一團;結構在最後二、三十步才浮現。對照投影片 9:「iteratively remove noise」。
- \(\hat{\mathbf x}_0 = (\mathbf x_t - \sqrt{1-\bar\alpha_t}\boldsymbol\epsilon_\theta)/\sqrt{\bar\alpha_t}\):每一步網路對「最終結果」的猜測。\(t = 60\) 時所有點都被拉到資料的平均附近(課堂問答:雜訊大時最佳的去雜訊就是平均影像),\(t\) 變小才逐漸分開成兩個月牙,這就是 Ho et al. 說的 progressive generation。\(t = 100\) 那格反而散得很開:此時 \(\sqrt{\bar\alpha_t}\approx0.006\),\(\hat{\mathbf x}_0\) 把 \(\boldsymbol\epsilon_\theta\) 的微小誤差放大約 150 倍(實作上常把 \(\hat{\mathbf x}_0\) 截斷在資料範圍內)。
- Loss 曲線:\(t\) 越小,\(\boldsymbol\epsilon\) 越難預測(雜訊只佔一點點,要從資料本身的變化裡分辨出來),誤差越大;\(t\) 大時 \(\mathbf x_t\approx\boldsymbol\epsilon\),很好猜。\(L_{\text{simple}}\) 對每個 \(t\) 權重一樣。
- 瀏覽器實測(種子固定,訓練約 9 秒):two moons 的樣本到資料的平均最近距離 0.051(\(\sigma_t^2 = \beta_t\))或 0.043(\(\tilde\beta_t\)),真實樣本自身是 0.015;85% / 89% 落在資料 0.1 以內。8 個高斯:90% / 92%;Swiss roll 最難:73% / 80%。兩種 \(\sigma_t^2\) 差不多,\(\tilde\beta_t\) 稍微乾淨一點,呼應 Ho et al.「兩種選擇的結果相似」。ε 預測誤差在 t = 1 約 1.4,t = 100 約 0.01。
07無限多步:從 VAE 到 SDE(投影片 22–28)
擴散本質上是連續時間的過程(熱在金屬棒中擴散不是在離散時刻發生的)。把離散化越切越細:1,000 步、2,000 步、4,000 步……極限就是一族以連續時間 \(t\in[0,T]\) 為索引的分佈,仍然可以用階層式 VAE 的觀點看,只是有無限多個潛在變數。55:03
這部分(前向 SDE \(d\mathbf x = \mathbf f\,dt + g\,d\mathbf w\)、玩具 SDE \(d\mathbf x_t = \sigma(t)d\mathbf w_t\)、只依賴 score 的反向 SDE、time-dependent score model 的訓練、Euler–Maruyama、predictor–corrector、1024×1024 的結果)和第 14 講 §6 相同,請看那裡的詳細筆記與 Demo C。這講新增的是和 DDPM 的對應:58:10
08ODE:把 VAE 變成 flow(投影片 29–31)
可以定義一個和原本 SDE 有一樣邊際分佈的常微分方程,演化完全是確定性的,每一步不加雜訊(投影片上的白色軌跡是平滑的)。DDIM 就是基於這個想法(下一段影片細講)。66:33
- VAE 變成 flow:在 VAE 觀點,潛在變數(各時刻的 \(\mathbf x_t\))是隨機模擬擴散過程推斷出來的;解 ODE 則是確定性地推斷。ODE 的解唯一,所以映射可逆:知道 score,就能把模型轉成一個邊際分佈完全相同的 normalizing flow。68:04
- 精確的 likelihood:解 ODE(等於把 flow 倒過來),算 prior 下的機率,再用變數變換公式。69:06
ODE 的公式、為什麼係數是 ½(Fokker–Planck)、likelihood 公式與一維的精確驗證,見第 14 講 §7 與 Demo C。影片在這裡結束。
| 觀點 | 模型是什麼 | 訓練 | 取樣 | Likelihood |
|---|---|---|---|---|
| Score-based(第 13–14 講) | 各雜訊尺度的 score | DSM | annealed Langevin(corrector) | — |
| 階層式 VAE / DDPM(本講) | T 層高斯解碼器 | ELBO → DSM(\(\lambda_t = 1\)) | ancestral sampling(predictor) | ELBO 下界 |
| SDE(無限多層) | 時間連續的 score | 連續的 DSM | 數值 SDE 解法、PC | — |
| ODE / flow | 同一個 score | 同上 | ODE solver、DDIM | 精確(變數變換) |
09投影片 32–47:在第 17 講的影片裡講完
第 17 講的影片標題是 Discrete Latent Variable Models,但老師一開始就說「上次沒講完,大家對有效率的取樣很有興趣」,於是整堂(約 73 分鐘)都在講這份投影片剩下的部分。這些內容會整理在第 17 講的頁面,這裡先列出來:
- 投影片 32:ODE 算出的 likelihood(CIFAR-10 2.83 bits/dim,可和 autoregressive model 匹敵,第 14 講已整理)。
- 投影片 33–36:加速取樣:DDIM(粗略地離散化時間軸、走大步,對應半線性 ODE 的指數積分器,快 10–50 倍)、平行解 ODE(ParaDDPM)、progressive distillation(學生模型一步做到老師兩步的事,遞迴下去,最後只要 2–8 步)、guided diffusion model 的蒸餾。
- 投影片 37–38:latent diffusion:先用 VAE 把資料壓到低維空間,再在潛在空間上學 diffusion;Stable Diffusion。
- 投影片 39–47:條件生成:\(p(\mathbf x\mid\mathbf y)\) 的 score、Bayes 法則(第 14 講已整理)、stroke-to-image、文字引導、classifier-free guidance(同時訓練條件與無條件的 score model,用兩者的差當作隱含的分類器,引導強度 \(w\))。
與其他講的關聯
- 第 5–6 講:VAE 與 ELBO。DDPM 是「編碼器固定、潛在變數和資料同維度、T 層」的特殊階層式 VAE。
- 第 7–8 講:probability flow ODE 讓 diffusion model 變成連續時間的 normalizing flow。
- 第 11 講:Langevin dynamics 當作 corrector。
- 第 13 講:DSM 與 Tweedie:最佳的 \(\boldsymbol\epsilon_\theta\) 就是 \(-\sqrt{1-\bar\alpha_t}\times\) score。
- 第 14 講:NCSN(VE)和 DDPM(VP)是同一個 score SDE 框架的兩個實例;predictor–corrector。
- 第 15 講:\(L_{\text{simple}}\) 和真正的 ELBO 之間的取捨,是「likelihood 與樣本品質不一致」的實例。
- 第 17 講:DDIM、蒸餾、latent diffusion、classifier-free guidance。
常見誤解
自我測驗
1. 寫出 DDPM 的前向一步,並推出 \(q(\mathbf x_t\mid\mathbf x_0)\)。
2. 為什麼 \(q(\mathbf x_t\mid\mathbf x_0)\) 有閉式這件事對訓練很重要?
3. 把 diffusion model 對應到階層式 VAE:prior、編碼器、解碼器、潛在變數各是什麼?
4. ELBO 拆成哪三種項?哪一項沒有可學參數?
5. 為什麼用 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\) 而不是 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\)?
6. 寫出 \(\boldsymbol\epsilon\) 參數化的 \(\boldsymbol\mu_\theta\),以及它讓 \(L_{t-1}\) 變成什麼。
7. \(\boldsymbol\epsilon_\theta\) 和 score 是什麼關係?
8. 實務上的 \(L_{\text{simple}}\) 和真正的 ELBO 差在哪?在 CIFAR-10 上結果如何?
9. 為什麼 DDPM 的取樣像 Langevin?它和反向 SDE 有什麼關係?
10. 為什麼要用很多小步,而不是一步加完所有雜訊?
11. 雜訊很大時,最佳的去雜訊器輸出什麼?這對泛化說明了什麼?
12. 在 predictor–corrector 的語言裡,DDPM 和 NCSN 各是什麼?
延伸閱讀
- Ho, Jain & Abbeel (2020), Denoising Diffusion Probabilistic Models(本頁參考):投影片 10–20 的出處。
- Sohl-Dickstein et al. (2015), Deep Unsupervised Learning using Nonequilibrium Thermodynamics:diffusion model 的原始論文(也用了 Swiss roll)。
- Song et al. (2021), Score-Based Generative Modeling through SDEs(本頁參考):DDPM = 反向 VP SDE 的離散化、predictor–corrector。
- Nichol & Dhariwal (2021), Improved DDPM:cosine schedule、學變異數。
- Kingma et al. (2021), Variational Diffusion Models:以訊雜比描述 schedule、連續時間的 ELBO、學 schedule。
- Lai et al. (2026)(v3)(本頁參考)第 2 章「Variational Perspective: From VAEs to DDPMs」。
- Lilian Weng, What are Diffusion Models?:DDPM 推導的詳細整理。