版本說明:本文依 MIT 6.S184 IAP 2026 版,2026-09-30 對照講義 PDF §3(pp.14–24)與 Slides 2 撰寫,第 2 講錄影可搭配觀看。存取等級 A3 足以自學。公式編號一律指講義原文。
系列位置:MIT 6.S184 導讀第 3 篇|上一篇 Lab 1:模擬 ODE 與 SDE|下一篇 L3A:分數函數、SDE 取樣與 score matching
第 1 講給了生成的機器:從高斯雜訊 X_0 ~ p_init 出發,沿著神經網路向量場 u_t^θ 跑 ODE,拿 t=1 的終點當樣本。可是沒訓練過的網路只會產出雜訊。
這一講回答一個問題:要怎麼調 θ,讓 ODE 的終點 X_1 服從資料分佈 p_data? 講義給的答案叫 flow matching,§3 開頭形容它簡單、可規模化,而且代表目前最先進的做法。
先記住時間方向:這門課的 t=0 是雜訊,t=1 是資料。很多 diffusion 文獻剛好相反,後面對照其他教材時要小心。
一張表先看懂整講
Slides 2 把這一講整理成一個 2×3 的「Flow Matching Matrix」。上排是「條件」,意思是只看單一資料點;下排是「邊際」,意思是看整個資料分佈。
| 機率路徑 | 向量場 | 訓練 loss | |
|---|---|---|---|
| 條件(單一資料點 z) | p_t(x|z) | u_t(x|z) | CFM loss |
| 邊際(整個資料集) | p_t(x) | u_t(x) | FM loss |
| 能不能算 | 上排都有公式 | 下排都算不出來 | 但下排可以透過上排學到 |
整講的推論是由左往右、由上往下。先定條件路徑,推出條件向量場,再證明它們平均起來就是邊際版本。最後一步證明:回歸條件向量場,等於回歸邊際向量場。
第一步:選一條從雜訊到資料的路
ODE 只規定起點(p_init)和終點(p_data),中間 0<t<1 的分佈可以自己選。機率路徑就是把這個選擇寫下來。
條件機率路徑 p_t(x|z) 針對單一資料點 z:t=0 時是 p_init,t=1 時收縮成只會吐出 z 的 Dirac delta δ_z(eq. 11)。
邊際機率路徑 p_t(x) 是先抽一個資料點 z ~ p_data,再從 p_t(·|z) 抽樣得到的分佈(eq. 12–13)。它從 p_init 內插到 p_data(eq. 14)。
講義特別提醒一個不對稱:我們能從 p_t 抽樣,但算不出它的密度,因為密度要對整個資料分佈積分。後面每一步都在繞過這個積分。
Slides 2 還補了一句值得記住的話:機率路徑只規定每個時刻的「快照」分佈,完全沒說單一粒子怎麼移動。粒子的動態是下一步向量場的事。
最重要的例子:高斯條件路徑
講義說高斯路徑是「目前為止最重要的例子」,建議讀者仔細讀(Example 8,p.15)。取兩個 noise scheduler α_t、β_t,都是連續可微的單調函數,邊界條件是 α_0 = β_1 = 0、α_1 = β_0 = 1:
p_t(·|z) = N(α_t z, β_t² I_d) (15)
z ~ p_data, ε ~ N(0, I_d) ⇒ x = α_t z + β_t ε ~ p_t (16)
t=0 時 α_0 = 0、β_0 = 1,只剩雜訊;t=1 時 α_1 = 1、β_1 = 0,只剩資料點。t 越小,加的雜訊越多。
第二步:條件向量場,把雜訊推向單一資料點
路徑只是「希望」每個時刻的分佈長這樣。要真的讓粒子照著走,需要一個向量場。
對每個資料點 z,條件向量場 u_t(x|z) 是任何能讓 ODE 產生條件路徑的向量場:從 X_0 ~ p_init 出發,沿著它走,X_t ~ p_t(·|z)(eq. 17)。它通常可以用代數手算出來。
高斯路徑的答案是 Example 10(p.17):
u_t(x|z) = (α̇_t − (β̇_t / β_t) α_t) z + (β̇_t / β_t) x (20)
α̇_t、β̇_t 是對時間的導數。
Example 10 的證明(講義 p.18)
先定義條件 flow ψ_t(x|z) = α_t z + β_t x(eq. 21)。如果 X_0 ~ N(0, I_d),那麼 X_t = α_t z + β_t X_0 ~ N(α_t z, β_t² I_d),正好是條件路徑。
剩下的是從 flow 反推向量場。依 flow 的定義,d/dt ψ_t(x|z) = u_t(ψ_t(x|z)|z):
α̇_t z + β̇_t x = u_t(α_t z + β_t x | z) 對所有 x, z
把 x 換成 (x − α_t z)/β_t:
α̇_t z + β̇_t (x − α_t z)/β_t = u_t(x|z)
整理後就是 eq. (20)。
講義註腳說,也可以把它代進後面的 continuity equation 再驗算一次。
條件向量場單獨看起來沒什麼用:所有軌跡都會塌縮到同一個 z,等於只是重新產生已知的資料點。它的價值在下一步。
第三步:平均起來,就是我們要的邊際向量場
Theorem 9(Marginalization trick,p.16):把條件向量場用下面的權重平均,得到的邊際向量場 u_t(x) 會讓 ODE 沿著邊際路徑走,所以 X_1 ~ p_data。
u_t(x) = ∫ u_t(x|z) · p_t(x|z) p_data(z) / p_t(x) dz (18)
X_0 ~ p_init, dX_t/dt = u_t(X_t) ⇒ X_t ~ p_t (0 ≤ t ≤ 1) (19)
權重 p_t(x|z) p_data(z) / p_t(x) 用貝氏定理看,就是「看到帶雜訊的 x 之後,它來自資料點 z 的後驗機率」。講義的直覺是:對每個可能的資料點 z,取「往 z 走」的速度,再依「我多相信 x 是從 z 來的」加權,全部平均起來。
問題也在這裡:這個積分要掃過整個資料分佈,算不出來。
為什麼平均真的有效:continuity equation
要證明 Theorem 9,講義用了一個數學與物理的基本工具。這是本系列第一次出現偏微分方程,不熟也沒關係,先抓直覺。
Theorem 11(Continuity equation,p.19):ODE 的粒子分佈 X_t ~ p_t,若且唯若
∂_t p_t(x) = −div(p_t u_t)(x) 對所有 x 與 0 ≤ t ≤ 1 (23)
左邊是位置 x 的機率密度隨時間怎麼變。右邊的 divergence 量的是向量場的淨流出,加負號就是淨流入,再乘上 x 當下的機率質量。機率總量守恆(永遠積分成 1),所以某處變多,一定是從別處流進來。 Slides 2 畫的就是這張「流出減流入」的圖。
用 continuity equation 證明 Theorem 9(講義 p.19)
目標是證明 eq. (18) 的 u_t 滿足 continuity equation。
∂_t p_t(x) = ∂_t ∫ p_t(x|z) p_data(z) dz
= ∫ ∂_t p_t(x|z) p_data(z) dz
= ∫ −div(p_t(·|z) u_t(·|z))(x) p_data(z) dz 條件路徑滿足 continuity eq.
= −div( ∫ p_t(x|z) u_t(x|z) p_data(z) dz ) 積分與 div 交換
= −div( p_t(x) ∫ u_t(x|z) p_t(x|z) p_data(z) / p_t(x) dz )
= −div(p_t u_t)(x) 代入 eq. (18)
頭尾相接就是 continuity equation,再由 Theorem 11 得到 eq. (19)。Continuity equation 本身的完整證明在講義附錄 B(p.72 起)。
第四步:回歸條件向量場,等於回歸邊際向量場
最直接的訓練目標是讓網路逼近邊際向量場,用均方誤差:
L_FM(θ) = E_{t~Unif, x~p_t} ‖u_t^θ(x) − u_t(x)‖² (24)
= E_{t~Unif, z~p_data, x~p_t(·|z)} ‖u_t^θ(x) − u_t(x)‖² (25)
抽樣很容易:抽時間 t、抽資料點 z、加點雜訊得到 x。卡住的是 u_t(x) 本身,它就是上面那個算不出來的積分。
於是改用算得出來的條件向量場當目標,這就是 conditional flow matching loss:
L_CFM(θ) = E_{t~Unif, z~p_data, x~p_t(·|z)} ‖u_t^θ(x) − u_t(x|z)‖² (26)
直覺上這很可疑:我們在乎的是邊際向量場,憑什麼回歸條件向量場?
Theorem 12(p.20)給了答案:L_FM(θ) = L_CFM(θ) + C,C 跟 θ 無關,所以兩者梯度相同。用 SGD 最小化 CFM loss,就等於最小化 FM loss。在網路表達力無限的假設下,最小化 CFM loss 得到的網路就等於邊際向量場。講義的說法是:明著回歸算得出來的條件向量場,就是暗著回歸算不出來的邊際向量場。
Theorem 12 的證明骨架(講義 pp.20–21)
- 把
‖a − b‖² = ‖a‖² − 2aᵀb + ‖b‖²展開 FM loss。‖u_t(x)‖²那項跟 θ 無關,記作常數C_1。 - 關鍵在交叉項。把期望值寫成積分,代入 eq. (18),
p_t(x)會約掉:
E_{t, x~p_t}[u_t^θ(x)ᵀ u_t(x)]
= ∫∫ p_t(x) u_t^θ(x)ᵀ ∫ u_t(x|z) p_t(x|z) p_data(z) / p_t(x) dz dx dt
= ∫∫∫ u_t^θ(x)ᵀ u_t(x|z) p_t(x|z) p_data(z) dz dx dt
= E_{t, z~p_data, x~p_t(·|z)}[u_t^θ(x)ᵀ u_t(x|z)]
- 交叉項從邊際版換成條件版之後,加減一項
‖u_t(x|z)‖²湊回平方,就得到L_CFM(θ) + C_2 + C_1。
講義點出這個演算法的三個特點:
- Simulation-free:訓練時完全不用模擬 ODE,所以非常便宜。
- 就是回歸:跟監督式學習差不多。
- 極度簡單:很難想像比這更簡單的訓練目標。
訓練完,再用第 1 講的 Algorithm 1(Euler 法)模擬 dX_t = u_t^θ(X_t) dt 取樣(eq. 27)。這整套流程在文獻裡就叫 flow matching。
落到高斯路徑:訓練只剩一行
**Example 13(p.22)**把 CFM loss 套到高斯路徑。抽樣是 x_t = α_t z + β_t ε(eq. 28),條件向量場就是 eq. (20),講義重寫成 eq. (29)。把 x 代換成 α_t z + β_t ε 之後,z 和 x 的係數會互相抵掉:
L_CFM(θ) = E_{t~Unif, z~p_data, ε~N(0,I_d)} ‖u_t^θ(α_t z + β_t ε) − (α̇_t z + β̇_t ε)‖² (31)
也就是:抽資料點、抽雜訊、算均方誤差。
再取最常見的特例 α_t = t、β_t = 1 − t,講義說這條路徑有時稱為 (Gaussian) CondOT probability path。此時 α̇_t = 1、β̇_t = −1,目標化簡成 z − ε。Slides 2 稱它 Straight Line Schedule:雜訊和資料之間做線性內插,網路要預測的是兩者的差。
**Algorithm 3(p.22)**就是這個特例:
對每個 mini-batch:
從資料集抽 z
抽 t ~ Unif[0,1]
抽 ε ~ N(0, I_d)
x = t z + (1 − t) ε
L(θ) = ‖u_t^θ(x) − (z − ε)‖²
θ ← grad_update(L(θ))
講義說 Stable Diffusion 3、Meta 的 Movie Gen Video 都是用這個簡單的程序訓練的。Slides 2 也放了這兩個模型的生成範例。
Summary 14:這一講的全部
講義 pp.23–24 的 Summary 14 把整講收成四步:
- 選一條條件機率路徑
p_t(x|z),滿足p_0(·|z) = p_init、p_1(·|z) = δ_z。 - 找一個條件向量場
u_t(x|z),讓它的 flow 產生這條路徑(等價地說,滿足 continuity equation)。 - 用 eq. (32) 平均出來的邊際向量場會讓 ODE 把雜訊變成資料。
- 用 CFM loss 學它。
高斯路徑的三條公式(eq. 35–37):
| 物件 | 公式 |
|---|---|
| 條件路徑 | p_t(x|z) = N(x; α_t z, β_t² I_d) |
| 條件向量場 | u_t(x|z) = (α̇_t − (β̇_t/β_t) α_t) z + (β̇_t/β_t) x |
| CFM loss | E ‖u_t^θ(α_t z + β_t ε) − (α̇_t z + β̇_t ε)‖² |
讀完這講,你應該能
- 說出條件與邊際機率路徑的差別,以及為什麼邊際版只能抽樣、不能算密度。
- 寫出高斯條件路徑與它的條件向量場。
- 用「後驗加權平均」解釋 marginalization trick。
- 用一句話說出 Theorem 12 為什麼讓 flow matching 可以訓練。
- 默寫 Algorithm 3。
今晚就能做的事:讀講義 pp.14–22,然後拿一張紙,把 α_t = t、β_t = 1 − t 代進 eq. (31),自己推出 Algorithm 3 的目標 z − ε。推得出來,Lab 2 的 Problem 3.1 就只剩寫程式。
延伸閱讀
- 下一步:同一條高斯路徑還有另一種看法,也就是 score function。見 L3A:分數函數、SDE 取樣與 score matching
- DDPM 視角:CMU 11-785 L23:擴散模型。對照時先確認時間方向,DDPM 系寫法通常是 t=0 為資料
- 另一門課的 flow matching 作業:Berkeley CS189 HW2:回歸、GMM 與 flow matching
- 生成模型的整體介紹:MIT 6.S191 L4:生成模型
系列導覽:上一篇 Lab 1:模擬 ODE 與 SDE|下一篇 L3A:分數函數、SDE 取樣與 score matching|回系列總覽
參考資料
- MIT 6.S184 課程網站(IAP 2026) — 第 2 講主題列表
- Holderrieth & Erives, An Introduction to Flow Matching and Diffusion Models(講義 PDF) — §3:eq. (10)–(37)、Example 8、Theorem 9、Example 10、Theorem 11、Theorem 12、Algorithm 3、Example 13、Summary 14;附錄 B
- arXiv 2506.02070 — 講義的 arXiv 版本
- Slides 2(20260122_Lecture_02.pdf) — Flow Matching Matrix、機率路徑只規定快照、continuity equation 圖解、Straight Line Schedule、SD3 與 Movie Gen 範例
- 第 2 講錄影:Flow Matching (2026)
Loading...