U2.0 8 分鐘閱讀 2026年9月

U2.0 Forward Process 是必要的嗎?

本篇重用M2.0河面上的箭頭:Vector Field 與 ODE

上一個單元買的是一個套餐

U1 的推導鏈很漂亮:選一個加 Gaussian noise 的 forward process → 拿到 q(xtx0)q(x_t\mid x_0) 的 Gaussian closed form → denoising 回歸 → Tweedie 給出 score → reverse SDE 或 PF-ODE 取樣。

漂亮的地方在於每一環都扣著上一環。但這也意味著:它們是一起來的。 Tweedie 的證明用到 q(xtx0)q(x_t\mid x_0) 是 Gaussian;reverse SDE 的存在用到 forward 是一條 SDE。我們沒有分別挑過這些東西——我們只挑了「加 Gaussian noise」這一個動作,其餘全部跟著被決定了。

有點像點餐時只能點套餐:主餐、配菜、飲料綁在一起,價格漂亮,但你不能只換飲料。

如果我只想換掉套餐裡的其中一樣,
剩下的還能不能用?

課堂提問Q1

考慮兩個生成任務:

  1. 草圖 → 照片:從草圖的分布 pAp_A 生成照片的分布 pBp_B,兩邊都不是 Gaussian。
  2. 球面上的資料:例如蛋白質的骨架角度,資料本來就住在一個球面上;Gaussian noise 會把點推離球面。

U1 的框架做這兩件事,會卡在哪裡?

先想一想,再展開看整理後的答案

最直覺的回答是「起點必須是 Gaussian」。這對,但那只是最外層。往下追,可以整理出三個被綁在一起的旋鈕(這一節還是用 U1 的慣例:x0x_0 是資料、xTx_T 是噪聲。換慣例在本篇最後一節):

旋鈕一:起點分布。 forward SDE 有一個平穩分布 N(0,I)\mathcal N(0,I),我們才有地方出發往回走。任務 1 的起點 pAp_A(草圖)不是任何簡單 SDE 的平穩分布,所以連「從哪裡開始」都定不出來。

旋鈕二:路徑。 x0x_0xTx_T 之間的中間分布完全由 αˉt\bar\alpha_t 決定,形狀永遠是「縮小的資料 + Gaussian 模糊」。任務 2 想讓中間分布留在球面上,這個形狀做不到。

旋鈕三:配對方式。 訓練時 x0x_0ϵ\epsilon 是各自獨立抽的。在 U1 裡這看起來理所當然——噪聲本來就是隨便抽的——但它其實是一個選擇,而且這個選擇直接決定了模型要學的東西有多難。

理由 U1.2 已經算過了:模型學到的是 E[x0xt]\mathbb E[x_0\mid x_t],也就是「所有可能造出這個 xtx_tx0x_0」的加權平均。獨立配對意味著任何 x0x_0 都可能配上任何噪聲,所以每一個 xtx_t 背後的候選都很多——那張「tt 大的時候輸出是一團模糊」的圖就是這件事的畫面。如果配對可以挑,每個 xtx_t 的候選就會變少,要學的那個平均也就更銳利。但在 diffusion 的框架裡,我們沒有這個旋鈕。

Diffusion 把這三件事綑在「加 Gaussian noise」這一個動作裡。

flow matching 的動機就是把它們拆開,一個一個拿回設計權。

互動 demo:三個旋鈕。 三個下拉分別是起點分布、路徑、配對;把它們都轉到最上面那一組(Gaussian 起點、加噪路徑、隨機配對)就是 diffusion 能做的唯一一種組合,其他組合全部超出上一個單元的框架。拖 tt 看中間分布怎麼變——特別試「環形起點」與「配對:依位置排過」。

換一個問法

U1 是從「學一個函數 GG」出發,再用 forward process 造出訓練配對。這個單元我們把順序反過來:

先決定我們想要的中間分布長什麼樣,再問要用什麼速度場,把粒子從起點推到終點。

這樣問有幾個直接的好處:起點可以是任意分布;中間路徑可以自己設計;而且不需要 SDE、不需要 score、不需要 Tweedie——只需要一條 ODE 和一個回歸目標。

代價當然也有。少了 Gaussian 結構,「條件好算、邊際難算」的困難會以新的樣子回來。U2.2 會處理它,用的是 U1.2 那個 conditional trick 的 velocity 版本。

這個單元換一套慣例

從這個單元起改用 flow matching 的慣例。這不是為了折磨人——文獻現在兩套慣例都在用,兩邊都得讀得懂。

概念U1(DDPM)U2 起(FM)
資料x0x_0x1x_1
噪聲/起點xTx_Tx0x_0
時間方向t:0Tt:0\to T,往噪聲走t:01t:0\to1,往資料走
中間點xt=αˉtx0+σtϵx_t=\sqrt{\bar\alpha_t}x_0+\sigma_t\epsilonxt=αtx1+σtx0x_t=\alpha_t x_1+\sigma_t x_0
邊界αˉ0=1, αˉT0\bar\alpha_0=1,\ \bar\alpha_T\approx0α0=0,α1=1\alpha_0=0,\alpha_1=1σ0=1,σ1=0\sigma_0=1,\sigma_1=0
網路學的ϵθE[ϵxt]\epsilon_\theta\approx\mathbb E[\epsilon\mid x_t]uθu_\theta\approx 速度場
取樣xTx_T 倒著走x0x_0 順著解 ODE

兩件最容易出錯的事:

  • FM 的 x0x_0 是噪聲。U1 的式子時要在腦中對調,不然每個式子都會反過來。
  • FM 的 (αt,σt)(\alpha_t,\sigma_t) 不必滿足 αt2+σt2=1\alpha_t^2+\sigma_t^2=1 DDPM 的 VP 路徑滿足這個關係,但 FM 最常用的 αt=t, σt=1t\alpha_t=t,\ \sigma_t=1-t 就不滿足——這正是「路徑」這個旋鈕被鬆開之後的具體樣子。
補充那個「三個旋鈕」的說法在文獻裡叫什麼?

把起點、路徑、加噪強度都當成設計變數的那條線,文獻上叫 stochastic interpolants [2];把資料換到球面、流形上的版本叫 Riemannian flow matching [3]。這個單元先只鬆開「路徑」與「配對」兩個旋鈕,把最乾淨的情況做完;U3 會把整族都攤開來。

消化一下

想一想

下列哪一項不是 diffusion forward process 綁在一起的東西?

想一想

在 FM 的慣例下 xt=αtx1+σtx0x_t=\alpha_t x_1+\sigma_t x_0,那 t=0.9t=0.9xtx_t

想一想

「配對方式」為什麼算一個獨立的旋鈕,而不是隨便一個實作細節?

參考文獻

  1. Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., Le, M. Flow Matching for Generative Modeling. ICLR 2023. (這個單元的主線。)
  2. Albergo, M. S., Boffi, N. M., Vanden-Eijnden, E. Stochastic Interpolants: A Unifying Framework for Flows and Diffusions. 2023. (把三個旋鈕全部攤開的框架。)
  3. Chen, R. T. Q., Lipman, Y. Flow Matching on General Geometries. ICLR 2024. (球面/流形上的版本,對應 Q1 的任務 2。)