U1.3 19 分鐘閱讀 2026年9月

U1.3 Tweedie 公式:Denoiser 和 Data Distribution 有什麼關係?

本篇重用L1.1十個房仲各看一百間房:Bias 與 Variance·M1.1從鞋子猜身高:Conditional Expectation·M1.2天氣預報該報幾度:MSE 的最小值是 Conditional Expectation·M1.3快篩陽性:Bayes 與 Posterior·M1.4去噪就是取 Posterior Mean(Tweedie)·M0.3漂流的溫度計:全導數、微分穿過積分與 JVP·M3.3山谷裡隨機走的人群:Langevin Dynamics 與 Stationary Distribution

那個 simple MSE,到底在學什麼?

上一篇不管是走逐步的 KL,還是走 DDPM 原文的 ELBO,我們得到的都是一個有理論依據的 weighted MSE。但真正拿來訓練的時候,DDPM 做了一件很重要的修改:它把不同 timestep 的加權拿掉了,直接用

Lsimple(θ)=Et,x0,ϵ[ϵθ(xt,t)ϵ2].\mathcal L_{\text{simple}}(\theta)=\mathbb E_{t,\,x_0,\,\epsilon}\big[\|\epsilon_\theta(x_t,t)-\epsilon\|^2\big].

所以到這裡留下了一個問題:ELBO 解釋的是原本那個 weighted objective;那我們現在真的拿來 train 的 simple MSE,到底在學什麼?

而且這個問題比它看起來更根本。我們從頭到尾都只是在看 (x0,xt)(x_0,x_t)(ϵ,xt)(\epsilon,x_t) 這種一筆一筆的 training pair,從來沒有把 pdatap_{\text{data}} 寫出來過。

一個看起來只是做 denoising regression 的 neural network,
到底學到了多少關於 data distribution 的資訊?

要回答這件事,我們先不看整條 reverse process,只固定一個 noise level tt,問最簡單的那個問題:這個 MSE 的最佳解是什麼?

固定一個 tt,這個回歸的最佳解是什麼?

Lsimple\mathcal L_{\text{simple}} 攤開來看:

Lsimple(θ)=Et Ex0,ϵ[ϵθ(xt,t)ϵ2]每一個 t 自己的一項,xt=αˉtx0+σtϵ.\mathcal L_{\text{simple}}(\theta)=\mathbb E_{t}\ \underbrace{\mathbb E_{x_0,\,\epsilon}\Big[\big\|\epsilon_\theta(x_t,t)-\epsilon\big\|^2\Big]}_{\text{每一個 }t\text{ 自己的一項}}, \qquad x_t=\sqrt{\bar\alpha_t}\,x_0+\sigma_t\epsilon .

它其實是一堆互不干擾的小問題疊起來:ϵθ(,t)\epsilon_\theta(\cdot,t) 在不同的 tt 上可以各自輸出各自的值,所以固定一個 tt 之後,那一項要怎麼最小化和別的 tt 無關。

加權那件事也因此可以先放下。 帶加權的版本只是在每一項前面乘一個與 ϵθ\epsilon_\theta 無關的常數 w(t)w(t)——常數不會改變一個最小化問題的解,只會改變訓練時把力氣花在哪些 tt。所以上面留下的問題可以縮小成一個很單純的樣子:

固定一個 ttminϵθE[ϵθ(xt,t)ϵ2]\min_{\epsilon_\theta}\mathbb E\big[\|\epsilon_\theta(x_t,t)-\epsilon\|^2\big] 的最佳解是什麼?

而這種 MSE 的 loss 有一個已知的最佳解公式。對任何一對隨機變數 (X,Y)(X,Y)

argminf E(X,Y)[f(X)Y2]對聯合分布取  =  E[YX]對給定 X 的條件分布取.\arg\min_f\ \underbrace{\mathbb E_{(X,Y)}\big[\|f(X)-Y\|^2\big]}_{\text{對聯合分布取}} \;=\;\underbrace{\mathbb E[Y\mid X]}_{\text{對給定 }X\text{ 的條件分布取}} .

這個公式有一個很直覺的畫面。想像你要在一條街上開一家店,明天顧客會出現在哪裡你不知道,只知道他們大致的分布;而「不方便」的代價是顧客走到店裡的距離平方。最好的位置在哪?不是人最多的那一點,而是所有顧客位置的平均——平方的代價會讓遠處的人拉得特別用力,於是你被迫站到重心上。f(X)f(X) 就是你選的位置,YY 是顧客真正出現的地方;而情報 XX 換了(哪一區、什麼天氣),顧客的分布也跟著換,所以最好的位置不是一個點,是一個隨 XX 改變的函數。

兩個期望值取的對象不一樣:左邊對 (X,Y)(X,Y)聯合分布取,得到一個數值;右邊對「給定 XX 之後 YY條件分布」取,得到一個隨給定的 XX 改變的函數 f(X)f(X)。這個公式的證明只要把 YY 拆成 E[YX]+(YE[YX])\mathbb E[Y\mid X]+\big(Y-\mathbb E[Y\mid X]\big) 就可以得到(詳見 M1.2)。

套回 DDPM:XX 就是 xtx_tYY 就是 ϵ\epsilon,而聯合分布來自「抽一張 x0x_0、抽一個 ϵ\epsilon、用那一行算出 xtx_t」這個程序。所以理想上,模型夠強、訓練到收斂的話

ϵθ(xt,t)  E[ϵxt].\epsilon_\theta(x_t,t)\ \longrightarrow\ \mathbb E[\epsilon\mid x_t].

也就是說,模型不是在記住「這個 xtx_t 是由哪一個 ϵ\epsilon 加出來的」。它學的是:看到這個 xtx_t 之後,所有可能的 ϵ\epsilon 按 posterior 加權之後的平均。

x0x_0-prediction 也是同一件事,因為 xt=αˉtx0+σtϵx_t=\sqrt{\bar\alpha_t}x_0+\sigma_t\epsilonx0x_0ϵ\epsilon 是 affine 的,條件期望又是線性的:

E[x0xt]=xtσtE[ϵxt]αˉt.\mathbb E[x_0\mid x_t]=\frac{x_t-\sigma_t\,\mathbb E[\epsilon\mid x_t]}{\sqrt{\bar\alpha_t}} .

這就是上一篇「散布是 schedule 給的,中心由 E[x0xt]\mathbb E[x_0\mid x_t] 決定」那句話缺的證明——而且這次的理由只用到 MSE,完全沒有用到 Gaussian,所以它對拿掉加權的 Lsimple\mathcal L_{\text{simple}} 一樣成立。

到這裡事情就開始有點不一樣了。因為這個 posterior p(x0xt)p(x_0\mid x_t) 已經不是只跟某一筆 training pair 有關,而是跟整個資料分布有關——要算出它,得把所有可能的 x0x_0 都考慮進去。

補充順帶一提:這也解釋了 loss 為什麼停在一個非零值

同一個分解還告訴我們 loss 會停在哪裡。把 Ef(X)Y2\mathbb E\|f(X)-Y\|^2 拆成「偏差」與「殘差」兩項,最佳解讓第一項歸零,剩下的是

minθ E[ϵθ(xt,t)ϵ2]=Et,xt[trVar(ϵxt)].\min_\theta\ \mathbb E\big[\|\epsilon_\theta(x_t,t)-\epsilon\|^2\big] =\mathbb E_{t,\,x_t}\big[\operatorname{tr}\operatorname{Var}(\epsilon\mid x_t)\big].

所以 loss 不會到 0,而且它停住的高度是有意義的——那是「看到 xtx_t 之後,ϵ\epsilon 還剩多少不確定性」。U1.5 會把這條線實際畫出來。

另外,這一整段是 U1.2 那個 conditional trick 的 MSE 版本:那裡我們證的是 KL 版(把 x0x_0 放進條件裡,objective 只差一個與 θ\theta 無關的常數),這裡是同一件事在平方誤差下的樣子。

這個 posterior mean 跟整個分布有什麼關係?

我們猜測 posterior mean E[ϵxt]\mathbb E[\epsilon\mid x_t] 可能跟整個資料分布有某種關係;又因為它是在 tt 的時候估計的,所以可能跟 xtx_t 的分布有關係。我們把 xtx_t 的分布用 ptp_t 來表示,且我們有

pt(xt)=q(xtx0)pdata(x0)dx0,p_t(x_t)=\int q(x_t\mid x_0)\,p_{\text{data}}(x_0)\,\mathrm dx_0 ,

這個分布也是 U1.2 裡第一次使用 Bayes 時分母的那個 pt(xt)p_t(x_t)

於是我們可以把猜測的問題問得更精確一點:

E[ϵxt]\mathbb E[\epsilon\mid x_t]pt(xt)p_t(x_t) 有什麼關係嗎?

Tweedie 公式:對 xtx_t 微分看看

固定一個 tt,我們先試著透過已知的 q(xtx0)q(x_t\mid x_0) 來觀察 ptp_t

pt(xt)=N ⁣(xt;αˉtx0, σt2I)pdata(x0)dx0.p_t(x_t)=\int \mathcal N\!\big(x_t;\,\sqrt{\bar\alpha_t}\,x_0,\ \sigma_t^2 I\big)\,p_{\text{data}}(x_0)\,\mathrm dx_0 .

我們試著xtx_t 微分看看(梯度可以穿到積分裡面是有條件的),其中積分裡只有代表 q(xtx0)q(x_t\mid x_0) 的 Gaussian 會被微分:

xtpt(xt)=xtN ⁣(xt;αˉtx0, σt2I)pdata(x0)dx0=xtαˉtx0σt2N ⁣(xt;αˉtx0, σt2I)pdata(x0)dx0.\begin{aligned} \nabla_{x_t} p_t(x_t) &=\int \nabla_{x_t}\mathcal N\!\big(x_t;\,\sqrt{\bar\alpha_t}\,x_0,\ \sigma_t^2I\big)\,p_{\text{data}}(x_0)\,\mathrm dx_0\\ &=\int -\frac{x_t-\sqrt{\bar\alpha_t}\,x_0}{\sigma_t^2}\,\mathcal N\!\big(x_t;\,\sqrt{\bar\alpha_t}\,x_0,\ \sigma_t^2I\big)\,p_{\text{data}}(x_0)\,\mathrm dx_0 . \end{aligned}

接著兩邊除以 pt(xt)p_t(x_t)。左邊是 xtpt(xt)/pt(xt)=xtlogpt(xt)\nabla_{x_t}p_t(x_t)\big/p_t(x_t)=\nabla_{x_t}\log p_t(x_t);而右邊出現的那一塊,按 Bayes 定理正好就是後驗 p(x0xt)p(x_0\mid x_t)M1.3):

N ⁣(xt;αˉtx0, σt2I)pdata(x0)pt(xt)=q(xtx0)pdata(x0)pt(xt)=p(x0xt).\frac{\mathcal N\!\big(x_t;\,\sqrt{\bar\alpha_t}\,x_0,\ \sigma_t^2I\big)\,p_{\text{data}}(x_0)}{p_t(x_t)} =\frac{q(x_t\mid x_0)\,p_{\text{data}}(x_0)}{p_t(x_t)} =p(x_0\mid x_t).

因此我們得到:

xtlogpt(xt)=xtαˉtx0σt2p(x0xt)dx0.\nabla_{x_t}\log p_t(x_t) =\int -\frac{x_t-\sqrt{\bar\alpha_t}\,x_0}{\sigma_t^2}\,p(x_0\mid x_t)\,\mathrm dx_0 .

被積函數裡那一塊看起來有點眼熟。把 forward 那一行 xt=αˉtx0+σtϵx_t=\sqrt{\bar\alpha_t}x_0+\sigma_t\epsilon 移項,會發現

xtαˉtx0σt=ϵ,\frac{x_t-\sqrt{\bar\alpha_t}\,x_0}{\sigma_t}=\epsilon ,

也就是「造出這個 xtx_t 的那個噪聲」。所以被積函數就是 ϵ/σt-\epsilon/\sigma_t,而對 p(x0xt)p(x_0\mid x_t) 取平均就是對 ϵ\epsilon 的後驗取平均:

  xtlogpt(xt)=E[ϵxt]σt  \boxed{\;\nabla_{x_t}\log p_t(x_t)=-\frac{\mathbb E[\epsilon\mid x_t]}{\sigma_t}\;}

右邊冒出來的,正是上一節那個 posterior mean。換成 x0x_0 的寫法就是

E[x0xt]=xt+σt2logpt(xt)αˉt,\mathbb E[x_0\mid x_t]=\frac{x_t+\sigma_t^2\,\nabla\log p_t(x_t)}{\sqrt{\bar\alpha_t}} ,

兩式只差 E[x0xt]\mathbb E[x_0\mid x_t]E[ϵxt]\mathbb E[\epsilon\mid x_t] 之間那個 affine 換算。而既然訓好的網路收斂到 E[ϵxt]\mathbb E[\epsilon\mid x_t],第一式就把它直接翻成那個梯度:

sθ(xt,t):=ϵθ(xt,t)σt    logpt(xt).s_\theta(x_t,t):=-\frac{\epsilon_\theta(x_t,t)}{\sigma_t}\;\approx\;\nabla\log p_t(x_t).

這個量有一個名字。所以開頭那個問題有答案了——

訓好的 denoiser 就是 ptp_t 的 score function xtlogpt(xt)\nabla_{x_t}\log p_t(x_t)

原來 denoiser 學到的是 ptp_t 的局部幾何

把 Tweedie 乘開來讀:E[ϵxt]=σtlogpt(xt)-\mathbb E[\epsilon\mid x_t]=\sigma_t\nabla\log p_t(x_t)。再用上面那個 affine 換算換成 x0x_0 的語言:

αˉtE[x0xt]xtdenoising 的方向=σt2logpt(xt).\underbrace{\sqrt{\bar\alpha_t}\,\mathbb E[x_0\mid x_t]-x_t}_{\text{denoising 的方向}}=\sigma_t^2\,\nabla\log p_t(x_t).

兩邊同向,只差一個 σt2\sigma_t^2 倍。但「從現在這個 xtx_t 往乾淨的方向修正」到底是哪個方向?而且裡面還有一個 tt,它是什麼角色?換一個畫面就看得清楚了。

想像一個很大的廣場,上面站滿了人。t=Tt=T 的時候大家均勻散開,看不出任何結構;隨著 tt 往回走,人群慢慢聚成一團一團——那些團就是資料(貓的那一團、鳥的那一團)。tt 就是這場聚集進行到哪裡。(這和 U1.0 那片地形是同一件事,只是換了視角:地形是從空中看密度,廣場是站在裡面看同一個密度怎麼聚起來。)

你是其中一個人,站在 xtx_t。你看不到整個廣場,也不知道最後會聚成幾團、在哪裡。你唯一做得到的事,是看看周遭的人都往哪裡去,取一個平均——不是跟著某一個人(那等於押注某一張 x0x_0),而是跟著「所有可能跟你在同一個位置的人」的平均去向。那個平均就是 E[x0xt]\mathbb E[x_0\mid x_t],也就是「往乾淨的方向」真正的意思。

而那個平均的方向,正好就是這一刻人群變密的方向——哪一邊比較擠,就往哪一邊。那就是 score。Tweedie 說的是:這兩句話講的是同一件事。

density 與 score 的差別在這個畫面裡也很清楚:

  • 要知道 density,得有人從空中把整個廣場數過一遍——連一個人都沒有的角落也要數。
  • 要知道 score,你只要看看左右哪邊比較擠。站在原地就有。

而你要做的事——走到人多的地方——從頭到尾不需要知道任何一塊到底站了幾個人。所以「拿到的是梯度而不是密度」不是妥協:我們要做的事情本來就只用得到梯度。

tt 在這個畫面裡也有了意義:

  • tt 很大時,人還幾乎均勻散在整個廣場(ptN(0,I)p_t\approx\mathcal N(0,I)),「哪邊比較擠」這個訊號很弱,而且不管站在哪裡都大致指回中央:score x\approx-x
  • tt 很小時,團已經成形(ptpdatap_t\approx p_{\text{data}}),訊號很銳利,指向離你最近的那一團。

而這支網路從來沒有被要求數過廣場。我們只叫它做一件事:看著一張髒掉的圖,把剛才加進去的噪聲猜出來。 Tweedie 說的是,那個猜測就是「哪一邊比較擠」。所以那個 pairwise 的 regression 學到的東西比看起來多得多:它沒有記住任何一張圖,而是把「每個時刻、每個位置,人群往哪邊變密」整片記了下來。

不過「隨波逐流、往人多的地方走」還只是一個很粗的想法。一步要跨多大?要不要帶一點隨機?所有人同時照這個規則走,最後真的會回到原本那個分布嗎?

為什麼學 score,而不是直接學 density?

既然我們最後拿到的是 logpt(xt)\nabla\log p_t(x_t),就值得問一句:這是不是一種妥協?為什麼不乾脆把 ptp_t 本身學出來?

課堂提問Q1

最直接的做法看起來很清楚:訓一個網路去表示 ptp_t,然後對它微分。

這條路會走到哪裡去?

先想一想,再展開看整理後的答案

會走回 U1.0 那面牆。

要讓一個網路輸出的東西是機率密度,它就得積分為 1,也就是得除以一個 normalizing constant ZθZ_\theta。而訓練需要的是 θlogZθ=Expθ[θEθ(x)]\nabla_\theta\log Z_\theta=\mathbb E_{x'\sim p_\theta}[\nabla_\theta E_\theta(x')]——要估它,得先從 pθp_\theta 抽樣。我們想做的事,變成做這件事的前提。

而 score 完全不碰這面牆。把密度寫成 pθ(x)=p~θ(x)/Zθp_\theta(x)=\tilde p_\theta(x)/Z_\theta,取 log 再對 xx 微分:

xlogpθ(x)=xlogp~θ(x)xlogZθ=0,\nabla_x\log p_\theta(x)=\nabla_x\log\tilde p_\theta(x)-\underbrace{\nabla_x\log Z_\theta}_{=\,0},

因為 ZθZ_\thetaxx 是常數。score 對 normalizing constant 免疫。

所以 Tweedie 公式真正的意義不只是「denoiser 和 score 相等」,而是:我們要的那個量,剛好是那面牆管不到的量,而且有一支五行的回歸程式可以拿到它。

注意「繞過」和「解決」不一樣

不要把上面那件事讀成「ZZ 的問題被解決了」。我們從頭到尾沒有去表示 pθp_\theta 本身,只表示它的坡度——所以也就沒有辦法回頭問「這張圖的機率是多少」。我們沒有解出 density estimation,我們繞過了它。 代價是拿不到 density 與 likelihood,換到的是可以直接學到生成真正需要的那個局部幾何。U2 比較兩個框架時會再回到這個取捨。

這個 score field 長什麼樣?

示意圖:左邊在等高線地形上,從 x_t 畫出兩支重疊的箭頭,分別標 ∇log p_t 與 √ᾱ_t·E[x₀|x_t] − x_t,並註明「方向相同,長度差 σ_t²」;右邊三張 x̂₀ 縮圖對應 t=100、500、900,從清楚的貓逐漸變成模糊的平均臉。

圖:同一個方向,但 tt 太大時 x^0\hat x_0 會退化。 左邊是 Tweedie 公式的畫面——兩支箭頭完全同向,只差 σt2\sigma_t^2 倍。右邊是它的另一面:tt 越大,x^0\hat x_0 從清楚的貓變成一張「平均臉」。公式沒有變壞,是 xtx_t 裡的資訊變少了。

互動 demo:score field 與 denoising 方向。 箭頭是網格上每一點的 logpt\nabla\log p_t(用資料樣本當混合 Gaussian 精確算出來的)。切到「denoising 方向」會看到 αˉtE[x0xt]xt\sqrt{\bar\alpha_t}\,\mathbb E[x_0\mid x_t]-x_t 的箭頭方向完全一樣,只差 σt2\sigma_t^2 倍——這就是 Tweedie 公式在畫面上的樣子。把 tt 拉大,箭頭會慢慢變成整片指向原點。

消化一下

想一想

ϵθ\epsilon_\theta 訓到最佳,ϵθ(xt,t)\epsilon_\theta(x_t,t) 等於什麼?

想一想

U1.0 說直接學密度會卡在 normalizing constant。score-based 的方法為什麼不卡?

想一想

tt 很大時,logpt(x)\nabla\log p_t(x) 大約長什麼樣子?

參考文獻

  1. Efron, B. Tweedie’s Formula and Selection Bias. JASA 2011. (本篇主角公式的現代整理;歷史出處見 M1.4。)
  2. Hyvärinen, A. Estimation of Non-Normalized Statistical Models by Score Matching. JMLR 2005. (「不必知道 ZZ 也能學」的起點。)
  3. Song, Y., Ermon, S. Generative Modeling by Estimating Gradients of the Data Distribution. NeurIPS 2019. (把 score 當成生成模型的建模對象。)