搜尋課程與筆記

搜尋筆記

輸入主題、關鍵字或單元編號,例如 Flow Matching、U4。

    按 Esc 關閉 · ⌘ / Ctrl K 開啟搜尋

    U2.0 4 分鐘閱讀 2026年10月

    U2.0 Forward Process 是必要的嗎?

    本篇重用1 篇

    DDPM、DDIM 的其中一端是 Gaussian

    在 U1,我們從 Gaussian noise 出發,透過 denoising process 逐步生成資料。Gaussian 容易抽樣,線性組合後仍然是 Gaussian;這些性質讓 xtx_t 可以直接算,也讓 denoising 能化成簡單的 regression。

    但如果今天的問題不是「從 noise 生成資料」,而是把一個指定的 distribution 搬到另一個 distribution 呢?

    如果我們想把真實照片轉成卡通風格,
    起點明明是真實照片,為什麼還要先把它變成 Gaussian?

    狗、貓、建築與風景照片轉成卡通或繪畫風格,兩端都是資料分布

    圖:從照片分布搬到卡通或繪畫分布,兩端都不是 Gaussian。這裡要放開的是 U1 生成設定中固定的 Gaussian 起點。

    Week 4 投影片 5 · 點圖查看原圖

    U1 中的生成設定是

    XT∼N(0,I)⟶X0∼pdata,X_T\sim\mathcal N(0,I)\longrightarrow X_0\sim p_{\mathrm{data}},

    而我們現在想直接處理

    X0∼p0⟶X1∼p1,X_0\sim p_0\longrightarrow X_1\sim p_1,

    其中 p0p_0、p1p_1 都可能不是 Gaussian。

    回頭看看 U1 的策略

    U1 一開始想學一個複雜的 transport map GθG_\theta;後來透過 forward process 製造中間的 xtx_t,把「一次走完全程」改成「一步步修正」。DDIM 又讓我們看到,這些小步可以連成一條 deterministic flow。

    那一個很自然的想法就出來了:

    給定 X0X_0 與 X1X_1,我們能不能也先決定中間的 XtX_t,再學一個 flow,把 X0X_0 慢慢搬成 X1X_1?

    想像 X0X_0 是海邊一堆沙現在的形狀,X1X_1 是我們想堆成的形狀。搬運不是瞬間完成的:每一粒沙的位置 xtx_t 都會隨時間改變,而物理中描述位置如何改變的量就是速度。

    所以我們要找的是一個 velocity field:

    把局部速度接成一條路

    dxtdt=vt(xt). \reveal{3}{\frac{\mathrm d\reveal{1}{x_t}}{\mathrm d t}} \reveal{3}{=} \reveal{2}{v_t(\reveal{1}{x_t})}\reveal{3}{.}
    1. 用 xtx_t 記這粒沙在時間 tt 的位置;它是我們要一路更新的量。
    2. vt(xt)v_t(x_t) 給出這個時間、這個位置的移動方向與速度大小。
    3. 讓位置的瞬間變化率等於剛才的速度,便得到 flow ODE。反覆照這個規則走,才形成整條 trajectory。

    vt(xt)v_t(x_t) 回答的是一個很局部的問題:時間 tt、位置 xtx_t 的這粒沙,現在該往哪裡走、走多快? 所有沙粒都反覆照這個規則移動,整個 distribution 就會被逐步搬運。

    但 ODE 只告訴我們「拿到 vtv_t 之後怎麼走」,還沒有說 vtv_t 從哪裡來。

    Lipman、Chen、Ben-Hamu、Nickel 與 Le [1] 提出的 Flow Matching,正是從這個缺口出發:先造出中間路徑,再讓網路學會推動它的 velocity field。

    快速回顧一下

    想一想

    Flow ODE 中的 vt(x)v_t(x) 表示什麼?

    想一想

    為什麼任意 distribution 到任意 distribution 的 transport 不能直接照搬 DDPM 的生成設定?

    參考文獻

    1. Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., Le, M. Flow Matching for Generative Modeling. ICLR 2023.