Fokker–Planck 與 Langevin:從一顆粒子的抖動,到整個分佈的演化
補充課 E 的 SDE 描述一顆粒子怎麼走;這一頁問的是:一大群照同一個 SDE 走的粒子,它們的密度怎麼變?答案是 Fokker–Planck 方程。有了它,CS236 的三個關鍵事實都能一步一步推導出來:Langevin 為什麼會收斂到目標分佈、反向 SDE 為什麼需要 score、probability flow ODE 為什麼和 SDE 有一樣的分佈。
讀完這頁你應該能夠
- 寫出一維 Fokker–Planck 方程,並用 Itô 公式加分部積分推導它。
- 說明 drift 項(搬運)與擴散項(抹平)各自對密度做了什麼。
- 從「通量為零」推導出 Langevin dynamics 的 drift,並說明它需要的只有 score。
- 算出 ULA 的步長偏差,並用 MALA 手算一步接受率。
- 說明 Langevin 在分得很開的多峰分佈上為什麼學不到正確的峰權重,以及 annealed Langevin 怎麼解決。
- 推導 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 節 |
填上這一格之後,就能回答三個問題:
- 取樣:怎麼設計一個 SDE,讓它走久了之後的分佈是我們要的 \(p\)?(第 3–5 節)
- 生成:前向 SDE 把資料變成雜訊,怎麼把它倒過來?(第 6 節)
- 為什麼這兩件事都只需要 score?
01從粒子到密度:Fokker–Planck 方程
答案,和直覺
一群粒子各自照 \(dx = f(x)\,dt + g\,dW\) 移動(每顆有自己的雜訊)。在極短的時間內,一顆粒子先被 drift 推一下,再被雜訊抖一下,兩個效果都很小,所以對密度的影響可以直接相加:
它也叫 Kolmogorov forward equation。\(g = 0\) 時就是連續方程,\(f = 0\) 時就是熱方程。
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 方程
嚴格的推導
「兩個效果相加」只是直覺。現在用 Itô 公式推導一次。困難在於:我們知道一顆粒子怎麼走,想知道的卻是密度。橋樑是期望值:任何函數 \(\phi\) 的平均,都可以從兩邊來算。
挑一個平滑、在遠處為 0 的函數 \(\phi(x)\),叫測試函數。
- 從粒子這邊算。由 Itô 公式: $$\begin{aligned}d\phi(x_t) ={}&\phi'\,(f\,dt + g\,dW)\\&+ \tfrac12\phi''\,g^2\,dt\end{aligned}$$
- 取期望。\(dW\) 平均為 0,而且和現在的 \(\phi'(x_t)\) 獨立,所以那一項消失: $$\frac{d}{dt}\mathbb E[\phi(x_t)] = \mathbb E\big[f\phi' + \tfrac{g^2}2\phi''\big]$$
- 把期望寫成積分。期望就是用密度加權平均: $$\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}$$
- 從密度這邊算。\(\mathbb E[\phi(x_t)] = \int\phi\,p_t\,dx\),只有 \(p_t\) 隨時間變,所以左邊是 \(\int\phi\,\partial_tp_t\,dx\)。
- 分部積分,把導數從 \(\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\)
- 兩邊比較。現在兩邊都是「\(\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}$$
- 為什麼括號裡的東西必須相等。這條式子對所有 \(\phi\) 都成立。如果 \(\partial_tp_t\) 和括號在某一點不相等,就挑一個只在那一點附近不是 0 的窄窄的 \(\phi\),兩邊積分就會不同,矛盾。所以兩者處處相等,這就是 Fokker–Planck 方程。
多維時把 \(\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」用的也是測試函數 + 分部積分。
02兩個項各做什麼:搬運與抹平
把 Fokker–Planck 寫成通量的形式,兩個機制會更清楚:
- 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 · 同一個密度,兩個項分別往哪裡推
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:
只用到 score,所以不需要知道歸一化常數 \(Z\)。
目標 \(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 · 雜訊配錯會怎樣
Demo F4 · Langevin 走向平衡:drift 通量與擴散通量越來越抵銷
出處:Holderrieth & Erives (2026) 第 4 章「Sampling with SDEs」的 Langevin dynamics 段落(同樣用 Fokker–Planck 證明 \(p\) 是穩態);第 12 講 §2、第 13 講 §7 的 Langevin MCMC。
小練習:目標是 \(\mathcal N(0, 4)\),score 是什麼?Langevin 的 SDE 是什麼?驗證穩態變異數。
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 的提議,再決定要不要接受:
- 提議:\(y = x + \epsilon\nabla\log p(x) + \sqrt{2\epsilon}\,z\)。也就是 \(y\) 的分佈是平均 \(x + \epsilon\nabla\log p(x)\)、變異數 \(2\epsilon\) 的高斯,記作 \(q(y\mid x)\)。
- 接受機率: $$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 偏得越多
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 節)。
- 大雜訊 \(\sigma_1\):兩個峰被抹在一起,變成一個寬的單峰(但質量還是偏向權重大的那邊)。粒子可以自由移動,score 也看得到這個傾斜,所以粒子按權重分配到兩邊。
- 逐步降低 \(\sigma\):每一層都跑幾步 Langevin,以上一層的結果當起點。粒子留在已經分好的那一邊。
- \(\sigma\) 很小:粒子縮回原本的峰。每一層的步長取 \(\epsilon_i\propto\sigma_i^2\)(NCSN 的設定)。
Demo F6 · 權重 20% / 80% 的雙峰:一般 Langevin vs. annealed Langevin
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]$$這是一個沒有雜訊的連續方程,速度就是方括號裡的係數:
讓粒子照這個 ODE 流,每個時刻的密度和 SDE 完全相同。ODE 可以倒著解(補充課 B §6),從 \(T\) 解到 0,就把雜訊變回資料。這就是第 14 講「係數為什麼是 ½」的答案。
答案二:反向 SDE(也有雜訊)
現在想要一個倒著走、但也帶雜訊的過程。
- 令 \(s = T - t\) 是倒著走的時間,\(q_s = p_{T-s}\)。對 \(s\) 微分要加負號: $$\partial_sq = -\partial_tp = \partial_x(fq) - \tfrac{g^2}2\partial_x^2q$$
- 我們想把它寫成某個 SDE \(dy = b\,ds + g\,dW\) 的 Fokker–Planck 方程: $$\partial_sq = -\partial_x(bq) + \tfrac{g^2}2\partial_x^2q$$
- 兩式右邊相等。把二階導數都移到同一邊: $$-\partial_x(bq) = \partial_x(fq) - g^2\partial_x^2q$$
- 用恆等式 \(\partial_xq = q\,\partial_x\log q\),把右邊寫成一個導數: $$-\partial_x(bq) = \partial_x\big[(f - g^2\partial_x\log q)\,q\big]$$
- 比較括號裡的東西:\(b = -f + g^2\,\partial_x\log q\)。
倒著走的時間裡,粒子的 drift 是 \(-f + g^2\nabla\log p_t\)。習慣上換回原本的時間方向寫,就是第 14 講的反向 SDE(Anderson 1982):
時間從 \(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}$$反向 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」
出處:反向 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 方程再比對。
小練習:前向 \(dx = -\tfrac12\beta x\,dt + \sqrt\beta\,dW\)。寫出反向 SDE 與 probability flow ODE。
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 講 |
常見誤解
自我測驗
1. 寫出 \(dx = f\,dt + g\,dW\) 的 Fokker–Planck 方程。\(g = 0\) 時它變成什麼?
2. 證明 \(dx = \nabla\log p\,dt + \sqrt2\,dW\) 的穩態是 \(p\)。
3. 目標是 \(\mathcal N(0, 1)\),ULA 步長 0.5,穩態變異數是多少?
4. MALA 比 ULA 多需要什麼?換來什麼?
5. 為什麼 ODE 的 score 係數是 \(\tfrac12g^2\),反向 SDE 是 \(g^2\)?
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 取樣。