擴散模型原理 B22 · Training-free guidance 與逆問題
The Principles of Diffusion Models · §8.4

Training-free guidance:不重新訓練,只在取樣時把條件加進去

CG 要另外訓練一個吃雜訊輸入的分類器,CFG 要在訓練時就加入條件。Training-free guidance 兩者都不做:手上只有一個訓練好的無條件 diffusion model 和一個衡量「符不符合條件」的損失,就在取樣的每一步用損失的梯度修正。修正可以加在預測的乾淨樣本上(資料空間),也可以加在 score 上(雜訊空間)。這一頁接著回答一個容易被忽略的問題:這樣改過的動態,最後到底生成什麼分佈?答案是一般不是你以為的那個,原因是不同時刻的密度必須滿足同一條 Fokker–Planck 方程。最後用逆問題(去模糊、補洞、超解析)當應用:ILVR 直接改樣本,DPS 近似量測的概似 score;以及一個監督式的逐步修復方法 InDI,它在高斯去噪的特例下就是 PF-ODE。

書的範圍:§8.4(含開頭的設定與記號、§8.4.1–8.4.3) 閱讀時間:約 45 分鐘

讀完這頁你應該能夠

  1. 寫出 DDIM 更新的「資料空間 + 雜訊空間」形式,並指出 training-free guidance 的兩種修正各加在哪裡。
  2. 說明雜訊空間的修正為什麼要對 \(\hat{\mathbf x}_0(\mathbf x_t)\) 做反向傳播,以及它在什麼條件下還原貝氏的 guidance 方向。
  3. 推出傾斜密度族要成為一條邊際路徑所需的 Fokker–Planck 相容條件,並說明 \(w_t\equiv0\) 和精確 CG(\(w_t\equiv1\))為什麼滿足它。
  4. 寫出逆問題的貝氏分解,區分「直接修改樣本」(ILVR)和「近似概似 score」(DPS)兩種策略,並推出 DPS 的梯度公式。
  5. 說明 InDI 的訓練目標和修復迭代,並推出它在高斯去噪下就是 PF-ODE。

前置知識

  • B21:guidance 的共同模板 \(\nabla\log p_t+w_t\mathcal G_t\)、guidance 位勢 \(\mathbf h_t\)、傾斜密度 \(\widetilde p_t^{\text{tilt}}\)。這一頁直接接著用。
  • B06:Tweedie 公式 \(\mathbb E[\mathbf x_0\mid\mathbf x_t]=\big(\mathbf x_t+\sigma_t^2\nabla\log p_t(\mathbf x_t)\big)/\alpha_t\);B16:\(\mathbf x\)、\(\bm\epsilon\)、score 預測的換算。
  • B09、B17:Fokker–Planck 方程,以及「PF-ODE 生成 \(\{p_t\}\) 是因為 \(\{p_t\}\) 滿足 Fokker–Planck」。數學背景見補充課 F。
時間方向與記號。diffusion 的時鐘:\(t=0\) 是資料、\(t=T\) 是雜訊,取樣從 \(T\) 走到 0。書在這一節把一步取樣寫成 \(\mathbf x_{t\to t-1}\),意思是「從時刻 \(t\) 走到前一個(較乾淨的)時刻」。\(\bm\phi^\times\) 表示訓練好、固定不動的 diffusion model 參數。第 5 節的 InDI 另有自己的時間:\(t=0\) 是乾淨目標、\(t=1\) 是破壞過的觀測。

「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。

01Training-free guidance 的設定書 §8.4 開頭

Training-free guidance 用一個外部的條件、損失或量測目標,修改一個固定的預訓練 diffusion model 的取樣動態,而不重新訓練 diffusion model 本身。B21 的貝氏分解在 score 空間給了動機:guidance 就是在無條件 score 上加一個依賴條件的方向。實務上,可以用一個特定任務的損失,建構對「預測的乾淨樣本」或對「取樣時用的 score」的修正。

書的順序是:先介紹這兩種一般形式(第 2 節),再問這種用代理方向引導的動態實際上生成什麼分佈(第 3 節),最後看逆問題上的代表性 training-free 方法(第 4 節)。

設定與記號

令 \(\mathbf c\) 是條件變數。假設手上有一個預訓練的 diffusion model \(\mathbf s_{\bm\phi^\times}(\mathbf x_t,t)\),用 score 預測表示(書的註腳:為了簡單,這裡用 score 和 \(\mathbf x\)-預測兩種參數化;\(\bm\epsilon\)-預測等其他參數化可以類似處理)。另外給一個任務損失

$$\ell(\cdot,\mathbf c):\mathbb R^D\to\mathbb R,$$

衡量和想要的條件的不一致程度:\(\ell(\mathbf x,\mathbf c)\) 越小,越符合條件。例子包括和參考目標的感知距離,或從一個預訓練表示(例如 CLIP;Radford et al. 2021)得到的特徵空間距離或負相似度。

考慮標準的線性–高斯前向加噪核 \(p_t(\cdot\mid\mathbf x_0):=\mathcal N(\cdot;\alpha_t\mathbf x_0,\sigma_t^2\mathbf I)\)。書借用第 9 章(B25)才正式推導的 DDIM 更新當具體例子:

$$\mathbf x_{t\to t-1}=\alpha_{t-1}\underbrace{\hat{\mathbf x}_0(\mathbf x_t)}_{\text{資料空間}}-\sigma_{t-1}\sigma_t\underbrace{\hat{\mathbf s}(\mathbf x_t)}_{\text{雜訊空間}},$$

其中 \(\hat{\mathbf x}_0(\mathbf x_t):=\mathbf x_{\bm\phi^\times}(\mathbf x_t,t)\) 是乾淨的 \(\mathbf x\)-預測,\(\hat{\mathbf s}(\mathbf x_t):=\mathbf s_{\bm\phi^\times}(\mathbf x_t,t)\) 是雜訊等級 \(t\) 的 score 預測。

這個 DDIM 更新從哪裡來

DDIM 的想法(B25 詳細推導)是:從 \(\mathbf x_t\) 估出乾淨樣本 \(\hat{\mathbf x}_0\) 和雜訊 \(\hat{\bm\epsilon}\),滿足 \(\mathbf x_t=\alpha_t\hat{\mathbf x}_0+\sigma_t\hat{\bm\epsilon}\);再用同樣的 \(\hat{\mathbf x}_0\)、\(\hat{\bm\epsilon}\) 重新組合到下一個雜訊等級:

$$\mathbf x_{t\to t-1}=\alpha_{t-1}\hat{\mathbf x}_0+\sigma_{t-1}\hat{\bm\epsilon}.$$

B16 的換算給出 \(\hat{\bm\epsilon}=-\sigma_t\hat{\mathbf s}\)(因為 \(\nabla\log p_t(\mathbf x_t\mid\mathbf x_0)=-(\mathbf x_t-\alpha_t\mathbf x_0)/\sigma_t^2=-\bm\epsilon/\sigma_t\))。代入就是 \(\alpha_{t-1}\hat{\mathbf x}_0-\sigma_{t-1}\sigma_t\hat{\mathbf s}\)。第一項只用到「預測的乾淨樣本」,第二項只用到「score」,所以書把它們分別標成資料空間和雜訊空間。

02兩種修正:資料空間與雜訊空間書 §8.4.1

常見的策略是用任務損失的梯度,修改取樣更新裡的「預測的乾淨樣本」或「score 項」。為了區分這兩種操作,定義資料空間的方向

$$\mathcal G_t^{\text{data}}(\mathbf x_t,\mathbf c):=-\nabla_{\mathbf x_0}\ell(\mathbf x_0,\mathbf c)\Big|_{\mathbf x_0=\hat{\mathbf x}_0(\mathbf x_t)}.$$

雜訊空間的修正沿用 B21 介紹的 guidance 方向 \(\mathcal G_t(\mathbf x_t,\mathbf c):=\nabla_{\mathbf x_t}\log\mathbf h_t(\mathbf x_t;\mathbf c)\),\(\mathbf h_t\) 是一個正的 guidance 位勢,下面會給定。用上一節的 DDIM 更新,兩種修正可以寫在同一個式子裡:

$$\mathbf x_{t\to t-1}=\alpha_{t-1}\underbrace{\Big(\hat{\mathbf x}_0(\mathbf x_t)+{\color{orange}\eta_t^{\text{data}}\,\mathcal G_t^{\text{data}}(\mathbf x_t,\mathbf c)}\Big)}_{\text{A. 資料空間}}-\sigma_{t-1}\sigma_t\underbrace{\Big(\hat{\mathbf s}(\mathbf x_t)+{\color{orange}\eta_t^{\text{latent}}\,\mathcal G_t(\mathbf x_t,\mathbf c)}\Big)}_{\text{B. 雜訊空間}},$$

\(\eta_t^{\text{data}},\eta_t^{\text{latent}}\ge0\) 分別控制資料空間和雜訊空間修正的強度。

A. 資料空間的 guidance

資料空間的修正直接改進目前的乾淨估計:沿著讓任務損失下降的方向走一小步,

$$\hat{\mathbf x}_0(\mathbf x_t)\;\longmapsto\;\hat{\mathbf x}_0(\mathbf x_t)+\eta_t^{\text{data}}\,\mathcal G_t^{\text{data}}(\mathbf x_t,\mathbf c).$$

也就是先把乾淨預測往更符合條件的方向推,再把它用在接下來的取樣更新裡。需要多步最佳化時,這個修正可以重複做好幾次。代表性的例子有 MGPD(He et al. 2023)和 UGD(Bansal et al. 2023)。

B. 雜訊空間的 guidance

一個密切相關的策略,是把 guidance 直接加在取樣用的 score 上。沿用 B21 的位勢觀點,常見的建構是在目前的去噪估計上計算任務損失,取

$$\mathbf h_t(\mathbf x_t;\mathbf c):=\exp\Big(-\tau\,\ell\big(\hat{\mathbf x}_0(\mathbf x_t),\mathbf c\big)\Big),\qquad\tau>0.$$

由 \(\mathcal G_t\) 的定義,

$$\mathcal G_t(\mathbf x_t,\mathbf c)=\nabla_{\mathbf x_t}\log\mathbf h_t(\mathbf x_t;\mathbf c)=-\tau\,\nabla_{\mathbf x_t}\ell\big(\hat{\mathbf x}_0(\mathbf x_t),\mathbf c\big).$$

於是 DDIM 更新裡的 score 項變成 \(\hat{\mathbf s}(\mathbf x_t)+\eta_t^{\text{latent}}\mathcal G_t(\mathbf x_t,\mathbf c)\)。和 B21 的母體層級模板 \(\nabla\log p_t+w_t\mathcal G_t\) 對照:\(\eta_t^{\text{latent}}\) 扮演一般的 guidance 強度 \(w_t\),而 \(\hat{\mathbf s}(\mathbf x_t)\) 用學到的估計取代精確的無條件 score。

如果 \(\mathbf h_t(\mathbf x_t;\mathbf c)\) 和真正的條件概似 \(p_t(\mathbf c\mid\mathbf x_t)\) 成正比(比例常數和 \(\mathbf x_t\) 無關),\(\mathcal G_t(\mathbf x_t,\mathbf c)\) 就還原貝氏的 guidance 方向 \(\nabla_{\mathbf x_t}\log p_t(\mathbf c\mid\mathbf x_t)\)。對一般的任務損失,\(\mathcal G_t\) 則定義了一個代理(surrogate)guidance 方向。

計算 \(\mathcal G_t\) 需要對 \(\mathbf x\)-預測微分(鏈鎖律):

$$\mathcal G_t(\mathbf x_t,\mathbf c)=-\tau\Big[\nabla_{\mathbf x_t}\hat{\mathbf x}_0(\mathbf x_t)\Big]^\top\nabla_{\mathbf x_0}\ell(\mathbf x_0,\mathbf c)\Big|_{\mathbf x_0=\hat{\mathbf x}_0(\mathbf x_t)},$$

實務上這可能很花計算:要對整個 diffusion 網路做一次反向傳播。代表性的例子有 FreeDoM(Yu et al. 2023)、DPS(Chung et al. 2022)和 UGD(Bansal et al. 2023)。

A 和 B 差在哪裡:一個 Jacobian(轉述者補充)

把兩種修正對 \(\mathbf x_{t\to t-1}\) 的貢獻寫出來。A 貢獻 \(\alpha_{t-1}\eta_t^{\text{data}}\,(-\nabla_{\mathbf x_0}\ell)\);B 貢獻 \(-\sigma_{t-1}\sigma_t\eta_t^{\text{latent}}\,\mathcal G_t=\sigma_{t-1}\sigma_t\eta_t^{\text{latent}}\tau\,\mathbf J^\top\nabla_{\mathbf x_0}\ell\),其中 \(\mathbf J=\nabla_{\mathbf x_t}\hat{\mathbf x}_0\)。

注意正負號。A 沿著 \(-\nabla_{\mathbf x_0}\ell\) 走,損失下降。B 如果照字面只改 score 項、讓 \(\hat{\mathbf x}_0(\mathbf x_t)\) 不動,位移是 \(+\mathbf J^\top\nabla_{\mathbf x_0}\ell\),和 \(\mathcal G_t\) 的方向相反,損失反而上升。實際的 guided score 不是這樣用的:\(\hat{\mathbf x}_0=(\mathbf x_t+\sigma_t^2\hat{\mathbf s})/\alpha_t\) 也是由同一個 score 算出來的,把 \(\hat{\mathbf s}\) 換成 \(\hat{\mathbf s}+\eta\mathcal G_t\) 時兩項一起變,\(\mathcal G_t\) 的總係數是

$$\eta\,\alpha_{t-1}\frac{\sigma_t^2}{\alpha_t}-\eta\,\sigma_{t-1}\sigma_t=\eta\,\alpha_{t-1}\sigma_t\Big(\frac{\sigma_t}{\alpha_t}-\frac{\sigma_{t-1}}{\alpha_{t-1}}\Big)>0,$$

因為 \(\sigma_t/\alpha_t\) 隨雜訊等級增加。所以位移沿著 \(\mathcal G_t\),損失下降。用 Demo A 的設定算一步(VP,\(t=0.5\to0.48\)、\(x_t=0.3\)、\(y=1\)、\(\eta=0.05\)):下一步的 \(\ell(\hat x_0)\) 原本是 0.4113,只改 score 項變成 0.4146,兩項一起改變成 0.4109。書的式子把 \(\hat{\mathbf x}_0\) 寫成沒有修正,讀的時候要注意這一點;這頁的 Demo A、B 用的都是完整的 guided score。

對精確的去噪器,Tweedie 公式 \(\hat{\mathbf x}_0=\big(\mathbf x_t+\sigma_t^2\nabla\log p_t(\mathbf x_t)\big)/\alpha_t\) 給出 \(\mathbf J=\big(\mathbf I+\sigma_t^2\nabla^2\log p_t(\mathbf x_t)\big)/\alpha_t\),它是對稱矩陣(也等於 \(\operatorname{Cov}[\mathbf x_0\mid\mathbf x_t]\cdot\alpha_t/\sigma_t^2\))。所以 \(\mathcal G_t\) 的方向是 \(-\nabla_{\mathbf x_0}\ell\) 再乘上一個「後驗共變異」形狀的矩陣:在 \(\mathbf x_0\) 的後驗很不確定的方向上,梯度被保留;在後驗已經確定的方向上,梯度被壓小。A 省掉這個 Jacobian,換來不必對網路反向傳播。兩者的步長尺度也不同,實務上都要調。

共變異的那個等式:對高斯加噪,\(\nabla_{\mathbf x_t}\mathbb E[\mathbf x_0\mid\mathbf x_t]=\frac{\alpha_t}{\sigma_t^2}\operatorname{Cov}[\mathbf x_0\mid\mathbf x_t]\),是 Tweedie 公式的二階版本,可以直接對後驗的期望值微分驗證。

上面的建構只規定 guidance 怎麼修改每一步取樣。它們本身並不決定:把修改過的動態跨所有雜訊等級積分下去之後,得到的邊際分佈是什麼。下一節釐清這個區別。

03guided 取樣器生成什麼分佈書 §8.4.2

上面的位勢觀點,在母體層級有一個精確的「固定時刻」密度解讀。把學到的無條件 score 估計 \(\hat{\mathbf s}\) 換成精確的 score,給定正的位勢 \(\mathbf h_t(\mathbf x;\mathbf c)\) 和 guidance 強度 \(w_t\ge0\),定義理想的 guided 場

$$\nabla_{\mathbf x}\log p_t(\mathbf x)+w_t\nabla_{\mathbf x}\log\mathbf h_t(\mathbf x;\mathbf c).$$

在每個固定的 \(t\),它是下面這個密度的 score:

$$\widetilde p_t^{\text{tilt}}(\mathbf x\mid\mathbf c)=\frac{1}{Z_t(\mathbf c)}\,p_t(\mathbf x)\,\mathbf h_t(\mathbf x;\mathbf c)^{w_t},\qquad Z_t(\mathbf c)=\int p_t(\mathbf x)\,\mathbf h_t(\mathbf x;\mathbf c)^{w_t}\,d\mathbf x,$$

前提是 \(0\lt Z_t(\mathbf c)\lt\infty\)。實務上用的學出來的場,透過學到的 score 估計 \(\hat{\mathbf s}(\mathbf x_t)\) 近似這個理想建構。對上一節基於損失的建構,\(\mathbf h_t(\mathbf x_t;\mathbf c)=\exp\big[-\tau\ell\big(\hat{\mathbf x}_0(\mathbf x_t),\mathbf c\big)\big]\),而 \(\eta_t^{\text{latent}}\) 扮演 \(w_t\)。

但這個固定時刻的恆等式,不決定 guided 動態跨雜訊等級積分之後生成的分佈。所以對一般的損失和 guidance 時程,從 \(T\) 到 0 解 guided PF-ODE,一般不會產生依 \(\widetilde p_0^{\text{tilt}}(\cdot\mid\mathbf c)\) 分佈的樣本。

原因:跨時間的一致性

不同雜訊等級的密度不能各自獨立地選。要讓 \(\{\widetilde p_t^{\text{tilt}}\}_t\) 成為同一個前向 diffusion 的邊際路徑,它們還必須滿足對應的 Fokker–Planck 方程:

$$\partial_t\widetilde p_t^{\text{tilt}}+\nabla_{\mathbf x}\cdot\big(f(t)\mathbf x\,\widetilde p_t^{\text{tilt}}\big)-\frac12g^2(t)\,\Delta_{\mathbf x}\widetilde p_t^{\text{tilt}}=0.$$

這個條件成立時,對應的 PF-ODE

$$\frac{d\mathbf x(t)}{dt}=f(t)\mathbf x(t)-\frac12g^2(t)\,\nabla_{\mathbf x}\log\widetilde p_t^{\text{tilt}}\big(\mathbf x(t)\mid\mathbf c\big)$$

從對應的終端分佈 \(\widetilde p_T^{\text{tilt}}(\cdot\mid\mathbf c)\) 出發時,邊際路徑就是 \(\widetilde p_t^{\text{tilt}}\)。

相容條件可以直接檢查。把傾斜密度代入 Fokker–Planck 方程,並利用 \(p_t\) 本身滿足同一條方程,得到(省略引數 \((\mathbf x;\mathbf c)\))

$$\begin{aligned}&\partial_t\widetilde p_t^{\text{tilt}}+\nabla_{\mathbf x}\cdot\big(f(t)\mathbf x\,\widetilde p_t^{\text{tilt}}\big)-\tfrac12g^2(t)\Delta_{\mathbf x}\widetilde p_t^{\text{tilt}}\\&=\widetilde p_t^{\text{tilt}}\Big[\partial_t\log\big(\mathbf h_t^{w_t}\big)+f(t)\,\mathbf x\cdot\nabla_{\mathbf x}\log\big(\mathbf h_t^{w_t}\big)-g^2(t)\,\nabla_{\mathbf x}\log p_t\cdot\nabla_{\mathbf x}\log\big(\mathbf h_t^{w_t}\big)\\&\qquad\quad-\tfrac12g^2(t)\Big(\Delta_{\mathbf x}\log\big(\mathbf h_t^{w_t}\big)+\big\|\nabla_{\mathbf x}\log\big(\mathbf h_t^{w_t}\big)\big\|^2\Big)-\frac{Z_t'}{Z_t}\Big].\end{aligned}$$
逐步代入(書省略的計算)

記 \(q=\widetilde p_t^{\text{tilt}}\)、\(H=\mathbf h_t^{w_t}\)、\(d\) 是維度,Fokker–Planck 算子 \(\mathcal L[q]:=\partial_tq+\nabla\cdot(f\mathbf x\,q)-\frac12g^2\Delta q\)。因為 \(q=pH/Z\),\(\log q=\log p+\log H-\log Z\)。三項分別除以 \(q\):

$$\frac{\partial_tq}{q}=\partial_t\log p+\partial_t\log H-\frac{Z'}{Z},$$ $$\frac{\nabla\cdot(f\mathbf x\,q)}{q}=f\,d+f\,\mathbf x\cdot\nabla\log q=f\,d+f\,\mathbf x\cdot\nabla\log p+f\,\mathbf x\cdot\nabla\log H,$$ $$\frac{\Delta q}{q}=\Delta\log q+\|\nabla\log q\|^2=\Delta\log p+\Delta\log H+\|\nabla\log p\|^2+2\nabla\log p\cdot\nabla\log H+\|\nabla\log H\|^2.$$

第三行用了 \(\Delta q=\nabla\cdot(q\nabla\log q)=q\big(\Delta\log q+\|\nabla\log q\|^2\big)\)。把只含 \(p\) 的項收在一起:

$$\partial_t\log p+f\,d+f\,\mathbf x\cdot\nabla\log p-\tfrac12g^2\big(\Delta\log p+\|\nabla\log p\|^2\big)=\frac{\mathcal L[p]}{p}=0,$$

因為 \(p_t\) 本身滿足 Fokker–Planck。剩下的就是

$$\frac{\mathcal L[q]}{q}=\partial_t\log H+f\,\mathbf x\cdot\nabla\log H-g^2\,\nabla\log p\cdot\nabla\log H-\tfrac12g^2\big(\Delta\log H+\|\nabla\log H\|^2\big)-\frac{Z'}{Z},$$

正是書的括號(\(-g^2\nabla\log p\cdot\nabla\log H\) 來自 \(-\frac12g^2\cdot2\nabla\log p\cdot\nabla\log H\))。注意 \(\partial_t\log H=\partial_t\big(w_t\log\mathbf h_t\big)\) 也包含 guidance 時程 \(w_t\) 本身的變化。Demo A 用有限差分直接算 \(\mathcal L[q]/q\),在 Node 裡和這個括號逐點比對,到小數第三位都一致。

因此,只有括號裡的量處處為零時,傾斜族才是合法的邊際路徑。一般的任務損失和 guidance 時程不必滿足這個條件。所以即使 score 是精確的、ODE 也精確地積分,這個落差仍可能存在:它來自 guided 動態本身,而不是數值離散化。這是更廣的 Fokker–Planck 一致性要求(Lai et al. 2023,FP-Diffusion)的一個例子。

兩個簡單情形

  • \(w_t\equiv0\):傾斜消失,還原原本的無條件路徑 \(p_t\)。(括號裡每一項都帶一個 \(\nabla\log H\) 或 \(\partial_t\log H\),\(H\equiv1\) 時全為 0;\(Z_t\equiv1\)。)
  • 精確的 classifier guidance:在標準設定下(前向 diffusion 破壞 \(\mathbf x\),\(\mathbf c\) 保持不變),取 \(\mathbf h_t(\mathbf x;\mathbf c)=p_t(\mathbf c\mid\mathbf x)\)、\(w_t\equiv1\)。貝氏定理給出 \(\widetilde p_t^{\text{tilt}}(\mathbf x\mid\mathbf c)=p_t(\mathbf x\mid\mathbf c)\),所以傾斜族恰好是條件的邊際路徑。這解釋了:對 oracle 分類器概似,guidance 權重 1 為什麼特別。
為什麼精確 CG 自動滿足相容條件

\(p_t(\mathbf x)\,p_t(\mathbf c\mid\mathbf x)=p_t(\mathbf x\mid\mathbf c)\,p(\mathbf c)\),所以 \(Z_t=p(\mathbf c)\) 和 \(t\) 無關、\(\widetilde p_t^{\text{tilt}}=p_t(\cdot\mid\mathbf c)\)。而 \(p_t(\cdot\mid\mathbf c)\) 是「從 \(p_0(\cdot\mid\mathbf c)\) 出發、經過同一個前向過程」的邊際(前向核不看 \(\mathbf c\)),當然滿足同一條 Fokker–Planck 方程。所以括號為零不是巧合,而是因為這串密度確實是某個資料分佈加噪的結果。

對一般的 guidance 強度,例如 \(p_t(\mathbf x)\,p_t(\mathbf c\mid\mathbf x)^\omega\),只要可正規化,這個式子仍然定義一個合法的固定時刻傾斜密度,但它不保證描述 guided 取樣器的邊際。某些特殊選擇可能滿足相容條件,所以單憑 \(\omega\ne1\) 並不代表一定不一致。B21 的 Demo A 量過一個不一致的例子:\(\omega=8\) 時 guided 樣本的平均是 2.33,傾斜密度 \(\widetilde p_0^{\text{tilt}}\) 的平均只有 1.19。

基於修正的方法,例如 Feynman–Kac Correctors(Skreta et al. 2025),在目標是更忠實地沿著一串指定的傾斜分佈走時,明確地處理這個跨時間的落差。

Feynman–Kac 修正的直覺(轉述者補充)

令 \(\mathbf v=f\mathbf x-\frac12g^2\nabla\log q\) 是 guided PF-ODE 的速度場,那麼 \(\partial_tq+\nabla\cdot(\mathbf vq)=\mathcal L[q]\)。所以括號 \(\mathcal L[q]/q\) 衡量的是:往 \(t\) 增加的方向,目標 \(q\) 比「被這個速度場搬運的密度」多長了多少。取樣是往 \(t\) 減少的方向走,方向相反:括號為正的地方,目標掉得比粒子快,粒子太多了。如果把一群粒子各自帶一個權重,讓權重依括號的值增減(括號為正的地方減少權重,為負的地方增加),再定期依權重重抽樣,粒子群就能修正回目標路徑。這就是序列蒙地卡羅(SMC)用 Feynman–Kac 公式做的事。細節見原論文;書在這裡只提到這個方向。

Demo A每個時刻都對,終點卻不對轉述者補充

一個所有東西都能精確算出來的例子。資料 \(p_0=\mathcal N(0,1)\),DDPM 式 VP 時程(\(\beta(t)=0.1+19.9t\);這時每個 \(p_t\) 都是 \(\mathcal N(0,1)\),score 是 \(-x\)),量測 \(y=x_0+\sigma_y z\)。雜訊空間的 guidance 取 \(\ell(\mathbf x_0,y)=\frac12(y-x_0)^2\)、\(\tau=1/\sigma_y^2\),也就是 \(\mathbf h_t=\mathcal N\big(y;\hat x_0(x_t),\sigma_y^2\big)\),這正是第 4 節的 DPS。這裡 \(\hat x_0(x_t)=\alpha_tx_t\) 是精確的。對照組用精確的概似 \(p_t(y\mid x_t)=\mathcal N(y;\alpha_tx_t,\sigma_y^2+\sigma_t^2)\)。

score 精確、ODE 用 RK4 積分(2,000 個粒子、200 步;平均和變異數另外用 4,000 步解它們的 ODE),從 \(\widetilde p_1^{\text{tilt}}\) 出發。因為 \(\mathbf h_0=\mathcal N(y;x_0,\sigma_y^2)\) 就是量測的概似,\(w=1\) 時傾斜密度的終點 \(\widetilde p_0^{\text{tilt}}\) 正是後驗 \(p(x_0\mid y)\),也就是你想要的答案。

guided PF-ODE 的樣本(t = 0)傾斜密度 p̃₀後驗 p(x₀ | y)
取樣器的邊際:平均 ± 標準差傾斜族 p̃ₜ:平均 ± 標準差

瀏覽器實測(\(y=1\);取樣器的平均和標準差來自 4,000 步的動差 ODE,2,000 個粒子的結果在抽樣誤差內一致):

\(\sigma_y\)guidance取樣器平均標準差\(\widetilde p_0^{\text{tilt}}\) 平均標準差
0.2
後驗 0.962、0.196
DPS,\(w=0.25\)1.2550.0440.8620.371
DPS,\(w=1\)1.0460.0000.9620.196
精確概似0.9620.1960.9620.196
0.5
後驗 0.800、0.447
DPS,\(w=0.25\)0.7250.6070.5000.707
DPS,\(w=0.5\)1.0760.3680.6670.577
DPS,\(w=1\)1.2800.1350.8000.447
DPS,\(w=2\)1.2050.0180.8890.333
精確概似0.8000.4470.8000.447
1
後驗 0.500、0.707
DPS,\(w=1\)0.7250.6070.5000.707
精確概似0.5000.7070.5000.707

四件事。(1) 精確概似:取樣器的終點和後驗一致到小數第三位,Fokker–Planck 殘差只有 \(10^{-6}\) 量級(有限差分的捨入)。這是書裡「精確 CG、\(w_t\equiv1\)」的逆問題版本:傾斜族就是後驗路徑 \(p_t(x\mid y)\)。(2) DPS、\(w=1\)(書的形式):傾斜密度的終點正是後驗(\(\sigma_y=0.5\) 時平均 0.800、標準差 0.447),但取樣器落在平均 1.280、標準差 0.135,比量測值 \(y=1\) 本身還遠,散佈只有後驗的三分之一;\(\sigma_y=0.2\) 時所有粒子擠到同一點(標準差 0.000)。殘差在 \(t=0.5\) 是 5.9、\(t=0.2\) 是 22,遠離 0。score 和積分都是精確的,所以這個落差完全來自 guided 動態本身,正是書說的情形。(3) 下圖的兩條曲線在 \(t\) 大於約 0.6 時幾乎重合(那時 \(\alpha_t\) 很小,\(\mathbf h_t\) 幾乎是常數,guidance 還沒什麼作用);之後取樣器的平均往上衝、標準差迅速縮小,傾斜族的標準差則慢慢從 1 降到 0.447。(4) 調 \(w\) 救不回來。DPS 的結果只依賴 \(w/\sigma_y^2\)(表中 \(\sigma_y=1,w=1\) 和 \(\sigma_y=0.5,w=0.25\) 完全相同)。在 Node 用同樣的 ODE 計算:\(\sigma_y=0.5\) 時取 \(w\approx0.40\) 可以讓標準差對上 0.447,但這時平均是 0.97,不是 0.80。沒有一個 \(w\) 能同時對上後驗的平均和標準差。

這個例子的閉式解

VP 下 \(\alpha_t^2+\sigma_t^2=1\),\(p_0=\mathcal N(0,1)\) 是 VP 的不變分佈,所以 \(p_t=\mathcal N(0,1)\)。給定 \(x_t\),\(x_0\) 的後驗是 \(\mathcal N(\alpha_tx_t,\sigma_t^2)\),所以 \(\hat x_0=\alpha_tx_t\),而且

$$p_t(y\mid x_t)=\int\mathcal N(y;x_0,\sigma_y^2)\,\mathcal N(x_0;\alpha_tx_t,\sigma_t^2)\,dx_0=\mathcal N(y;\alpha_tx_t,\sigma_y^2+\sigma_t^2).$$

DPS 把後驗換成點 \(\hat x_0\),等於把變異數 \(\sigma_t^2\) 丟掉:\(\mathbf h_t=\mathcal N(y;\alpha_tx_t,\sigma_y^2)\)。記 \(v_t=\sigma_y^2\)(DPS)或 \(\sigma_y^2+\sigma_t^2\)(精確)。傾斜密度是高斯,精確度 \(1+w\alpha_t^2/v_t\)、平均 \(\dfrac{w\alpha_ty/v_t}{1+w\alpha_t^2/v_t}\)。guided score 是 \(-x+w\alpha_t(y-\alpha_tx)/v_t\),VP 的 \(f=-\beta/2\)、\(g^2=\beta\),PF-ODE 是

$$\frac{dx}{dt}=-\frac{\beta(t)}2\big(x+\text{score}\big)=-\frac{\beta(t)\,w\,\alpha_t}{2v_t}\big(y-\alpha_tx\big),$$

對 \(x\) 是線性的,所以高斯推過去還是高斯,平均 \(m\) 和變異數 \(v\) 滿足 \(\dot m=-\frac{\beta w\alpha_t}{2v_t}(y-\alpha_tm)\)、\(\dot v=\frac{\beta w\alpha_t^2}{v_t}v\)。精確概似、\(w=1\) 時,傾斜族就是後驗路徑 \(p_t(x\mid y)\),取樣器分毫不差地落在後驗上;DPS 時括號不為零,取樣器的軌跡和傾斜族分開。readout 裡的「Fokker–Planck 殘差」就是用有限差分算的 \(\mathcal L[q]/q\)。

04逆問題:ILVR 與 DPS書 §8.4.3

第 2 節的原則在逆問題上有重要的應用。書先概述背景,再用幾個具體例子說明怎麼在推論時用預訓練 diffusion model 解逆問題。

逆問題的背景

令 \(\mathcal A\) 是已知的前向算子(可以是非線性的),假設

$$\mathbf y=\mathcal A(\mathbf x_0)+\sigma_{\mathbf y}\mathbf z,\qquad\mathbf z\sim\mathcal N(\mathbf 0,\mathbf I).$$

貝氏的目標是刻畫後驗 \(p_0(\mathbf x_0\mid\mathbf y)\),它結合量測模型和「怎樣的乾淨訊號是合理的」先驗知識。盲逆問題把 \(\mathcal A\) 的未知參數也當作要推論的量。

\(\mathcal A\) 的例子(轉述者補充)
  • 去模糊:\(\mathcal A(\mathbf x)=\mathbf k*\mathbf x\),和模糊核 \(\mathbf k\) 做卷積(線性)。核未知時就是盲去模糊。
  • 補洞(inpainting):\(\mathcal A\) 只保留沒被遮住的像素(線性的投影)。Demo B 就是二維的補洞:只看到第一個座標。
  • 超解析:\(\mathcal A\) 是模糊後降取樣(線性)。
  • 非線性的例子:相位還原(只量到傅立葉係數的大小)、JPEG 壓縮。

傳統的逆問題方法常把一個資料保真項和一個解析或手工設計的先驗,放進變分或貝氏的表述裡。監督式的修復方法則可能用成對資料,直接學從量測到乾淨訊號的映射。預訓練 diffusion model 提供第三條路:一個學到的乾淨資料先驗可以重複用在不同的量測算子上,量測資訊只在推論時才加進來。

預訓練 diffusion model 當逆問題的解法

對上面的量測模型,貝氏定理給出

$$\nabla_{\mathbf x_t}\log p_t(\mathbf x_t\mid\mathbf y)=\underbrace{\nabla_{\mathbf x_t}\log p_t(\mathbf x_t)}_{\text{資料 score}}+\underbrace{\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)}_{\text{量測 guidance}}.$$

資料 score 可以由預訓練 diffusion model 提供,但量測項一般沒有閉式。所以 training-free 的逆問題解法在取樣時引入量測資訊,但它們不必都用同一種數學形式。一個有用的區分是兩種常見策略:

  1. 直接強制量測一致:修改或投影中間樣本。
  2. 近似概似 score:近似 \(\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)\),再用上面的貝氏分解加到資料 score 上。

ILVR(Choi et al. 2021)

ILVR 是第一種策略的簡單例子。令 \(\phi_N\) 是它的線性低通算子(把影像縮小 \(N\) 倍再放大回來,只留下低頻)。每一步反向取樣,先抽一個無條件的提議

$$\mathbf x_{t-1}'\sim p_{\bm\theta}(\mathbf x_{t-1}'\mid\mathbf x_t),$$

再把參考影像加噪到同一個雜訊等級:\(\mathbf y_{t-1}\sim p_{t-1}(\mathbf y_{t-1}\mid\mathbf y)\)。然後把提議修正成

$$\mathbf x_{t-1}=\phi_N(\mathbf y_{t-1})+(\mathbf I-\phi_N)\,\mathbf x_{t-1}'.$$

所以規定的低頻成分來自加噪後的參考影像,互補的成分來自無條件 diffusion 的提議。這是一個樣本空間的一致性修正,而不是對 \(\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)\) 的明確近似。

為什麼要先把參考影像加噪(轉述者補充)

中間樣本 \(\mathbf x_{t-1}\) 應該長得像「等級 \(t-1\) 的雜訊影像」。如果直接把乾淨參考的低頻塞進去,低頻部分沒有雜訊、高頻部分有雜訊,這樣的樣本不在 \(p_{t-1}\) 的典型區域裡,diffusion model 的 score 在那裡不可靠。先把 \(\mathbf y\) 依前向核 \(\mathcal N(\alpha_{t-1}\mathbf y,\sigma_{t-1}^2\mathbf I)\) 加噪,替換進去的部分就和其他部分處在同一個雜訊等級。代價是:這個加噪用的是獨立的新雜訊,和 \(\mathbf x_{t-1}'\) 裡原本的雜訊不相關,所以「看得到的部分」和「看不到的部分」之間的統計關係,在每一步都被重新打亂一次。Demo B 看得到 ILVR 在看不到的座標上明顯偏離後驗。

Diffusion Posterior Sampling(DPS;Chung et al. 2022)

對已知的非線性前向算子 \(\mathcal A\)、加性高斯量測雜訊 \(\sigma_{\mathbf y}>0\),DPS 近似

$$\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)\approx\nabla_{\mathbf x_t}\log p\big(\mathbf y\mid X_0=\hat{\mathbf x}_0(\mathbf x_t)\big),$$

其中 \(\hat{\mathbf x}_0(\mathbf x_t):=\mathbb E[\mathbf x_0\mid\mathbf x_t]\) 是給定 \(\mathbf x_t\) 時乾淨樣本的後驗平均,通常由預訓練 diffusion model 透過 Tweedie 公式(B06)估計。這個代入式的近似,把「量測概似的後驗平均」換成「量測概似在後驗平均處的值」:

$$\begin{aligned}p_t(\mathbf y\mid\mathbf x_t)&=\int p_t(\mathbf y\mid\mathbf x_t,\mathbf x_0)\,p(\mathbf x_0\mid\mathbf x_t)\,d\mathbf x_0\\&=\int p_t(\mathbf y\mid\mathbf x_0)\,p(\mathbf x_0\mid\mathbf x_t)\,d\mathbf x_0\;\approx\;p_t\big(\mathbf y\mid X_0=\hat{\mathbf x}_0(\mathbf x_t)\big).\end{aligned}$$

第二個等號用到:給定 \(\mathbf x_0\) 時,\(\mathbf y\) 只依賴 \(\mathbf x_0\),不依賴 \(\mathbf x_t\)。近似成立的前提是後驗 \(p(\mathbf x_0\mid\mathbf x_t)\) 緊緊集中在它的平均附近。

因為 \(p_t\big(\mathbf y\mid X_0=\hat{\mathbf x}_0(\mathbf x_t)\big)=\mathcal N\big(\mathbf y;\mathcal A(\hat{\mathbf x}_0(\mathbf x_t)),\sigma_{\mathbf y}^2\mathbf I\big)\),可以算出

$$\begin{aligned}\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)&\approx\nabla_{\mathbf x_t}\log\mathcal N\big(\mathbf y;\mathcal A(\hat{\mathbf x}_0),\sigma_{\mathbf y}^2\mathbf I\big)\\&=-\frac{1}{2\sigma_{\mathbf y}^2}\nabla_{\mathbf x_t}\big\|\mathbf y-\mathcal A(\hat{\mathbf x}_0)\big\|^2\\&=\frac{1}{\sigma_{\mathbf y}^2}\Big[\mathcal J_{\mathcal A}\big(\hat{\mathbf x}_0(\mathbf x_t)\big)\cdot\nabla_{\mathbf x_t}\hat{\mathbf x}_0(\mathbf x_t)\Big]^\top\Big(\mathbf y-\mathcal A\big(\hat{\mathbf x}_0(\mathbf x_t)\big)\Big),\end{aligned}$$

其中 \(\mathcal J_{\mathcal A}\big(\hat{\mathbf x}_0(\mathbf x_t)\big):=\nabla_{\mathbf x_0}\mathcal A(\mathbf x)\big|_{\mathbf x=\hat{\mathbf x}_0(\mathbf x_t)}\) 是前向算子對輸入的 Jacobian。這個式子把梯度一路傳過 score 近似的管線,反映量測概似怎麼隨雜訊樣本 \(\mathbf x_t\) 的擾動而變。

最後一個等號的鏈鎖律

令 \(\mathbf r(\mathbf x_t)=\mathbf y-\mathcal A(\hat{\mathbf x}_0(\mathbf x_t))\)。\(\nabla_{\mathbf x_t}\|\mathbf r\|^2=2(\partial\mathbf r/\partial\mathbf x_t)^\top\mathbf r\),而 \(\partial\mathbf r/\partial\mathbf x_t=-\mathcal J_{\mathcal A}(\hat{\mathbf x}_0)\cdot\nabla_{\mathbf x_t}\hat{\mathbf x}_0\)(先過 \(\hat{\mathbf x}_0\)、再過 \(\mathcal A\))。所以 \(-\frac{1}{2\sigma_{\mathbf y}^2}\cdot2\cdot\big(-[\mathcal J_{\mathcal A}\nabla\hat{\mathbf x}_0]^\top\mathbf r\big)=\frac{1}{\sigma_{\mathbf y}^2}[\mathcal J_{\mathcal A}\nabla\hat{\mathbf x}_0]^\top\mathbf r\)。這就是第 2 節「雜訊空間 guidance」取 \(\ell=\frac12\|\mathbf y-\mathcal A(\mathbf x_0)\|^2\)、\(\tau=1/\sigma_{\mathbf y}^2\) 的特例。

對線性逆問題(\(\mathcal A(\mathbf x)=\mathbf A\mathbf x\)),這進一步化簡成

$$\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)\approx\underbrace{\frac{1}{\sigma_{\mathbf y}^2}}_{\text{guidance 強度}}\;\underbrace{\Big[\mathbf A\cdot\nabla_{\mathbf x_t}\hat{\mathbf x}_0(\mathbf x_t)\Big]^\top}_{\text{投影回 }\mathbf x_t}\underbrace{\Big(\mathbf y-\mathbf A\,\hat{\mathbf x}_0(\mathbf x_t)\Big)}_{\text{量測誤差}}.$$

書用三種顏色框住這三個因子(綠:guidance、紫:投影、藍:量測誤差);上面的標籤是轉述者依顏色意思加的中文。

大量的研究提出 \(\nabla_{\mathbf x_t}\log p_t(\mathbf y\mid\mathbf x_t)\) 的各種近似,建構基於 diffusion 的逆問題解法。完整的綜覽見 Daras et al. (2024) 的 survey。

DPS 的近似什麼時候差(轉述者補充)

真正的 \(p_t(\mathbf y\mid\mathbf x_t)\) 是在後驗 \(p(\mathbf x_0\mid\mathbf x_t)\) 上把概似平均起來;後驗越寬,平均越「模糊」,概似越平坦。DPS 把後驗壓成一個點,在 \(t\) 大、後驗很寬的時候,會把量測當成比實際更確定的資訊。Demo A 的高斯例子把這件事算得很清楚:精確的是 \(\mathcal N(y;\alpha_tx_t,\sigma_y^2+\sigma_t^2)\),DPS 是 \(\mathcal N(y;\alpha_tx_t,\sigma_y^2)\),少了 \(\sigma_t^2\);結果是樣本太集中。Chung et al. 原論文的演算法實際上不直接用 \(1/\sigma_{\mathbf y}^2\),而是用一個手調的步長 \(\zeta_i\) 取代它。

Demo B二維逆問題的三種解法轉述者補充

先驗是圓上 8 個高斯(半徑 2、每個標準差 0.25)。只量到第一個座標:\(y=x_1+\sigma_yz\),也就是 \(\mathbf A=[1\;\;0]\),一個二維的「補洞」。因為先驗是高斯混合,精確的後驗是另一個高斯混合,可以直接抽樣,當作標準答案。三種方法都用同一個精確的先驗 score(不必訓練)和 DDPM 祖先取樣(200 步、800 個樣本):

  • ILVR:每一步先無條件走一步,再把第一個座標換成加噪的 \(y\):\(\alpha_{t-1}y+\sigma_{t-1}z\)。這裡 \(\phi\) 是「取第一個座標」的投影。
  • DPS:在 score 上加 \(\frac{w}{\sigma_y^2}\big[\mathbf A\nabla\hat{\mathbf x}_0\big]^\top(y-\mathbf A\hat{\mathbf x}_0)\),\(\nabla\hat{\mathbf x}_0\) 用精確的 Hessian 算。\(w=1\) 是書的形式。
先驗樣本量測帶 y ± σ_y所選方法的樣本 / x₂ 直方圖精確後驗 p(x₂ | y)

瀏覽器實測(每個設定約 4 秒;「中間那團」指 \(|x_2|\lt0.7\),W₁ 是 \(x_2\) 的分佈和 4,000 個精確後驗樣本之間的一維 Wasserstein 距離):

設定方法rms\((x_1-y)\)中間那團W₁
\(y=2\)、\(\sigma_y=0.1\)精確後驗0.09983.2%—
ILVR0.01544.9%0.488
DPS,\(w=1\)0.07491.1%0.100
DPS,\(w=0.3\)0.13192.0%0.112
\(y=2\)、\(\sigma_y=0.3\)精確後驗0.29060.2%—
ILVR0.01544.9%0.212
DPS,\(w=1\)0.20682.9%0.269
DPS,\(w=0.3\)0.33661.3%0.028
\(y=1.4\)、\(\sigma_y=0.1\)精確後驗0.0933.7%—
ILVR0.01516.3%0.161
DPS,\(w=1\)0.0740.6%0.085
DPS,\(w=0.3\)0.1272.5%0.032

(1) ILVR 讓看得到的座標幾乎完全等於 \(y\)(rms 0.015,只剩最後一步加噪的量),比精確後驗的 0.099 還小:它把參考當成沒有雜訊,\(\sigma_y\) 完全沒用到(所以 \(\sigma_y=0.1\) 和 0.3 的 ILVR 結果一模一樣)。看不到的 \(x_2\) 卻錯得最多:\(y=2\) 時精確後驗有 83.2% 在中間那團,ILVR 只有 44.9%,其餘大多落在 \(1.2\le|x_2|\le2\),集中在第 1、7 團的高度(\(\pm1.4\))附近。這些點的 \(x_1\) 被硬改成 2,所以不在任何一團上;散佈圖上它們排成一條直線。\(y=1.4\) 時反過來,ILVR 有 16.3% 落在中間,精確只有 3.7%。(2) DPS、\(w=1\) 的 \(x_2\) 分佈接近得多(\(y=2,\sigma_y=0.1\) 時 W₁ 0.100,ILVR 是 0.488),但和 Demo A 一樣太有把握:rms\((x_1-y)\) 比精確的小(0.074 對 0.099),而且把太多樣本推進最可能的那一團(91.1% 對 83.2%;\(\sigma_y=0.3\) 時 82.9% 對 60.2%)。(3) 把強度降到 \(w=0.3\),\(\sigma_y=0.3\) 時幾乎完全對上(61.3%,W₁ 0.028),\(\sigma_y=0.1\) 時卻仍是 92.0%,而且量測吻合度變差(0.131 對 0.099)。和 Demo A 一樣,沒有一個 \(w\) 在每個設定下都對;實務上的 DPS 用手調的步長,也是同樣的情況。

05監督式的逐步修復:InDI 與 PF-ODE書 §8.4.3

上面的方法結合預訓練 diffusion 先驗和貝氏分解解逆問題:用先驗分佈的 score 加上量測模型,引導重建過程。同時它們也反映一個更廣的想法:不要一步就還原乾淨訊號,而是用很多小步逐漸改進一個被破壞的輸入。監督式影像修復也有類似的高層策略,但起點不同:它不用預訓練的 score model 當先驗,而是直接從「破壞的、乾淨的」成對範例學這個精煉程序。

代表性的例子是 InDI(Inversion by Direct Iteration;Delbracio & Milanfar 2023)。和上面基於貝氏定理的方法不同,InDI 從成對資料 \((\mathbf y,\mathbf x_0)\) 出發,\(\mathbf y\) 是破壞的觀測、\(\mathbf x_0\) 是對應的乾淨目標。重要的是,它一般不假設從 \(\mathbf x_0\) 到 \(\mathbf y\) 的破壞有已知的解析形式,也不假設是高斯的。

基本想法是用內插路徑連接兩端:

$$\mathbf x_t=(1-t)\mathbf x_0+t\mathbf y,\qquad t\in[0,1].$$

這條路徑只是一條從乾淨目標到破壞觀測的方便軌跡,一般不是高斯加噪過程。沿著它,對任何 \(0\le s\le t\),有精確的關係

$$\mathbf x_s=\Big(1-\frac st\Big)\mathbf x_0+\frac st\,\mathbf x_t.$$
為什麼這個關係是精確的

由 \(\mathbf x_t=(1-t)\mathbf x_0+t\mathbf y\) 解出 \(\mathbf y=\big(\mathbf x_t-(1-t)\mathbf x_0\big)/t\)。代入 \(\mathbf x_s=(1-s)\mathbf x_0+s\mathbf y\):

$$\mathbf x_s=(1-s)\mathbf x_0+\frac st\mathbf x_t-\frac{s(1-t)}{t}\mathbf x_0=\Big(1-s-\frac st+s\Big)\mathbf x_0+\frac st\mathbf x_t=\Big(1-\frac st\Big)\mathbf x_0+\frac st\mathbf x_t.$$

每對 \((\mathbf x_0,\mathbf y)\) 都成立,沒有用到任何機率假設。

給定 \(\mathbf x_t\) 取條件期望,

$$\mathbb E[\mathbf x_s\mid\mathbf x_t]=\Big(1-\frac st\Big)\mathbb E[\mathbf x_0\mid\mathbf x_t]+\frac st\,\mathbf x_t.$$

這表示:要從目前的狀態 \(\mathbf x_t\) 走到稍微不那麼破壞的狀態,只需要從 \(\mathbf x_t\) 預測乾淨目標。

根據這個想法,從成對範例訓練一個時間條件的預測器 \(\mathbf F_{\bm\phi}(\mathbf x_t,t)\),最小化回歸目標

$$\min_{\bm\phi}\;\mathbb E_{(\mathbf x_0,\mathbf y)\sim p(\mathbf x_0,\mathbf y),\;t\sim p(t)}\Big\|\mathbf F_{\bm\phi}\big((1-t)\mathbf x_0+t\mathbf y,\,t\big)-\mathbf x_0\Big\|_2^2,$$

\(p(\mathbf x_0,\mathbf y)\) 是「乾淨目標和它的破壞觀測」成對資料的聯合分佈,\(p(t)\) 規定訓練時怎麼抽內插時間。也就是說,\(\mathbf F_{\bm\phi}\) 被訓練成從內插路徑上的中間狀態預測乾淨目標。對平方誤差,Bayes 最佳的預測器是條件期望 \(\mathbf F^*(\mathbf x_t,t)=\mathbb E[\mathbf x_0\mid\mathbf x_t]\)。所以如果模型類別夠有表達力、最佳化也成功,學到的預測器近似「時刻 \(t\) 的中間狀態 \(\mathbf x_t\) 所對應的平均乾淨目標」。

從這個意義上說,訓練目標在精神上和 diffusion model 的訓練相似:兩者都學一個從中間的破壞狀態到較乾淨目標的時間條件回歸。差別是 diffusion model 用規定好的前向破壞過程合成訓練對,而這裡的端點對 \((\mathbf y,\mathbf x_0)\) 直接來自監督式修復資料。

推論時,從 \(\hat{\mathbf x}_1=\mathbf y\) 出發,反覆精煉估計:

$$\hat{\mathbf x}_{t-\Delta t}=\frac{\Delta t}{t}\,\mathbf F_{\bm\phi}(\hat{\mathbf x}_t,t)+\Big(1-\frac{\Delta t}{t}\Big)\hat{\mathbf x}_t.$$

(這就是上面的條件期望式取 \(s=t-\Delta t\),再把 \(\mathbb E[\mathbf x_0\mid\mathbf x_t]\) 換成 \(\mathbf F_{\bm\phi}\)。)所以最終的重建是逐步精煉出來的,而不是一次直接預測。在連續時間的極限下,這導出 InDI 的殘差流 ODE:

$$\frac{d\mathbf x_t}{dt}=\frac{\mathbf x_t-\mathbf F_{\bm\phi}(\mathbf x_t,t)}{t}.$$
從迭代到 ODE

把迭代改寫成 \(\hat{\mathbf x}_{t-\Delta t}=\hat{\mathbf x}_t-\Delta t\cdot\dfrac{\hat{\mathbf x}_t-\mathbf F_{\bm\phi}(\hat{\mathbf x}_t,t)}{t}\)。這正是 ODE \(\frac{d\mathbf x}{dt}=\frac{\mathbf x-\mathbf F}{t}\) 倒著走一步的 Euler 法。所以 InDI 的 \(N\) 步迭代,就是用 \(N\) 步 Euler 從 \(t=1\) 解這個 ODE 到 \(t=0\)。\(N=1\) 時只剩 \(\hat{\mathbf x}_0=\mathbf F_{\bm\phi}(\mathbf y,1)\):一次直接預測。

高斯去噪的特例就是 PF-ODE

現在進一步特化到高斯去噪:假設破壞有已知的解析形式

$$\mathbf y=\mathbf x_0+\sigma\bm\epsilon,\qquad\bm\epsilon\sim\mathcal N(\mathbf 0,\mathbf I),$$

雜訊等級 \(\sigma\) 已知。在這個特例下,InDI 的殘差流 ODE 恰好化成 probability-flow ODE。內插路徑變成

$$\mathbf x_t=(1-t)\mathbf x_0+t\mathbf y=\mathbf x_0+t\sigma\bm\epsilon,$$

正是標準的 diffusion 形式 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\bm\epsilon\),取 \(\alpha_t=1\)、\(\sigma_t=t\sigma\)。於是預測器 \(\mathbf F_{\bm\phi}(\mathbf x_t,t)\approx\mathbb E[\mathbf x_0\mid\mathbf x_t]\) 現在學的是替一個高斯破壞的中間狀態去噪。這時殘差流 ODE 變成

$$\frac{d\mathbf x_t}{dt}=\frac{\mathbf x_t-\mathbb E[\mathbf x_0\mid\mathbf x_t]}{t}=-\dot\sigma_t\sigma_t\,\nabla_{\mathbf x_t}\log p_t(\mathbf x_t),$$

最後一個等號來自 \(\sigma_t=t\sigma\) 和 Tweedie 公式 \(\mathbb E[\mathbf x_0\mid\mathbf x_t]=\mathbf x_t+\sigma_t^2\nabla_{\mathbf x_t}\log p_t(\mathbf x_t)\)。這正是這條高斯去噪路徑的 PF-ODE,分別用去噪器形式和 score 形式寫出來。

最後一個等號,以及為什麼它是 PF-ODE

Tweedie 給出 \(\mathbf x_t-\mathbb E[\mathbf x_0\mid\mathbf x_t]=-\sigma_t^2\nabla\log p_t\)。除以 \(t\):\(-\frac{\sigma_t^2}{t}\nabla\log p_t\)。而 \(\sigma_t=t\sigma\) 給出 \(\dot\sigma_t=\sigma\)、\(\dot\sigma_t\sigma_t=t\sigma^2=\sigma_t^2/t\)。所以等於 \(-\dot\sigma_t\sigma_t\nabla\log p_t\)。

另一方面,\(\alpha_t=1\)、\(\sigma_t=t\sigma\) 是一個 VE 型的過程:前向 SDE \(d\mathbf x=g(t)\,d\mathbf w\)、\(g^2(t)=\frac{d}{dt}\sigma_t^2=2\dot\sigma_t\sigma_t\)、\(f=0\)。B08 的 PF-ODE \(f\mathbf x-\frac12g^2\nabla\log p_t\) 就是 \(-\dot\sigma_t\sigma_t\nabla\log p_t\)。兩者一字不差。

因此在高斯去噪的特例下,InDI 為 diffusion modeling 提供另一種解讀:可以把它看成在高斯破壞資料上的監督式去噪器學習,而 PF-ODE 是逐步精煉的連續時間極限。

步數多不一定「誤差」小(轉述者補充)

\(N=1\) 時輸出 \(\mathbb E[\mathbf x_0\mid\mathbf y]\),它是均方誤差(MSE)最小的估計,但它是「所有可能答案的平均」:在多峰的資料上,它會落在峰與峰之間,影像上就是模糊。\(N\to\infty\) 時輸出是 PF-ODE 的終點,它把 \(\mathbf y\) 的分佈 \(p_1\) 整個推回 \(p_0\),輸出的分佈和乾淨資料一樣(清楚、落在峰上),但每個輸出不一定接近它自己的 \(\mathbf x_0\),MSE 比較大。這是 Blau & Michaeli (2018) 所說的 perception–distortion 取捨的一個例子;InDI 的步數就是在這兩端之間調。Demo C 量出這條取捨曲線。注意:PF-ODE 是確定性的,所以對同一個 \(\mathbf y\) 它只給一個答案,並不是從後驗 \(p(\mathbf x_0\mid\mathbf y)\) 取樣。

Demo C訓練 InDI,改變修復步數轉述者補充

一維資料:\(\mathcal N(\pm1.5,0.35^2)\) 各半;破壞是 \(y=x_0+\sigma\epsilon\)、\(\sigma=1\),所以兩團被雜訊糊在一起。用書的回歸目標,從成對資料 \((x_0,y)\) 訓練一個 MLP \(\mathbf F_{\bm\phi}(x_t,t)\)(兩層、每層 32 個神經元,3,000 步、每批 128 對,\(t\sim\mathcal U[0,1]\)),完全不用到「破壞是高斯」這件事。修復時從 \(\hat x_1=y\) 出發走 \(N\) 步 InDI 迭代。對照組用精確的 \(\mathbb E[x_0\mid x_t]\)(高斯混合可以算出來),\(N\to\infty\) 就是 PF-ODE。2,000 個測試對。

學到的 F + InDI精確 E[x₀ | xₜ] + InDI乾淨資料 p₀觀測 y 的分佈

瀏覽器實測(和 Node 原型一致;訓練的純計算約 3 秒):

\(N\)MSE(學到 / 精確)\(|x|\lt0.75\)(學到 / 精確)
10.569 / 0.56413.2% / 12.6%
20.596 / 0.6116.0% / 3.9%
50.606 / 0.6303.5% / 1.4%
200.623 / 0.6362.4% / 1.2%
1000.630 / 0.6382.3% / 1.1%

對照:直接把 \(y\) 當答案的 MSE 是 1.020;乾淨資料本身只有 0.9% 落在 \(|x|\lt0.75\)。(1) \(N=1\) 是一次直接預測 \(\mathbb E[x_0\mid y]\):MSE 最小(0.564),但 12.6% 的輸出落在兩團之間,是乾淨資料的 14 倍,這就是「平均答案」造成的模糊。(2) \(N\) 變大,MSE 慢慢升到 0.638,落在中間的比例降到 1.1%,接近乾淨資料的 0.9%:輸出的分佈越來越像 \(p_0\)。\(N=100\) 的 Euler 迭代已經和 PF-ODE 的精確解幾乎一樣(Node 用 RK4 2,000 步解 ODE,MSE 0.639)。(3) 學到的預測器只看過成對資料,沒有用到「破壞是高斯」這件事,卻重現了同樣的趨勢;它在大 \(N\) 時落在中間的比例(2.3%)比精確版(1.1%)多一些,那是預測器本身的誤差。

與 CS236 的對照

本頁CS236 複習頁
條件 score 的貝氏分解、逆問題(去模糊、補洞)的動機第 14 講
Guidance、DDIM第 17 講
Tweedie、denoising score matching第 13 講
Fokker–Planck 方程、PF-ODE補充課 F、第 16 講
Euler 法、ODE 的數值解補充課 B

常見誤解

誤解:「每一步的 guided score 都是某個傾斜密度的 score,所以取樣結果就是 \(\widetilde p_0^{\text{tilt}}\)」。傾斜族還要滿足 Fokker–Planck 相容條件才是邊際路徑;即使 score 和 ODE 都精確,落差仍可能存在(第 3 節、Demo A)。
誤解:「這個落差是數值誤差,步數夠多就會消失」。它來自 guided 動態本身,和離散化無關。Demo A 的平均與變異數是用 4,000 步 RK4 解的,和 200 步粒子模擬一致,差距仍在(第 3 節)。
誤解:「DPS 從後驗取樣」。它把 \(p_t(\mathbf y\mid\mathbf x_t)\) 換成 \(\mathbf y\) 在 \(\hat{\mathbf x}_0\) 處的概似,只在後驗很集中時才準。在高斯例子裡,它等於丟掉 \(\sigma_t^2\),樣本太集中(第 4 節、Demo A)。
誤解:「ILVR 讓量測完全吻合,所以結果是對的」。它保證看得到的部分吻合,但看不到的部分不一定是正確的條件分佈(Demo B)。
誤解:「資料空間和雜訊空間的修正是同一件事」。雜訊空間要對 \(\hat{\mathbf x}_0(\mathbf x_t)\) 反向傳播,多一個 Jacobian;資料空間直接在 \(\hat{\mathbf x}_0\) 上走梯度(第 2 節)。
誤解:「InDI 的路徑是高斯加噪」。一般不是;\((\mathbf y,\mathbf x_0)\) 來自真實的成對資料,破壞可以是任何形式。只有在高斯去噪的特例下,它才和 PF-ODE 一致(第 5 節)。

自我測驗

1. 寫出 DDIM 更新的資料空間 + 雜訊空間形式,並說明 training-free guidance 的 A、B 兩種修正各加在哪裡。
\(\mathbf x_{t\to t-1}=\alpha_{t-1}\hat{\mathbf x}_0-\sigma_{t-1}\sigma_t\hat{\mathbf s}\)。A 在 \(\hat{\mathbf x}_0\) 上加 \(\eta^{\text{data}}\mathcal G^{\text{data}}=-\eta^{\text{data}}\nabla_{\mathbf x_0}\ell\);B 在 \(\hat{\mathbf s}\) 上加 \(\eta^{\text{latent}}\mathcal G_t=-\eta^{\text{latent}}\tau\nabla_{\mathbf x_t}\ell(\hat{\mathbf x}_0(\mathbf x_t),\mathbf c)\)。
2. 雜訊空間的 \(\mathcal G_t\) 什麼時候等於 \(\nabla_{\mathbf x_t}\log p_t(\mathbf c\mid\mathbf x_t)\)?為什麼它計算昂貴?
當 \(\mathbf h_t\) 和 \(p_t(\mathbf c\mid\mathbf x_t)\) 成正比(常數和 \(\mathbf x_t\) 無關)時。它需要 \([\nabla_{\mathbf x_t}\hat{\mathbf x}_0]^\top\nabla\ell\),也就是對整個 diffusion 網路反向傳播。
3. 傾斜族 \(\widetilde p_t^{\text{tilt}}\propto p_t\mathbf h_t^{w_t}\) 要成為 guided PF-ODE 的邊際路徑,需要什麼條件?
它要滿足同一個前向過程的 Fokker–Planck 方程;等價地,書的括號 \(\partial_t\log H+f\mathbf x\cdot\nabla\log H-g^2\nabla\log p\cdot\nabla\log H-\frac12g^2(\Delta\log H+\|\nabla\log H\|^2)-Z'/Z\)(\(H=\mathbf h_t^{w_t}\))處處為零。
4. 為什麼精確 CG 的 \(w_t\equiv1\) 是特別的?
\(p_t(\mathbf x)p_t(\mathbf c\mid\mathbf x)=p_t(\mathbf x\mid\mathbf c)p(\mathbf c)\),傾斜族就是條件資料加噪的路徑,自動滿足 Fokker–Planck,所以取樣器精確地生成 \(p_0(\mathbf x\mid\mathbf c)\)。
5. ILVR 和 DPS 屬於哪一種策略?各自怎麼用量測?
ILVR 直接修改樣本:把低頻成分換成加噪後的參考影像 \(\phi_N(\mathbf y_{t-1})\)。DPS 近似概似 score:\(\nabla\log\mathcal N(\mathbf y;\mathcal A(\hat{\mathbf x}_0(\mathbf x_t)),\sigma_{\mathbf y}^2\mathbf I)\),加到資料 score 上。
6. 寫出線性逆問題下 DPS 的梯度,並說明它的近似在哪一步。
\(\frac{1}{\sigma_{\mathbf y}^2}[\mathbf A\nabla_{\mathbf x_t}\hat{\mathbf x}_0]^\top(\mathbf y-\mathbf A\hat{\mathbf x}_0)\)。近似在 \(\int p(\mathbf y\mid\mathbf x_0)p(\mathbf x_0\mid\mathbf x_t)d\mathbf x_0\approx p(\mathbf y\mid\hat{\mathbf x}_0(\mathbf x_t))\),假設後驗集中在平均附近。
7. InDI 的修復迭代是什麼?在高斯去噪下它為什麼是 PF-ODE?
\(\hat{\mathbf x}_{t-\Delta t}=\frac{\Delta t}{t}\mathbf F(\hat{\mathbf x}_t,t)+(1-\frac{\Delta t}{t})\hat{\mathbf x}_t\),是 \(\frac{d\mathbf x}{dt}=\frac{\mathbf x-\mathbf F}{t}\) 的 Euler 步。高斯去噪時 \(\mathbf x_t=\mathbf x_0+t\sigma\bm\epsilon\),\(\mathbf F^*=\mathbb E[\mathbf x_0\mid\mathbf x_t]\),Tweedie 給出 \((\mathbf x_t-\mathbf F^*)/t=-\dot\sigma_t\sigma_t\nabla\log p_t\),就是 \(\sigma_t=t\sigma\) 的 VE PF-ODE。