CS236 第 13 講 · Score-Based Models
Stanford CS236 · Fall 2023 · Lecture 13

Score-Based Models:直接學 \(\nabla_{\mathbf x}\log p\),再沿著它走

不學密度、也不學能量,而是直接用神經網路 \(\mathbf s_\theta:\mathbb R^d\to\mathbb R^d\) 建模 score 這個向量場。訓練用 score matching,但原始版本要算 Jacobian 的 trace,需要 \(O(d)\) 次 backprop。這講介紹兩個能擴展到高維度的版本:denoising score matching(加雜訊,把問題變成「預測加了什麼雜訊」,配上 Tweedie 公式,score 就是最佳的去雜訊方向)和 sliced score matching(隨機投影,一次 backprop)。最後用 Langevin dynamics 從學到的 score 取樣,並看到這個直接的做法為什麼會失敗:流形假設、低密度區的 score 不準、mode 之間混合太慢。下一講的 diffusion model 正是為了修正這三點。

讀完這頁你應該能夠

  1. 說明 score-based model 和 EBM 的差別(向量場不一定是保守場),以及為什麼只用 score 不會遺失資訊。
  2. 說明原始 score matching 為什麼需要 \(O(d)\) 次 backprop。
  3. 推導 denoising score matching:把對 \(q_\sigma(\tilde{\mathbf x})\) 的 Fisher divergence 改寫成對條件分佈 \(q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\) 的回歸,並寫出高斯雜訊時的 loss。
  4. 解釋 DSM 的取捨:σ 太大估計的是模糊後的分佈,σ 太小 loss 的變異數爆炸。
  5. 寫出 Tweedie 公式 \(\mathbb E[\mathbf x\mid\tilde{\mathbf x}] = \tilde{\mathbf x} + \sigma^2\nabla\log q_\sigma(\tilde{\mathbf x})\),並用它說明 score = 最佳去雜訊方向。
  6. 推導 sliced score matching 的目標,說明為什麼 \(\mathbf v^\top\nabla_{\mathbf x}\mathbf s_\theta\mathbf v\) 只需一次 backprop。
  7. 寫出 Langevin 取樣,說明直接的 score-based 生成模型的三個陷阱。

前置知識檢查

  • 第 12 講:score function、Fisher divergence、score matching 的分部積分、Hutchinson trace 估計、Langevin MCMC。
  • 高斯分佈的 log 密度和梯度:\(\nabla_{\mathbf x}\log\mathcal N(\mathbf x;\boldsymbol\mu,\sigma^2I) = -(\mathbf x-\boldsymbol\mu)/\sigma^2\)。
  • Bayes 法則與條件期望;平方誤差的最佳估計量是條件期望。
  • Jacobian 矩陣、Jacobian–vector product、反向傳播的成本。

這講的投影片只有 pptx。我用 ONLYOFFICE 的轉檔器轉成 PDF 再看圖;投影片中的 GIF 動畫(取樣過程)轉檔後只剩第一格,描述以逐字稿為準。標「出處」的補充來自 Yang Song〈Generative Modeling by Estimating Gradients of the Data Distribution〉(2021)、Lai et al. (2026)(arXiv 2510.21890v3)§3.2–3.3、Song & Ermon (2019)、Vincent (2011)、Efron (2011)。

01表示機率分佈的三種方式(投影片 2–12)

密度 / 機率質量函數 p(x) Autoregressive \(p_\theta(\mathbf x) = \prod_i p_\theta(x_i\mid\mathbf x_{<i})\)、flow \(p_\theta(\mathbf x) = p(\mathbf z)|\det J_{f_\theta}(\mathbf x)|\)、VAE \(\int p(\mathbf z)p_\theta(\mathbf x\mid\mathbf z)d\mathbf z\)、EBM \(e^{f_\theta(\mathbf x)}/Z(\theta)\)。
優點:maximum likelihood 訓練;可以用 likelihood 有原則地比較模型。
缺點:要處理 partition function,得用特殊架構或替代 loss。00:37
取樣過程(GAN) \(\mathbf z\sim p(\mathbf z)\),\(\mathbf x = g_\theta(\mathbf z)\)。
優點:樣本品質通常較好。
缺點:對抗訓練、不穩定、mode collapse;沒有原則的方法比較模型;沒有停止準則。02:40

第三種:score function \(\nabla_{\mathbf x}\log p(\mathbf x)\)。只適用於可微的密度,也就是連續變數。注意梯度是對輸入,不是對參數。03:11

投影片 8–9 的圖:(1) 左邊是二維平面上兩個高斯的混合(右上一個深色、左下一個淺色),上面疊著指向兩個中心的箭頭場;右邊是電位與電場的示意圖,紅色實線是等位線、綠色虛線是電場線:同一個物理系統的兩種描述。(2) 一維的例子:左圖 \(p(x)\) 是在 −5 附近一個矮峰、在 4 附近一個高峰;右圖是對應的 \(\nabla_x\log p(x)\):一條大致向下的斜線,在兩峰之間的低谷處有一個劇烈的跳躍。左邊的曲線必須積分為 1,右邊的完全沒有這種限制,形狀也簡單得多。06:19

EBM 的回顧(投影片 10–11):maximum likelihood 用 contrastive divergence,訓練時要反覆取樣;改用 Fisher divergence(score matching)就不用。關鍵是 \(\nabla_{\mathbf x}\log p_\theta(\mathbf x) = \nabla_{\mathbf x}f_\theta(\mathbf x) - \nabla_{\mathbf x}\log Z(\theta) = \nabla_{\mathbf x}f_\theta(\mathbf x)\):partition function 對每個 \(\mathbf x\) 都一樣,對 \(\mathbf x\) 微分就消失了。08:27

$$\frac12\mathbb E_{p_{\text{data}}}\big[\Vert\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x) - \nabla_{\mathbf x}\log p_\theta(\mathbf x)\Vert_2^2\big] = \mathbb E_{p_{\text{data}}}\Big[\frac12\Vert\nabla_{\mathbf x}f_\theta(\mathbf x)\Vert_2^2 + \mathrm{tr}\big(\nabla_{\mathbf x}^2f_\theta(\mathbf x)\big)\Big] + \text{const.}$$

Score matching 只能用在 EBM 上嗎?(投影片 12)不是。只要能算 \(\nabla_{\mathbf x}\log p_\theta\),loss 就有定義:連續的 autoregressive model、normalizing flow 都可以。只是這些模型本來就能算 likelihood,用 MLE 訓練更自然。10:33

02Score-based model:直接建模向量場(投影片 13–16)

能用 score matching 訓練的最一般的模型是什麼?Autoregressive 和 flow 是 \(Z = 1\) 的特殊 EBM;EBM 又是更大的集合。再往外一層:不建模能量,直接建模 score。11:34

投影片 13 的圖:一個米色的大橢圓,裡面一個棕色橢圓標 EBMs,EBMs 裡有兩個重疊的圓:Autoregressive 和 flow,重疊處是 MAFs。最外層的米色區域標著「?」和 Score-based model,旁邊是一張箭頭場的小圖,寫著「Directly model the vector field of gradients!」和 \(\mathbb R^d\to\mathbb R^d\)。

SCORE-BASED MODEL 一個可學的向量值函數 \(\mathbf s_\theta(\mathbf x):\mathbb R^d\to\mathbb R^d\),目標是 \(\mathbf s_\theta(\mathbf x)\approx\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x)\)。輸出和輸入同維度,因為每一點要給一個箭頭。12:39

投影片 14 的圖:三格,從左到右:一個二維密度 \(p_{\text{data}}(\mathbf x)\)(右上一個亮橘色的點、左下一個淡的點)→ 從它抽出的 iid 樣本(右上一團藍點、左下少數幾點)→「?」→ 一整片的 score 向量場 \(\mathbf s_\theta(\mathbf x)\approx\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x)\)。我們只有中間那張圖,要估計右邊那張。13:43

怎麼比較兩個向量場?把它們疊在一起,每一點看真實箭頭和估計箭頭的差,取歐氏距離的平方,再對整個空間(以資料密度)取平均:這就是 Fisher divergence。23:38

$$\frac12\mathbb E_{p_{\text{data}}}\big[\Vert\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x) - \mathbf s_\theta(\mathbf x)\Vert_2^2\big] = \mathbb E_{p_{\text{data}}}\Big[\frac12\Vert\mathbf s_\theta(\mathbf x)\Vert_2^2 + \mathrm{tr}\big(\underbrace{\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)}_{\text{Jacobian of }\mathbf s_\theta}\big)\Big] + \text{const.}$$

要求:(1) \(\mathbf s_\theta\) 要能有效率地計算;(2) 它需要是某個純量「能量」函數的梯度嗎?實務上不需要。25:12

課堂問答 · 18:26EBM 不就已經是最一般的了嗎,Fisher divergence 本來就只看 score?差別在於:EBM 的向量場是某個純量函數 \(f_\theta\)(電位)的梯度,所以必須是保守場,這是一種限制。Score-based model 允許任意向量場,它不一定是任何函數的梯度。18:26
課堂問答 · 21:35從 score 怎麼保證回到同一個分佈?積分可以把函數還原到差一個常數;而這個常數由「密度必須積分為 1」唯一決定,所以沒有資訊損失。21:35
課堂問答 · 15:50兩團資料之間沒有樣本,模型怎麼知道那裡的 score?這和用 likelihood 一樣難:你也希望 likelihood 模型在沒看過的地方放一些機率質量。到目前為止只是換一種表示法;之後會看到 Fisher divergence 特有的問題,需要額外的技巧(第 8 節)。15:50

03Score matching 不夠快(投影片 17)

用深度網路當 \(\mathbf s_\theta\):輸入 \(x_1,x_2,x_3\),輸出 \(s_{\theta,1},s_{\theta,2},s_{\theta,3}\)。26:43

  • \(\Vert\mathbf s_\theta(\mathbf x)\Vert_2^2\):一次 forward 就有。
  • \(\mathrm{tr}(\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)) = \sum_i\partial s_{\theta,i}/\partial x_i\):要對每個輸出 \(s_{\theta,i}\) 各做一次 backprop,才能取得對角元素 \(\partial s_{\theta,i}/\partial x_i\)。總共 \(O(d)\) 次 backprop。28:19

投影片 17 的圖:上面是一個 3 進 3 出的網路,旁邊寫著 \(\Vert\mathbf s_\theta(\mathbf x)\Vert_2^2\) 和被打叉的 \(\mathrm{tr}(\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x))\),配一個哭臉,標「Score Matching is not Scalable!」。下面同一個網路被 backprop 了三次(紫色箭頭),分別得到 \(\partial s_{\theta,1}/\partial x_1\)、\(\partial s_{\theta,2}/\partial x_2\)、\(\partial s_{\theta,3}/\partial x_3\),旁邊的 3×3 Jacobian 矩陣只圈出對角線,標著「\(O(d)\) Backprops!」。

課堂問答 · 28:49EBM 不也有同樣的問題嗎?EBM 更糟:先要一次 backprop 才能從 \(f_\theta\) 得到 score,再對 score 做 \(d\) 次,等於要二階導數。score-based model 至少省了一次,因為它直接輸出梯度。28:49

04Denoising score matching(投影片 18–25)

想法:不估計資料本身的 score,改估計加了雜訊的資料的 score。31:57

$$q_\sigma(\tilde{\mathbf x}\mid\mathbf x) = \mathcal N(\tilde{\mathbf x};\mathbf x,\sigma^2I),\qquad q_\sigma(\tilde{\mathbf x}) = \int p_{\text{data}}(\mathbf x)\,q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\,d\mathbf x$$
  • 估計 \(\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})\) 在計算上容易得多。
  • 雜訊夠小時,\(q_\sigma(\tilde{\mathbf x})\approx p_{\text{data}}(\tilde{\mathbf x})\),是個好近似。32:59
  • 從 \(q_\sigma\) 取樣很簡單:抽一張資料,加上高斯雜訊。35:42

投影片 18–19 的圖:(18) 一維的例子,藍色是 \(p(\mathbf x)\)(五根很窄的尖峰),黃色是 \(q_\sigma\)(同樣位置、稍微變寬變矮的峰),兩者幾乎重疊。(19) 左邊一隻約克夏的清晰照片 \(\mathbf x\sim p_{\text{data}}(\mathbf x)\),箭頭經過 \(q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\) 變成一張滿是彩色雜點的同一張照片 \(\tilde{\mathbf x}\sim q_\sigma(\tilde{\mathbf x})\)。

推導(投影片 19–21,配色照投影片)

對 \(q_\sigma\) 的 Fisher divergence,展開平方:34:35

$$\begin{aligned} \frac12\mathbb E_{\tilde{\mathbf x}\sim q_\sigma}\big[\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}) - \mathbf s_\theta(\tilde{\mathbf x})\Vert_2^2\big] = &\ \textcolor{#2f5fd0}{\frac12\int q_\sigma\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma\Vert_2^2d\tilde{\mathbf x}} + \textcolor{#2a9a6a}{\frac12\int q_\sigma\Vert\mathbf s_\theta\Vert_2^2d\tilde{\mathbf x}} \textcolor{#b3261e}{\ -\int q_\sigma(\tilde{\mathbf x})\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})^\top\mathbf s_\theta(\tilde{\mathbf x})\,d\tilde{\mathbf x}} \end{aligned}$$

藍色和 \(\theta\) 無關;綠色很好算;麻煩的是紅色,因為 \(q_\sigma\) 的 score 未知。這次不用分部積分,而是把 \(q_\sigma\) 的定義展開:37:45

$$\begin{aligned} \textcolor{#b3261e}{-\int q_\sigma(\tilde{\mathbf x})\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})^\top\mathbf s_\theta(\tilde{\mathbf x})d\tilde{\mathbf x}} &= -\int\nabla_{\tilde{\mathbf x}}q_\sigma(\tilde{\mathbf x})^\top\mathbf s_\theta(\tilde{\mathbf x})\,d\tilde{\mathbf x} = -\int\Big(\nabla_{\tilde{\mathbf x}}\int p_{\text{data}}(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)d\mathbf x\Big)^\top\mathbf s_\theta(\tilde{\mathbf x})\,d\tilde{\mathbf x}\\ &= -\int\Big(\int p_{\text{data}}(\mathbf x)\nabla_{\tilde{\mathbf x}}q_\sigma(\tilde{\mathbf x}\mid\mathbf x)d\mathbf x\Big)^\top\mathbf s_\theta(\tilde{\mathbf x})\,d\tilde{\mathbf x} = -\iint p_{\text{data}}(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)^\top\mathbf s_\theta(\tilde{\mathbf x})\,d\mathbf x\,d\tilde{\mathbf x}\\ &= \textcolor{#b3261e}{-\mathbb E_{\mathbf x\sim p_{\text{data}},\,\tilde{\mathbf x}\sim q_\sigma(\tilde{\mathbf x}\mid\mathbf x)}\big[\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)^\top\mathbf s_\theta(\tilde{\mathbf x})\big]} \end{aligned}$$

關鍵一步是梯度是線性運算,可以穿進對 \(\mathbf x\) 的積分,碰到的就不再是未知的 \(q_\sigma(\tilde{\mathbf x})\),而是已知的高斯 \(q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\)。39:17 再把它配成平方(加減一個和 \(\theta\) 無關的棕色項):

配方的細節(投影片 21):綠色項加紅色項只缺一項就是完全平方,缺的是 \(+\frac12\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\Vert_2^2\)。所以先加上它湊成平方,再把它減掉,減掉的就是棕色項:39:17

$$\textcolor{#2a9a6a}{\frac12\mathbb E\big[\Vert\mathbf s_\theta(\tilde{\mathbf x})\Vert_2^2\big]}\textcolor{#b3261e}{\ -\ \mathbb E\big[\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)^\top\mathbf s_\theta(\tilde{\mathbf x})\big]} = \frac12\mathbb E\big[\Vert\mathbf s_\theta(\tilde{\mathbf x}) - \nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\Vert_2^2\big]\ \textcolor{#a0622d}{-\ \frac12\mathbb E\big[\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\Vert_2^2\big]}$$

三個期望都是對 \(\mathbf x\sim p_{\text{data}}\)、\(\tilde{\mathbf x}\sim q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\) 取(綠色項只看 \(\tilde{\mathbf x}\),對這個聯合分佈取期望和對 \(q_\sigma(\tilde{\mathbf x})\) 取是一樣的)。棕色項只牽涉資料和雜訊,和 \(\theta\) 無關,角色和藍色項一樣,是可以丟掉的常數。高斯雜訊時 \(\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x) = -\mathbf z/\sigma\),所以棕色項 \(= -\frac12\mathbb E\Vert\mathbf z\Vert_2^2/\sigma^2 = -\frac{d}{2\sigma^2}\):DSM loss 的數值比 Fisher divergence 多出一個隨 \(\sigma\to0\) 變得很大的常數,但最佳的 \(\theta\) 不變。

DENOISING SCORE MATCHING(VINCENT 2011) $$\frac12\mathbb E_{\tilde{\mathbf x}\sim q_\sigma}\big[\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}) - \mathbf s_\theta(\tilde{\mathbf x})\Vert_2^2\big] = \frac12\mathbb E_{\mathbf x\sim p_{\text{data}}(\mathbf x),\,\tilde{\mathbf x}\sim q_\sigma(\tilde{\mathbf x}\mid\mathbf x)}\big[\Vert\mathbf s_\theta(\tilde{\mathbf x}) - \nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\Vert_2^2\big] + \text{const.}$$ 左邊要匹配未知的「邊際」score,右邊只需匹配已知的「條件」score。兩者只差一個常數,最佳解相同。42:31

高斯雜訊時 \(\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x) = -\frac{\tilde{\mathbf x}-\mathbf x}{\sigma^2}\),代入就是 L2 回歸,完全沒有 trace。43:04

演算法(投影片 23)

  1. 抽一個 mini-batch 的資料 \(\{\mathbf x_1,\dots,\mathbf x_n\}\sim p_{\text{data}}\)。
  2. 抽對應的加雜訊資料 \(\tilde{\mathbf x}_i\sim q_\sigma(\tilde{\mathbf x}_i\mid\mathbf x_i)\),也就是 \(\tilde{\mathbf x}_i = \mathbf x_i + \sigma\mathbf z_i\)。
  3. 估計 loss:\(\frac{1}{2n}\sum_i\Vert\mathbf s_\theta(\tilde{\mathbf x}_i) - \nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}_i\mid\mathbf x_i)\Vert_2^2\);高斯時是 \(\frac{1}{2n}\sum_i\Big\Vert\mathbf s_\theta(\tilde{\mathbf x}_i) + \frac{\tilde{\mathbf x}_i - \mathbf x_i}{\sigma^2}\Big\Vert_2^2\)。
  4. 隨機梯度下降。
  5. σ 要選得很小。44:38
優點即使維度非常高也能有效率地最佳化,而且對最佳去雜訊很有用。
缺點估計的是加了雜訊的資料的 score,不是乾淨資料的。

為什麼叫「去雜訊」(投影片 25)

看高斯版本的 loss:\(\mathbf s_\theta\) 只看到 \(\tilde{\mathbf x}\),卻要預測 \(-\frac{1}{\sigma^2}(\tilde{\mathbf x}-\mathbf x) = \frac{1}{\sigma^2}(\mathbf x - \tilde{\mathbf x})\),也就是當初加上去的雜訊(取負號、縮放)。要把 loss 壓低,它就得知道「從 \(\tilde{\mathbf x}\) 減掉什麼才能回到乾淨的圖」。45:09

投影片 25 的圖:左邊一張清晰的女性人像 \(\mathbf x\),右邊同一張加了雜點 \(\tilde{\mathbf x} = \mathbf x + \text{noise}\);公式下方的大括號圈住 \(\frac{1}{\sigma^2}(\mathbf x - \tilde{\mathbf x})\),註明「\(\mathbf s_\theta(\tilde{\mathbf x})\) tries to estimate the noise that was added to produce \(\tilde{\mathbf x}\)」。

老師怎麼說 · 52:33某種意義上,我們把「生成影像」這個問題化約成了「去雜訊」,而去雜訊對神經網路來說是相對簡單的任務。去雜訊做得好,score 就估得好;而 score 在某種程度上等價於 likelihood。52:33
課堂問答 · 48:54沒看到乾淨的圖,怎麼評估去雜訊的品質?這就是 Stein's unbiased risk estimator(SURE)的技巧:不知道真值也能評估估計量的品質。48:54
課堂問答 · 49:56一定要高斯雜訊嗎?不用。只要加雜訊用的分佈能算 likelihood、而且它的梯度有封閉形式,就能得到一個 denoising loss;證明裡唯一用到的是梯度的線性。換了雜訊,估計的就是「資料加那種雜訊」的 score。49:56
課堂問答 · 51:31這樣學到的不就是雜訊分佈的 score 嗎?不是,這正是 DSM 神奇的地方:上下兩個目標只差常數,最小化下面那個(對每個條件分佈做回歸),等於最小化上面那個(真的在估計資料和高斯卷積後、被平滑的密度的 score)。51:31

陷阱:σ → 0 時變異數爆炸(投影片 24)

用 reparameterization \(\tilde{\mathbf x} = \mathbf x + \sigma\mathbf z\) 改寫:45:40

$$\frac12\mathbb E_{\mathbf x}\mathbb E_{\mathbf z\sim\mathcal N(0,I)}\Big[\Big\Vert\mathbf s_\theta(\mathbf x+\sigma\mathbf z) + \frac{\mathbf z}{\sigma}\Big\Vert_2^2\Big] = \frac12\mathbb E_{\mathbf x}\mathbb E_{\mathbf z}\Big[\Vert\mathbf s_\theta(\mathbf x+\sigma\mathbf z)\Vert_2^2 + 2\mathbf s_\theta(\mathbf x+\sigma\mathbf z)^\top\textcolor{#b3261e}{\frac{\mathbf z}{\sigma}} + \textcolor{#b3261e}{\frac{\Vert\mathbf z\Vert_2^2}{\sigma^2}}\Big]$$

\(\mathrm{Var}(\mathbf z/\sigma)\to\infty\)、\(\mathrm{Var}(\Vert\mathbf z\Vert_2^2/\sigma^2)\to\infty\)。σ 要小才能近似乾淨資料,但太小就幾乎無法最佳化:要選一個仍然能最佳化的、盡量小的 σ。46:11

另一種看法:DSM 是用有限差分估計導數

老師在課堂上提到一個直覺:加高斯雜訊再比較,有點像用有限差分估計導數,「在資料點附近擾動一下,看 likelihood 往哪邊變」。Gutmann & Hyvärinen 的分析(第 12 講的補充)也說明,取一個小位移當雜訊時,NCE 會變成 sliced score matching;這三種方法都在用某種方式估計資料附近的局部斜率。46:44

實務上下一講會同時用很多個 σ(從很大到很小),而且把每個 σ 的 loss 乘上 \(\lambda(\sigma) = \sigma^2\):\(\sigma^2\Vert\mathbf s_\theta + \mathbf z/\sigma\Vert^2 = \Vert\sigma\mathbf s_\theta + \mathbf z\Vert^2\),目標 \(\mathbf z\) 的變異數就和 σ 無關了。這也是 diffusion model 常見的「預測雜訊 \(\boldsymbol\epsilon\)」寫法的由來。Demo A 會比較這兩種寫法。

出處:Lai et al. (2026) §3.3.2 "Training"(Vincent 的 conditioning trick 與加性高斯雜訊特例)與 §3.4.2(NCSN 的 \(\lambda(\sigma)\) 加權);Song & Ermon (2019) §4.2。

Demo Aσ → 0 時,DSM loss 的變異數

一維資料 \(x\sim\mathcal N(0,1)\),此時 \(q_\sigma = \mathcal N(0,1+\sigma^2)\),最佳的 score 是 \(s^*(\tilde x) = -\tilde x/(1+\sigma^2)\)。就算模型已經是最佳的,每個樣本的 DSM loss 仍然是隨機的。這裡用 20,000 個樣本估計「每樣本 loss」的標準差,以及一個 batch(128 個)平均後 loss 的標準差,σ 從 0.01 到 2。

原始 DSM:½(s + z/σ)²乘上 σ² 後:½(σs + z)²(兩軸都是 log 刻度;都是 batch 128 平均後的標準差)

紅線的斜率約是 −2:σ 每小 10 倍,標準差大約大 100 倍,因為 loss 裡有一項 \(z^2/\sigma^2\)。乘上 \(\sigma^2\) 之後(藍線),標準差在 σ 小的時候趨於常數。下一講的多尺度訓練就用這個加權。

05Tweedie 公式:score 就是最佳的去雜訊方向(投影片 26–27)

估計 \(\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})\) 等價於去雜訊。55:08

TWEEDIE'S FORMULA 給定 \(p(\mathbf x)\) 和 \(q_\sigma(\tilde{\mathbf x}\mid\mathbf x) = \mathcal N(\tilde{\mathbf x}\mid\mathbf x,\sigma^2I)\),用 Bayes 法則定義後驗 \(p(\mathbf x\mid\tilde{\mathbf x})\propto p(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\),\(q_\sigma(\tilde{\mathbf x}) = \int p(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)d\mathbf x\)。則 $$\mathbb E_{\mathbf x\sim p(\mathbf x\mid\tilde{\mathbf x})}[\mathbf x] = \tilde{\mathbf x} + \sigma^2\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})\approx\tilde{\mathbf x} + \sigma^2\mathbf s_\theta(\tilde{\mathbf x})$$ 最佳的去雜訊策略(以平方誤差而言):從 \(\tilde{\mathbf x}\) 出發,沿著 score 走一步,步長 \(\sigma^2\)。

投影片 26 的圖(改編自 Raphan & Simoncelli 2010):上面是 \(q_\sigma(\tilde x)\):三張人臉(三個資料點)各被模糊成一個峰,中間的最高;三個向上的箭頭標出峰頂。下面是 \(\nabla_{\tilde x}\log q_\sigma(\tilde x)\):在每個峰的位置穿過 0(從正到負),兩峰之間的低谷處反向。如果你在某個峰的左邊,score 為正,叫你往右走、往那個峰靠近;這就是去雜訊。55:39

課堂問答 · 56:40這要求雜訊的期望值為 0 之類的條件嗎?DSM 的推導不限高斯;但 Tweedie 公式的這個形式只對高斯成立。它說的是:要最小化 L2 誤差,最好的輸出是條件期望 \(\mathbb E[\mathbf x\mid\tilde{\mathbf x}]\),而高斯時它恰好能寫成「沿著梯度走」。56:40
課堂問答 · 58:13如果從純雜訊出發一直去雜訊會怎樣?這基本上就是我們要怎麼取樣:一直沿著梯度走、一直去雜訊,加上一點雜訊就是 Langevin dynamics。也是 diffusion model 在做的事。58:13
Tweedie 公式的證明(三行)
$$\nabla_{\tilde{\mathbf x}}q_\sigma(\tilde{\mathbf x}) = \int p(\mathbf x)\nabla_{\tilde{\mathbf x}}q_\sigma(\tilde{\mathbf x}\mid\mathbf x)d\mathbf x = \int p(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\frac{\mathbf x - \tilde{\mathbf x}}{\sigma^2}d\mathbf x$$

兩邊除以 \(q_\sigma(\tilde{\mathbf x})\),右邊的 \(p(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)/q_\sigma(\tilde{\mathbf x})\) 正是後驗 \(p(\mathbf x\mid\tilde{\mathbf x})\):

$$\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}) = \frac{\mathbb E[\mathbf x\mid\tilde{\mathbf x}] - \tilde{\mathbf x}}{\sigma^2}\quad\Longrightarrow\quad\mathbb E[\mathbf x\mid\tilde{\mathbf x}] = \tilde{\mathbf x} + \sigma^2\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x})$$

用到的只有「高斯的梯度 = 高斯 × 線性函數」和梯度與積分可以交換。這和 DSM 推導的關鍵步驟一模一樣。另一方面,L2 誤差 \(\mathbb E\Vert D(\tilde{\mathbf x}) - \mathbf x\Vert^2\) 對每個 \(\tilde{\mathbf x}\) 分開最小化,最佳解就是條件期望 \(\mathbb E[\mathbf x\mid\tilde{\mathbf x}]\)。所以「最佳去雜訊器」和「score」是同一件事的兩種寫法。Lai 的書還用 SURE(只用雜訊資料就能無偏估計去雜訊器的 MSE)從另一個角度推出同樣的結論。

出處:Efron (2011), "Tweedie's Formula and Selection Bias", JASA;Lai et al. (2026) §3.3.4 "Why DSM is Denoising: Tweedie's Formula"、§3.3.5 SURE。

Demo B用 score 去雜訊(投影片 26 的一維版本)

「資料」只有三個點 \(\{-2.5,\,0.5,\,3\}\)(權重 0.25、0.5、0.25),就像投影片上的三張臉。\(q_\sigma\) 是三個高斯的混合。拖動觀察值 \(\tilde x\):上圖是 \(q_\sigma\) 和三個點的後驗機率,下圖是 score;紫色箭頭是 Tweedie 的一步 \(\tilde x\to\tilde x + \sigma^2\nabla\log q_\sigma(\tilde x)\)。

q_σ(x̃)∇ log q_σ(x̃)Tweedie 的一步
  • σ 小時:每個資料點附近是一個窄峰,score 在峰附近很陡。Tweedie 的一步幾乎直接跳到最近的資料點,後驗幾乎全落在那一點上。
  • σ 大時:三個峰糊成一團,Tweedie 的估計落在幾個資料點的加權平均,可能不在任何一個資料點上:這是「平方誤差最佳」的代價,它給的是後驗的平均,不是最可能的那一個。
  • 讀數會同時列出「直接用後驗算的 \(\mathbb E[x\mid\tilde x]\)」和「Tweedie 公式算的」,兩者在每個位置都完全相同。

06Sliced score matching(投影片 28–32)

另一個擴展方法:隨機投影。一維問題應該比較容易。如果兩個向量場真的相同,那它們沿任何方向的投影也相同。59:46

投影片 28 的圖(Song et al. 2019):上排是 \(\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x)\) 的一小片箭頭,下排是 \(\mathbf s_\theta(\mathbf x)\) 的箭頭。左邊直接比;中間和右邊各畫一條虛線方向,把箭頭投影到那條線上再比:投影後就只是純量。

SLICED FISHER DIVERGENCE → SLICED SCORE MATCHING $$\frac12\mathbb E_{\mathbf v\sim p_{\mathbf v}}\mathbb E_{\mathbf x\sim p_{\text{data}}}\big[(\mathbf v^\top\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x) - \mathbf v^\top\mathbf s_\theta(\mathbf x))^2\big] \overset{\text{分部積分}}{=} \mathbb E_{\mathbf v\sim p_{\mathbf v}}\mathbb E_{\mathbf x\sim p_{\text{data}}}\Big[\mathbf v^\top\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)\mathbf v + \frac12(\mathbf v^\top\mathbf s_\theta(\mathbf x))^2\Big] + \text{const.}$$ 61:21

仍然有 Jacobian,但只以 Jacobian–vector product(方向導數)的形式出現:

$$\mathbf v^\top\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)\mathbf v = \mathbf v^\top\nabla_{\mathbf x}\big(\mathbf v^\top\mathbf s_\theta(\mathbf x)\big)$$

做法:forward 算出 \(\mathbf s_\theta(\mathbf x)\),和 \(\mathbf v\) 內積得到一個純量;對這個純量做一次 backprop 得到它對所有輸入的梯度;再和 \(\mathbf v\) 內積。成本約等於一次 backprop,和維度無關。62:27

投影片 30 的圖:網路的輸出 \(s_{\theta,1},s_{\theta,2},s_{\theta,3}\) 分別乘上 \(v_1,v_2,v_3\) 合成一個純量 \(\mathbf v^\top\mathbf s_\theta(\mathbf x)\),紫色箭頭只反向傳一次就回到輸入,標「One Backprop! Sliced Score Matching is scalable. Slightly slower than denoising score matching」。

演算法(投影片 31)

  1. 抽一個 mini-batch 的資料 \(\{\mathbf x_1,\dots,\mathbf x_n\}\sim p_{\text{data}}\)。
  2. 抽一個 mini-batch 的投影方向 \(\{\mathbf v_1,\dots,\mathbf v_n\}\sim p_{\mathbf v}\),通常是高斯或 Rademacher。
  3. 估計 loss:\(\frac1n\sum_i\big[\mathbf v_i^\top\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x_i)\mathbf v_i + \frac12(\mathbf v_i^\top\mathbf s_\theta(\mathbf x_i))^2\big]\)。
  4. 隨機梯度下降。
  5. 可以對每個資料點多取幾個投影來提升表現。63:29

投影片 32 的圖(Song et al. 2019):左圖「Efficiency」:每次迭代的秒數 vs 資料維度,原始 score matching(棕色虛線)隨維度直線上升,大約到 300–400 維就記憶體不足;sliced 版本(SSM、SSM-VR)幾乎是貼著底部的水平線。右圖「Performance on density estimation」(WhiteWine 資料集):sliced 版本的表現和原始 score matching 相當,比其他基線好。67:07

  • sliced 版本估計的是乾淨資料的 score,沒有加雜訊,這是它相對於 DSM 的優點;代價是比 DSM 稍慢,而且投影帶來額外的變異數。66:33
  • 多取幾個投影可以降低變異數;取 \(d\) 個座標軸方向,就退回原本的 score matching。實務上一個投影就夠了。66:02
沒有加雜訊、只有一堆資料點,sliced score matching 怎麼學?

只有有限個資料點時,經驗分佈是一堆尖峰,看起來「資料點旁邊沒有東西,就沒有梯度」。這裡要分清楚兩種梯度:

是什麼只有資料點時
資料的 score\(\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x)\)不存在(尖峰沒有斜率)
loss 對參數的梯度\(\nabla_\theta\,\text{loss}\)存在

分部積分之後,loss 裡已經沒有資料的 score:

$$\mathbb E_{\mathbf v}\mathbb E_{\mathbf x\sim p_{\text{data}}}\Big[\mathbf v^\top\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)\mathbf v + \frac12\big(\mathbf v^\top\mathbf s_\theta(\mathbf x)\big)^2\Big]$$

資料點只決定「在哪裡評估」,被評估的是模型 \(\mathbf s_\theta\)。\(\mathbf s_\theta\) 是處處平滑的神經網路,在資料點上算得出值也算得出導數,所以對 \(\theta\) 一定有梯度。

它在學什麼:一維時 \(\mathbb E[v^2] = 1\),每個資料點的 loss 是 \(s_\theta'(x_i) + \frac12 s_\theta(x_i)^2\)。\(\frac12 s^2\) 要 score 在資料點接近 0(坡度是平的);\(s'\) 要越負越好(score 在資料點附近由正轉負)。合起來就是讓每個資料點都變成一座山的山頂。

模型的形狀受限制時,這就學得對。模型限定是高斯,\(s_\theta(x) = -(x-\mu)/s^2\),令 \(a = 1/s^2\):

$$\frac1n\sum_i\Big[-a + \frac12a^2(x_i-\mu)^2\Big]\quad\Longrightarrow\quad\mu = \bar x,\qquad s^2 = \frac1n\sum_i(x_i-\bar x)^2$$

沒有雜訊,只用一堆點,就學到樣本平均和樣本變異數,和 MLE 的答案一樣。投影片 32 的 WhiteWine 這種低維、真的有平滑密度的資料就屬於這種情況。

模型很自由時,就會出問題。如果模型能在每個資料點各長一根寬度 \(h\) 的尖峰,\(s'(x_i)\approx-1/h^2\),\(h\to0\) 時訓練 loss \(\to-\infty\):模型學到的正是「只有資料點有密度」的經驗分佈,沒有泛化。分部積分的前提是 \(p_{\text{data}}\) 在整個空間有平滑的密度;資料落在低維流形上時,這個前提也不成立,這就是 §8 陷阱 1 在 CIFAR-10 上 loss 跳到 \(-3\times10^9\) 的原因。下面的 demo 把兩種模型並排:

真實分佈 N(0, 1)高斯模型(score matching 的解)每個資料點一根寬 h 的尖峰12 個訓練資料點

讀法:「訓練 loss」用那 12 個點算,「新資料 loss」用另外 4,000 個從 \(\mathcal N(0,1)\) 抽的點算;真實分佈本身的 loss 是 \(-0.5\)(第 12 講藍色項補充的高斯例子)。尖峰越窄,訓練 loss 越低,新資料 loss 卻爆炸:這就是沒有雜訊時 score matching 會過度擬合的樣子。加雜訊等於強迫模型看到資料點周圍一整團點,尖峰就長不出來了。

課堂問答 · 64:29能不能讓投影偏向某些方向?直覺上很合理,但老師說他們試了很久,實務上從沒看到差別。64:29

這就是第 12 講 Demo B 的 Hutchinson 估計量:\(\mathbb E_{\mathbf v}[\mathbf v^\top J\mathbf v] = \mathrm{tr}(J)\),所以 sliced score matching 是原本 loss 的不偏估計。

07從 score 到樣本:Langevin dynamics(投影片 33–36)

假設已經用某種 score matching 訓練好 \(\mathbf s_\theta\)。沒有 likelihood、也沒有 autoregressive 生成,怎麼產生樣本?score 告訴你「往哪個方向擾動,likelihood 增加得最快」。69:13

投影片 34 的圖:三格。(1)「Scores」:一片向量場 \(\mathbf s_\theta(\mathbf x)\)。(2)「Follow the scores」:\(\tilde{\mathbf x}_{t+1}\leftarrow\tilde{\mathbf x}_t + \frac\epsilon2\mathbf s_\theta(\tilde{\mathbf x}_t)\),所有粒子都聚到局部最大值(向量場的匯聚點)上。(3)「Follow noisy scores: Langevin MCMC」:\(\tilde{\mathbf x}_{t+1}\leftarrow\tilde{\mathbf x}_t + \frac\epsilon2\mathbf s_\theta(\tilde{\mathbf x}_t) + \sqrt\epsilon\,\mathbf z_t\),粒子散成兩團,比例反映密度。70:17

LANGEVIN DYNAMICS SAMPLING(投影片 35) 只用 score \(\nabla_{\mathbf x}\log p(\mathbf x)\) 從 \(p(\mathbf x)\) 取樣:初始化 \(\mathbf x^0\sim\pi(\mathbf x)\),重複 \(t\leftarrow1,2,\dots,T\): $$\mathbf z^t\sim\mathcal N(0,I),\qquad\mathbf x^t\leftarrow\mathbf x^{t-1} + \frac\epsilon2\nabla_{\mathbf x}\log p(\mathbf x^{t-1}) + \sqrt\epsilon\,\mathbf z^t$$ \(\epsilon\to0\)、\(T\to\infty\) 時保證 \(\mathbf x^T\sim p(\mathbf x)\)。Langevin + score 估計:把 \(\nabla_{\mathbf x}\log p\) 換成 \(\mathbf s_\theta(\mathbf x)\approx\nabla_{\mathbf x}\log p(\mathbf x)\)。71:17

(這裡的寫法是 \(\frac\epsilon2\) 和 \(\sqrt\epsilon\);第 12 講用的是 \(\epsilon\) 和 \(\sqrt{2\epsilon}\)。令 \(\epsilon' = \epsilon/2\) 兩者就完全一樣:梯度係數和雜訊變異數的比例都是 1:2。)

完整的流程(投影片 36):資料樣本 →(score matching)→ score →(Langevin dynamics)→ 新樣本。沿著 score 走就是在去雜訊,Langevin 又加回一點雜訊。73:28

延伸 補充課 F §3 Langevin 的穩態就是 p:零通量的證明;補充課 F §4 ULA 的步長偏差:以及 MALA 怎麼修正

Demo C用 DSM 訓練 score 網路,再用 Langevin 取樣

資料是投影片 43 的設定:兩個高斯(標準差 1),右上 \((4,4)\) 的權重 0.8、左下 \((-4,-4)\) 的權重 0.2。\(\mathbf s_\theta\) 是 2→64→64→2 的網路,用 DSM(σ = 0.5,loss 乘上 σ²)訓練 2,000 步。因為資料是高斯混合,\(q_\sigma\) 的真正 score 有封閉形式,可以拿來比較。訓練完,用 Langevin(ε = 0.1,600 步)從均勻分佈出發取樣 500 個粒子。

學到的 s_θ(箭頭)與資料
相對誤差 |s_θ − ∇log q_σ| / (|∇log q_σ|+1)
Langevin 粒子
  • 誤差地圖:兩團資料附近(顏色淡)學得很準;誤差最大的是兩團之間的對角線一帶(顏色深),那裡幾乎沒有訓練樣本,而真正的 score 在那裡急轉方向(從指向一團變成指向另一團)。左上和右下兩個角落雖然也沒有樣本,但真正的 score 在那裡大致平滑地指向較近的 mode,網路外插得還算可以。這就是投影片 41 的「Accurate / Inaccurate」。這個頁面上實測:距離 mode 2 以內的平均相對誤差約 0.07,距離 4 以上約 0.34,差了約 5 倍。
  • Langevin 的比例:右上 mode 應該有 80% 的粒子。但從均勻分佈出發,粒子先被各自附近的 mode 吸走,之後幾乎不再跨越,所以比例大致反映「一開始在哪一側」,約五五開。實測學到的 score 是 53%;切到「用真正的 score」也只有 46%:這不是估計誤差,而是投影片 42–43 的「score 不含 mode 權重、Langevin 混合太慢」。

08直接做為什麼會失敗:三個陷阱(投影片 37–44)

照上面的流程在 MNIST、CelebA、CIFAR-10 上訓練,不會成功:Langevin 從純雜訊出發,卡在某個地方,產生不了好的樣本。73:59

投影片 37–38 的圖:三個大格子(MNIST、CelebA、CIFAR-10),每格是很多小樣本。投影片 37 是「Final samples」,38 是「Langevin sampling process」的動畫;轉檔後只看得到第一格(灰色或彩色的雜訊方塊)。依逐字稿,最後的樣本也看不出數字或人臉:取樣失敗。

陷阱 1:流形假設(投影片 39–40)

  • 真實資料往往落在高維空間中的低維流形上。資料若真的在流形上,score 沒有定義:想像一個集中在圓環上的密度,環越薄,梯度越大,最後變成未定義。74:29
  • 證據:用 PCA 把 MNIST(784 維)投影到 595 維,CIFAR-10(3072 維)投影到 2165 維,幾乎看不出差別。連線性的流形都能保留幾乎所有資訊。74:59
  • 在 CIFAR-10 上用 sliced score matching 訓練,loss 曲線劇烈跳動,訓練不起來。76:00

投影片 39–40 的圖:一條粉紅到紫色的莫比烏斯帶,上面幾個黑點標「Data points」;下方是一個橘色細圓環的密度,四周八個黑色箭頭從外面和裡面都指向環上,標著被打叉的 \(\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x)\)。投影片 40:上下兩排 CIFAR-10 圖片幾乎一模一樣(原圖 3072 維 vs. PCA 2165 維);下面是 SSM loss 對迭代次數的圖,曲線在 0 到 −3e9 之間劇烈上下跳動。

陷阱 2:低密度區的 score 不準(投影片 41)

loss 是對資料分佈的期望,用樣本平均近似。大部分樣本落在高密度區,兩團資料之間幾乎沒有樣本,所以網路在那裡很難估得準。76:32

投影片 41 的圖(Song & Ermon 2019):三格。左:資料密度(右上一個亮點、左下一個淡點,其他地方標著「?」),下方是 Fisher divergence 的公式,其中 \(p_{\text{data}}(\mathbf x)\) 用紅色強調。中:真正的 data scores;右:估計的 scores。兩張向量場上,右上和左下兩塊淡綠色方框標「Accurate」,其餘大片紅色區域標「Inaccurate」。底部紅字:Langevin MCMC will have trouble exploring low density regions。77:06

這對取樣是致命的:高維度時,隨機初始化的點幾乎一定落在低密度區,接著沿著錯誤的箭頭走,永遠到不了高密度區。78:12

課堂問答 · 78:42從資料點初始化呢?可以試,但還是會遇到下一個問題:不混合。Langevin 理論上會收斂,但可能要非常久。78:42

陷阱 3:Langevin 在 mode 之間混合太慢(投影片 42–43)

極端情況:兩個支撐集不相交的分佈的混合,\(p_{\text{data}}(\mathbf x) = \pi p_1(\mathbf x) + (1-\pi)p_2(\mathbf x)\),\(\mathcal A\cap\mathcal B = \varnothing\):79:43

$$\nabla_{\mathbf x}\log p_{\text{data}}(\mathbf x) = \begin{cases}\nabla_{\mathbf x}[\log\pi + \log p_1(\mathbf x)], & \mathbf x\in\mathcal A\\ \nabla_{\mathbf x}[\log(1-\pi) + \log p_2(\mathbf x)], & \mathbf x\in\mathcal B\end{cases} = \begin{cases}\nabla_{\mathbf x}\log p_1(\mathbf x), & \mathbf x\in\mathcal A\\ \nabla_{\mathbf x}\log p_2(\mathbf x), & \mathbf x\in\mathcal B\end{cases}$$

\(\pi\) 是常數,取梯度就消失了:score 完全不依賴 mode 的權重,所以光靠 score 的 Langevin 取樣無法反映 \(\pi\)。80:15

投影片 43 的圖:兩個散佈圖,x、y 都從 −8 到 8。左「i.i.d samples」:右上 (5,5) 附近一大團、左下 (−5,−5) 附近一小團(大約 4:1)。右「Langevin dynamics samples」:兩團的大小差不多。老師說真實的大約三分之二在上面,Langevin 則變成一半一半。80:46

這也解釋了第 12 講 Demo C 看到的現象:用 score matching 訓練時,兩個分得很開的 mode 的權重幾乎不受約束。訓練和取樣碰到的是同一個根本問題。

下一講(投影片 44)

修正這些陷阱之後(Song & Ermon 2019,NCSN)就能產生好的樣本。下一講的關鍵想法:加很多不同程度的雜訊。大雜訊讓分佈填滿整個空間(不再落在流形上、低密度區也有訓練樣本、兩個 mode 之間也連起來),小雜訊保留細節;取樣時從大雜訊逐步降到小雜訊。這就是 diffusion model。81:18

投影片 44 的圖:MNIST、CelebA、CIFAR-10 三格的取樣動畫(轉檔只剩第一格的雜訊),出處 Song & Ermon (2019)。

多尺度雜訊怎麼同時解決三個陷阱(下一講預覽)
  • 流形:加了高斯雜訊的分佈 \(q_\sigma\) 在整個空間都有正的密度,score 處處有定義。
  • 低密度區:雜訊大時,加了雜訊的樣本會散到原本的低密度區,那裡就有訓練訊號了。
  • mode 權重:雜訊大到兩個 mode 連在一起時,\(q_\sigma\) 的 score 在兩者之間的區域會依權重偏向大的那邊,取樣時從大雜訊開始,粒子就能按正確比例分配,再在小雜訊時精修。

代價:一個網路要同時學很多個 σ 的 score,通常把 σ 也當成輸入,\(\mathbf s_\theta(\mathbf x,\sigma)\),稱為 noise conditional score network(NCSN)。

出處:Yang Song〈Generative Modeling by Estimating Gradients of the Data Distribution〉"Naive score-based generative modeling and its pitfalls" 與 "Score-based generative modeling with multiple noise perturbations";Lai et al. (2026) §3.4 "Multi-Noise Levels of Denoising Score Matching (NCSN)"。

延伸 補充課 D §8 多峰與溫度:為什麼局部的取樣跨不過低谷;補充課 F §5 annealed Langevin:怎麼把峰的權重學對

常見誤解

誤解:「score-based model 就是 EBM」。EBM 的 score 是某個純量函數的梯度(保守場);score-based model 直接輸出向量,不保證是任何函數的梯度。
誤解:「DSM 學到的是乾淨資料的 score」。它學的是 \(q_\sigma\)(資料和高斯卷積後)的 score。σ 小時接近,但 σ 太小又難以訓練。Sliced score matching 才是直接估計乾淨資料的 score。
誤解:「DSM 只是在學雜訊分佈的梯度」。對單一樣本,目標確實是條件分佈的梯度;但期望之後,它和匹配邊際 \(q_\sigma\) 的 score 只差一個常數。
誤解:「Tweedie 公式給出最可能的乾淨影像」。它給的是後驗平均,雜訊大時可能是好幾張影像的模糊平均(Demo B)。
誤解:「只要 score 估得完全正確,Langevin 就能取到正確的樣本」。理論上要 \(T\to\infty\);實際上 mode 之間的混合可能慢到不可行,連真正的 score 也會給錯比例(Demo C)。
誤解:「只有資料點、沒有雜訊,score matching 就沒有梯度可以學」。分部積分後 loss 只用模型 \(\mathbf s_\theta\) 在資料點上的值和導數,對 \(\theta\) 一定有梯度;真正的問題是模型太自由時,它會在每個資料點長出尖峰,讓訓練 loss 趨近 \(-\infty\)(§6 的補充)。
誤解:「sliced score matching 是近似,會有偏差」。對投影方向取期望時,它和原本的 score matching 一樣(Hutchinson 估計量是不偏的),只是多了變異數。

自我測驗

1. Score-based model 和 EBM 差在哪?為什麼說它「更一般」?
EBM 先建模純量 \(f_\theta\),score 是它的梯度(保守場);score-based model 直接建模向量場 \(\mathbf s_\theta:\mathbb R^d\to\mathbb R^d\),不要求是梯度。
2. 只知道 score,為什麼能還原整個分佈?
積分可得到 log 密度差一個常數;這個常數由「密度積分為 1」唯一決定。
3. 原始 score matching 的計算瓶頸在哪?為什麼 EBM 更糟?
\(\mathrm{tr}(\nabla_{\mathbf x}\mathbf s_\theta)\) 需要對每個輸出做一次 backprop,共 \(O(d)\) 次。EBM 還要先 backprop 一次從 \(f_\theta\) 得到 score,等於二階導數。
4. DSM 推導中的關鍵一步是什麼?
把 \(q_\sigma(\tilde{\mathbf x}) = \int p_{\text{data}}(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)d\mathbf x\) 代入,利用梯度是線性的,把 \(\nabla_{\tilde{\mathbf x}}\) 推進積分,換成已知條件分佈的梯度。
5. 寫出高斯雜訊時的 DSM loss。模型在學什麼?
\(\frac12\mathbb E\Vert\mathbf s_\theta(\tilde{\mathbf x}) + (\tilde{\mathbf x}-\mathbf x)/\sigma^2\Vert^2\)。它看著雜訊影像,預測加上去的雜訊(取負號並除以 σ²)。
6. σ 太大和太小各有什麼問題?
太大:學到的是被嚴重模糊的分佈的 score。太小:\(\mathbf z/\sigma\) 和 \(\Vert\mathbf z\Vert^2/\sigma^2\) 的變異數爆炸,loss 難以最佳化。
7. 證明 Tweedie 公式。
\(\nabla q_\sigma(\tilde{\mathbf x}) = \int p(\mathbf x)q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\frac{\mathbf x-\tilde{\mathbf x}}{\sigma^2}d\mathbf x\),除以 \(q_\sigma(\tilde{\mathbf x})\) 得 \(\nabla\log q_\sigma = (\mathbb E[\mathbf x\mid\tilde{\mathbf x}] - \tilde{\mathbf x})/\sigma^2\)。
8. 為什麼 \(\mathbf v^\top\nabla_{\mathbf x}\mathbf s_\theta(\mathbf x)\mathbf v\) 只需要一次 backprop?
它等於 \(\mathbf v^\top\nabla_{\mathbf x}(\mathbf v^\top\mathbf s_\theta(\mathbf x))\):先把輸出投影成一個純量,對純量做一次 backprop 得到它對輸入的梯度,再和 \(\mathbf v\) 內積。
9. Sliced score matching 和 DSM 各有什麼優缺點?
SSM 估計乾淨資料的 score,但稍慢、有投影帶來的變異數。DSM 最快,但估計的是加雜訊資料的 score,而且小 σ 時變異數大。
10. 只沿著 score 走(不加雜訊)會得到什麼?為什麼要加雜訊?
梯度上升,粒子都收斂到局部最大值,得不到按密度分佈的樣本。加雜訊就是 Langevin MCMC,理論上收斂到 \(p\)。
11. 流形假設為什麼會讓 score 出問題?
若資料落在低維流形上,密度在流形外是 0,log 密度的梯度沒有定義(環越薄梯度越大)。
12. 證明兩個支撐集不相交的 mode 的 score 不依賴權重 π。這對取樣有什麼後果?
在 \(\mathcal A\) 上 \(\log p = \log\pi + \log p_1\),\(\log\pi\) 是常數,梯度為 0。Langevin 只用 score,無法知道兩個 mode 該各分多少樣本,結果比例取決於初始位置。
13. DSM 推導裡的棕色項是什麼?高斯雜訊時它等於多少?
配方時補上再減掉的 \(-\frac12\mathbb E\Vert\nabla_{\tilde{\mathbf x}}\log q_\sigma(\tilde{\mathbf x}\mid\mathbf x)\Vert_2^2\),和 \(\theta\) 無關。高斯時 \(\nabla_{\tilde{\mathbf x}}\log q_\sigma = -\mathbf z/\sigma\),所以等於 \(-\frac{d}{2\sigma^2}\)。
14. 一維、不加雜訊時,score matching 的 loss 是 \(\frac1n\sum_i[s'(x_i) + \frac12s(x_i)^2]\)。為什麼模型限定是高斯時學得對,模型很自由時卻會失敗?
高斯模型只有 \(\mu, s^2\) 兩個參數,最小化得到樣本平均和樣本變異數。自由的模型可以在每個 \(x_i\) 長一根寬 \(h\) 的尖峰,\(s'(x_i)\approx -1/h^2\to-\infty\),訓練 loss 沒有下界,學到的是經驗分佈;在新資料上 loss 會爆炸。

延伸閱讀