擴散模型原理 B10 · VE、VP 與擾動核
The Principles of Diffusion Models · 第 4 章 §4.4–4.7

VE、VP,以及「直接寫下 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\)」

這一頁收尾第 4 章。先看 Score SDE 最常用的兩個實例:VE SDE(NCSN 的連續版本)和 VP SDE(DDPM 的連續版本),以及它們的擾動核怎麼從平均、變異數的 ODE 解出來。接著換一個更直接的觀點:不從局部的加雜訊規則出發,而是直接寫下每個時刻相對於資料的擾動 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\),再反推對應的 SDE,順便看到不是每一組 \(\alpha_t,\sigma_t\) 都合法。最後是兩個選讀的啟發式推導:用邊際化推出 Fokker–Planck 方程,用貝氏定理推出反向 SDE。

書的範圍:第 4 章 §4.4(含 §4.4.1–4.4.3)、§4.5(含 §4.5.1–4.5.2)、§4.6(選讀)、§4.7 閱讀時間:約 50 分鐘

讀完這頁你應該能夠

  1. 寫出 VE 和 VP SDE 的漂移、擴散係數、擾動核與先驗,並說出它們分別是 NCSN 和 DDPM 的連續版本。
  2. 解出線性 SDE 的平均與變異數 ODE,推導 VE、VP 的擾動核。
  3. 給定 \(\alpha_t,\sigma_t\),反推 \(f(t)\)、\(g^2(t)\),並用「SNR 不能隨時間增加」判斷時程是否合法;說明為什麼在有限時間完全忘掉 \(\mathbf x_0\) 需要奇異的係數。
  4. 寫出一般 \(\alpha_t,\sigma_t\) 下的反向條件核,以及 diffusion 損失化成 \(\tfrac12(\mathrm{SNR}(t)-\mathrm{SNR}(s))\Vert\mathbf x_0-\mathbf x_{\bm\phi}\Vert^2\) 的推導。
  5. (選讀)用 Chapman–Kolmogorov 與 Taylor 展開說明 Fokker–Planck 方程的來源,用貝氏定理說明反向 SDE 為什麼長那樣。

前置知識

  • B08:前向 SDE、仿射漂移下的擾動核(本頁第 2 節是它的完整版)、反向 SDE、PF-ODE;本章 \(\beta\) 是變異數。
  • B09:Fokker–Planck 方程、高斯例子裡的反向一步。
  • B04:DDPM 的反向條件核(Lemma)、ELBO、\(\mathbf x\)-prediction;B07:NCSN 的等比雜訊等級。
  • 積分因子、Taylor 展開、多維變數變換的 Jacobian:CS236 補充課 B、補充課 A。
記號:第 3 節起的 \(\alpha_t\)、\(\sigma_t\)。書在 §4.5 改用 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\):\(\alpha_t\) 是累積的訊號係數(相當於 B04 的 \(\bar\alpha_i\)),\(\sigma_t\) 是累積的雜訊標準差。這和 B02 的寫法一致,但和 B04 每一步的 \(\alpha_i\) 不同;也和 B07 的 \(\sigma_i\) 一致(VE 時 \(\alpha_t\equiv1\))。

「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。書把 §4.4.3 和 §4.6 標為選讀,本頁照樣標示。

01SDE 的實例:VE 與 VP書 §4.4

Song et al. (2020) 依照變異數在演化中的行為,把前向 SDE 的漂移 \(\mathbf f(\mathbf x,t)\) 和擴散項 \(g(t)\) 分成三類。這裡專注兩種常用的:Variance Explosion(VE,變異數爆炸)SDE 和 Variance Preserving(VP,變異數保持)SDE。也可以設計自己的雜訊時程,但時程的設計會大幅影響實際表現。下表整理這兩個實例。

轉述者注:第三類是 sub-VP SDE(Song et al. 2020),變異數始終不超過 VP 的對應值;書沒有介紹,這裡也不展開。

VE SDEVP SDE
\(\mathbf f(\mathbf x,t)\)\(\mathbf 0\)\(-\tfrac12\beta(t)\mathbf x\)
\(g(t)\)\(\sqrt{\frac{d\sigma^2(t)}{dt}}\)\(\sqrt{\beta(t)}\)
SDE\(d\mathbf x(t)=g(t)\,d\mathbf w(t)\)\(d\mathbf x(t)=-\tfrac12\beta(t)\mathbf x(t)\,dt+\sqrt{\beta(t)}\,d\mathbf w(t)\)
\(p_t(\mathbf x_t\mid\mathbf x_0)\)\(\mathcal N\big(\mathbf x_t;\mathbf x_0,(\sigma^2(t)-\sigma^2(0))\mathbf I\big)\)\(\mathcal N\big(\mathbf x_t;\mathbf x_0e^{-\frac12\int_0^t\beta(\tau)d\tau},\ \mathbf I-\mathbf Ie^{-\int_0^t\beta(\tau)d\tau}\big)\)
\(p_{\text{prior}}\)\(\mathcal N(\mathbf 0,\sigma^2(T)\mathbf I)\)\(\mathcal N(\mathbf 0,\mathbf I)\)

VE SDE

VE SDE 的組成:

  • 漂移項:零漂移 \(\mathbf f=\mathbf 0\)。
  • 擴散項:\(g(t)=\sqrt{\frac{d\sigma^2(t)}{dt}}\),\(\sigma(t)\) 是某個函數。

前向 SDE 於是是

$$d\mathbf x(t)=\sqrt{\frac{d\sigma^2(t)}{dt}}\,d\mathbf w(t).$$

由第 2 節的結果,可以得到 VE SDE 的擾動核,也知道該選什麼先驗:

  • 擾動核:\(p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N\big(\mathbf x_t;\mathbf x_0,(\sigma^2(t)-\sigma^2(0))\mathbf I\big)\)。
  • 先驗分佈:假設 \(\sigma(t)\) 在 \([0,T]\) 上遞增,而且 \(\sigma^2(T)\gg\sigma^2(0)\),先驗取 \(p_{\text{prior}}:=\mathcal N(\mathbf 0,\sigma^2(T)\mathbf I)\)。

VE SDE 的典型實例是 NCSN,設計成

$$\sigma(t):=\sigma_{\min}\Big(\frac{\sigma_{\max}}{\sigma_{\min}}\Big)^t,\qquad t\in(0,1],$$

\(\sigma_{\min}\)、\(\sigma_{\max}\) 是事先指定的常數。也就是說,雜訊尺度設計成等比數列(B07 的 Demo 就是這樣取的)。如此一來,NCSN 可以看成 VE SDE 的離散化(B08 第 3 節)。

這個 \(\sigma(t)\) 的 \(g(t)\) 長什麼樣

\(\sigma^2(t)=\sigma_{\min}^2(\sigma_{\max}/\sigma_{\min})^{2t}\),所以 \(\frac{d\sigma^2}{dt}=2\log\frac{\sigma_{\max}}{\sigma_{\min}}\,\sigma^2(t)\),\(g(t)=\sigma(t)\sqrt{2\log(\sigma_{\max}/\sigma_{\min})}\):擴散係數本身也是指數成長。B08 的 Demo B 用 \(\sigma_{\min}=0.01\)、\(\sigma_{\max}=50\),\(g\) 從 0.04 長到 206。注意「\(\sigma(t)\) 從 \(\sigma_{\min}\) 開始」所以擾動核的變異數是 \(\sigma^2(t)-\sigma_{\min}^2\),\(t=0\) 時恰好是 0。

VP SDE

令 \(\beta:[0,T]\to\mathbb R_{\ge0}\) 是 \(t\) 的非負函數。VP SDE 的組成:

  • 漂移項:線性漂移 \(\mathbf f(\mathbf x,t)=-\tfrac12\beta(t)\mathbf x\)。
  • 擴散項:\(g(t)=\sqrt{\beta(t)}\)。

前向 SDE 於是是

$$d\mathbf x(t)=-\frac12\beta(t)\,\mathbf x(t)\,dt+\sqrt{\beta(t)}\,d\mathbf w(t).$$

由第 2 節的結果,可以推出 VP SDE 的擾動核並選擇先驗:

  • 擾動核:\(p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N\big(\mathbf x_t;\mathbf x_0e^{-\frac12\int_0^t\beta(\tau)d\tau},\ \mathbf I-\mathbf Ie^{-\int_0^t\beta(\tau)d\tau}\big)\)。
  • 先驗分佈:\(p_{\text{prior}}:=\mathcal N(\mathbf 0,\mathbf I)\)。

書提醒:因為擾動核是平均和共變異數都已知的高斯,可以直接套用高斯的 score 公式(\(\nabla\log\mathcal N(\mathbf x;\mathbf m,P\mathbf I)=-(\mathbf x-\mathbf m)/P\),B09 第 4 節的補充)算出它的 score。

VP SDE 的經典例子是 DDPM,雜訊時程 \(\beta(t)\) 定義為

$$\beta(t):=\beta_{\min}+t(\beta_{\max}-\beta_{\min}),\qquad t\in[0,1],$$

\(\beta_{\min}\)、\(\beta_{\max}\) 是事先定義的常數。如此,DDPM 可以解讀成 VP SDE 的離散化(B08 第 3 節)。

常用的數字從哪裡來,以及「VP」是什麼意思

Song et al. (2020) 取 \(\beta_{\min}=0.1\)、\(\beta_{\max}=20\),正是 B04、B08、B09 的 demo 一直在用的 \(\int_0^t\beta=0.1t+9.95t^2\)。它和 Ho et al. 的離散時程(\(L=1000\) 步、每步變異數從 \(10^{-4}\) 線性增加到 0.02)對應:\(\beta(t)\approx L\cdot\beta_i\),\(1000\times10^{-4}=0.1\)、\(1000\times0.02=20\)。

「變異數保持」:若 \(\mathbf x_0\) 的變異數是 1,\(\operatorname{Var}(\mathbf x_t)=e^{-B}\cdot1+(1-e^{-B})=1\) 對所有 \(t\) 都成立(\(B=\int_0^t\beta\))。VE 則是 \(\operatorname{Var}(\mathbf x_t)=\operatorname{Var}(\mathbf x_0)+\sigma^2(t)-\sigma^2(0)\) 一直長大。

02(選讀)擾動核怎麼推出來書 §4.4.3

如果前向 SDE 的漂移對 \(\mathbf x\) 是線性的,\(\mathbf f(\mathbf x,t)=f(t)\mathbf x\)(\(f(t)\in\mathbb R\) 是隨時間變的純量函數),前向 SDE 就成為線性 SDE:

$$d\mathbf x(t)=f(t)\mathbf x(t)\,dt+g(t)\,d\mathbf w(t).$$

就算初始分佈 \(p_{\text{data}}\) 不是高斯,漂移的線性也保證條件過程維持高斯。具體地,對 \(t>0\),轉移核的形式是

$$p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N\big(\mathbf x_t;\mathbf m(t),P(t)\mathbf I_D\big),\qquad\mathbf m(t)=\mathbb E[\mathbf x_t\mid\mathbf x(0)=\mathbf x_0],\quad P(t)\mathbf I_D=\operatorname{Cov}[\mathbf x_t\mid\mathbf x(0)=\mathbf x_0],$$

\(\mathbf x_0\sim p_{\text{data}}\),\(\mathbf m(t)\in\mathbb R^D\)、\(P(t)\in\mathbb R_{\ge0}\) 是給定 \(\mathbf x_0\) 的條件平均與(純量)變異數。這兩個動差依下面的 ODE 演化(Särkkä & Solin 2019),前提是初始的平均 \(\mathbf m(0)\) 和變異數 \(P(0)\) 有限:

$$\frac{d\mathbf m(t)}{dt}=f(t)\,\mathbf m(t),\qquad\frac{dP(t)}{dt}=2f(t)\,P(t)+g^2(t).$$

兩條 ODE 都是線性的,用積分因子法就有封閉解。給定初始條件 \(\mathbf x_0\),平均和變異數演化成

$$\mathbf m(t)=\mathcal E(0\to t)\,\mathbf x_0,\qquad P(t)=\int_0^t\mathcal E^2(s\to t)\,g(s)^2\,ds,$$

\(\mathbf m(0)=\mathbf x_0\)、\(P(0)=0\)。這裡 \(\mathcal E(s\to t)\) 是指數積分因子

$$\mathcal E(s\to t):=\exp\Big(\int_s^tf(u)\,du\Big),$$

它記錄從時間 \(s\) 到 \(t\) 漂移累積的效果。因此轉移核 \(p_t(\mathbf x_t\mid\mathbf x_0)\) 也有封閉形式。

書把兩件事的嚴格證明留到附錄 C(B35),因為要用到 Itô 微積分:一是 \(D\) 維 Wiener process 各座標獨立、擴散係數是 \(g(t)\mathbf I_D\) 時,條件共變異數是各向同性的 \(P(t)\mathbf I_D\);二是動差 ODE 本身的推導。B08 第 4 節的推導框用離散的一步給了直覺版本。

書中的例子:VE SDE 的轉移核 VE SDE 的 \(\mathbf f\equiv0\)、\(g(t)=\sqrt{d\sigma^2(t)/dt}\)。
平均:\(\frac{d\mathbf m}{dt}=0\),\(\mathbf m(0)=\mathbf x_0\) ⟹ \(\mathbf m(t)=\mathbf x_0\)。
變異數:\(\frac{dP}{dt}=\frac{d\sigma^2(t)}{dt}\),\(P(0)=0\) ⟹ \(P(t)=\sigma^2(t)-\sigma^2(0)\)。
因此 \(p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N\big(\mathbf x_t;\mathbf x_0,(\sigma^2(t)-\sigma^2(0))\mathbf I_D\big)\)。
書中的例子:VP SDE 的轉移核 VP SDE 的漂移 \(\mathbf f(\mathbf x,t)=-\tfrac12\beta(t)\mathbf x\)、擴散 \(g(t)=\sqrt{\beta(t)}\)。
平均:\(\frac{d\mathbf m}{dt}=-\tfrac12\beta(t)\mathbf m(t)\),令 \(B(t):=\int_0^t\beta(s)\,ds\),得 \(\mathbf m(t)=e^{-\frac12B(t)}\mathbf x_0\)。
變異數:\(\frac{dP}{dt}=-\beta(t)P(t)+\beta(t)\)。乘上積分因子 \(e^{B(t)}\):\(\frac{d}{dt}\big[P(t)e^{B(t)}\big]=\beta(t)e^{B(t)}\)。兩邊積分得 \(P(t)=1-e^{-B(t)}\),所以共變異數是各向同性的 \(\big(1-e^{-B(t)}\big)\mathbf I_D\)。
最終的封閉轉移核: $$p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N\Big(\mathbf x_t;\ \underbrace{e^{-\frac12B(t)}\mathbf x_0}_{\mathbf m(t)},\ \underbrace{\big(1-e^{-B(t)}\big)\mathbf I_D}_{P(t)\mathbf I_D}\Big),\qquad B(t)=\int_0^t\beta(s)\,ds.$$
VP 變異數那一步積分

\(\frac{d}{dt}[Pe^B]=P'e^B+P\beta e^B=e^B(P'+\beta P)=e^B\beta\)(用 \(P'=-\beta P+\beta\))。右邊是 \(\frac{d}{dt}e^{B}\),所以 \(Pe^B=e^B+C\);\(P(0)=0\)、\(B(0)=0\) 給 \(C=-1\),\(P=1-e^{-B}\)。

03另一個觀點:直接指定累積擾動核書 §4.5

DDPM 和 Score SDE 通常從「雜訊怎麼在時間上局部地加進去」開始介紹:DDPM 用離散的前向轉移 \(p(\mathbf x_t\mid\mathbf x_{t-\Delta t})\),Score SDE 用連續時間的 SDE。但對訓練來說,特別有用的是累積擾動核 \(p_t(\mathbf x_t\mid\mathbf x_0)\):它直接描述以原始資料樣本為條件、時間 \(t\) 的分佈。DDPM 和連續時間的去雜訊目標(B04、B09)裡自然出現的正是這個形式。

這啟發了一個互補的觀點:與其從局部的雜訊注入出發再推出 \(p_t(\mathbf x_t\mid\mathbf x_0)\),不如直接指定累積擾動核。對下面考慮的線性高斯過程,一個合法的累積核決定了對應的線性 SDE,反之亦然。這個觀點讓每個時刻的訊號量和雜訊量一目了然,直接連到實際的訓練目標,也會成為通往第 5 章 Flow Matching 的「機率路徑」觀點的橋樑。

書中的圖:同一個仿射前向過程的兩種觀點
書中的圖(§4.5):同一個仿射前向過程的兩種觀點。上排(淺藍):從 \(\mathbf x_0\sim p_{\text{data}}\)(貓)開始一步步「Add noise」,經過 \(\mathbf x_{t-\Delta t}\) 到 \(\mathbf x_t\),每一步是 \(\mathcal N(\mathbf x_t;\mathbf x_{t-\Delta t}+\mathbf f(\mathbf x_{t-\Delta t},t)\Delta t,\,g^2(t)\Delta t\,\mathbf I)\),最後到 \(\mathbf x_T\)。下排(深藍):一條箭頭直接從 \(\mathbf x_0\) 跳到 \(\mathbf x_t\),標著 \(\mathcal N(\mathbf x_t;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I)\)。對合法的仿射 diffusion 時程,用連續時間線性 SDE 逐步注入雜訊,和直接指定累積擾動核,描述的是同一族條件分佈 \(p_t(\mathbf x_t\mid\mathbf x_0)\)。圖片出處:Lai et al. (2026),作者自繪。

一般的仿射前向過程 \(p_t(\mathbf x_t\mid\mathbf x_0)\)

從定義累積的前向擾動核開始:

$$p_t(\mathbf x_t\mid\mathbf x_0):=\mathcal N\big(\mathbf x_t;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I\big),$$

\(\mathbf x_0\sim p_{\text{data}}\),\(\alpha_t\)、\(\sigma_t\) 是 \(t\in[0,T]\) 的非負純量函數。在標準的前向 diffusion 設定裡,取 \(\alpha_0=1\)、\(\sigma_0=0\),讓過程恰好從資料開始;並在用到對應的比值時,假設 \(t\in(0,T]\) 上 \(\alpha_t>0\)、\(\sigma_t>0\)。等價地,這個核的一個樣本可以寫成

$$\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon,\qquad\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I).$$

這個簡單的形式包含幾種熟悉的機率路徑:

  • VE(NCSN):\(\alpha_t\equiv1\),雜訊尺度 \(\sigma_t\) 隨時間增加;
  • VP(DDPM):\(\alpha_t^2+\sigma_t^2=1\);
  • 線性高斯插值:\(t\in[0,1]\) 上 \(\alpha_t=1-t\)、\(\sigma_t=t\)。寫成「資料到雜訊」的時間方向時,這就是 Flow Matching 和 Rectified Flow 常用的線性路徑(第 5 章)。

和 Score SDE 的連結

對 Score SDE,先指定累積擾動核 \(p_t(\mathbf x_t\mid\mathbf x_0)\)、再反推對應的 SDE 係數,往往比「先指定漂移和擴散項、再解動差的 ODE」(第 2 節)更直覺。對合法的仿射時程,對應的前向 SDE 是對 \(\mathbf x\) 線性的形式:

$$d\mathbf x(t)=\underbrace{f(t)\mathbf x(t)}_{\mathbf f(\mathbf x(t),t)}dt+g(t)\,d\mathbf w(t),$$

\(f,g:[0,T]\to\mathbb R\) 是時間的實值函數。係數 \(f(t)\)、\(g(t)\) 可以從 \(\alpha_t\)、\(\sigma_t\) 解析地還原。重要的是,不是每一組 \(\alpha_t\)、\(\sigma_t\) 都定義一個合法的 diffusion:推出來的擴散變異數 \(g^2(t)\) 必須保持非負。等價地,在這個線性高斯設定下,訊號雜訊比 \(\alpha_t^2/\sigma_t^2\) 不能隨時間增加。下面的 Lemma 把這個關係說清楚。

書中的 Lemma:前向擾動核 ⟺ 線性 SDE 假設 \(\alpha_0=1\)、\(\sigma_0=0\),而且 \(\alpha_t>0\)、\(\sigma_t>0\) 在 \(t\in(0,T]\) 上可微。定義 \(\lambda_t:=\log\frac{\alpha_t}{\sigma_t}\)。給定前向擾動核 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\),存在一條對應的線性 SDE \(d\mathbf x(t)=f(t)\mathbf x(t)\,dt+g(t)\,d\mathbf w(t)\)、有相同的條件核 \(p_t(\mathbf x_t\mid\mathbf x_0)=\mathcal N(\mathbf x_t;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I)\),若且唯若係數 $$f(t)=\frac{d}{dt}\log\alpha_t,\qquad g^2(t)=\frac{d\sigma_t^2}{dt}-2\frac{d}{dt}\log\alpha_t\,\sigma_t^2=-2\sigma_t^2\frac{d}{dt}\lambda_t$$ 在 \(t\in(0,T]\) 上滿足 \(g^2(t)\ge0\)。等價地,\(\lambda_t\) 必須是非遞增的。反過來,若一條線性 SDE 的條件核是 \(\mathcal N(\mathbf x_t;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I)\)(\(\alpha_t>0\)、\(\sigma_t>0\)),它的係數必然滿足上式。
證明(書的想法:匹配動差 ODE)

由第 2 節,線性 SDE 的條件平均和變異數滿足 \(\mathbf m'=f\mathbf m\)、\(P'=2fP+g^2\)。要讓它們等於 \(\mathbf m(t)=\alpha_t\mathbf x_0\)、\(P(t)=\sigma_t^2\)(對所有 \(\mathbf x_0\)):

平均:\(\alpha_t'\mathbf x_0=f\alpha_t\mathbf x_0\) ⟹ \(f=\alpha_t'/\alpha_t=\frac{d}{dt}\log\alpha_t\)。

變異數:\((\sigma_t^2)'=2f\sigma_t^2+g^2\) ⟹ \(g^2=(\sigma_t^2)'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\)。

第二種寫法:\(\lambda_t'=\frac{\alpha_t'}{\alpha_t}-\frac{\sigma_t'}{\sigma_t}\),所以 \(-2\sigma_t^2\lambda_t'=-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2+2\sigma_t\sigma_t'=(\sigma_t^2)'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\)。

\(g^2\) 是變異數(實數 \(g\) 的平方),必須 \(\ge0\);因為 \(\sigma_t^2>0\),這等於 \(\lambda_t'\le0\)。反方向:若 \(g^2\ge0\),令 \(g=\sqrt{g^2}\),這條 SDE 的動差 ODE 和初始條件都和 \((\alpha_t\mathbf x_0,\sigma_t^2)\) 相同,解唯一,所以條件核相同;又因為是線性高斯,條件核就是這個高斯。

為什麼 SNR 不能增加:直覺

\(\lambda_t=\log(\alpha_t/\sigma_t)=\tfrac12\log\mathrm{SNR}(t)\)。前向過程只會加雜訊、縮放,不會從雜訊裡「變出」關於 \(\mathbf x_0\) 的資訊,所以訊號雜訊比只能下降(或持平)。如果有人指定一個 SNR 先降後升的時程,要實現它,雜訊的變異數得在某段時間「減少」,也就是 \(g^2\lt0\),沒有任何實數雜訊做得到。Demo A 可以畫一個這樣的例子。

書中的 Remark:在有限時間完全遺忘 要讓終點的條件分佈不依賴 \(\mathbf x_0\)、而且等於指定的高斯先驗,需要 \(\alpha_T=0\),\(\sigma_T^2\) 等於先驗的變異數。因為 \(\alpha_t=\exp\big(\int_0^tf(u)\,du\big)\),要在有限的終點時間做到 \(\alpha_T=0\),需要 \(\int_0^Tf(u)\,du=-\infty\)。所以漂移帶來的收縮在終點附近必須變成奇異的;特別是,\(f\) 在 \([0,T]\) 上不能保持有界。
擴散係數和指定的變異數的關係是 \(g^2(t)=(\sigma_t^2)'-2\frac{\alpha_t'}{\alpha_t}\sigma_t^2\)。對常見的正則時程,\(\sigma_t^2\) 趨近一個有限非零的終點變異數,\((\sigma_t^2)'\) 保持有界,而 \(\alpha_t'/\alpha_t\to-\infty\),所以也得到 \(g^2(t)\to\infty\)(\(t\to T\))。更一般地,\(g(t)\) 的精確行為取決於所選的時程。
若 \(f\) 和 \(g\) 在有限區間 \([0,T]\) 上保持有界,則 \(\alpha_T>0\),在有限的 \(T\) 不可能完全遺忘。所以實務上會選一個終點時間,讓剩下對 \(\mathbf x_0\) 的依賴可以忽略、\(p_T\approx p_{\text{prior}}\);或考慮 \(\alpha_t\) 只在無窮遠漸近趨於 0 的無窮時間寫法。

轉述者注:線性插值 \(\alpha_t=1-t\)、\(\sigma_t=t\) 就是這個 Remark 的例子:\(f=-\frac1{1-t}\)、\(g^2=2t+\frac{2t^2}{1-t}=\frac{2t}{1-t}\),兩者在 \(t\to1\) 時都發散,而 \(\alpha_1=0\) 恰好在 \(T=1\) 完全遺忘。VP 用 \(\beta(t)=0.1+19.9t\) 時 \(f\)、\(g\) 有界,所以 \(\alpha_1=e^{-5.025}\approx0.0066\gt0\),只是小到可以忽略。

由上面的 Lemma,用係數 \(f(t)\)、\(g(t)\) 的線性 SDE 指定逐步的雜訊注入,在數學上等價於用參數 \(\alpha_t\)、\(\sigma_t\) 定義擾動核。在 diffusion 文獻裡這兩個觀點交替使用。因此:

書中的 Observation對合法的仿射 diffusion 時程,兩種描述等價:可以透過 \(\alpha_t\)、\(\sigma_t\) 指定累積擾動核 \(p_t(\mathbf x_t\mid\mathbf x_0)\),也可以透過 \(f(t)\)、\(g(t)\) 指定對應的線性 SDE。

Demo A從雜訊時程推出 SDE 係數:合不合法轉述者補充

選一個 \((\alpha_t,\sigma_t)\),用 Lemma 的公式算出 \(f(t)\)、\(g^2(t)\) 和 \(\lambda_t=\log(\alpha_t/\sigma_t)\)。前四個是合法的時程;最後一個是故意構造的反例:\(\alpha_t\equiv1\),\(\sigma_t\) 先升後降(雜訊先加後減)。

αtσtλt = log(α/σ)(縮小畫)
g²(t)f(t)g² < 0 的區間(不合法)

瀏覽器實測(\(t=0.5\) 與 \(t=0.9\)):

時程\(f(0.5)\)、\(g^2(0.5)\)\(f(0.9)\)、\(g^2(0.9)\)\(\alpha_T\)
VP\(-5.025\)、10.05\(-9.005\)、18.010.00657
VE0、8.5170、77531
線性插值\(-2\)、2\(-10\)、180
三角函數 VP\(-1.571\)、3.142\(-9.918\)、19.840
反例0、1.4770、\(-2.469\)1
  • VP 的係數有界,所以只能「幾乎」遺忘:\(f=-\tfrac12\beta\)、\(g^2=\beta\) 都在 \([0.1,20]\) 之內,\(\alpha_1=0.00657\),不是 0。
  • 恰好在 \(t=1\) 遺忘的兩個時程,係數都在終點發散:線性插值的 \(f=-1/(1-t)\)、\(g^2=2t/(1-t)\)(\(t=0.9\) 時 \(-10\)、18;\(t=0.99\) 時 \(-100\)、198);三角函數 VP 的 \(g^2=\pi\tan(\pi t/2)\)。這就是書中 Remark 的情況。
  • VE 的 \(g^2\) 長得極快:\(\sigma\) 是等比的,\(g^2=2\log(5000)\,\sigma^2\),\(t=0.9\) 時已經到 7753。它的 \(\alpha\equiv1\),從不遺忘 \(\mathbf x_0\),靠的是 \(\sigma_T=50\) 遠大於資料的範圍。
  • 反例:\(\sigma_t=\sin(0.8\pi t)\) 在 \(t=0.625\) 之後開始變小,\(\lambda_t\) 回升,\(g^2\lt0\) 的時間占 37%。這種「先加雜訊、後減雜訊」的路徑沒有對應的前向 SDE。

04和變分 diffusion model 的連結書 §4.5.2

回顧 DDPM 裡由貝氏定理推出的核心恆等式(B04 第 3 節):

$$p(\mathbf x_{t-\Delta t}\mid\mathbf x_t,\mathbf x)=p(\mathbf x_t\mid\mathbf x_{t-\Delta t})\cdot\frac{p_{t-\Delta t}(\mathbf x_{t-\Delta t}\mid\mathbf x)}{p_t(\mathbf x_t\mid\mathbf x)},$$

對任何 \(\mathbf x\)(通常 \(\mathbf x\sim p_{\text{data}}\))。這個反向條件 \(p(\mathbf x_{t-\Delta t}\mid\mathbf x_t,\mathbf x)\) 是建模的核心,既提供好處理的訓練目標,也讓取樣有效率。雖然 DDPM 通常先定義逐步的核 \(p(\mathbf x_t\mid\mathbf x_{t-\Delta t})\),累積的轉移 \(p_t(\mathbf x_t\mid\mathbf x_0)\) 往往是更好解讀、更實用的寫法,特別是在設計先驗和損失時。

推導轉移核

現在把它推廣到連續時間。令 \(0\le t\lt s\le T\) 是兩個(連續的)時間點。給定擾動核 \(p_t(\mathbf x_t\mid\mathbf x_0)\),可以把上面的恆等式(書的註腳:把 \(s\) 當成一般的較晚時間,這個恆等式自然地推廣到連續時間)套用在前向核 \(p(\mathbf x_s\mid\mathbf x_t)\) 上,對任何 \(\mathbf x\) 算出反向條件 \(p(\mathbf x_t\mid\mathbf x_s,\mathbf x)\)。下面的 Lemma 總結這個推導;它推廣了 B04 的 Lemma,不假設 \(\alpha_t^2+\sigma_t^2=1\)。

書中的 Lemma:反向條件轉移核 令 \(0\le t\lt s\le T\)。反向條件轉移核是 $$p(\mathbf x_t\mid\mathbf x_s,\mathbf x)=\mathcal N\big(\mathbf x_t;\bm\mu(\mathbf x_s,\mathbf x;s,t),\sigma^2(s,t)\mathbf I\big),$$ $$\bm\mu(\mathbf x_s,\mathbf x;s,t):=\frac{\alpha_{s|t}\sigma_t^2}{\sigma_s^2}\mathbf x_s+\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}\mathbf x,\qquad\sigma^2(s,t):=\sigma_{s|t}^2\frac{\sigma_t^2}{\sigma_s^2},\qquad\alpha_{s|t}:=\frac{\alpha_s}{\alpha_t},\quad\sigma_{s|t}^2:=\sigma_s^2-\alpha_{s|t}^2\sigma_t^2.$$
證明(書:先算前向核,再用貝氏;細節見 Kingma et al. 2021 附錄 A)

前向核。由 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\boldsymbol\epsilon\)、\(\mathbf x_s=\alpha_s\mathbf x_0+\sigma_s\boldsymbol\epsilon'\),要找 \(\mathbf x_s\mid\mathbf x_t\) 的形式 \(\mathbf x_s=a\,\mathbf x_t+b\,\mathbf z\) 使兩邊相符:訊號係數 \(a\alpha_t=\alpha_s\) ⟹ \(a=\alpha_{s|t}\);雜訊變異數 \(a^2\sigma_t^2+b^2=\sigma_s^2\) ⟹ \(b^2=\sigma_s^2-\alpha_{s|t}^2\sigma_t^2=\sigma_{s|t}^2\)。所以

$$p(\mathbf x_s\mid\mathbf x_t)=\mathcal N\big(\mathbf x_s;\alpha_{s|t}\mathbf x_t,\sigma_{s|t}^2\mathbf I\big).$$

(\(\sigma_{s|t}^2\ge0\) 正是 \(\mathrm{SNR}(s)\le\mathrm{SNR}(t)\),又是第 3 節的合法條件。)

貝氏。\(p(\mathbf x_t\mid\mathbf x_s,\mathbf x)\propto p(\mathbf x_s\mid\mathbf x_t)\,p_t(\mathbf x_t\mid\mathbf x)\),兩個高斯相乘(和 B04 Lemma 的推導相同)。精確度:

$$\frac1{\sigma^2(s,t)}=\frac{\alpha_{s|t}^2}{\sigma_{s|t}^2}+\frac1{\sigma_t^2}=\frac{\alpha_{s|t}^2\sigma_t^2+\sigma_{s|t}^2}{\sigma_{s|t}^2\sigma_t^2}=\frac{\sigma_s^2}{\sigma_{s|t}^2\sigma_t^2}.$$

平均:\(\bm\mu=\sigma^2(s,t)\Big(\frac{\alpha_{s|t}}{\sigma_{s|t}^2}\mathbf x_s+\frac{\alpha_t}{\sigma_t^2}\mathbf x\Big)=\frac{\alpha_{s|t}\sigma_t^2}{\sigma_s^2}\mathbf x_s+\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}\mathbf x\)。

檢查:VP 且 \(t,s\) 是相鄰兩步時(\(\alpha=\bar\alpha\)、\(\sigma^2=1-\bar\alpha^2\)),這正好退化成 B04 的 Lemma。

雖然 \(p(\mathbf x_{t+\Delta t}\mid\mathbf x_t)\) 和 \(p_t(\mathbf x_t\mid\mathbf x_0)\) 在理論上等價,\(p_t(\mathbf x_t\mid\mathbf x_0)\) 常常扮演更核心的角色;上面逐步的前向核主要是用來得到封閉的反向核。所以近來的研究(Kingma et al. 2021)偏好直接指定 \(p_t(\mathbf x_t\mid\mathbf x_0)\),因為它清楚、好解讀。

反向過程的建模、訓練與取樣

DDPM 的訓練目標(B04 的 ELBO)和建模框架,在這個一般化的設定下仍然適用。為了清楚,書沿用 Kingma et al. (2021),採用 \(\mathbf x\)-prediction,記作 \(\mathbf x_{\bm\phi}(\mathbf x_s,s)\)。等價的 \(\boldsymbol\epsilon\)-prediction \(\boldsymbol\epsilon_{\bm\phi}(\mathbf x_s,s)\) 也同樣成立,因為兩者有關係(如 B04)

$$\mathbf x_s=\alpha_s\mathbf x_{\bm\phi}(\mathbf x_s,s)+\sigma_s\boldsymbol\epsilon_{\bm\phi}(\mathbf x_s,s),\qquad\text{對任何給定的 }\mathbf x_s\sim q_s.$$

建模與 diffusion 損失 \(\mathcal L_{\text{diffusion}}\)。和 DDPM 一樣,條件分佈 \(p(\mathbf x_t\mid\mathbf x_s,\mathbf x)\) 啟發我們把乾淨訊號 \(\mathbf x\) 換成可學的預測器 \(\mathbf x_{\bm\phi}(\mathbf x_s,s)\),得到參數化的反向模型

$$p_{\bm\phi}(\mathbf x_t\mid\mathbf x_s):=\mathcal N\big(\mathbf x_t;\bm\mu_{\bm\phi}(\mathbf x_s,s,t),\sigma^2(s,t)\mathbf I\big),\qquad\bm\mu_{\bm\phi}(\mathbf x_s,s,t)=\frac{\alpha_{s|t}\sigma_t^2}{\sigma_s^2}\mathbf x_s+\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}\mathbf x_{\bm\phi}(\mathbf x_s,s).$$

給定上面的前向核,\(\mathcal L_{\text{diffusion}}(\mathbf x;\bm\phi)\) 裡的 KL 化簡成一個加權的回歸損失:

$$\mathcal D_{\mathrm{KL}}\big(p(\mathbf x_t\mid\mathbf x_s,\mathbf x_0)\,\Vert\,p_{\bm\phi}(\mathbf x_t\mid\mathbf x_s)\big)=\frac1{2\sigma^2(s,t)}\big\Vert\bm\mu(\mathbf x_s,\mathbf x_0;s,t)-\bm\mu_{\bm\phi}(\mathbf x_s,s,t)\big\Vert_2^2=\frac12\big(\mathrm{SNR}(t)-\mathrm{SNR}(s)\big)\big\Vert\mathbf x_0-\mathbf x_{\bm\phi}(\mathbf x_s,s)\big\Vert_2^2,$$

其中 \(\mathbf x_s=\alpha_s\mathbf x_0+\sigma_s\boldsymbol\epsilon\),\(\mathbf x_0\sim p_{\text{data}}\)、\(\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)\),\(\mathrm{SNR}(s):=\alpha_s^2/\sigma_s^2\) 是時間 \(s\) 的訊號雜訊比。

第二個等號:權重怎麼變成 SNR 的差

兩個平均只差在 \(\mathbf x\) 那一項:\(\bm\mu-\bm\mu_{\bm\phi}=\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}(\mathbf x_0-\mathbf x_{\bm\phi})\)。所以權重是

$$\frac1{2\sigma^2(s,t)}\cdot\frac{\alpha_t^2\sigma_{s|t}^4}{\sigma_s^4}=\frac{\sigma_s^2}{2\sigma_{s|t}^2\sigma_t^2}\cdot\frac{\alpha_t^2\sigma_{s|t}^4}{\sigma_s^4}=\frac{\alpha_t^2\sigma_{s|t}^2}{2\sigma_t^2\sigma_s^2}.$$

用 \(\alpha_t^2\sigma_{s|t}^2=\alpha_t^2\sigma_s^2-\alpha_s^2\sigma_t^2\):

$$\frac{\alpha_t^2\sigma_s^2-\alpha_s^2\sigma_t^2}{2\sigma_t^2\sigma_s^2}=\frac12\Big(\frac{\alpha_t^2}{\sigma_t^2}-\frac{\alpha_s^2}{\sigma_s^2}\Big)=\frac12\big(\mathrm{SNR}(t)-\mathrm{SNR}(s)\big).$$

因為 \(t\lt s\) 且 SNR 非遞增,權重 \(\ge0\)。

書中的 Remark:VDM 的連續時間極限Kingma et al. (2021) 研究上式在 \(t\to s\) 的連續時間極限,得到 $$\mathcal L^\infty_{\text{VDM}}(\mathbf x_0)=-\frac12\,\mathbb E_{s,\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)}\,\mathrm{SNR}'(s)\,\big\Vert\mathbf x_0-\mathbf x_{\bm\phi}(\mathbf x_s,s)\big\Vert_2^2.$$ 這個設定還引入了可學的雜訊時程;雖然它可以推廣到連續資料以外,這些延伸超出書目前的討論範圍。
為什麼是 \(-\mathrm{SNR}'(s)\),以及它告訴我們什麼

把 \([0,T]\) 切成很多小段,每段 \(t=s-\Delta s\):\(\mathrm{SNR}(t)-\mathrm{SNR}(s)\approx-\mathrm{SNR}'(s)\Delta s\)。把所有段的 KL 加起來就是對 \(s\) 的積分(再寫成 \(s\) 均勻抽樣的期望,差一個常數倍 \(T\))。因為 SNR 遞減,\(-\mathrm{SNR}'\ge0\)。

一個值得注意的推論(Kingma et al. 2021):換變數 \(v=\mathrm{SNR}(s)\),\(-\mathrm{SNR}'(s)ds=-dv\),連續時間的 ELBO 只依賴 SNR 兩端的值 \(\mathrm{SNR}(0)\)、\(\mathrm{SNR}(T)\),和中間怎麼走無關(只要網路寫成 SNR 的函數)。時程的形狀只影響訓練時蒙地卡羅估計的變異數。

取樣。和 DDPM 類似,用上面的參數化核取樣:

$$\mathbf x_t=\underbrace{\frac{\alpha_{s|t}\sigma_t^2}{\sigma_s^2}\mathbf x_s+\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}\mathbf x_{\bm\phi^\times}(\mathbf x_s,s)}_{\bm\mu_{\bm\phi^\times}(\mathbf x_s,t,s)}+\sigma_{s|t}\frac{\sigma_t}{\sigma_s}\boldsymbol\epsilon_s,\qquad\boldsymbol\epsilon_s\sim\mathcal N(\mathbf 0,\mathbf I).$$

Demo B一般化的 DDPM 取樣:同一個公式,三種路徑轉述者補充

資料和 B08、B09 相同:\(0.6\,\mathcal N(1.2,0.25^2)+0.4\,\mathcal N(-1,0.2^2)\)。用上面的取樣公式,從 \(s=T\) 到 \(t=0\) 均勻切 \(N\) 段,\(\mathbf x_{\bm\phi^\times}\) 換成這個資料可以精確算出的 \(\mathbb E[\mathbf x_0\mid\mathbf x_s]\)(最佳的 \(\mathbf x\)-prediction),所以看到的是取樣公式本身。2,000 個樣本從各自的先驗出發(VE 的先驗是 \(\mathcal N(0,50^2)\))。

t = 0 的樣本pdata
這個路徑、這個 N 下每一段的 KL 權重 ½(SNR(t) − SNR(s))(對數尺度;從右邊的第一段到左邊的最後一段)

瀏覽器實測(\(W_1\) 是和 \(p_{\text{data}}\) 的 Wasserstein-1 距離;直接從 \(p_{\text{data}}\) 抽同樣多的樣本約 0.02,這是抽樣誤差的底):

路徑\(N=5\)\(N=20\)\(N=100\)\(N=1000\)
VP64.5%,0.29060.5%,0.05460.2%,0.02459.7%,0.014
VE66.9%,0.29061.2%,0.05961.2%,0.03259.9%,0.008
線性插值64.3%,0.16159.8%,0.03461.1%,0.03159.0%,0.025
  • 同一個公式、三種路徑都對:步數夠多時,三種路徑的結果都落在抽樣誤差附近。取樣公式只用到 \(\alpha_t,\sigma_t\),完全不需要知道 \(f\)、\(g\)。
  • 步數很少時,三種路徑差很多:\(N=5\) 時線性插值的距離是 0.161,VP、VE 都是 0.290。這裡的時間是均勻切的,同樣的 5 步在不同路徑上對應很不一樣的 SNR 區間(下圖是 VP 的每段權重,跨了好幾個數量級)。路徑和時間點怎麼選才適合少步數取樣,是第 9 章(B24 起)的主題;這裡只是一個觀察,不代表線性插值在一般情況下一定比較好。
  • 最後一段直接輸出 \(\hat{\mathbf x}\):\(t=0\) 時 \(\sigma_0=0\),公式的第一項和雜訊項都是 0,第二項的係數是 1,所以最後一步就是 \(\mathbf x_0=\mathbf x_{\bm\phi^\times}(\mathbf x_s,s)\)。

05(選讀)用邊際化與貝氏定理看 Fokker–Planck 與反向 SDE書 §4.6

這一節從機率的角度看 Fokker–Planck 方程和反向 SDE 的結構:用邊際化技巧和貝氏定理這些基本工具,說明隨機過程的統計寫法和對應的微分方程之間的連結。書強調:這裡的「推導」不是數學上嚴格的證明,而是啟發式的論證,用來傳達背後的連結。

從轉移核的邊際化得到 Fokker–Planck 方程

給定前向轉移機率(B08)\(p(\mathbf x_{t+\Delta t}\mid\mathbf x_t)=\mathcal N\big(\mathbf x_{t+\Delta t};\mathbf x_t+\mathbf f(\mathbf x_t,t)\Delta t,\,g^2(t)\Delta t\,\mathbf I\big)\),以及邊際分佈 \(p_t(\mathbf x_t)\)、\(p_{t+\Delta t}(\mathbf x_{t+\Delta t})\),目標是推出支配 \(p_t\) 時間演化的 Fokker–Planck 方程。

變數變換。由 Markov 性,時間 \(t+\Delta t\) 的邊際可以寫成對前一個狀態 \(\mathbf x_t\) 的積分(Chapman–Kolmogorov 方程):

$$p_{t+\Delta t}(\mathbf x)=\int\mathcal N\big(\mathbf x;\mathbf y+\mathbf f(\mathbf y,t)\Delta t,\,g^2(t)\Delta t\,\mathbf I\big)\,p_t(\mathbf y)\,d\mathbf y.$$

引入新變數 \(\mathbf u:=\mathbf y+\mathbf f(\mathbf y,t)\Delta t\),讓高斯以 \(\mathbf u\) 為中心。\(\Delta t\) 小時這個映射可逆,而且

$$\mathbf y=\mathbf u-\mathbf f(\mathbf u,t)\Delta t+\mathcal O(\Delta t^2),\qquad\Big|\det\frac{\partial\mathbf y}{\partial\mathbf u}\Big|=1-(\nabla_{\mathbf u}\cdot\mathbf f)(\mathbf u,t)\,\Delta t+\mathcal O(\Delta t^2).$$

因此變數變換公式給出

$$p_{t+\Delta t}(\mathbf x)=\int\mathcal N\big(\mathbf x;\mathbf u,g^2(t)\Delta t\,\mathbf I\big)\Big[p_t(\mathbf u)-\Delta t\,\mathbf f(\mathbf u,t)\cdot\nabla_{\mathbf u}p_t(\mathbf u)-\Delta t\,(\nabla_{\mathbf u}\cdot\mathbf f)(\mathbf u,t)\,p_t(\mathbf u)\Big]d\mathbf u+\mathcal O(\Delta t^2).$$
中括號是怎麼來的

\(d\mathbf y=|\det\partial\mathbf y/\partial\mathbf u|\,d\mathbf u\),而 \(p_t(\mathbf y)=p_t(\mathbf u-\mathbf f\Delta t)=p_t(\mathbf u)-\Delta t\,\mathbf f\cdot\nabla p_t(\mathbf u)+\mathcal O(\Delta t^2)\)(一階 Taylor)。兩者相乘,再乘上 \(1-(\nabla\cdot\mathbf f)\Delta t\),保留到 \(\Delta t\) 一階就是中括號。行列式那一步:\(\det(\mathbf I-\Delta t\,\nabla\mathbf f)=1-\Delta t\operatorname{Tr}(\nabla\mathbf f)+\mathcal O(\Delta t^2)\),trace 就是散度。

Taylor 展開。對任何平滑函數 \(\phi:\mathbb R^D\to\mathbb R\) 和尺度 \(\sigma>0\),若 \(\mathbf z\sim\mathcal N(\mathbf 0,\mathbf I)\),下面的近似成立(叫做 Taylor–Gaussian 平滑公式):

$$\int\mathcal N(\mathbf x;\mathbf u,\sigma^2\mathbf I)\,\phi(\mathbf u)\,d\mathbf u=\mathbb E\big[\phi(\mathbf x+\sigma\mathbf z)\big]=\phi(\mathbf x)+\frac{\sigma^2}2\Delta_{\mathbf x}\phi(\mathbf x)+\mathcal O(\sigma^4).$$

這是因為 Taylor 展開 \(\phi(\mathbf x+\sigma\mathbf z)=\phi(\mathbf x)+\sigma\nabla\phi(\mathbf x)\cdot\mathbf z+\frac{\sigma^2}2\mathbf z^\top\nabla^2\phi(\mathbf x)\mathbf z+\mathcal O(\sigma^3)\),而 \(\mathbb E[\mathbf z]=\mathbf 0\)、\(\mathbb E[\mathbf z\mathbf z^\top]=\mathbf I\)(\(\mathbb E[\mathbf z^\top\mathbf A\mathbf z]=\operatorname{Tr}\mathbf A\),B06 的 Hutchinson 恆等式)。

把它套用在 \(\phi=p_t\)、\(\phi=\mathbf f\cdot\nabla p_t\)、\(\phi=(\nabla\cdot\mathbf f)p_t\) 上,取 \(\sigma^2=g^2(t)\Delta t\),得到

$$p_{t+\Delta t}(\mathbf x)-p_t(\mathbf x)=-\Delta t\,\mathbf f\cdot\nabla p_t-\Delta t\,(\nabla\cdot\mathbf f)\,p_t+\frac{g^2(t)}2\Delta t\,\Delta p_t+\mathcal O(\Delta t^2)=-\Delta t\,\nabla\cdot\big(\mathbf f\,p_t\big)+\frac{g^2(t)}2\Delta t\,\Delta p_t+\mathcal O(\Delta t^2).$$

除以 \(\Delta t\)、令 \(\Delta t\to0\),就是 Fokker–Planck 方程。書在附錄 C(B35)給出基於 Itô 的推導,補足這個離散時間的觀點。

轉述者注:後兩個 \(\phi\) 前面已經有 \(\Delta t\),平滑只會多出 \(\mathcal O(\Delta t^2)\) 的項,所以只有 \(\phi=p_t\) 那一項的 \(\tfrac{\sigma^2}2\Delta p_t\) 留下來,這就是擴散項。另外 \(\mathbf f\cdot\nabla p+(\nabla\cdot\mathbf f)p=\nabla\cdot(\mathbf fp)\) 是乘積法則。

反向 SDE 為什麼長這個樣子?

反向 SDE 的嚴格推導很技術性,需要深入 Fokker–Planck 方程的性質。但它的形式可以透過貝氏定理直覺地理解。這裡給一個啟發式推導,說明反向 SDE 為什麼是那個形式、score 為什麼會出現(書的註腳:這個推導受 Alexandre Thiéry 的一篇網路筆記啟發)。

用貝氏定理反轉。目標是先求離散時間的反向轉移核 \(p(\mathbf x_t\mid\mathbf x_{t+\Delta t})\),再取 \(\Delta t\to0\)。由貝氏定理:

$$p(\mathbf x_t\mid\mathbf x_{t+\Delta t})=p(\mathbf x_{t+\Delta t}\mid\mathbf x_t)\,\frac{p_t(\mathbf x_t)}{p_{t+\Delta t}(\mathbf x_{t+\Delta t})}=p(\mathbf x_{t+\Delta t}\mid\mathbf x_t)\exp\big(\log p_t(\mathbf x_t)-\log p_{t+\Delta t}(\mathbf x_{t+\Delta t})\big).$$

前向轉移核同上。

Taylor 展開。為了處理指數項,做一階 Taylor 展開。關鍵是在 \((\mathbf x_t,t)\) 附近同時對空間和時間展開:

$$\log p_{t+\Delta t}(\mathbf x_{t+\Delta t})=\log p_t(\mathbf x_t)+\nabla_{\mathbf x}\log p_t(\mathbf x_t)\cdot(\mathbf x_{t+\Delta t}-\mathbf x_t)+\frac{\partial\log p_t(\mathbf x_t)}{\partial t}\Delta t+\mathcal O(\Vert\mathbf h\Vert_2^2),$$

其中 \(\mathbf h:=(\mathbf x_{t+\Delta t}-\mathbf x_t,\Delta t)\)。因此

$$\log p_t(\mathbf x_t)-\log p_{t+\Delta t}(\mathbf x_{t+\Delta t})=-\nabla_{\mathbf x}\log p_t(\mathbf x_t)\cdot(\mathbf x_{t+\Delta t}-\mathbf x_t)-\frac{\partial\log p_t(\mathbf x_t)}{\partial t}\Delta t+\mathcal O(\Vert\mathbf h\Vert_2^2).$$

對擴散過程,\(\mathbf x_{t+\Delta t}-\mathbf x_t=\mathcal O_p(\sqrt{\Delta t})\),所以空間的二階 Taylor 項一般是 \(\mathcal O_p(\Delta t)\) 的量級。書強調:下面的計算應該理解成「最低階的」啟發式。

代入反向轉移。

$$p(\mathbf x_t\mid\mathbf x_{t+\Delta t})=\frac1{(2\pi g^2(t)\Delta t)^{D/2}}\exp\Big(-\frac{\Vert\mathbf x_{t+\Delta t}-\mathbf x_t-\mathbf f(\mathbf x_t,t)\Delta t\Vert_2^2}{2g^2(t)\Delta t}\Big)\cdot\exp\Big(-\nabla_{\mathbf x}\log p_t(\mathbf x_t)\cdot(\mathbf x_{t+\Delta t}-\mathbf x_t)-\frac{\partial\log p_t(\mathbf x_t)}{\partial t}\Delta t+\mathcal O(\Delta t)\Big).$$

代數整理。關鍵是在指數裡配方。令 \(\bm\delta:=\mathbf x_{t+\Delta t}-\mathbf x_t\)、\(\bm\mu:=\mathbf f(\mathbf x_t,t)\Delta t\),則(同乘 \(2g^2\Delta t\) 之後的分子)

$$\Vert\bm\delta-\bm\mu\Vert_2^2+2g^2(t)\Delta t\,\nabla_{\mathbf x}\log p_t(\mathbf x_t)\cdot\bm\delta=\big\Vert\bm\delta-\big[\bm\mu-g^2(t)\Delta t\,\nabla_{\mathbf x}\log p_t(\mathbf x_t)\big]\big\Vert_2^2-\big\Vert g^2(t)\Delta t\,\nabla_{\mathbf x}\log p_t(\mathbf x_t)\big\Vert_2^2+\mathcal O(\Delta t^2).$$
配方的每一步
$$\Vert\bm\delta-\bm\mu\Vert^2+2c\,\mathbf s\cdot\bm\delta=\Vert\bm\delta\Vert^2-2\bm\delta\cdot\bm\mu+\Vert\bm\mu\Vert^2+2c\,\mathbf s\cdot\bm\delta=\Vert\bm\delta\Vert^2-2\bm\delta\cdot(\bm\mu-c\mathbf s)+\Vert\bm\mu\Vert^2,$$

其中 \(c=g^2\Delta t\)、\(\mathbf s=\nabla\log p_t\)。再補成平方:\(\Vert\bm\delta-(\bm\mu-c\mathbf s)\Vert^2=\Vert\bm\delta\Vert^2-2\bm\delta\cdot(\bm\mu-c\mathbf s)+\Vert\bm\mu-c\mathbf s\Vert^2\),差的是 \(\Vert\bm\mu\Vert^2-\Vert\bm\mu-c\mathbf s\Vert^2=2c\,\bm\mu\cdot\mathbf s-c^2\Vert\mathbf s\Vert^2\)。因為 \(\bm\mu\)、\(c\) 都是 \(\mathcal O(\Delta t)\),這個差是 \(\mathcal O(\Delta t^2)\)。書把它寫成 \(-\Vert c\mathbf s\Vert^2\),另一項 \(2c\,\bm\mu\cdot\mathbf s\) 同樣是 \(\mathcal O(\Delta t^2)\),一起被吸收進誤差項。

代回去:

$$p(\mathbf x_t\mid\mathbf x_{t+\Delta t})=\frac1{(2\pi g^2(t)\Delta t)^{D/2}}\exp\Big(-\frac{\big\Vert\mathbf x_{t+\Delta t}-\mathbf x_t-\big[\mathbf f(\mathbf x_t,t)-g^2(t)\nabla_{\mathbf x}\log p_t(\mathbf x_t)\big]\Delta t\big\Vert_2^2}{2g^2(t)\Delta t}\Big)\cdot\exp(\mathcal O(\Delta t))=\mathcal N\big(\mathbf x_t;\,\mathbf x_{t+\Delta t}-\big[\mathbf f(\mathbf x_t,t)-g^2(t)\nabla_{\mathbf x}\log p_t(\mathbf x_t)\big]\Delta t,\,g^2(t)\Delta t\,\mathbf I\big)\cdot(1+\mathcal O(\Delta t)).$$

配方多出來的 \(\Vert g^2(t)\Delta t\,\nabla\log p_t\Vert^2\) 是 \(\mathcal O(\Delta t^2)\),可以吸收進誤差項。同樣地,時間導數項 \(\frac{\partial\log p_t}{\partial t}\Delta t\) 是 \(\mathcal O(\Delta t)\),在連續極限會消失。

取 \(\Delta t\to0\) 的極限。當 \(\Delta t\approx0\),在平滑性的假設下有下面的近似:

$$\mathbf f(\mathbf x_t,t)\approx\mathbf f(\mathbf x_{t+\Delta t},t+\Delta t),\qquad g(t)\approx g(t+\Delta t),\qquad\nabla_{\mathbf x}\log p_t(\mathbf x_t)\approx\nabla_{\mathbf x}\log p_{t+\Delta t}(\mathbf x_{t+\Delta t})=\mathbf s(\mathbf x_{t+\Delta t},t+\Delta t).$$

用這些近似再整理,得到 \(p(\mathbf x_t\mid\mathbf x_{t+\Delta t})\) 大約是常態分佈:

$$\textbf{平均:}\ \mathbf x_{t+\Delta t}-\big[\mathbf f(\mathbf x_{t+\Delta t},t+\Delta t)-g^2(t+\Delta t)\,\mathbf s(\mathbf x_{t+\Delta t},t+\Delta t)\big]\Delta t,\qquad\textbf{共變異數:}\ g^2(t+\Delta t)\,\Delta t\,\mathbf I.$$

取 \(\Delta t\to0\) 的極限,就「推導」出了 B08 的反向 SDE。

這個推導和 B09 的高斯推導、B08 的 Langevin 類比怎麼對上

B09 在高斯資料下把同一件事做得精確:先驗是高斯,貝氏後驗可以完全算出,再展開。這裡則是對任意 \(p_t\) 把 \(\log p\) 做一階展開,相當於「在每個點附近把 \(p_t\) 當成局部的指數傾斜」,所以只是啟發式。兩者都看得出 score 從哪裡來:它是貝氏定理裡 \(p_t(\mathbf x_t)/p_{t+\Delta t}(\mathbf x_{t+\Delta t})\) 這個比值的一階項,告訴反向的一步該往密度高的方向偏多少。

Demo C數值檢查 Fokker–Planck 方程轉述者補充

還是同一個兩高斯混合、VP SDE。\(p_t\) 有封閉形式,所以可以直接比較兩條曲線:左邊 \(\partial_tp_t(x)\)(對 \(t\) 的數值微分),和右邊 \(-\partial_x(fp_t)+\tfrac12g^2\partial_x^2p_t\)(對 \(x\) 的解析微分)。也畫出把擴散項改寫成漂移後的 \(-\partial_x(v\,p_t)\),\(v=f-\tfrac12g^2\partial_x\log p_t\)。

pt(示意高度)∂tpt−∂x(f p) + ½g²∂²xp−∂x(v p)

瀏覽器實測:在 \(t=0.01,0.1,0.5,0.9\),\(\partial_tp_t\) 和 Fokker–Planck 右邊的最大差距分別是 \(8.6\times10^{-8}\)、\(1.3\times10^{-8}\)、\(1.5\times10^{-10}\)、\(1.4\times10^{-11}\)(\(\partial_tp_t\) 本身的大小是 2.7、3.4、0.13、0.012),只剩數值微分的誤差;速度場寫法 \(-\partial_x(vp)\) 和右邊的差距也在 \(3.2\times10^{-7}\) 以下。所以三條曲線完全重疊。也可以從圖上讀出 Fokker–Planck 在說什麼:\(t\) 小時,兩個峰的頂端 \(\partial_tp\lt0\)(峰在變矮)、峰的兩側 \(\partial_tp\gt0\)(往外攤開);\(t\) 大時整條曲線都很小,分佈已經接近穩定的 \(\mathcal N(0,1)\)。

06本章結語書 §4.7

這一章是旅程中的關鍵時刻:把變分觀點和 score 觀點的離散時間 diffusion 過程,統一到單一、優雅的連續時間框架裡。我們看到 DDPM 和 NCSN 都可以理解成隨機微分方程(SDE)的離散化,只是漂移和波動係數不同。

這個框架的基石是對應的反向 SDE 的存在:它正式定義了一個把雜訊破壞倒回去的生成過程。關鍵是,這個反向過程的漂移只依賴一個未知量:每個時間點邊際資料分佈的 score function \(\nabla_{\mathbf x}\log p_t(\mathbf x)\)。這個洞見鞏固了 score function 在生成建模裡的核心地位。

此外,我們引入了一個純粹確定性的對應物:probability flow ODE(PF-ODE),它的解軌跡沿著和 SDE 相同的邊際密度 \(\{p_t\}\) 演化。這個了不起的一致性由背後的 Fokker–Planck 方程保證。深遠的意涵是:複雜的生成任務根本上等價於求解一條微分方程。訓練化約成學習定義這條方程向量場的 score function,取樣則變成數值積分的問題。

PF-ODE 這個純粹確定性的流,為 diffusion model 的第三個、也是最後一個觀點搭起了強大的橋。「學一個由速度場支配的確定性變換」這個概念,正是近來一大類生成模型的核心原理。下一章將:

  1. 從 Normalizing Flow 和 Neural ODE 的源頭出發,探索這個 flow 的觀點(B11)。
  2. 說明這個觀點怎麼導向現代的 Flow Matching 框架:直接學一個速度場,在分佈之間運送樣本(B12–B14)。

最終我們會看到,從隨機原理推出來的確定性 PF-ODE,也可以從一個完全不同的、flow 的源頭建構和推廣出來,完成 diffusion 建模的統一圖像。

與 CS236 的對照

本頁CS236 複習頁
VE/VP SDE、擾動核、NCSN 與 DDPM 的連續版本第 14 講
DDPM 的反向核、ELBO、SNR 與損失的權重第 16 講
Flow Matching、rectified flow 的線性路徑(下一章)第 17 講
線性 ODE、積分因子補充課 B
Chapman–Kolmogorov、Fokker–Planck補充課 F

常見誤解

誤解:「VE 和 VP 是兩種不同的模型」。它們只是同一個框架下的兩種前向時程;訓練(DSM)和取樣(反向 SDE/PF-ODE)的公式完全相同,差別只在 \(\mathbf f\)、\(g\),或等價地 \(\alpha_t\)、\(\sigma_t\)(第 1、3 節、Demo B)。
誤解:「任何 \(\alpha_t\)、\(\sigma_t\) 都可以拿來當 diffusion」。SNR \(\alpha_t^2/\sigma_t^2\) 必須非遞增,否則 \(g^2\lt0\),沒有對應的 SDE(第 3 節、Demo A 的反例)。
誤解:「VP SDE 在 \(t=1\) 時已經完全變成雜訊」。\(\beta\) 有界時 \(\alpha_1=e^{-5.025}\approx0.0066\gt0\),只是可以忽略;要在有限時間恰好 \(\alpha_T=0\),\(f\) 和 \(g\) 必須在終點發散(書的 Remark、線性插值的例子)。
誤解:「SNR 加權的損失和 \(\boldsymbol\epsilon\)-prediction 的損失學到不同的東西」。不同的權重只改變各時間的重要性;每個時間的最佳 \(\mathbf x\)-prediction 都是 \(\mathbb E[\mathbf x_0\mid\mathbf x_s]\),兩種預測又透過 \(\mathbf x_s=\alpha_s\mathbf x_{\bm\phi}+\sigma_s\boldsymbol\epsilon_{\bm\phi}\) 互換(第 4 節)。
誤解:「第 5 節的推導就是反向 SDE 的證明」。書明說那是啟發式;嚴格的時間反轉要用 Anderson (1982) 或 B09 的 Fokker–Planck 論證。

自我測驗

1. 寫出 VE 和 VP SDE 的 \(\mathbf f\)、\(g\)、擾動核、先驗。
VE:\(\mathbf f=\mathbf 0\)、\(g=\sqrt{d\sigma^2/dt}\)、\(\mathcal N(\mathbf x_0,(\sigma^2(t)-\sigma^2(0))\mathbf I)\)、\(\mathcal N(\mathbf 0,\sigma^2(T)\mathbf I)\)。VP:\(\mathbf f=-\tfrac12\beta\mathbf x\)、\(g=\sqrt\beta\)、\(\mathcal N(e^{-B/2}\mathbf x_0,(1-e^{-B})\mathbf I)\)、\(\mathcal N(\mathbf 0,\mathbf I)\)。
2. 解 \(P'=-\beta P+\beta\),\(P(0)=0\)。
積分因子 \(e^{B}\):\((Pe^B)'=\beta e^B=(e^B)'\),所以 \(P=1-e^{-B}\)。
3. 給定 \(\alpha_t,\sigma_t\),\(f\) 和 \(g^2\) 是什麼?什麼條件下合法?
\(f=(\log\alpha_t)'\),\(g^2=(\sigma_t^2)'-2(\log\alpha_t)'\sigma_t^2=-2\sigma_t^2\lambda_t'\)。合法若且唯若 \(g^2\ge0\),即 \(\lambda_t=\log(\alpha_t/\sigma_t)\) 非遞增(SNR 不增加)。
4. 線性插值 \(\alpha_t=1-t\)、\(\sigma_t=t\) 的 \(f\)、\(g^2\)?為什麼在 \(t\to1\) 發散?
\(f=-1/(1-t)\),\(g^2=2t/(1-t)\)。要在有限時間 \(\alpha_1=0\),需要 \(\int_0^1f=-\infty\),所以 \(f\) 和(對應的)\(g\) 必須奇異。
5. 寫出一般 \(\alpha,\sigma\) 下的反向條件核。
\(\mathcal N\big(\frac{\alpha_{s|t}\sigma_t^2}{\sigma_s^2}\mathbf x_s+\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}\mathbf x,\ \sigma_{s|t}^2\frac{\sigma_t^2}{\sigma_s^2}\mathbf I\big)\),\(\alpha_{s|t}=\alpha_s/\alpha_t\)、\(\sigma_{s|t}^2=\sigma_s^2-\alpha_{s|t}^2\sigma_t^2\)。
6. 為什麼 KL 的權重是 \(\tfrac12(\mathrm{SNR}(t)-\mathrm{SNR}(s))\)?
兩個平均只差 \(\frac{\alpha_t\sigma_{s|t}^2}{\sigma_s^2}(\mathbf x_0-\mathbf x_{\bm\phi})\);平方除以 \(2\sigma^2(s,t)\) 得 \(\frac{\alpha_t^2\sigma_{s|t}^2}{2\sigma_t^2\sigma_s^2}\),再用 \(\alpha_t^2\sigma_{s|t}^2=\alpha_t^2\sigma_s^2-\alpha_s^2\sigma_t^2\)。
7.(選讀)Fokker–Planck 的擴散項 \(\tfrac12g^2\Delta p\) 在啟發式推導裡從哪裡來?
Chapman–Kolmogorov 裡對 \(p_t\) 做高斯平滑:\(\mathbb E[\phi(\mathbf x+\sigma\mathbf z)]=\phi+\tfrac{\sigma^2}2\Delta\phi+\mathcal O(\sigma^4)\),\(\sigma^2=g^2\Delta t\)。