學完這篇,你能
說出 L simple \mathcal L_{\text{simple}} L simple 在固定一個 t t t 上的最佳解是什麼。 寫出 ϵ θ → E [ ϵ ∣ x t ] \epsilon_\theta\to\mathbb E[\epsilon\mid x_t] ϵ θ → E [ ϵ ∣ x t ] (以及它的 x 0 x_0 x 0 寫法),說明為什麼加權換掉也動不了這個最佳解,並說明為什麼這個 posterior mean 已經和整批資料有關,而不只和某一筆 training pair 有關。
推導 Tweedie 公式,把 E [ ϵ ∣ x t ] \mathbb E[\epsilon\mid x_t] E [ ϵ ∣ x t ] 與 ∇ log p t ( x t ) \nabla\log p_t(x_t) ∇ log p t ( x t ) 連起來。 說出關鍵的兩步(除以 p t ( x t ) p_t(x_t) p t ( x t ) 之後被積函數按 Bayes 正好是後驗;被積函數本身就是 − ϵ / σ t -\epsilon/\sigma_t − ϵ / σ t ),並寫出它的 x 0 x_0 x 0 版本。
說出為什麼 score 這個建模對象完全不必理會 normalizing constant。 並分清它是被繞過 而不是被解決:代價是拿不到 likelihood。
本篇重用 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 的加權拿掉了,直接用
L simple ( θ ) = E t , x 0 , ϵ [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] . \mathcal L_{\text{simple}}(\theta)=\mathbb E_{t,\,x_0,\,\epsilon}\big[\|\epsilon_\theta(x_t,t)-\epsilon\|^2\big]. L simple ( θ ) = E t , x 0 , ϵ [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] .
所以到這裡留下了一個問題:ELBO 解釋的是原本那個 weighted objective;那我們現在真的拿來 train 的 simple MSE,到底在學什麼?
而且這個問題比它看起來更根本。我們從頭到尾都只是在看 ( x 0 , x t ) (x_0,x_t) ( x 0 , x t ) 或 ( ϵ , x t ) (\epsilon,x_t) ( ϵ , x t ) 這種一筆一筆的 training pair,從來沒有把 p data p_{\text{data}} p data 寫出來過。
一個看起來只是做 denoising regression 的 neural network,
到底學到了多少關於 data distribution 的資訊?
要回答這件事,我們先不看整條 reverse process,只固定一個 noise level t t t ,問最簡單的那個問題:這個 MSE 的最佳解是什麼?
固定一個 t t t ,這個回歸的最佳解是什麼?
把 L simple \mathcal L_{\text{simple}} L simple 攤開來看:
L simple ( θ ) = E t E x 0 , ϵ [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] ⏟ 每一個 t 自己的一項 , x t = α ˉ t x 0 + σ 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 . L simple ( θ ) = E t 每一個 t 自己的一項 E x 0 , ϵ [ ϵ θ ( x t , t ) − ϵ 2 ] , x t = α ˉ t x 0 + σ t ϵ .
它其實是一堆互不干擾 的小問題疊起來:ϵ θ ( ⋅ , t ) \epsilon_\theta(\cdot,t) ϵ θ ( ⋅ , t ) 在不同的 t t t 上可以各自輸出各自的值,所以固定一個 t t t 之後,那一項要怎麼最小化和別的 t t t 無關。
加權那件事也因此可以先放下。 帶加權的版本只是在每一項前面乘一個與 ϵ θ \epsilon_\theta ϵ θ 無關的常數 w ( t ) w(t) w ( t ) ——常數不會改變一個最小化問題的解,只會改變訓練時把力氣花在哪些 t t t 。所以上面留下的問題可以縮小成一個很單純的樣子:
固定一個 t t t ,min ϵ θ E [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] \min_{\epsilon_\theta}\mathbb E\big[\|\epsilon_\theta(x_t,t)-\epsilon\|^2\big] min ϵ θ E [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] 的最佳解是什麼?
而這種 MSE 的 loss 有一個已知的最佳解公式。對任何一對隨機變數 ( X , Y ) (X,Y) ( X , Y ) ,
arg min f E ( X , Y ) [ ∥ f ( X ) − Y ∥ 2 ] ⏟ 對聯合分布取 = E [ Y ∣ X ] ⏟ 對給定 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{ 的條件分布取}} . arg f min 對聯合分布取 E ( X , Y ) [ ∥ f ( X ) − Y ∥ 2 ] = 對給定 X 的條件分布取 E [ Y ∣ X ] .
這個公式有一個很直覺的畫面。想像你要在一條街上開一家店,明天顧客會出現在哪裡你不知道,只知道他們大致的分布;而「不方便」的代價是顧客走到店裡的距離平方 。最好的位置在哪?不是人最多的那一點,而是所有顧客位置的平均 ——平方的代價會讓遠處的人拉得特別用力,於是你被迫站到重心上。f ( X ) f(X) f ( X ) 就是你選的位置,Y Y Y 是顧客真正出現的地方;而情報 X X X 換了(哪一區、什麼天氣),顧客的分布也跟著換,所以最好的位置不是一個點,是一個隨 X X X 改變的函數。
兩個期望值取的對象不一樣:左邊對 ( X , Y ) (X,Y) ( X , Y ) 的聯合分布 取,得到一個數值;右邊對「給定 X X X 之後 Y Y Y 的條件分布 」取,得到一個隨給定的 X X X 改變的函數 f ( X ) f(X) f ( X ) 。這個公式的證明只要把 Y Y Y 拆成 E [ Y ∣ X ] + ( Y − E [ Y ∣ X ] ) \mathbb E[Y\mid X]+\big(Y-\mathbb E[Y\mid X]\big) E [ Y ∣ X ] + ( Y − E [ Y ∣ X ] ) 就可以得到(詳見 M1.2 )。
套回 DDPM:X X X 就是 x t x_t x t 、Y Y Y 就是 ϵ \epsilon ϵ ,而聯合分布來自「抽一張 x 0 x_0 x 0 、抽一個 ϵ \epsilon ϵ 、用那一行算出 x t x_t x t 」這個程序。所以理想上,模型夠強、訓練到收斂的話 ,
ϵ θ ( x t , t ) ⟶ E [ ϵ ∣ x t ] . \epsilon_\theta(x_t,t)\ \longrightarrow\ \mathbb E[\epsilon\mid x_t]. ϵ θ ( x t , t ) ⟶ E [ ϵ ∣ x t ] .
也就是說,模型不是在記住「這個 x t x_t x t 是由哪一個 ϵ \epsilon ϵ 加出來的」。它學的是:看到這個 x t x_t x t 之後,所有可能的 ϵ \epsilon ϵ 按 posterior 加權之後的平均。
x 0 x_0 x 0 -prediction 也是同一件事,因為 x t = α ˉ t x 0 + σ t ϵ x_t=\sqrt{\bar\alpha_t}x_0+\sigma_t\epsilon x t = α ˉ t x 0 + σ t ϵ 對 x 0 x_0 x 0 與 ϵ \epsilon ϵ 是 affine 的,條件期望又是線性的:
E [ x 0 ∣ x t ] = x t − σ t E [ ϵ ∣ x t ] α ˉ t . \mathbb E[x_0\mid x_t]=\frac{x_t-\sigma_t\,\mathbb E[\epsilon\mid x_t]}{\sqrt{\bar\alpha_t}} . E [ x 0 ∣ x t ] = α ˉ t x t − σ t E [ ϵ ∣ x t ] .
這就是上一篇「散布是 schedule 給的,中心由 E [ x 0 ∣ x t ] \mathbb E[x_0\mid x_t] E [ x 0 ∣ x t ] 決定」那句話缺的證明——而且這次的理由只用到 MSE,完全沒有用到 Gaussian,所以它對拿掉加權的 L simple \mathcal L_{\text{simple}} L simple 一樣成立。
到這裡事情就開始有點不一樣了。因為這個 posterior p ( x 0 ∣ x t ) p(x_0\mid x_t) p ( x 0 ∣ x t ) 已經不是只跟某一筆 training pair 有關,而是跟整個資料分布有關——要算出它,得把所有 可能的 x 0 x_0 x 0 都考慮進去。
補充 順帶一提:這也解釋了 loss 為什麼停在一個非零值 同一個分解還告訴我們 loss 會停在哪裡。把 E ∥ f ( X ) − Y ∥ 2 \mathbb E\|f(X)-Y\|^2 E ∥ f ( X ) − Y ∥ 2 拆成「偏差」與「殘差」兩項,最佳解讓第一項歸零,剩下的是
min θ E [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] = E t , x t [ tr Var ( ϵ ∣ x t ) ] . \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]. θ min E [ ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 ] = E t , x t [ tr Var ( ϵ ∣ x t ) ] . 所以 loss 不會到 0 ,而且它停住的高度是有意義的——那是「看到 x t x_t x t 之後,ϵ \epsilon ϵ 還剩多少不確定性」。U1.5 會把這條線實際畫出來。
另外,這一整段是 U1.2 那個 conditional trick 的 MSE 版本 :那裡我們證的是 KL 版(把 x 0 x_0 x 0 放進條件裡,objective 只差一個與 θ \theta θ 無關的常數),這裡是同一件事在平方誤差下的樣子。
這個 posterior mean 跟整個分布有什麼關係?
我們猜測 posterior mean E [ ϵ ∣ x t ] \mathbb E[\epsilon\mid x_t] E [ ϵ ∣ x t ] 可能跟整個資料分布有某種關係;又因為它是在 t t t 的時候估計的,所以可能跟 x t x_t x t 的分布有關係。我們把 x t x_t x t 的分布用 p t p_t p t 來表示,且我們有
p t ( x t ) = ∫ q ( x t ∣ x 0 ) p data ( x 0 ) d x 0 , p_t(x_t)=\int q(x_t\mid x_0)\,p_{\text{data}}(x_0)\,\mathrm dx_0 , p t ( x t ) = ∫ q ( x t ∣ x 0 ) p data ( x 0 ) d x 0 ,
這個分布也是 U1.2 裡第一次使用 Bayes 時分母的那個 p t ( x t ) p_t(x_t) p t ( x t ) 。
於是我們可以把猜測的問題問得更精確一點:
E [ ϵ ∣ x t ] \mathbb E[\epsilon\mid x_t] E [ ϵ ∣ x t ] 和 p t ( x t ) p_t(x_t) p t ( x t ) 有什麼關係嗎?
Tweedie 公式:對 x t x_t x t 微分看看
固定一個 t t t ,我們先試著透過已知的 q ( x t ∣ x 0 ) q(x_t\mid x_0) q ( x t ∣ x 0 ) 來觀察 p t p_t p t :
p t ( x t ) = ∫ N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 . 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 . p t ( x t ) = ∫ N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 .
我們試著對 x t x_t x t 微分看看 (梯度可以穿到積分裡面是有條件的),其中積分裡只有代表 q ( x t ∣ x 0 ) q(x_t\mid x_0) q ( x t ∣ x 0 ) 的 Gaussian 會被微分:
∇ x t p t ( x t ) = ∫ ∇ x t N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 = ∫ − x t − α ˉ t x 0 σ t 2 N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 . \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} ∇ x t p t ( x t ) = ∫ ∇ x t N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 = ∫ − σ t 2 x t − α ˉ t x 0 N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) d x 0 .
接著兩邊除以 p t ( x t ) p_t(x_t) p t ( x t ) 。左邊是 ∇ x t p t ( x t ) / p t ( x t ) = ∇ x t log p t ( x t ) \nabla_{x_t}p_t(x_t)\big/p_t(x_t)=\nabla_{x_t}\log p_t(x_t) ∇ x t p t ( x t ) / p t ( x t ) = ∇ x t log p t ( x t ) ;而右邊出現的那一塊,按 Bayes 定理正好就是後驗 p ( x 0 ∣ x t ) p(x_0\mid x_t) p ( x 0 ∣ x t ) (M1.3 ):
N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) p t ( x t ) = q ( x t ∣ x 0 ) p data ( x 0 ) p t ( x t ) = p ( x 0 ∣ x t ) . \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). p t ( x t ) N ( x t ; α ˉ t x 0 , σ t 2 I ) p data ( x 0 ) = p t ( x t ) q ( x t ∣ x 0 ) p data ( x 0 ) = p ( x 0 ∣ x t ) .
因此我們得到:
∇ x t log p t ( x t ) = ∫ − x t − α ˉ t x 0 σ t 2 p ( x 0 ∣ x t ) d x 0 . \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 . ∇ x t log p t ( x t ) = ∫ − σ t 2 x t − α ˉ t x 0 p ( x 0 ∣ x t ) d x 0 .
被積函數裡那一塊看起來有點眼熟。把 forward 那一行 x t = α ˉ t x 0 + σ t ϵ x_t=\sqrt{\bar\alpha_t}x_0+\sigma_t\epsilon x t = α ˉ t x 0 + σ t ϵ 移項,會發現
x t − α ˉ t x 0 σ t = ϵ , \frac{x_t-\sqrt{\bar\alpha_t}\,x_0}{\sigma_t}=\epsilon , σ t x t − α ˉ t x 0 = ϵ ,
也就是「造出這個 x t x_t x t 的那個噪聲」。所以被積函數就是 − ϵ / σ t -\epsilon/\sigma_t − ϵ / σ t ,而對 p ( x 0 ∣ x t ) p(x_0\mid x_t) p ( x 0 ∣ x t ) 取平均就是對 ϵ \epsilon ϵ 的後驗取平均:
∇ x t log p t ( x t ) = − E [ ϵ ∣ x t ] σ t \boxed{\;\nabla_{x_t}\log p_t(x_t)=-\frac{\mathbb E[\epsilon\mid x_t]}{\sigma_t}\;} ∇ x t log p t ( x t ) = − σ t E [ ϵ ∣ x t ]
右邊冒出來的,正是上一節那個 posterior mean。換成 x 0 x_0 x 0 的寫法就是
E [ x 0 ∣ x t ] = x t + σ t 2 ∇ log p t ( x t ) α ˉ 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 [ x 0 ∣ x t ] = α ˉ t x t + σ t 2 ∇ log p t ( x t ) ,
兩式只差 E [ x 0 ∣ x t ] \mathbb E[x_0\mid x_t] E [ x 0 ∣ x t ] 與 E [ ϵ ∣ x t ] \mathbb E[\epsilon\mid x_t] E [ ϵ ∣ x t ] 之間那個 affine 換算。而既然訓好的網路收斂到 E [ ϵ ∣ x t ] \mathbb E[\epsilon\mid x_t] E [ ϵ ∣ x t ] ,第一式就把它直接翻成那個梯度:
s θ ( x t , t ) : = − ϵ θ ( x t , t ) σ t ≈ ∇ log p t ( x t ) . s_\theta(x_t,t):=-\frac{\epsilon_\theta(x_t,t)}{\sigma_t}\;\approx\;\nabla\log p_t(x_t). s θ ( x t , t ) := − σ t ϵ θ ( x t , t ) ≈ ∇ log p t ( x t ) .
這個量有一個名字。所以開頭那個問題有答案了——
訓好的 denoiser 就是 p t p_t p t 的 score function ∇ x t log p t ( x t ) \nabla_{x_t}\log p_t(x_t) ∇ x t log p t ( x t ) 。
原來 denoiser 學到的是 p t p_t p t 的局部幾何
把 Tweedie 乘開來讀:− E [ ϵ ∣ x t ] = σ t ∇ log p t ( x t ) -\mathbb E[\epsilon\mid x_t]=\sigma_t\nabla\log p_t(x_t) − E [ ϵ ∣ x t ] = σ t ∇ log p t ( x t ) 。再用上面那個 affine 換算換成 x 0 x_0 x 0 的語言:
α ˉ t E [ x 0 ∣ x t ] − x t ⏟ denoising 的方向 = σ t 2 ∇ log p t ( x t ) . \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). denoising 的方向 α ˉ t E [ x 0 ∣ x t ] − x t = σ t 2 ∇ log p t ( x t ) .
兩邊同向,只差一個 σ t 2 \sigma_t^2 σ t 2 倍。但「從現在這個 x t x_t x t 往乾淨的方向修正」到底是哪個方向?而且裡面還有一個 t t t ,它是什麼角色?換一個畫面就看得清楚了。
想像一個很大的廣場,上面站滿了人。t = T t=T t = T 的時候大家均勻散開,看不出任何結構;隨著 t t t 往回走,人群慢慢聚成一團一團——那些團就是資料(貓的那一團、鳥的那一團)。t t t 就是這場聚集進行到哪裡。 (這和 U1.0 那片地形是同一件事,只是換了視角:地形是從空中看密度,廣場是站在裡面看同一個密度怎麼聚起來。)
你是其中一個人,站在 x t x_t x t 。你看不到整個廣場,也不知道最後會聚成幾團、在哪裡。你唯一做得到的事,是看看周遭的人都往哪裡去,取一個平均 ——不是跟著某一個人(那等於押注某一張 x 0 x_0 x 0 ),而是跟著「所有可能跟你在同一個位置的人」的平均去向。那個平均就是 E [ x 0 ∣ x t ] \mathbb E[x_0\mid x_t] E [ x 0 ∣ x t ] ,也就是「往乾淨的方向」真正的意思。
而那個平均的方向,正好就是這一刻人群變密的方向 ——哪一邊比較擠,就往哪一邊。那就是 score。Tweedie 說的是:這兩句話講的是同一件事。
density 與 score 的差別在這個畫面裡也很清楚:
要知道 density ,得有人從空中把整個廣場數過一遍——連一個人都沒有的角落也要數。
要知道 score ,你只要看看左右哪邊比較擠。站在原地就有。
而你要做的事——走到人多的地方——從頭到尾不需要知道任何一塊到底站了幾個人 。所以「拿到的是梯度而不是密度」不是妥協:我們要做的事情本來就只用得到梯度。
t t t 在這個畫面裡也有了意義:
t t t 很大時,人還幾乎均勻散在整個廣場(p t ≈ N ( 0 , I ) p_t\approx\mathcal N(0,I) p t ≈ N ( 0 , I ) ),「哪邊比較擠」這個訊號很弱,而且不管站在哪裡都大致指回中央:score ≈ − x \approx-x ≈ − x 。
t t t 很小時,團已經成形(p t ≈ p data p_t\approx p_{\text{data}} p t ≈ p data ),訊號很銳利,指向離你最近的那一團。
而這支網路從來沒有被要求數過廣場。我們只叫它做一件事:看著一張髒掉的圖,把剛才加進去的噪聲猜出來。 Tweedie 說的是,那個猜測就是「哪一邊比較擠」。所以那個 pairwise 的 regression 學到的東西比看起來多得多:它沒有記住任何一張圖,而是把「每個時刻、每個位置,人群往哪邊變密」整片記了下來。
不過「隨波逐流、往人多的地方走」還只是一個很粗的想法。一步要跨多大?要不要帶一點隨機?所有人同時照這個規則走,最後真的會回到原本那個分布嗎?
為什麼學 score,而不是直接學 density?
既然我們最後拿到的是 ∇ log p t ( x t ) \nabla\log p_t(x_t) ∇ log p t ( x t ) ,就值得問一句:這是不是一種妥協?為什麼不乾脆把 p t p_t p t 本身學出來?
課堂提問 Q1
最直接的做法看起來很清楚:訓一個網路去表示 p t p_t p t ,然後對它微分。
這條路會走到哪裡去?
先想一想,再展開看整理後的答案 會走回 U1.0 那面牆。
要讓一個網路輸出的東西是機率密度 ,它就得積分為 1,也就是得除以一個 normalizing constant Z θ Z_\theta Z θ 。而訓練需要的是 ∇ θ log Z θ = E x ′ ∼ p θ [ ∇ θ E θ ( x ′ ) ] \nabla_\theta\log Z_\theta=\mathbb E_{x'\sim p_\theta}[\nabla_\theta E_\theta(x')] ∇ θ log Z θ = E x ′ ∼ p θ [ ∇ θ E θ ( x ′ )] ——要估它,得先從 p θ p_\theta p θ 抽樣。我們想做的事,變成做這件事的前提。
而 score 完全不碰這面牆。把密度寫成 p θ ( x ) = p ~ θ ( x ) / Z θ p_\theta(x)=\tilde p_\theta(x)/Z_\theta p θ ( x ) = p ~ θ ( x ) / Z θ ,取 log 再對 x x x 微分:
∇ x log p θ ( x ) = ∇ x log p ~ θ ( x ) − ∇ x log Z θ ⏟ = 0 , \nabla_x\log p_\theta(x)=\nabla_x\log\tilde p_\theta(x)-\underbrace{\nabla_x\log Z_\theta}_{=\,0}, ∇ x log p θ ( x ) = ∇ x log p ~ θ ( x ) − = 0 ∇ x log Z θ , 因為 Z θ Z_\theta Z θ 對 x x x 是常數。score 對 normalizing constant 免疫。
所以 Tweedie 公式真正的意義不只是「denoiser 和 score 相等」,而是:我們要的那個量,剛好是那面牆管不到的量 ,而且有一支五行的回歸程式可以拿到它。
注意 「繞過」和「解決」不一樣 不要把上面那件事讀成「Z Z Z 的問題被解決了」。我們從頭到尾沒有去表示 p θ p_\theta p θ 本身 ,只表示它的坡度——所以也就沒有辦法回頭問「這張圖的機率是多少」。我們沒有解出 density estimation,我們繞過了它。 代價是拿不到 density 與 likelihood,換到的是可以直接學到生成真正需要的那個局部幾何。U2 比較兩個框架時會再回到這個取捨。
這個 score field 長什麼樣?
圖:同一個方向,但 t t t 太大時 x ^ 0 \hat x_0 x ^ 0 會退化。 左邊是 Tweedie 公式的畫面——兩支箭頭完全同向,只差 σ t 2 \sigma_t^2 σ t 2 倍。右邊是它的另一面:t t t 越大,x ^ 0 \hat x_0 x ^ 0 從清楚的貓變成一張「平均臉」。公式沒有變壞,是 x t x_t x t 裡的資訊變少了。
互動 demo:score field 與 denoising 方向。 箭頭是網格上每一點的 ∇ log p t \nabla\log p_t ∇ log p t (用資料樣本當混合 Gaussian 精確算出來的)。切到「denoising 方向」會看到 α ˉ t E [ x 0 ∣ x t ] − x t \sqrt{\bar\alpha_t}\,\mathbb E[x_0\mid x_t]-x_t α ˉ t E [ x 0 ∣ x t ] − x t 的箭頭方向完全一樣 ,只差 σ t 2 \sigma_t^2 σ t 2 倍——這就是 Tweedie 公式在畫面上的樣子。把 t t t 拉大,箭頭會慢慢變成整片指向原點。
消化一下
開頭那個問題有答案了:那個 simple MSE 在學的,是整個 p t p_t p t 的 score——也就是每個位置、每個時刻「人群往哪邊變密」。這條路完全沒有用到 ELBO,也沒有用到加權長什麼樣。
demo 裡看得到那個場:每一點一支箭頭,而「順著它走」大概是什麼意思,我們心裡也有一個畫面了。但那還只是一個畫面。這個流動,有沒有一個嚴謹的數學模型在描述它?
有,而且不只一個。下一篇把步長縮到 0,會看到同一個流動可以寫成一條 SDE ,也可以寫成一條完全不帶隨機的 ODE ——兩者推動的分布在每個時刻都一樣,只是每條軌跡抖不抖。那時候 U1.2 的那五行會變成它們的一階離散,而「一步跨多大、要不要加噪聲」也才有得算。
下一篇:U1.4 反向:DDPM、DDIM 與 SDE/ODE →
參考文獻
Efron, B. Tweedie’s Formula and Selection Bias. JASA 2011. (本篇主角公式的現代整理;歷史出處見 M1.4 。)
Hyvärinen, A. Estimation of Non-Normalized Statistical Models by Score Matching. JMLR 2005. (「不必知道 Z Z Z 也能學」的起點。)
Song, Y., Ermon, S. Generative Modeling by Estimating Gradients of the Data Distribution. NeurIPS 2019. (把 score 當成生成模型的建模對象。)