本篇重用M3.1水流加亂流:SDE 是加了噪聲的 ODE·M3.2一千片葉子在亂流裡:Fokker–Planck 方程式·M3.3山谷裡隨機走的人群:Langevin Dynamics 與 Stationary Distribution
手上有兩樣東西,可以怎麼組
U3.0 訓練完之後,我們手上有兩個東西:速度 bt,還有 score st:=∇logpt。
U2 只用了前者——解 ODE x˙=bt(x)。U1.4 的 reverse SDE 兩個都用了。那中間呢?
如果把 score 摻進去一點,
會不會走到別的地方?
一整族,中間全部合法
對任意非負函數 εt(只跟時間有關,不跟位置有關),考慮
dXt=[bt(Xt)+εtst(Xt)]dt+2εtdWt,X0∼p0, t:0→1.
答案是:不會走到別的地方。對每一個 εt≥0,這個 SDE 在時刻 t 的邊際都是同一個 pt。
證明只有兩行。SDE 的邊際 ρt 滿足 Fokker–Planck:
∂tρ=−∇⋅((b+εs)ρ)+εΔρ.
把 ρ=pt 代進去。關鍵是 spt=∇logpt⋅pt=∇pt,所以那兩個多出來的項
−∇⋅(ε∇pt)+εΔpt=0
互相抵消,剩下的正是 bt 生成 pt 的 continuity equation。□
ε≡0 就是 U2 的 ODE;εt 取某個特定的 schedule 會還原 U1.4 的 reverse SDE;中間任何取法都合法。U1.4 說「PF-ODE 的 score 係數剛好是 reverse SDE 的一半」,講的就是這一族裡兩個特定的點。
多出來的那一組是什麼?把它單獨看:
Langevin 項εtstdt+2εtdWt
加一點噪聲,再用 score 把樣本往高密度處拉回來。
這兩件事對邊際的淨效果剛好是零——這正是上面那個抵消的意思。所以它不改變分布,只改變走法。
補充這一族在 diffusion 那一側長什麼樣
把 εt 換成 U1.4 的語言,它就是 DDIM 那個 η 家族:η=0 對應 ε=0、η=1 對應完整的 reverse SDE。差別只是那裡用離散步的係數寫、這裡用連續時間的 SDE 寫。
實務上 εt 不會取成常數。由 U1.3 的 Tweedie 公式,∇logpt=−E[ϵ∣xt]/σt,而分子是 O(1),所以 score 的量級是 O(1/σt)(這裡沿用 U2 的 σt 表示噪聲那一端的係數,也就是 U3.0 對照表裡的 αt——談 score 的量級時這個寫法比較好讀)。常見做法是讓 εt∝σt2,這樣 εtst=O(σt) 不只有界,還會在資料那一端自己收掉——下面的 demo 就是這樣做的(εt=cσt2,c 是那個滑桿)。
互動 demo:同一組邊際,一整族走法。 把 c 從 0 拉到 6,軌跡從光滑變抖動,但終點分布與資料的 energy distance(兩堆樣本之間的一種距離,和 U3.2 用的 W2 是兩把不同的尺,數值不要互相比較)一直停在 0.01 上下——這就是上面那個抵消。接著按「把所有樣本推歪」,人為在 t=0.15 把每一顆樣本平移將近一個單位:c=0 時那個偏移一路帶到終點(energy distance 約 0.7),c 越大救得越回來,c=4 以後幾乎回到沒推的水準。
加了噪聲之後,錯還救得回來嗎?
課堂提問Q1
U3.0 在訓練時加了 γtz,所以每一個 xt 都帶了額外的噪聲。
這樣訓出來的 flow matching,是不是就有 U1.4 說的那種自我修正能力了?
先想一想,再展開看整理後的答案
沒有——而這個問題會把兩個很容易混在一起的旋鈕分開。
訓練時的 γt 決定 pt 長什麼樣,以及你學得到哪些量。γ>0 讓你除了 bt 之外還能學 ηt,於是手上多了一個 score。
取樣時的 εt 決定你怎麼走。ε=0 沒有 Langevin 項:一旦偏離 pt,就沿著偏離之後的軌跡繼續走,誤差一路帶到終點。ε>0 才有拉回。
所以四種組合裡只有一種有修正能力:
| 用 ODE 取樣(ε=0) | 用 SDE 取樣(ε>0) |
|---|
| 訓練時 γ=0、獨立配對 | 沒有修正 | 有修正(score 由 Gaussian 起點給出) |
| 訓練時 γ>0 | 沒有修正 | 有修正 |
γ 給的是選擇權:沒有 score 就根本寫不出 SDE 取樣器,有了才輪到你選 ε。
順便把 U1.4 的後半補完:DDPM 與 DDIM 之所以能共用同一個網路,是因為 diffusion 的 x0 本身就是 Gaussian、天然有 score;兩者的差別純粹是 ε 取 0 還是不取 0,不是兩個模型。
至於拉回是怎麼發生的:st 指向 pt 密度上升的方向,所以偏到低密度區的樣本會被 εst 推回高密度區;同時注入的 2εdW 保證它不會全部塌到峰頂上。兩者平衡的時候樣本的分布就是 pt——這就是 Langevin dynamics 的平穩分布。
不過 demo 也顯示了一件不能省略的事:修正既不免費也不瞬間。 它需要足夠大的 ε,也需要足夠的剩餘時間;把「推歪」的時刻往後移,同樣的 c 就救不回來了。
有修正,不代表更好
ε>0 每一步會多注入 2εh 量級的噪聲,而這件事本身就是一個誤差來源:Euler–Maruyama 的弱收斂只有一階、強收斂只有半階,比 ODE 的一階(還可以用 Heun 升到二階)差(這兩個「收斂」分別在說什麼,U3.2 會講)。ODE 沒有這筆成本,代價是誤差會一路累積。
εt 不影響邊際,只影響誤差怎麼累積。
所以「該取多少」不是正確性問題,而是取捨問題:ε 大,前面的偏差有機會被拉回,但每一步自己多帶一份噪聲誤差。這正是 U1.4 那個判準在連續版本上的樣子:ε 要不要開、開多大,看的是模型誤差有沒有大到值得花這筆噪聲成本。 模型幾乎沒有誤差時(乾淨的 toy),沒有東西可修,ε 只是多帶一份噪聲誤差;模型誤差大時(真實模型),修正才划算。U3.6 會把兩邊都量出來。εt 該怎麼取到最好目前沒有定論,常見做法是在中段的 t 給比較大的值、兩端收小。
展開細節為什麼「兩端收小、中間放大」是合理的
兩端各有理由。t 接近 1 時 σt→0,而 score 是 O(1/σt),ε 不收小的話 εs 會炸掉——這是純粹的數值理由。t 接近 0 時樣本還在起點分布上,本來就沒有偏離要修,加噪聲只是多花預算。
中段則是 pt 從一團 Gaussian 開始分裂成多個 mode 的地方,直覺上也是最需要修正的一段。不過要說清楚:本課沒有量過「誤差沿 t 怎麼分布」——U3.2 給的是整段積分,不是逐 t 的曲線。所以這一段是啟發式,不是推導。Karras 等人 [3] 的 stochasticity schedule 是這個形狀,那是實驗調出來的。
消化一下
參考文獻
- Albergo, M. S., Boffi, N. M., Vanden-Eijnden, E. Stochastic Interpolants: A Unifying Framework for Flows and Diffusions. 2023. (這一族 SDE 與 Fokker–Planck 的兩行證明。)
- Song, Y., Sohl-Dickstein, J., Kingma, D. P., Kumar, A., Ermon, S., Poole, B. Score-Based Generative Modeling through Stochastic Differential Equations. ICLR 2021. (reverse SDE 與 PF-ODE 是這一族裡的兩個點。)
- Karras, T., Aittala, M., Aila, T., Laine, S. Elucidating the Design Space of Diffusion-Based Generative Models. NeurIPS 2022. (εt 該怎麼排的實務討論,也就是他們說的 stochasticity。)