CS236 補充課 F · Fokker–Planck 與 Langevin
CS236 補充課 F · Fokker–Planck 與 Langevin

Fokker–Planck 與 Langevin:從一顆粒子的抖動,到整個分佈的演化

補充課 E 的 SDE 描述一顆粒子怎麼走;這一頁問的是:一大群照同一個 SDE 走的粒子,它們的密度怎麼變?答案是 Fokker–Planck 方程。有了它,CS236 的三個關鍵事實都能一步一步推導出來:Langevin 為什麼會收斂到目標分佈、反向 SDE 為什麼需要 score、probability flow ODE 為什麼和 SDE 有一樣的分佈。

先修:補充課 C(連續方程)、D(detailed balance、MH)、E(SDE、Itô) 服務:第 12–17 講 預計閱讀 2–3 小時,可以分次讀

讀完這頁你應該能夠

  1. 寫出一維 Fokker–Planck 方程,並用 Itô 公式加分部積分推導它。
  2. 說明 drift 項(搬運)與擴散項(抹平)各自對密度做了什麼。
  3. 從「通量為零」推導出 Langevin dynamics 的 drift,並說明它需要的只有 score。
  4. 算出 ULA 的步長偏差,並用 MALA 手算一步接受率。
  5. 說明 Langevin 在分得很開的多峰分佈上為什麼學不到正確的峰權重,以及 annealed Langevin 怎麼解決。
  6. 推導 probability flow ODE 和反向 SDE,用高斯例子驗證,並說明兩者的係數為什麼差 2 倍。

00這一頁要回答什麼

先整理我們已經有的工具:

粒子的規則密度的方程在哪裡學的
\(dx = f\,dt\)(只有 drift)連續方程 \(\partial_tp = -\partial_x(fp)\)補充課 C 第 5 節
\(dx = g\,dW\)(只有雜訊)熱方程 \(\partial_tp = \tfrac{g^2}2\partial_x^2p\)補充課 C 第 8 節
\(dx = f\,dt + g\,dW\)(兩者都有)?本頁第 1 節

填上這一格之後,就能回答三個問題:

  1. 取樣:怎麼設計一個 SDE,讓它走久了之後的分佈是我們要的 \(p\)?(第 3–5 節)
  2. 生成:前向 SDE 把資料變成雜訊,怎麼把它倒過來?(第 6 節)
  3. 為什麼這兩件事都只需要 score?

01從粒子到密度:Fokker–Planck 方程

答案,和直覺

一群粒子各自照 \(dx = f(x)\,dt + g\,dW\) 移動(每顆有自己的雜訊)。在極短的時間內,一顆粒子先被 drift 推一下,再被雜訊抖一下,兩個效果都很小,所以對密度的影響可以直接相加:

Fokker–Planck 方程 $$\frac{\partial p_t}{\partial t} = \underbrace{-\frac{\partial}{\partial x}\big(f\,p_t\big)}_{\text{drift:搬運}} + \underbrace{\frac{g^2}{2}\,\frac{\partial^2p_t}{\partial x^2}}_{\text{擴散:抹平}}$$

它也叫 Kolmogorov forward equation。\(g = 0\) 時就是連續方程,\(f = 0\) 時就是熱方程。

drift:搬運形狀不變,整個移走擴散:抹平位置不變,峰變矮變寬
灰色是原本的密度,橙色是一段時間之後。
手算:驗證一個解

OU 過程 \(dx = -x\,dt + dW\)(\(\theta = 1,\ \sigma = 1\))。補充課 E 第 4 節算出穩態是 \(\mathcal N(0, \tfrac12)\),也就是 \(p\propto e^{-x^2}\)。穩態應該讓右邊等於 0。因為 \(p' = -2xp\):

  • drift 項:\(-\partial_x(-xp) = p + xp'\)\(\ = p(1 - 2x^2)\)
  • 擴散項:\(\tfrac12p'' = \tfrac12p(4x^2 - 2)\)\(\ = p(2x^2 - 1)\)

相加剛好是 0 ✓。兩項在每一點都大小相等、方向相反。

Demo F1 · 4,000 顆粒子的直方圖 vs. 數值解 Fokker–Planck 方程

怎麼看:藍色長條是模擬 4,000 顆粒子各自的隨機路徑;橙色曲線是直接在網格上解偏微分方程,完全沒有用到隨機數。兩個完全不同的計算,結果重合,這就是 Fokker–Planck 方程在說的事。切換 SDE,拖動時間。
粒子直方圖(Euler–Maruyama,h = 0.002)Fokker–Planck 的數值解穩態(有的話)

嚴格的推導

「兩個效果相加」只是直覺。現在用 Itô 公式推導一次。困難在於:我們知道一顆粒子怎麼走,想知道的卻是密度。橋樑是期望值:任何函數 \(\phi\) 的平均,都可以從兩邊來算。

挑一個平滑、在遠處為 0 的函數 \(\phi(x)\),叫測試函數。

  1. 從粒子這邊算。由 Itô 公式: $$\begin{aligned}d\phi(x_t) ={}&\phi'\,(f\,dt + g\,dW)\\&+ \tfrac12\phi''\,g^2\,dt\end{aligned}$$
  2. 取期望。\(dW\) 平均為 0,而且和現在的 \(\phi'(x_t)\) 獨立,所以那一項消失: $$\frac{d}{dt}\mathbb E[\phi(x_t)] = \mathbb E\big[f\phi' + \tfrac{g^2}2\phi''\big]$$
  3. 把期望寫成積分。期望就是用密度加權平均: $$\begin{aligned}&\mathbb E\big[f\phi' + \tfrac{g^2}2\phi''\big]\\={}&\int p_t\,\big(f\phi' + \tfrac{g^2}2\phi''\big)\,dx\end{aligned}$$
  4. 從密度這邊算。\(\mathbb E[\phi(x_t)] = \int\phi\,p_t\,dx\),只有 \(p_t\) 隨時間變,所以左邊是 \(\int\phi\,\partial_tp_t\,dx\)。
  5. 分部積分,把導數從 \(\phi\) 搬到 \(p\) 上。微積分的分部積分是 \(\int u\,v'\,dx = -\int u'\,v\,dx\)(\(\phi\) 在遠處為 0,邊界項是 0)。
    • 第一項做一次:\(\int(fp)\phi'\,dx = -\int\partial_x(fp)\,\phi\,dx\)
    • 第二項做兩次,負負得正:\(\int p\,\phi''\,dx = \int\partial_x^2p\,\phi\,dx\)
  6. 兩邊比較。現在兩邊都是「\(\phi\) 乘上某個東西」的積分: $$\begin{aligned}&\int\phi\,\partial_tp_t\,dx\\={}&\int\phi\,\Big(-\partial_x(fp_t) + \tfrac{g^2}2\partial_x^2p_t\Big)\,dx\end{aligned}$$
  7. 為什麼括號裡的東西必須相等。這條式子對所有 \(\phi\) 都成立。如果 \(\partial_tp_t\) 和括號在某一點不相等,就挑一個只在那一點附近不是 0 的窄窄的 \(\phi\),兩邊積分就會不同,矛盾。所以兩者處處相等,這就是 Fokker–Planck 方程。
A(x)B(x)φ:只在這裡不是 0
如果兩個函數 \(A, B\) 在某處不同,用一個窄窄的 \(\phi\) 只量那裡,積分就會不同。所以「對所有 \(\phi\) 的積分都相等」等於「函數相等」。

多維時把 \(\partial_x\) 換成 \(\nabla\cdot\),\(\partial_x^2\) 換成 Laplacian \(\Delta\)。

出處:Lai et al. (2026) 附錄 C.1.4「Itô's Formula Application: Derivation of Fokker–Planck Equation」;附錄 B.1.3 從變數變換的角度推導;Holderrieth & Erives (2026) 附錄「A Proof of the Fokker–Planck Equation」用的也是測試函數 + 分部積分。

一句話帶走:Fokker–Planck 是連續方程加上熱方程;推導的關鍵是用測試函數的期望值連起粒子和密度,再用分部積分把導數搬到密度上。

02兩個項各做什麼:搬運與抹平

把 Fokker–Planck 寫成通量的形式,兩個機制會更清楚:

通量形式 $$\partial_tp = -\partial_xJ$$$$J = \underbrace{f\,p}_{\text{drift 通量}}\ \underbrace{-\ \tfrac{g^2}2\partial_xp}_{\text{擴散通量}}$$
  • drift 通量 \(fp\):粒子照速度 \(f\) 被搬走。\(f\) 指向的地方密度增加,\(f\) 背離的地方密度減少。
  • 擴散通量 \(-\tfrac{g^2}2\partial_xp\):密度往右增加時(\(\partial_xp > 0\)),通量往左。也就是機率永遠從高密度流向低密度。二階導數在峰頂是負的、在谷底是正的,所以峰變矮、谷變高(補充課 C 第 8 節)。

總機率永遠是 1:把 \(\partial_tp = -\partial_xJ\) 對 \(x\) 積分,右邊是 \(J\) 在無窮遠的值,都是 0,所以 \(\frac{d}{dt}\int p\,dx = 0\)。機率只是搬來搬去,不會憑空出現或消失。

Demo F2 · 同一個密度,兩個項分別往哪裡推

怎麼看:下圖畫出兩個項,正的地方密度上升,負的地方下降。綠線(擴散項)在兩個峰頂是負的、在中間的谷和外側是正的:峰在被削平。選「往右推」:藍線在每個峰的左側為負、右側為正,整個分佈被往右搬。
上:目前的密度 pdrift 項 −∂(fp)擴散項 ½g²∂²p總和 ∂p/∂t
一句話帶走:drift 把機率照速度搬走,擴散讓機率從高密度流向低密度;兩者都只是搬動,所以總機率不變。

03Langevin dynamics:只用 score,穩態就是 p

問題

想從 \(p(x)\) 取樣,但只知道它的 score \(\nabla\log p\)(例如第 12–13 講學出來的 score 網路)。如果只沿著 score 走(梯度上升),粒子會全部擠到峰頂。加上雜訊可以把它們推散。那 drift 和雜訊要怎麼配,平衡時才會剛好是 \(p\)?

推導:讓通量為零

穩態的意思是 \(\partial_tp = 0\)。最簡單的做法是讓每一點的通量都是 0(這是補充課 D 的 detailed balance 在連續空間的版本:沒有任何地方有淨流動):

$$J = f\,p - \tfrac{g^2}2\,\partial_xp = 0$$

解出 \(f\),再用 C 第 8 節的恆等式 \(\partial_xp = p\,\partial_x\log p\):

$$f = \frac{g^2}{2}\cdot\frac{\partial_xp}{p} = \frac{g^2}{2}\,\partial_x\log p$$

所以 drift 必須是 score 的 \(\tfrac{g^2}2\) 倍。慣例取 \(g = \sqrt2\),係數剛好是 1:

Langevin dynamics $$dx = \nabla_x\log p(x)\,dt + \sqrt2\,dW$$

只用到 score,所以不需要知道歸一化常數 \(Z\)。

drift擴散
穩態時,drift 把機率往峰頂推(藍),擴散把機率往外抹(綠),每一點都剛好抵銷。
手算

目標 \(p = \mathcal N(0, 1)\),score 是 \(-x\)。Langevin 就是 \(dx = -x\,dt + \sqrt2\,dW\),也就是 OU 過程(\(\theta = 1,\ \sigma^2 = 2\))。由補充課 E 第 4 節,穩態變異數是 \(\sigma^2/2\theta = 1\),正是目標 ✓。

如果雜訊配錯,例如 \(g = 1\):穩態變異數變成 \(\tfrac12\),太窄。\(g = 2\):變成 2,太寬。

Demo F3 · 雜訊配錯會怎樣

怎麼看:目標是 \(\mathcal N(0, 1)\),drift 固定是 score \(-x\),只改雜訊 \(g\)。橙線是目標。只有 \(g = \sqrt2\approx1.41\) 時長條才貼著目標,比對讀數的變異數和理論值 \(g^2/2\)。
4,000 顆粒子跑到 t = 4 的直方圖(h = 0.005)目標 N(0, 1)

Demo F4 · Langevin 走向平衡:drift 通量與擴散通量越來越抵銷

怎麼看:拖動時間,下圖的藍線(drift 通量)和綠線(擴散通量)越來越接近互為相反數,黑線(淨通量)趨近 0。也請看讀數裡右峰的機率:要等粒子慢慢跨過低谷,它才會到達 0.700,這是第 5 節的主題。
上:p_t(Fokker–Planck 數值解,從 x = 3.5 附近出發)目標 p下:drift 通量 p_t·∂log p擴散通量 −∂p_t淨通量 J

出處:Holderrieth & Erives (2026) 第 4 章「Sampling with SDEs」的 Langevin dynamics 段落(同樣用 Fokker–Planck 證明 \(p\) 是穩態);第 12 講 §2、第 13 講 §7 的 Langevin MCMC。

一句話帶走:要讓通量處處為零,drift 必須是 \(\tfrac{g^2}2\nabla\log p\);取 \(g = \sqrt2\) 就是 Langevin,只需要 score。
小練習:目標是 \(\mathcal N(0, 4)\),score 是什麼?Langevin 的 SDE 是什麼?驗證穩態變異數。
score \(-x/4\)。SDE:\(dx = -\tfrac x4\,dt + \sqrt2\,dW\),\(\theta = \tfrac14,\ \sigma^2 = 2\)。穩態變異數 \(2/(2\cdot\tfrac14) = 4\) ✓。

04離散化的代價:ULA 的偏差與 MALA 的修正

ULA

電腦只能用 Euler–Maruyama 走有限的步長 \(\epsilon\):

$$x_{k+1} = x_k + \epsilon\,\nabla\log p(x_k) + \sqrt{2\epsilon}\,z_k$$

這叫 ULA(unadjusted Langevin algorithm),就是第 12–13 講的 Langevin 取樣。連續時間的穩態是 \(p\),但離散化之後的穩態只是接近 \(p\)。

手算:偏差有多大

目標 \(\mathcal N(0, 1)\),score 是 \(-x\)。一步是 \(x' = (1 - \epsilon)x + \sqrt{2\epsilon}\,z\)。穩態時變異數不變:

$$V = (1 - \epsilon)^2V + 2\epsilon$$

移項:\(V(2\epsilon - \epsilon^2) = 2\epsilon\),所以 \(V = \dfrac{1}{1 - \epsilon/2}\)。

\(\epsilon = 0.5\) 時 \(V = 1.333\),高估 33%。步長越大偏差越大(和補充課 E Demo E5 的 OU 偏差是同一件事)。

MALA:用 MH 修正

MALA(Metropolis-adjusted Langevin)把 ULA 的一步當成 Metropolis–Hastings 的提議,再決定要不要接受:

  1. 提議:\(y = x + \epsilon\nabla\log p(x) + \sqrt{2\epsilon}\,z\)。也就是 \(y\) 的分佈是平均 \(x + \epsilon\nabla\log p(x)\)、變異數 \(2\epsilon\) 的高斯,記作 \(q(y\mid x)\)。
  2. 接受機率: $$A = \min\Big\{1,\ \frac{p(y)\,q(x\mid y)}{p(x)\,q(y\mid x)}\Big\}$$

注意提議不對稱(從 \(x\) 到 \(y\) 和從 \(y\) 到 \(x\) 的提議中心不同),所以兩個 \(q\) 都要算。MH 保證穩態精確等於 \(p\),不論步長多大;代價是要能算 \(\log p\) 的差(EBM 可以:\(-E(y) + E(x)\)),而且步長太大時接受率會掉。

手算:一步

目標 \(\mathcal N(0, 1)\),\(x = 1\),\(\epsilon = 0.5\)(所以 \(2\epsilon = 1\))。抽到 \(z = 1.5\):\(y = 1 + 0.5(-1) + 1.5 = 2\)。比較 log:

  • \(\log p(y) - \log p(x) = -1.5\)
  • \(q(y\mid x)\) 的中心是 \(0.5\):\(\log q = -\tfrac12(2 - 0.5)^2 = -1.125\)(常數略去)
  • \(q(x\mid y)\) 的中心是 \(2 + 0.5(-2) = 1\):\(\log q = -\tfrac12(1 - 1)^2 = 0\)

log 比值 \(= -1.5 + 0 + 1.125 = -0.375\),所以 \(A = e^{-0.375} = 0.687\)。

Demo F5 · ULA vs. MALA:步長越大,ULA 偏得越多

怎麼看:標準常態時,拖動 \(\epsilon\),ULA 的變異數照 \(1/(1 - \epsilon/2)\) 變大(讀數有理論值),MALA 一直是 1,只是接受率下降。切到雙峰:每個峰的標準差 0.5,score 的斜率可以到 \(1/0.5^2 = 4\)。ULA 是 Euler–Maruyama,步長超過 \(2/4 = 0.5\) 就會發散(補充課 B §10 的 stiffness)。MALA 不會發散,因為跳得太遠的提議都會被拒絕。
ULA(3,000 條鏈 × 400 步,從目標分佈出發)
MALA(同樣的提議 + MH 接受)
樣本直方圖目標 p
一句話帶走:ULA 有限步長的穩態有偏差;MALA 把它當提議、用 MH 修正,換來精確的穩態,但要能算 \(\log p\) 的差。

05Langevin 的盲點:分得很開的峰,權重學不對

問題

Langevin 只看局部的 score。兩個峰之間若隔著一大片機率接近 0 的區域,粒子幾乎不會跨過去(補充課 D §8 的同一個問題)。後果是:有限時間內,每個峰分到的粒子比例由起點決定,而不是由真正的權重決定。

更根本的是:score 根本看不到權重。設 \(p = w_1p_1 + w_2p_2\),兩峰離得很遠。在峰 1 附近 \(p\approx w_1p_1\),所以

$$\nabla\log p\approx\nabla\log(w_1p_1) = \nabla\log p_1$$

權重 \(w_1\) 是常數,微分後消失了。這是第 13 講三個陷阱的第三個:score 在每個峰附近長得一樣,看不出哪個峰比較大。

解法:先抹開,再逐步收回

第 14 講的解法是 annealed Langevin。資料加上高斯雜訊,密度是摺積 \(p_\sigma = p * \mathcal N(0, \sigma^2)\)(補充課 A 第 9 節)。

  1. 大雜訊 \(\sigma_1\):兩個峰被抹在一起,變成一個寬的單峰(但質量還是偏向權重大的那邊)。粒子可以自由移動,score 也看得到這個傾斜,所以粒子按權重分配到兩邊。
  2. 逐步降低 \(\sigma\):每一層都跑幾步 Langevin,以上一層的結果當起點。粒子留在已經分好的那一邊。
  3. \(\sigma\) 很小:粒子縮回原本的峰。每一層的步長取 \(\epsilon_i\propto\sigma_i^2\)(NCSN 的設定)。
σ 大:抹成一團σ 中:開始分開σ 小:回到原本的峰粒子先按比例分好,再逐層縮回去
權重 20% / 80% 的雙峰,加上不同大小的雜訊。\(\sigma\) 大時單峰偏向右邊,粒子自然多數分到右邊。

Demo F6 · 權重 20% / 80% 的雙峰:一般 Langevin vs. annealed Langevin

怎麼看:粒子起點都在 \([-6, 6]\) 均勻分佈。左圖兩邊的粒子差不多一半一半,和起點一樣;右圖分到右峰的比例接近真正的 80%。比對讀數。
一般 Langevin(1,000 步)
annealed Langevin(10 層 σ × 100 步)
2,000 顆粒子的直方圖(起點在 [−6, 6] 均勻分佈)目標 p
一句話帶走:權重在 score 裡被微分掉了,所以一般 Langevin 學不到;annealing 先在大雜訊下讓兩峰相連,粒子按權重分好後再收回去。

06倒轉時間:反向 SDE 與 probability flow ODE

問題

diffusion model 的前向 SDE \(dx = f\,dt + g\,dW\) 把資料 \(p_0\) 推成雜訊 \(p_T\)(補充課 E §7),每個時刻的密度 \(p_t\) 照 Fokker–Planck 方程演化。要生成,就要找一個從 \(p_T\) 走回 \(p_0\)、而且每個時刻都經過同樣 \(p_t\) 的過程。方法是:把 Fokker–Planck 方程換個寫法,讀出對應的粒子規則。下面有兩種寫法,所以有兩個答案。

答案一:probability flow ODE(確定的路徑)

用補充課 C §8 的方法,把擴散項改寫成通量:\(\tfrac{g^2}2\partial_x^2p = \partial_x\big(p\cdot\tfrac{g^2}2\partial_x\log p\big)\)。代入 Fokker–Planck,兩項合併:

$$\partial_tp_t = -\partial_x\Big[\Big(f - \tfrac{g^2}2\,\partial_x\log p_t\Big)p_t\Big]$$

這是一個沒有雜訊的連續方程,速度就是方括號裡的係數:

probability flow ODE $$\frac{dx}{dt} = f - \tfrac12g^2\,\nabla\log p_t(x)$$

讓粒子照這個 ODE 流,每個時刻的密度和 SDE 完全相同。ODE 可以倒著解(補充課 B §6),從 \(T\) 解到 0,就把雜訊變回資料。這就是第 14 講「係數為什麼是 ½」的答案。

答案二:反向 SDE(也有雜訊)

現在想要一個倒著走、但也帶雜訊的過程。

  1. 令 \(s = T - t\) 是倒著走的時間,\(q_s = p_{T-s}\)。對 \(s\) 微分要加負號: $$\partial_sq = -\partial_tp = \partial_x(fq) - \tfrac{g^2}2\partial_x^2q$$
  2. 我們想把它寫成某個 SDE \(dy = b\,ds + g\,dW\) 的 Fokker–Planck 方程: $$\partial_sq = -\partial_x(bq) + \tfrac{g^2}2\partial_x^2q$$
  3. 兩式右邊相等。把二階導數都移到同一邊: $$-\partial_x(bq) = \partial_x(fq) - g^2\partial_x^2q$$
  4. 用恆等式 \(\partial_xq = q\,\partial_x\log q\),把右邊寫成一個導數: $$-\partial_x(bq) = \partial_x\big[(f - g^2\partial_x\log q)\,q\big]$$
  5. 比較括號裡的東西:\(b = -f + g^2\,\partial_x\log q\)。

倒著走的時間裡,粒子的 drift 是 \(-f + g^2\nabla\log p_t\)。習慣上換回原本的時間方向寫,就是第 14 講的反向 SDE(Anderson 1982):

反向 SDE $$\begin{aligned}dx ={}&\big[f - g^2\,\nabla\log p_t(x)\big]\,dt\\&+ g\,d\bar W\end{aligned}$$

時間從 \(T\) 往 0 走,所以 \(dt\) 是負的。實際的一步是:

$$\begin{aligned}x_{t-h} ={}&x_t - h\big[f - g^2\nabla\log p_t\big]\\&+ g\sqrt h\,\epsilon\end{aligned}$$

用高斯例子驗證兩個答案

手算

前向 \(dx = dW\)(\(f = 0,\ g = 1\)),\(p_t = \mathcal N(0, t)\),score 是 \(-x/t\)。倒著走一步之後,變異數應該從 \(t\) 變成 \(t - h\)。

ODE:一步是 \(x_{t-h} = x_t - h\cdot\frac{x_t}{2t} = x_t\big(1 - \frac{h}{2t}\big)\)。變異數:

$$t\Big(1 - \frac{h}{2t}\Big)^2\approx t\Big(1 - \frac ht\Big) = t - h\ ✓$$

反向 SDE:一步是 \(x_{t-h} = x_t\big(1 - \frac ht\big) + \sqrt h\,\epsilon\)。變異數:

$$\begin{aligned}t\Big(1 - \frac ht\Big)^2 + h&\approx t - 2h + h\\&= t - h\ ✓\end{aligned}$$
ODE只靠收縮:變異數少 hSDE收縮兩倍:少 2h雜訊補回:多 h,淨少 h
每一步的變異數帳本。SDE 多收縮一倍,因為它的雜訊會把變異數加回來。這就是係數 \(g^2\) 和 \(\tfrac12g^2\) 差 2 倍的原因。

反向 SDE = ODE + Langevin

還有一個更漂亮的看法。把反向 SDE 的 \(g^2\nabla\log p_t\) 拆成兩半:

  • 一半 \(\tfrac12g^2\nabla\log p_t\) 配上 ODE 原本的部分,就是 probability flow ODE 倒著走。
  • 另一半 \(\tfrac12g^2\nabla\log p_t\) 配上雜訊 \(g\),正是第 3 節的 Langevin(drift \(\tfrac{g^2}2\nabla\log p\) 配雜訊 \(g\)),它的穩態就是當下的 \(p_t\)。

所以反向 SDE 每一步都在「沿 ODE 走」加上「用 Langevin 修正回 \(p_t\)」。這是第 17 講「SDE 有時樣本更好」的原因,也是 predictor–corrector 的想法。

兩個答案都只需要每個時刻的 score \(\nabla\log p_t\),這就是為什麼 diffusion model 只要學 score(第 13–16 講的 denoising score matching)。

Demo F7 · 從雜訊走回資料:反向 SDE、probability flow ODE,以及「沒有 score」

怎麼看:前向過程是 \(dx = dW\),\(T = 2\);資料是兩個高斯的混合,所以每個時刻的 score 都能精確算。左圖的時間軸從右(\(t = 2\),雜訊)走到左(\(t = 0\),資料)。兩種方法都回到資料分佈。切到「不用 score」:粒子只是繼續擴散,離資料越來越遠。
反向 SDEprobability flow ODE不用 score資料分佈 p₀

出處:反向 SDE 的推導見 Lai et al. (2026) 附錄 C(以及 Song et al. 2021 §3.2 引用的 Anderson 1982);probability flow ODE 見 Song et al. (2021) 附錄 D.1。本頁的一維推導是把兩者都寫成 Fokker–Planck 方程再比對。

一句話帶走:同一條 Fokker–Planck 方程可以讀成 ODE,也可以讀成反向 SDE;兩者都只需要 score,而反向 SDE 等於 ODE 加上 Langevin。
小練習:前向 \(dx = -\tfrac12\beta x\,dt + \sqrt\beta\,dW\)。寫出反向 SDE 與 probability flow ODE。
\(f = -\tfrac12\beta x,\ g^2 = \beta\)。反向 SDE:drift 是 \(-\tfrac12\beta x - \beta\nabla\log p_t\),雜訊 \(\sqrt\beta\,d\bar W\);ODE:\(\frac{dx}{dt} = -\tfrac12\beta x - \tfrac12\beta\nabla\log p_t\)。

07在 CS236 哪裡用到

本頁的概念出現的地方
Fokker–Planck 方程第 14 講「為什麼 ODE 的係數是 ½」、第 17 講課堂問答「對時間 t 的 score 由 Fokker–Planck 決定」
Langevin dynamics、穩態是 p第 11 講 §11、第 12 講 §2、第 13 講 §7:用 score 取樣
ULA 偏差、MALA第 12 講 Demo A 的 ULA 與 MALA 比較
多峰權重學不對、annealing第 13 講三個陷阱、第 14 講 annealed Langevin 與 Demo B
反向 SDE、probability flow ODE第 14 講 §6–7、第 16 講 §7–8、第 17 講「ODE 還是 SDE」
predictor–corrector反向 SDE 的一步(predictor)+ 幾步 Langevin(corrector),第 14、16 講

常見誤解

誤解:「Langevin 的雜訊只是為了探索,可以設成任意大小」。雜訊必須是 \(\sqrt2\)(配 drift \(\nabla\log p\)),否則穩態不是 \(p\)(Demo F3)。
誤解:「ULA 跑得夠久就是精確的 \(p\)」。連續時間才精確;固定步長的 ULA 有偏差,要步長趨近 0 或加 MH 修正(MALA)。
誤解:「Langevin 跑夠久,峰的權重自然會對」。理論上會,但跨越低谷的時間可能長到天文數字;實務上權重由起點決定(Demo F6)。
誤解:「反向 SDE 就是把前向 SDE 的 drift 變號」。還要加上 \(g^2\nabla\log p_t\)。沒有這一項,「倒著走」只是繼續擴散(Demo F7)。
誤解:「probability flow ODE 的粒子和 SDE 的粒子走同一條路」。只有每個時刻的分佈相同,路徑完全不同。

自我測驗

1. 寫出 \(dx = f\,dt + g\,dW\) 的 Fokker–Planck 方程。\(g = 0\) 時它變成什麼?
\(\partial_tp = -\partial_x(fp) + \tfrac{g^2}2\partial_x^2p\);\(g = 0\) 時是連續方程。
2. 證明 \(dx = \nabla\log p\,dt + \sqrt2\,dW\) 的穩態是 \(p\)。
通量 \(J = p\,\partial\log p - \partial p = \partial p - \partial p = 0\),所以 \(\partial_tp = -\partial_xJ = 0\)。
3. 目標是 \(\mathcal N(0, 1)\),ULA 步長 0.5,穩態變異數是多少?
\(\frac{1}{1 - 0.25} = 1.333\),高估 33%。
4. MALA 比 ULA 多需要什麼?換來什麼?
需要能算 \(\log p\) 的差(或未歸一化的 \(\log\tilde p\)),用來計算 MH 接受率;換來穩態精確等於 \(p\)。
5. 為什麼 ODE 的 score 係數是 \(\tfrac12g^2\),反向 SDE 是 \(g^2\)?
ODE 只靠收縮讓變異數減少。SDE 每步還會因為雜訊增加變異數,所以要多收縮一倍才能達到一樣的淨減少。也可以看成 SDE = ODE + Langevin,多出來的一半 score 配上雜訊,是 Langevin 的一步。
6. 為什麼 annealed Langevin 能學到正確的峰權重?
大雜訊時兩峰被抹在一起,粒子可以自由移動、按權重分到兩邊;之後逐步降雜訊,粒子留在已分好的一邊縮回原本的峰。

延伸閱讀

  • Lai et al. (2026) 附錄 B.1.3(從變數變換到 Fokker–Planck)、附錄 C.1.4(用 Itô 推 Fokker–Planck)、附錄 C(反向 SDE)。
  • Holderrieth & Erives (2026) 第 4 章「Sampling with SDEs」(Langevin dynamics 與它的穩態)、附錄(Fokker–Planck 的證明)。
  • Song et al. (2021):反向 SDE、probability flow ODE(附錄 D.1)、predictor–corrector。
  • Song & Kingma (2021):EBM 的 Langevin 取樣。