CS236 第 16 講 · Diffusion 即階層式 VAE
Stanford CS236 · Fall 2023 · Lecture 16

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)描述的是同一個模型。

讀完這頁你應該能夠

  1. 寫出 DDPM 的前向過程 \(q(\mathbf x_t\mid\mathbf x_{t-1})\),推出閉式的 \(q(\mathbf x_t\mid\mathbf x_0)\),說明它為什麼讓訓練有效率。
  2. 說明為什麼 diffusion model 是一個「編碼器固定、解碼器可學」的階層式 VAE,寫出它的 ELBO。
  3. 寫出 ELBO 拆成 \(L_T + \sum L_{t-1} + L_0\) 的形式,以及 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\) 的閉式。
  4. 說明 \(\boldsymbol\epsilon\) 參數化如何把 ELBO 化成 denoising score matching,以及 \(\boldsymbol\epsilon_\theta = -\sqrt{1-\bar\alpha_t}\,\mathbf s_\theta\)。
  5. 寫出 DDPM 的訓練與取樣演算法,說明取樣為什麼像 Langevin,也是反向 SDE 的一種離散化(predictor)。
  6. 說明實務上用 \(\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

$$q(\mathbf x_t\mid\mathbf x_{t-1}) = \mathcal N\big(\mathbf x_t;\ \sqrt{1-\beta_t}\,\mathbf x_{t-1},\ \beta_t I\big),\qquad q(\mathbf x_{1:T}\mid\mathbf x_0) = \prod_{t=1}^Tq(\mathbf x_t\mid\mathbf x_{t-1})$$
  • 平均是上一步稍微縮小 \(\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)

$$q(\mathbf x_t\mid\mathbf x_0) = \mathcal N\big(\mathbf x_t;\ \sqrt{\bar\alpha_t}\,\mathbf x_0,\ (1-\bar\alpha_t)I\big),\qquad\bar\alpha_t = \prod_{s=1}^t(1-\beta_s)$$

兩個重要後果:16:44

  1. 和 score-based model 的加雜訊分佈一樣:取 \(\mathbf x_0\)、加上對應雜訊量的高斯雜訊,正是 denoising score matching 產生訓練資料的方式。
  2. 任何 \(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}\),代入:

$$\mathbf x_t = \sqrt{\alpha_t\bar\alpha_{t-1}}\,\mathbf x_0 + \underbrace{\sqrt{\alpha_t(1-\bar\alpha_{t-1})}\,\bar{\boldsymbol\epsilon} + \sqrt{1-\alpha_t}\,\boldsymbol\epsilon_t}_{\text{兩個獨立高斯之和}}$$

獨立高斯相加,變異數相加:\(\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\)。

Linear 的 \(\bar\alpha_t\)Cosine 的 \(\bar\alpha_t\)
跑 t 步的鏈(5,000 個)閉式一步到位(5,000 個)精確的 \(q_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

$$p_\theta(\mathbf x_{t-1}\mid\mathbf x_t) = \mathcal N\big(\mathbf x_{t-1};\ \boldsymbol\mu_\theta(\mathbf x_t,t),\ \sigma_t^2I\big),\qquad p_\theta(\mathbf x_{0:T}) = p(\mathbf x_T)\prod_{t=1}^Tp_\theta(\mathbf x_{t-1}\mid\mathbf x_t)$$
  • 就像 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兩層階層式 VAEDiffusion 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

DDPM 的訓練目標(投影片 18) $$\mathbb E_{q(\mathbf x_0)}\big[-\log p_\theta(\mathbf x_0)\big]\le\mathbb E_{q(\mathbf x_0)q(\mathbf x_{1:T}\mid\mathbf x_0)}\Big[-\log\frac{p_\theta(\mathbf x_{0:T})}{q(\mathbf x_{1:T}\mid\mathbf x_0)}\Big] =: L$$ \(q(\mathbf x_0)\) 是資料分佈。\(q\) 固定,只對 \(\theta\) 最佳化,所以比一般 VAE 還簡單(一般 VAE 的 \(\phi\) 也要學)。37:02
把 \(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 = \mathbb E_q\Big[\underbrace{D_{\mathrm{KL}}\big(q(\mathbf x_T\mid\mathbf x_0)\,\Vert\,p(\mathbf x_T)\big)}_{L_T} + \sum_{t>1}\underbrace{D_{\mathrm{KL}}\big(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,\Vert\,p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\big)}_{L_{t-1}}\ \underbrace{-\log p_\theta(\mathbf x_0\mid\mathbf x_1)}_{L_0}\Big]$$
  • \(L_T\):編碼器的終點和 prior 有多接近。沒有可學參數,選好 schedule 就幾乎是 0。
  • \(L_{t-1}\):解碼器的每一步要模仿「知道答案 \(\mathbf x_0\) 時的反向一步」。這個條件後驗是高斯、有閉式(下式),所以每個 KL 都是兩個高斯之間的 KL,可以精確算,不用高變異的 Monte Carlo。
  • \(L_0\):最後一步的重建項,像 VAE 的重建 loss。
$$q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0) = \mathcal N\big(\tilde{\boldsymbol\mu}_t(\mathbf x_t,\mathbf x_0),\ \tilde\beta_tI\big),\quad\tilde{\boldsymbol\mu}_t = \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}\mathbf x_0 + \frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}\mathbf x_t,\quad\tilde\beta_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t$$

(這是高斯的共軛: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

$$\boldsymbol\mu_\theta(\mathbf x_t,t) = \frac1{\sqrt{1-\beta_t}}\Big(\mathbf x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\boldsymbol\epsilon_\theta(\mathbf x_t,t)\Big)$$

代進 \(L_{t-1}\),ELBO 就變成(投影片 19):40:06

$$L = \mathbb E_{\mathbf x_0\sim q(\mathbf x_0),\ t\sim\mathcal U\{1,T\},\ \boldsymbol\epsilon\sim\mathcal N(0,I)}\Big[\lambda_t\,\big\Vert\boldsymbol\epsilon - \boldsymbol\epsilon_\theta\big(\sqrt{\bar\alpha_t}\,\mathbf x_0 + \sqrt{1-\bar\alpha_t}\,\boldsymbol\epsilon,\ t\big)\big\Vert^2\Big]$$

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\) 的函數:

$$\tilde{\boldsymbol\mu}_t = \frac1{\sqrt{\alpha_t}}\Big(\mathbf x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\boldsymbol\epsilon\Big)$$

所以 \(\boldsymbol\mu_\theta\) 唯一要猜的是 \(\boldsymbol\epsilon\)(\(\mathbf x_t\) 是輸入,已知)。用同樣的形式參數化 \(\boldsymbol\mu_\theta\),差就只剩 \(\boldsymbol\epsilon\) 的差:

$$L_{t-1} - C = \mathbb E_{\mathbf x_0,\boldsymbol\epsilon}\Big[\underbrace{\frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}}_{\lambda_t}\Vert\boldsymbol\epsilon - \boldsymbol\epsilon_\theta(\mathbf x_t,t)\Vert^2\Big]$$

步驟 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)

$$\boldsymbol\epsilon_\theta^*(\mathbf x_t,t) = \mathbb E[\boldsymbol\epsilon\mid\mathbf x_t] = -\sqrt{1-\bar\alpha_t}\,\nabla_{\mathbf x_t}\log q_t(\mathbf x_t)$$

這也是投影片 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 的取樣規則可以寫成

$$\mathbf x_{t-1} = \frac1{\sqrt{1-\beta_t}}\big(\mathbf x_t + \beta_t\mathbf s_\theta(\mathbf x_t,t)\big) + \sigma_t\mathbf z\approx\Big(1+\tfrac12\beta_t\Big)\mathbf x_t + \beta_t\mathbf s_\theta + \sqrt{\beta_t}\,\mathbf z\qquad(\sigma_t^2 = \beta_t)$$

另一方面,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課堂問答:為什麼要這樣設計?

這講中段有一連串學生提問(錄音只收到老師的回答),整理如下。

學習編碼器?· 43:11一般 VAE 的編碼器和解碼器一起學,互相幫忙:編碼器找結構,解碼器利用結構。這裡編碼器固定,只是加雜訊,解碼器盡力把它倒過來,而這需要 score。也可以學編碼器,ELBO 的數字會更好,但實務上樣本品質變差,會像 VAE 一樣模糊;不確定是不是最佳化的問題。43:11
和 score-based model 有什麼不同?· 44:11實務上 DDPM 每一步也可以加一步 Langevin,那就幾乎一樣了。score-based 觀點的一個好處是很容易推廣到無限多個雜訊尺度(SDE),VAE 觀點要做到這點比較麻煩。44:11
λt · 44:43實務上不是最佳化 ELBO,而是一個縮放過的版本:\(\lambda_t\) 控制你多在乎各個時間步。容量無限時沒差,但實務上大家設 \(\lambda_t = 1\),這不是最佳化 ELBO 該用的權重。最佳化 likelihood 不一定和樣本品質相關。44:43
會泛化到訓練分佈之外嗎?· 45:44某種程度上會,但不會跑出訓練分佈:用貓的影像訓練,它不會生成狗。雜訊很大時,最好的去雜訊就是預測訓練集的平均影像,所以 \(t = T\) 時網路輸出的是貓的平均圖。45:44
為什麼效果這麼好?· 46:46一個主要原因:生成時可以投入非常大量的計算,等於把資料穿過 1,000 個 VAE 疊成的深網路(\(T\) 通常是 1,000)。但因為這種設定,訓練時從來不需要看整個深而昂貴的計算圖,可以一層一層、局部地訓練,每一步只學「稍微好一點」,非常有效率。46:46
一般的階層式 VAE 也能這樣訓練嗎?· 47:49不一定。這裡能一步從 \(\mathbf x_0\) 跳到 \(\mathbf x_t\),是因為每個 \(q\) 都很簡單、可以閉式組合;如果 \(q\) 是任意的神經網路,就沒辦法跳,只能模擬整條鏈。所以這是一種特別容易訓練的階層式 VAE。47:49
為什麼不一步就加完雜訊?· 49:52也可以想像一個 VAE,編碼器一步加入大量雜訊;但那樣解碼器要學的「從雜訊到資料」會非常複雜。如果每一步只加一點雜訊,反過來也相對容易。我們把「從雜訊到資料」這個困難的問題拆成 1,000 個小問題,每個只要去掉一點雜訊,實務上效果更好,因為子問題好學得多。49:52
學一個編碼器的階層式 VAE?· 52:58老師的組有論文試過。問題是如果編碼器可學,就不可識別:要把輸入的資訊分散到這麼多潛在變數裡,哪些位元存在哪裡有很多種方式。用某種強制模型以特定方式分散位元的編碼策略,可以接近 diffusion 的表現,但還不完全清楚怎麼做。52:58
Noise schedule 怎麼選?· 53:28有很多論文在研究。唯一真正的限制是最後訊雜比要是 0(所有資訊都被破壞);中間每一步加多少雜訊很有彈性。從 ELBO 的觀點甚至可以學一個簡單的函數來控制 schedule。也有人試過高斯以外的破壞結構方式,有一些成功,但實務上大家還是用高斯。53:28

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\) 都一樣;只有步數不同。

\(\sigma_t^2 = \beta_t\)\(\sigma_t^2 = \tilde\beta_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 衰減)。

每個 t 的 ε 預測誤差 ‖ε − ε_θ‖²(最近的訓練步)
  • \(\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

DDPM、score-based model 都是同一個 SDE 的解法
  • 在 VAE 的情形,知道 score 就能得到最佳的解碼器;在連續時間,知道所有時刻的 score 就能精確倒轉生成過程(反向 SDE)。60:17
  • 如果用 1,000 步、每一步用解碼器,就是用 Euler–Maruyama 離散化解這個 SDE。DDPM 就是 predictor;score-based model 跑 Langevin 修正數值誤差,是 corrector;兩者可以結合,得到更準的 SDE 解法。64:25
課堂問答 · 65:28中間的分佈是高斯嗎?以初始條件為條件時是高斯(所以能有效率地往前模擬),但邊際分佈離高斯很遠。轉移是高斯,這是關鍵。65:28

延伸 補充課 E §7 VE 與 VP SDE;補充課 F §6 反向 SDE

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 講)各雜訊尺度的 scoreDSMannealed 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精確(變數變換)

延伸 補充課 C §7 用 ODE 算 likelihood;補充課 B §6 可逆的 flow

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\))。

常見誤解

誤解:「diffusion 的編碼器是學出來的」。DDPM 的編碼器完全固定,只是加雜訊;可學的只有解碼器。學編碼器能讓 ELBO 更好,但樣本會變模糊。
誤解:「訓練時要模擬整條加雜訊的鏈」。\(q(\mathbf x_t\mid\mathbf x_0)\) 有閉式,一步就能取樣任何 \(t\),訓練每一步只需要一次網路前向傳播。
誤解:「DDPM 在最大化 likelihood」。實務上用的是 \(\lambda_t = 1\) 的 \(L_{\text{simple}}\),不是 ELBO;它的最佳解(\(\mathbb E[\boldsymbol\epsilon\mid\mathbf x_t]\))和 ELBO 相同,但有限容量下強調不同的 \(t\)。
誤解:「中間的 \(\mathbf x_t\) 都是高斯分佈」。只有以 \(\mathbf x_0\) 為條件時是高斯;邊際分佈 \(q_t(\mathbf x_t)\) 是資料分佈和高斯的摺積,可以非常複雜。
誤解:「真正的反向一步 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\) 是高斯」。它是對所有可能 \(\mathbf x_0\) 的混合;只有在步長很小時近似高斯。這就是 Demo B 中 T 小時 ELBO 很鬆的原因。
誤解:「DDPM 和 score-based model 是不同的模型」。訓練目標都是 DSM(差一個權重),取樣都是同一個反向 SDE 的離散化(一個是 predictor,一個是 corrector)。

自我測驗

1. 寫出 DDPM 的前向一步,並推出 \(q(\mathbf x_t\mid\mathbf x_0)\)。
\(q(\mathbf x_t\mid\mathbf x_{t-1}) = \mathcal N(\sqrt{1-\beta_t}\mathbf x_{t-1},\beta_tI)\)。歸納:獨立高斯相加,\(q(\mathbf x_t\mid\mathbf x_0) = \mathcal N(\sqrt{\bar\alpha_t}\mathbf x_0,(1-\bar\alpha_t)I)\),\(\bar\alpha_t = \prod_{s\le t}(1-\beta_s)\)。
2. 為什麼 \(q(\mathbf x_t\mid\mathbf x_0)\) 有閉式這件事對訓練很重要?
每個訓練步驟隨機選 \(t\),一步就能產生 \(\mathbf x_t\),不用模擬 \(t\) 步的鏈;也讓 ELBO 的每一項能獨立估計。任意神經網路當編碼器的階層式 VAE 做不到。
3. 把 diffusion model 對應到階層式 VAE:prior、編碼器、解碼器、潛在變數各是什麼?
Prior \(p(\mathbf x_T) = \mathcal N(0,I)\);編碼器 \(\prod q(\mathbf x_t\mid\mathbf x_{t-1})\)(固定,加雜訊);解碼器 \(\prod p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\)(高斯,平均由網路給);潛在變數 \(\mathbf x_{1:T}\),和資料同維度。
4. ELBO 拆成哪三種項?哪一項沒有可學參數?
\(L_T = \mathrm{KL}(q(\mathbf x_T\mid\mathbf x_0)\Vert p(\mathbf x_T))\)(沒有可學參數)、\(L_{t-1} = \mathrm{KL}(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\Vert p_\theta(\mathbf x_{t-1}\mid\mathbf x_t))\)、\(L_0 = -\log p_\theta(\mathbf x_0\mid\mathbf x_1)\)。
5. 為什麼用 \(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\) 而不是 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\)?
後者是對所有可能 \(\mathbf x_0\) 的混合,未知;前者以 \(\mathbf x_0\) 為條件,是有閉式的高斯(共軛),KL 能精確算。對 \(\mathbf x_0\) 平均後,兩種目標的最佳解相同。
6. 寫出 \(\boldsymbol\epsilon\) 參數化的 \(\boldsymbol\mu_\theta\),以及它讓 \(L_{t-1}\) 變成什麼。
\(\boldsymbol\mu_\theta = \frac1{\sqrt{\alpha_t}}(\mathbf x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\boldsymbol\epsilon_\theta)\);\(L_{t-1} = \lambda_t\mathbb E\Vert\boldsymbol\epsilon - \boldsymbol\epsilon_\theta(\sqrt{\bar\alpha_t}\mathbf x_0 + \sqrt{1-\bar\alpha_t}\boldsymbol\epsilon,t)\Vert^2\) + 常數,\(\lambda_t = \frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}\)。
7. \(\boldsymbol\epsilon_\theta\) 和 score 是什麼關係?
最佳時 \(\boldsymbol\epsilon_\theta^*(\mathbf x_t,t) = \mathbb E[\boldsymbol\epsilon\mid\mathbf x_t] = -\sqrt{1-\bar\alpha_t}\nabla\log q_t(\mathbf x_t)\)。
8. 實務上的 \(L_{\text{simple}}\) 和真正的 ELBO 差在哪?在 CIFAR-10 上結果如何?
\(L_{\text{simple}}\) 設 \(\lambda_t = 1\),相對降低小 \(t\) 的權重。FID 3.17 vs 13.51(ELBO),但 NLL 3.75 vs 3.70 bits/dim,ELBO 的 likelihood 稍好。
9. 為什麼 DDPM 的取樣像 Langevin?它和反向 SDE 有什麼關係?
每一步 \(\mathbf x_{t-1} = \frac1{\sqrt{\alpha_t}}(\mathbf x_t + \beta_t\mathbf s_\theta) + \sigma_t\mathbf z\):沿 score 走一步再加雜訊。它是反向 VP SDE 的一種離散化(predictor)。
10. 為什麼要用很多小步,而不是一步加完所有雜訊?
每一小步的真實反向分佈接近高斯、容易學;一步的反向是從雜訊直接到資料,非常複雜。Demo B:T = 1 時 ELBO 差約 1.6 nats,T = 1,000 時(\(\sigma_t^2 = \beta_t\))約 0.02 nats。
11. 雜訊很大時,最佳的去雜訊器輸出什麼?這對泛化說明了什麼?
訓練資料的平均。模型只會在訓練分佈附近放機率質量,用貓訓練不會生成狗。
12. 在 predictor–corrector 的語言裡,DDPM 和 NCSN 各是什麼?
DDPM 的 ancestral sampling 是 predictor(只有預測、沒有修正);NCSN 的 annealed Langevin 是 corrector(只有修正)。

延伸閱讀