多尺度雜訊與 Score SDE:從雜訊一路走回資料
上一講的 score-based model 直接做會失敗:資料在流形上、低密度區 score 不準、Langevin 在 mode 之間混合太慢。解法出奇簡單:加高斯雜訊。雜訊大,score 估得準但分佈被破壞;雜訊小則相反。所以同時學很多個雜訊尺度(NCSN),取樣時從大雜訊逐步降到小雜訊(annealed Langevin dynamics)。讓尺度數趨於無限,加雜訊就成了一個隨機微分方程(SDE),而它的反向過程只需要 score;再換成同邊際分佈的 ODE,就得到一個連續時間的 normalizing flow,能精確算 likelihood。
讀完這頁你應該能夠
- 說明加高斯雜訊怎麼同時解決流形、低密度區、混合太慢三個陷阱,以及它帶來的取捨。
- 寫出 annealed Langevin dynamics 的演算法,說明每一層的步長為什麼是 \(\epsilon\sigma_i^2/\sigma_L^2\)。
- 寫出 NCSN 的訓練目標,說明如何選最大/最小雜訊、幾何級數、權重 \(\lambda(\sigma) = \sigma^2\),以及它和「預測雜訊 \(\boldsymbol\epsilon\)」的關係。
- 用 SDE 描述「連續地加雜訊」,寫出反向 SDE,說明它只需要 \(\nabla_{\mathbf x}\log p_t\)。
- 說明 predictor–corrector 取樣把 SDE 數值解法和 Langevin 結合。
- 寫出 probability flow ODE,說明為什麼它是一個連續時間的 normalizing flow、能算 likelihood。
前置知識檢查
- 第 13 講:score-based model、denoising score matching、sliced score matching、Langevin、三個陷阱(必讀)。
- 第 7–8 講:normalizing flow 與變數變換公式;第 8 講補充的 Neural ODE。
- 常微分方程的 Euler 法 \(\mathbf x\leftarrow\mathbf x + \mathbf v(\mathbf x,t)\Delta t\);布朗運動在時間 \(\Delta t\) 內的增量是 \(\mathcal N(0,\Delta t\,I)\)。
投影片只有 pptx,用 ONLYOFFICE 轉成 PDF 後看圖;GIF 動畫只看得到第一格,描述以逐字稿為準。標「出處」的補充來自 Yang Song〈Generative Modeling by Estimating Gradients of the Data Distribution〉(2021)、Lai et al. (2026)(arXiv 2510.21890v3)§3.4、第 4 章、Song & Ermon (2019, 2020)、Song et al. (2021)。
01回顧與三個陷阱(投影片 2–8)
- Score-based model:神經網路 \(\mathbf s_\theta(\mathbf x)\) 表示 score,是一個隨權重改變的向量場;用 score matching 擬合,但原始版本要算 Jacobian 的 trace,高維時不可行。00:35
- Denoising score matching:\(\frac12\mathbb E_{\mathbf x,\mathbf z}\big[\Vert\mathbf s_\theta(\mathbf x+\sigma\mathbf z) + \mathbf z/\sigma\Vert_2^2\big]\),可擴展,等於去雜訊;缺點是估計的是 \(\nabla\log q_\sigma\ne\nabla\log p_{\text{data}}\)。02:11
- Sliced score matching:沿隨機方向投影,可擴展、估計的是乾淨資料的 score,但比 DSM 慢。05:31
- 三個陷阱(投影片 7):流形假設使資料 score 沒有定義;score matching 在低密度區失敗;Langevin dynamics 收斂非常慢(兩個 mode 的權重反映不出來)。07:42
02加雜訊:所有陷阱的解法,以及它的取捨(投影片 8–12)
投影片 8 的圖:莫比烏斯帶上的資料點,外面多了一層半透明的殼(流形 + 雜訊)。下方兩張 SSM loss 曲線:左邊 CIFAR-10(乾淨資料)在 0 到 −3e9 之間劇烈跳動;右邊 Noisy CIFAR-10(只加了 \(\mathcal N(0,0.0001)\) 的雜訊)平滑地下降收斂。09:49
投影片 10 的圖:加了大量雜訊後的「Perturbed density」(左下和右上兩團被模糊成一大片橘色)、「Perturbed scores」與「Estimated scores」兩張向量場,整片都是淡綠色的「Accurate」。兩個標註:✓「High noise provides useful directional information for Langevin dynamics」;✗「But perturbed density no longer approximates the true data density」。下方一隻小狗的照片變成一張加了雜點的照片。
取捨:雜訊越大,score 估得越準,但我們估計的是「被嚴重破壞的分佈」的 score,沿著它走只會產生雜訊圖;雜訊越小,越接近真正的資料,但又回到原本估不準的問題。19:15
投影片 12 的圖(「Trading off Data Quality and Estimation Accuracy」,紅色表示誤差):好幾排疊在一起的三格圖,從後到前雜訊越來越大。每排是:被擾動的密度、被擾動的 score、估計的 score。最前排(雜訊最大)估計的 score 幾乎沒有紅色,但密度已經是一大團;最後排(乾淨資料)密度正確,但估計 score 大片紅色。左下標「Worse data quality!」,右下標「Better score estimation!」。
Demo A不同雜訊尺度下的密度與 score
資料是兩個高斯(右上 \((4,4)\) 權重 0.8、左下 \((-4,-4)\) 權重 0.2,標準差 1)。加上標準差 σ 的高斯雜訊後,\(q_\sigma\) 仍是兩個高斯的混合,只是變異數變成 \(1+\sigma^2\),score 可以精確算出。拖動 σ 看密度(橘色)和 score(箭頭)怎麼變。
- σ 小:兩團分得很開,中間的密度只有峰值的 \(10^{-7}\) 左右,訓練時幾乎看不到那裡的樣本;score 在中間急轉方向。
- σ 大(例如 8,約等於兩團的距離 11.3 的量級):兩團融成一團,中間不再是空洞,從任何地方出發 score 都指向一個合理的方向,而且整體偏向權重大的右上(讀數裡「score 為 0 的點」的位置會往右上移)。這就是投影片 19 選最大雜訊的直覺:大約是資料點之間的最大距離。
03多尺度雜訊與 annealed Langevin dynamics(投影片 11–16)
加多少雜訊?全都要:用一系列的雜訊尺度 \(\sigma_1>\sigma_2>\cdots>\sigma_{L-1}>\sigma_L\),學每一個尺度下的 score。23:29
投影片 13 的圖(「Using multiple noise scales」):一條黑色的波浪曲線代表資料所在之處(「High data density region」)。左半:離曲線遠的地方,箭頭方向亂指、旁邊畫著「?」;右半:曲線上下各有幾條彩色虛線(\(\sigma_1\)、\(\sigma_2\)、\(\sigma_3\) 的等高線),離曲線越遠用越大的 σ,箭頭就都指回曲線了。
Require: {σ_i}_{i=1}^L, ε, T
1: 初始化 x̃_0
2: for i ← 1 to L do
3: α_i ← ε · σ_i² / σ_L² ▷ α_i 是步長
4: for t ← 1 to T do
5: 抽 z_t ~ N(0, I)
6: x̃_t ← x̃_{t−1} + (α_i/2) s_θ(x̃_{t−1}, σ_i) + √α_i z_t
7: end for
8: x̃_0 ← x̃_T ▷ 這一層的結果是下一層的起點
9: end for
return x̃_T
依序用 \(\sigma_1,\sigma_2,\dots,\sigma_L\) 的 score 跑 Langevin,逐步降低雜訊;每一層的樣本當作下一層的初始值。24:34
- 一開始樣本沒有結構,就跟隨「資料 + 大量雜訊」的 score,它到處都估得準。25:06
- 越來越接近高密度區,結構越來越多,就能改用小雜訊的 score。小雜訊的 score 只在資料附近準,但到那時我們已經在資料附近了。29:28
- 兩全其美:最後的樣本來自「資料 + 極小雜訊」,而過程中 Langevin 從不迷路,因為一直有準確的方向資訊。26:11
投影片 14 的圖:三格 \(\sigma_1,\sigma_2,\sigma_3\)。\(\sigma_1\):一大片模糊的橘色,藍色粒子散在整個方框;\(\sigma_2\):密度收緊成兩團,粒子開始聚集;\(\sigma_3\):兩團很清晰,粒子大多在右上那團,左下一小群。投影片 16 對比「Langevin dynamics」(粒子在兩團間平均分佈,甚至很多散在中間)和「Annealed Langevin dynamics」(大多在右上,比例正確)。27:48
為什麼步長是 \(\alpha_i = \epsilon\sigma_i^2/\sigma_L^2\)?
在第 \(i\) 層,目標分佈 \(q_{\sigma_i}\) 的「寬度」約是 \(\sigma_i\),score 的大小約是 \(1/\sigma_i\)。Langevin 一步的移動是 \(\frac{\alpha_i}{2}\mathbf s\) 加上標準差 \(\sqrt{\alpha_i}\) 的雜訊。令 \(\alpha_i\propto\sigma_i^2\),則梯度那一步的大小約 \(\alpha_i/\sigma_i\propto\sigma_i\),雜訊那一步約 \(\sigma_i\),兩者都和分佈的尺度成正比:每一層都「走相同比例的距離」。Song & Ermon (2019) 的說法是:這讓「訊雜比」\(\frac{\alpha_i\mathbf s_\theta}{2\sqrt{\alpha_i}\mathbf z}\) 的大小和 \(\sigma_i\) 無關。
出處:Song & Ermon (2019) §4.3(Algorithm 1 與步長的說明)。
延伸 補充課 F §5 annealed Langevin:實測一般 Langevin 停在 49%、annealed 學到 80%
04Noise conditional score network(投影片 17–23)
需要同時估計 \(L\) 個 score(實務上常用 \(L = 1000\))。可以訓練 1,000 個網路,但更有效率的做法是一個網路多吃一個輸入 \(\sigma\):noise conditional score network(NCSN)\(\mathbf s_\theta(\mathbf x,\sigma)\)。輸入大的 σ,它就估計「資料 + 大雜訊」的向量場;輸入小的 σ,就估計「資料 + 小雜訊」的。比 1,000 個獨立網路差一點,但便宜得多。30:58
投影片 17 的圖:上排三格是 \(\sigma_1,\sigma_2,\sigma_3\) 的加雜訊密度和樣本,下排是對應的 score 場;右邊一個網路,輸入是 \(x_1,x_2\) 和一個額外的 \(\sigma\),輸出 \(s_{\theta,1},s_{\theta,2}\)。
訓練:加權的 denoising score matching(投影片 18)
用哪種 score matching?目標本來就是加雜訊後分佈的 score,DSM 最自然:34:19
從去雜訊的角度:我們在學一整族去雜訊器,每個處理不同程度的雜訊。35:55
怎麼選雜訊尺度(投影片 19–20)
- 最大雜訊 \(\sigma_1\approx\) 資料點之間的最大距離。讓兩個資料點加上雜訊後,有合理的機率從一個變成另一個;這樣大雜訊時 Langevin 能在整個空間裡混合。40:14
- 最小雜訊 \(\sigma_L\):要夠小,最後樣本裡的雜訊才可忽略(加了雜訊的圖要和乾淨的圖難以分辨)。41:19
- 中間:相鄰的雜訊尺度要有足夠的重疊,上一層的樣本才能當下一層的好起點。用幾何級數:\(\frac{\sigma_1}{\sigma_2} = \frac{\sigma_2}{\sigma_3} = \cdots = \frac{\sigma_{L-1}}{\sigma_L}\),而且長度要夠。41:56
投影片 19–20 的圖:(19) 兩個資料點 \(\mathbf x_1,\mathbf x_2\) 相距 \(d\),各畫一個半徑 \(\sigma_1\) 的大圓,兩圓有一大塊重疊。(20) 一個切開的同心球:最外面綠色是 \(\sigma_1\)、中間藍色 \(\sigma_2\)、裡面橘色 \(\sigma_3\) 的「殼」,一條紅色箭頭從裡面穿到外面。高維高斯的質量集中在半徑約 \(\sigma\sqrt d\) 的殼上,相鄰的殼要有重疊。
為什麼是「殼」,以及重疊的條件
在 \(d\) 維空間,\(\Vert\sigma\mathbf z\Vert\) 集中在 \(\sigma\sqrt d\) 附近,相對寬度約 \(1/\sqrt{2d}\),所以加了雜訊的樣本都落在一個薄殼上,而不是一個實心球。相鄰兩層 \(\sigma_{i-1}\sqrt d\) 和 \(\sigma_i\sqrt d\) 的殼要重疊,比例 \(\gamma = \sigma_{i-1}/\sigma_i\) 就不能太大,而且維度越高、殼越薄,\(\gamma\) 越要接近 1,也就是要更多層。Song & Ermon (2020)(NCSNv2)把這個直覺寫成具體的建議:\(\sigma_1\) 取訓練資料兩兩距離的最大值、相鄰層的比例讓殼大致重疊、網路的輸出直接除以 σ 來做雜訊條件化、Langevin 的步數與步長要配合選擇,並用指數移動平均(EMA)穩定訓練。(\(\lambda(\sigma) = \sigma^2\) 則是沿用原本的 NCSN。)
出處:Song & Ermon (2020), "Improved Techniques for Training Score-Based Generative Models", arXiv 2006.09011(Techniques 1–5)。
權重 \(\lambda(\sigma)\)(投影片 21)
目標是讓總和裡各項大致平衡。好用的選擇是 \(\lambda(\sigma) = \sigma^2\):44:39
最後一步定義 \(\boldsymbol\epsilon_\theta(\cdot,\sigma_i) := -\sigma_i\mathbf s_\theta(\cdot,\sigma_i)\)(投影片寫 \(\sigma_i\mathbf s_\theta\),差一個負號,等價):網路直接預測加上去的雜訊。每一項的目標 \(\mathbf z\) 都是標準高斯,各尺度大小相同,自然就平衡了。這也是 diffusion model(DDPM)常見的寫法。46:11
訓練演算法(投影片 22)
- 抽一個 mini-batch 的資料 \(\{\mathbf x_1,\dots,\mathbf x_n\}\sim p_{\text{data}}\)。
- 抽一個 mini-batch 的雜訊尺度索引 \(\{i_1,\dots,i_n\}\sim\mathcal U\{1,2,\dots,L\}\)。
- 抽一個 mini-batch 的高斯雜訊 \(\{\mathbf z_1,\dots,\mathbf z_n\}\sim\mathcal N(0,I)\)。
- 估計加權的 score matching loss:\(\frac1n\sum_{k=1}^n\big[\Vert\sigma_{i_k}\mathbf s_\theta(\mathbf x_k + \sigma_{i_k}\mathbf z_k,\sigma_{i_k}) + \mathbf z_k\Vert_2^2\big]\)。
- 隨機梯度下降。
- 和訓練單一個(非條件)score model 一樣有效率。46:43
投影片 23 的圖(「Using multiple noise levels」):左邊「Data」,右邊依序是 \(p_{\sigma_1}(\mathbf x) < p_{\sigma_2}(\mathbf x) < p_{\sigma_3}(\mathbf x)\) 的加雜訊密度(從清晰到模糊),中間一排小狗照片從清晰變成滿是雜點。下方是一個 NCSN \(\mathbf s_\theta(\mathbf x,\sigma)\) 同時輸出三個尺度的 score \(\mathbf s_\theta(\mathbf x,\sigma_1),\mathbf s_\theta(\mathbf x,\sigma_2),\mathbf s_\theta(\mathbf x,\sigma_3)\),標「Positive weighting function」、「Score matching loss」,最後接到「Annealed Langevin dynamics」。48:18
Demo B訓練一個 NCSN,比較一般與 annealed Langevin
同 Demo A 的資料。NCSN 是 3→64→64→2 的網路,輸入 \((\mathbf x/8,\ \log\sigma/\log\sigma_1)\),輸出除以 σ 當作 score(等價於讓網路預測 \(-\boldsymbol\epsilon\))。10 個雜訊尺度從 \(\sigma_1 = 10\)(約等於兩團的距離)到 \(\sigma_L = 0.1\) 的幾何級數,用 \(\lambda(\sigma) = \sigma^2\) 的 DSM 訓練 2,500 步。取樣:500 個粒子從均勻分佈出發,annealed 版本每層 100 步(\(\epsilon = 0.002\)),一般 Langevin 只用 \(\sigma_L\) 跑同樣總步數 1,000 步。
瀏覽器中實測(固定亂數種子,訓練約 8 秒):annealed Langevin 用真正的 score 得到右上 79%、落在 mode 附近 94%;用學到的 NCSN 得到右上 85%、mode 附近 93%,接近正確的 80%。一般 Langevin(只用 \(\sigma_L\),同樣 1,000 步)只有右上 52%(真 score)和 42%(NCSN),而且三到四成的粒子還散在 mode 之外:低密度區走不動、兩團的權重也反映不出來,正是第 13 講的陷阱。下排五格是 annealed 過程中第 1、3、5、8、10 層結束時的粒子,對照投影片 14。
05實驗結果(投影片 24–26)
投影片 24–25 的圖:(24) MNIST、CelebA、CIFAR-10 三格 annealed Langevin 的取樣動畫(轉檔只剩第一格的雜訊);逐字稿說可以看到從純雜訊、跟著梯度,慢慢變成資料。(25) CIFAR-10 無條件生成的表格:PixelCNN(Inception 4.60、FID 65.93)、PixelIQN(5.29、49.46)、EBM(6.02、40.58)、WGAN-GP(7.86、36.4)、MoLM(7.90、18.9)、SNGAN(8.22、21.7)、ProgressiveGAN(8.80、−),以及 NCSN(Ours)8.87、25.32。54:52
這是第一個在樣本品質上能和 GAN 競爭的模型(以當時的指標而言,Inception score 最高),引發了大量後續把這類模型放大的工作。投影片 26:放大後能生成合理的人臉、臥室、建築物(高解析度影像)。59:08
06無限多個雜訊尺度:隨機微分方程(投影片 27–33)
推論時用的雜訊尺度一定要和訓練時一樣嗎?很自然地會想:如果有無限多個雜訊尺度呢?60:50
投影片 27 的圖:上面是乾淨資料的一維密度(兩個峰)和三個逐漸變寬的加雜訊版本;下面把無限多個中間尺度排成一張熱圖:橫軸是時間 \(t\in[0,T]\),縱軸是 \(x\),每個垂直切片是 \(p_t(x)\)。左端 \(p_0 = p_{\text{data}}\) 是兩條亮黃色的帶,往右逐漸擴散、融合,右端 \(p_T(\mathbf x)\approx\pi(\mathbf x)\) 是一條寬的高斯。62:02
- 每個時間 \(t\) 有一個隨機變數 \(\mathbf x_t\),密度 \(p_t\):這一族 \(\{\mathbf x_t\}_{t\in[0,T]}\) 就是一個隨機過程。從左到右,資料逐漸加雜訊變成純雜訊。65:52
- 描述它的是一個隨機微分方程(SDE):\(d\mathbf x_t = \mathbf f(\mathbf x_t,t)\,dt + g(t)\,d\mathbf w_t\),前一項是確定性的漂移,後一項是無窮小的雜訊。和 ODE 很像,只是每一步都加一點雜訊。66:24
- 課堂上用的最簡單例子(投影片 28 的「WLOG: Toy SDE」):\(d\mathbf x_t = \sigma(t)\,d\mathbf w_t\)。沒有漂移,只是不斷加雜訊,就像一個隨機漫步;跑得夠久就變成純雜訊。67:31
反向 SDE:只需要 score(投影片 29)
要生成就要倒轉時間,從 \(T\) 走回 0,從雜訊到資料。驚人的是,反向過程也是一個簡單的 SDE,而它唯一需要的是各時刻加雜訊分佈的 score:68:32
\(d\bar{\mathbf w}_t\) 是「反向時間方向的無窮小雜訊」;\(dt\) 在這裡是負的(時間往回走),所以 \(-\sigma^2\nabla\log p_t\,dt\) 其實是沿著 score 往高密度走。
一般形式(Anderson 1982)
前向 SDE \(d\mathbf x = \mathbf f(\mathbf x,t)dt + g(t)d\mathbf w\) 的時間反轉過程是
單一條隨機軌跡不能倒轉(雜訊每一步都把它推往許多可能的方向),但軌跡的分佈可以:反向過程的每個時刻都和前向過程有相同的邊際 \(p_t\)。課堂的玩具例子是 \(\mathbf f = 0\)、\(g = \sigma(t)\)。常見的兩種實例:VE SDE(\(\mathbf f = 0\),變異數爆炸,對應 NCSN)和 VP SDE(\(\mathbf f = -\frac12\beta(t)\mathbf x\),變異數保持,對應 DDPM)。
出處:Lai et al. (2026) §4.1.2–4.1.3(forward / reverse-time SDE)、§4.4(VE、VP SDE);Song et al. (2021) §2–3。
訓練與取樣(投影片 30)
- 時間條件的 score model:\(\mathbf s_\theta(\mathbf x,t)\approx\nabla_{\mathbf x}\log p_t(\mathbf x)\)。
- 訓練:連續版的加權 DSM,把對 1,000 個尺度的總和換成對 \(t\) 的積分(期望): $$\mathbb E_{t\sim\mathcal U(0,T)}\big[\lambda(t)\,\mathbb E_{p_t(\mathbf x)}\big[\Vert\nabla_{\mathbf x}\log p_t(\mathbf x) - \mathbf s_\theta(\mathbf x,t)\Vert_2^2\big]\big]$$70:41
- 取樣:把反向 SDE 裡的真 score 換成 \(\mathbf s_\theta\):\(d\mathbf x = -\sigma^2(t)\mathbf s_\theta(\mathbf x,t)dt + \sigma(t)d\bar{\mathbf w}\),然後用數值方法解。最簡單的是 Euler–Maruyama(ODE 的 Euler 法的類比): $$\mathbf x\leftarrow\mathbf x - \sigma(t)^2\mathbf s_\theta(\mathbf x,t)\Delta t + \sigma(t)\mathbf z\quad(\mathbf z\sim\mathcal N(0,|\Delta t|I)),\qquad t\leftarrow t+\Delta t$$ \(\Delta t\) 是負的。這和 Langevin 一樣是「沿梯度走、加一點雜訊」。72:22
好處是:取樣變成了一個被研究得很透徹的問題「解 SDE」,可以用各種進階的數值方法,也可以自由選步數。73:59
Predictor–corrector 取樣(投影片 31–33)
- Predictor:數值 SDE 解法,沿時間往前跳一步(白色箭頭)。
- Corrector:基於 score 的 MCMC(Langevin),在同一個時間切片上修正樣本,讓它更符合 \(p_t\)(紅色向上箭頭)。75:03
只用 corrector、每個切片跑幾步 Langevin,就是前面的 annealed Langevin;只用 predictor 就是純粹解 SDE;兩者可以組合。75:35
投影片 31–33 的圖:(31) 熱圖上一條紅色的真實軌跡從右(prior)走到左(data);白色箭頭是 predictor 的跳躍,紅色叉叉是每步之後的位置,旁邊的紅色向上箭頭是 corrector 把它拉回。(32) CIFAR-10 的表格:條件生成 BigGAN FID 14.73、StyleGAN2-ADA 2.42;無條件 StyleGAN2-ADA 2.92、NCSN 25.32、NCSNv2 10.87、DDPM 3.17;綠底的是這篇論文的各種變體,最好的 NCSN++ cont. (deep, VE) FID 2.20、IS 9.89。(33) 兩張 1024×1024 的人臉。76:13
延伸 補充課 E 布朗運動與 SDE:√dt、Euler–Maruyama、VE 與 VP;補充課 F §6 反向 SDE:從 Fokker–Planck 推出 drift f − g²∇log p
07把 SDE 換成 ODE:連續時間的 normalizing flow(投影片 34)
還有一個完全確定性的過程,在每個時刻和 SDE 有一模一樣的邊際分佈 \(p_t\):82:14
- ODE 也只依賴 score,所以估計好 score 就能用解 ODE 的方式從雜訊走到資料。
- 從初始條件到終止條件的映射是可逆的:同一個 ODE 不同初始條件的解(投影片上的白色軌跡)不會交叉。所以它就是一個 normalizing flow:潛在變數是純雜訊、和資料同維度,映射由解 ODE 給出。83:20
- 它不是用 maximum likelihood 訓練,而是用 score matching;可以看成一個無限深的 flow,因此也能算 likelihood。84:26
投影片 34 的圖:同一張熱圖上,紅色的 SDE 軌跡彎彎曲曲、來回抖動;白色的 ODE 軌跡平滑,從左邊的兩個峰各自展開到右邊的寬高斯,彼此從不交叉。
ODE 的係數為什麼是 ½?用 Fokker–Planck 方程看
前向 SDE \(d\mathbf x = \sigma(t)d\mathbf w\) 的邊際密度滿足 Fokker–Planck(擴散)方程:
把右邊改寫:\(\frac12\sigma^2\Delta p = \nabla\cdot\big(\frac12\sigma^2\nabla p\big) = \nabla\cdot\big(\frac12\sigma^2 p\nabla\log p\big)\)。於是
這是連續方程:密度像一團不可壓縮的「流體」被速度場 \(\mathbf v_t\) 搬運。粒子沿 \(d\mathbf x/dt = \mathbf v_t(\mathbf x)\) 走,就保有一樣的邊際 \(p_t\)。所以 ½ 不是隨便拿掉雜訊項,而是從擴散項換算過來的。課堂上一個學生問的「不同尺度的 score 由 Fokker–Planck 方程聯繫」,就是這個方程。
出處:Lai et al. (2026) §4.1.4 "Deterministic Process (Probability Flow ODE)" 與 §4.2.1 "Fokker–Planck Equation to Ensure Alignment of Marginal Densities"。
延伸 補充課 C §8 擴散等價於一個速度場:係數為什麼是 ½;補充課 F §6 probability flow ODE;補充課 B §6 軌跡不交叉,所以可逆
Demo C一維的前向 SDE、反向 SDE 與 probability flow ODE
資料是一維的兩個高斯(位於 −2 和 2,權重 0.3 和 0.7,標準差 0.3)。前向 SDE \(dx = \sigma(t)dw\),加上去的總變異數是 \(\sigma_{\min}^2[(\sigma_{\max}/\sigma_{\min})^{2t} - 1]\),\(t\in[0,1]\)、\(\sigma_{\min} = 0.05\)、\(\sigma_{\max} = 6\)(VE SDE)。因為資料是高斯混合,每個 \(p_t\) 和它的 score 都能精確算出,所以這裡用的是真正的 score,專心看三種過程本身。背景是 \(p_t(x)\) 的熱圖,橫軸是時間。
用 ODE 精確算 likelihood(投影片 35 的想法)
- 反向 SDE:40 條軌跡從右邊的 \(p_1\)(近似一個寬高斯)出發,抖動著往左走,最後分到兩個峰。讀數用 4,000 條軌跡統計落在右峰的比例,應接近 70%:不同於第 13 講的單一 σ Langevin,這裡一路從大雜訊開始,權重是對的。
- ODE:軌跡平滑、互不交叉,同樣分到兩個峰,比例也接近 70%。同一個起點永遠走到同一個終點,這就是可逆映射。
- 步數:步數太少時離散誤差變大。實測 251 步時,反向 SDE 和 ODE 落在右峰的比例是 70.7% 和 69.5%(正確 70%);只用 10 步時變成 65.9% 和 77.5%,兩者往相反方向偏。前向 SDE 也一樣:10 步時 \(t = 1\) 的標準差只有 4.96(理論 6.28),因為 Euler 法每段都用起點的 \(\sigma(t)\),而這裡的 \(\sigma(t)\) 隨時間指數成長,每段加的雜訊都偏少。
- likelihood:對一個資料點 \(x_0\),沿 ODE 從 \(t = 0\) 積分到 1,同時累加速度場的散度 \(\int_0^1\partial_xv_t(x_t)dt\),就得到 \(\log p_0(x_0) = \log p_1(x_1) + \int_0^1\partial_xv_t\,dt\)(連續時間的變數變換公式)。讀數比較 ODE 算出來的和真正的 \(\log p_{\text{data}}(x_0)\):用真正的 \(p_1\) 時兩者到小數點後三、四位都一樣;改用實務上的高斯先驗 \(\pi\approx p_1\) 會差一點(\(p_1\) 其實是兩個寬高斯的混合,不完全是高斯),這是「\(p_T\approx\pi\)」近似的代價。
08沒講到的投影片(投影片 35–42)
影片在 SDE→ODE 的說明處結束(老師說「沒時間講了」)。剩下的投影片和 likelihood、DDIM 有關的部分在第 16 講會再談;以下先整理投影片內容。
用 ODE 算機率(投影片 35–36)
(式中的 \(\mathbf x\) 是 ODE 軌跡在時間 \(t\) 的位置;投影片寫的是從 \(\mathbf x_T\) 往回的方向,正負號依積分方向而定,和上面 Demo C 的寫法等價。)前一項用 ODE solver 把 \(\mathbf x_0\) 送到 \(\mathbf x_T\) 後計算;trace 項用 Hutchinson 估計量做不偏估計,計算時間是多項式的。投影片 36 的表:CIFAR-10 / ImageNet 32×32 的負 log-likelihood(bits/dim):PixelSNAIL 2.85 / 3.80、Delta-VAE 2.83 / 3.77、Sparse Transformer 2.80 / −,以及 score flow model 2.83 / 3.76(投影片文字中有這一列,轉檔的圖上被截掉了),「挑戰了 autoregressive model 和 VAE 多年的主導地位」。
加速取樣(投影片 37)
用數值方法和 ODE 形式加速取樣。DDIM(Song et al. 2021):把時間軸粗略地離散化、走大步;它對應於半線性 ODE 的指數積分器(Lu et al. 2022;Zhang & Chen 2022);速度快 10–50 倍,樣本品質相當。
控制生成過程(投影片 38–41)
Bayes 法則本身需要難算的 \(p(\mathbf y)\),但對 score 而言 \(p(\mathbf y)\) 和 \(\mathbf x\) 無關,梯度為 0。所以「條件分佈的 score = 無條件的 score + 前向模型 \(p(\mathbf y\mid\mathbf x)\) 的梯度」:同一個無條件的 score model,可以插上不同的前向模型做不同的控制。例子:\(\mathbf y\) = "dog" 的分類器、把筆畫畫轉成照片(SDEdit,Meng et al. ICLR 2022,前向模型可以自己指定)、用影像描述(captioning)網路當前向模型做文字引導生成(「Studio Ghibli 風格的樹屋」)、「抽象的計算機科學畫作」和「梵谷星夜風格」的例子。這就是第 16 講之後 classifier guidance 的基礎。
結論(投影片 42)
- 分佈的梯度(score)容易估計:架構選擇有彈性(不需要歸一化或可逆)、訓練穩定(沒有 minimax)。
- 樣本品質比 GAN 好或相當:CIFAR-10 等的最先進表現,可擴展到 1024×1024。
- 精確的 likelihood 計算:CIFAR-10 上最先進的 likelihood;可以透過操作潛在編碼編輯樣本。
與其他講的關聯
- 第 7–8 講:probability flow ODE 就是連續時間的 normalizing flow;likelihood 公式是變數變換公式的連續版,trace 對應第 7 講的 log det(第 8 講補充的 Neural ODE)。
- 第 11–12 講:annealed Langevin 和 predictor–corrector 裡的 corrector 就是 Langevin MCMC;trace 的 Hutchinson 估計來自第 12 講。
- 第 13 講:DSM、Tweedie、三個陷阱;這講是對三個陷阱的回答。
- 第 15 講:Inception score、FID 等樣本品質指標(這講的表格用到的)。
- 第 16 講:把 score-based model 看成 diffusion model / 階層式 VAE,DDPM 的 ELBO,ODE likelihood、DDIM、條件生成。
常見誤解
自我測驗
1. 加高斯雜訊怎麼解決流形和低密度區兩個問題?代價是什麼?
2. Annealed Langevin 的步驟是什麼?為什麼每層的樣本要當下一層的起點?
3. 寫出 NCSN 的訓練目標(λ(σ) = σ²),並改寫成預測雜訊的形式。
4. 最大雜訊、最小雜訊、中間的尺度各怎麼選?
5. 雜訊無限大時,最佳的去雜訊器輸出什麼?
6. 寫出課堂的玩具前向 SDE 和它的反向 SDE。反向 SDE 需要什麼?
7. 如何從反向 SDE 得到取樣演算法?
8. Predictor–corrector 取樣中,predictor 和 corrector 各是什麼?
9. 寫出 probability flow ODE。為什麼它是 normalizing flow?
10. 用 Fokker–Planck 方程解釋 ODE 的 ½。
11. 怎麼用 ODE 算一個資料點的 log-likelihood?
12. 為什麼條件生成不需要算 \(p(\mathbf y)\)?
延伸閱讀
- Yang Song, Generative Modeling by Estimating Gradients of the Data Distribution(本頁參考):"multiple noise perturbations"、SDE、reverse SDE、PF-ODE、controllable generation。
- Lai et al. (2026)(v3)(本頁參考)§3.4 NCSN、第 4 章 Score SDE(forward / reverse SDE、PF-ODE、Fokker–Planck、VE / VP)。
- Song & Ermon (2019), NCSN(投影片 11–25)。
- Song & Ermon (2020), Improved Techniques for Training Score-Based Generative Models(投影片 19–21 的選擇)。
- Song et al. (2021), Score-Based Generative Modeling through SDEs(投影片 27–36)。
- Song, Meng & Ermon (2021), DDIM;Meng et al. (2022), SDEdit(投影片 37、39)。
- Anderson (1982), Reverse-Time Diffusion Equation Models, Stochastic Processes and their Applications 12(3)。