搜尋課程與筆記

搜尋筆記

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

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

    U3.0 8 分鐘閱讀 2026年10月

    U3.0 每一條參考路徑都是直線,為什麼學出來的 ODE trajectory 卻是彎的?

    本篇重用2 篇

    在 U2.1 裡,我們已經看過實際生成的方法:從 xt0∼p0x_{t_0}\sim p_0 出發,每一步詢問一次目前的 velocity,再用 Euler method 往前走。沿用那裡的 notation,xtkx_{t_k} 是 sampler 在時間 tkt_k 算出的近似位置:

    xtk+1=xtk+Δt vθ ⁣(xtk,tk).x_{t_{k+1}} = x_{t_k}+\Delta t\, v_\theta\!\left(x_{t_k},t_k\right).

    而 U2.3 沿用 Lipman 等人的 Flow Matching [2],選擇的 reference paths 都是直線,每一條路的 reference velocity X1−X0X_1-X_0 也都是常數。直覺上,既然方向從頭到尾都不變,我們學到的 optimal velocity 是不是也會讓 trajectory 保持直線?如果是,似乎就可以把 Δt\Delta t 放得很大,甚至一步直接走到終點。

    但是:

    每一條 reference path 都是直線的話,
    學出來的 Flow ODE 會是直線嗎?

    Toy example:考慮兩條直線就能看出問題

    考慮兩組配對:

    (−1,−1)⟶(1,1),(1,−1)⟶(−1,1).(-1,-1)\longrightarrow(1,1),\qquad (1,-1)\longrightarrow(-1,1).

    兩條 reference paths 都在 t=12t=\tfrac12 通過原點。它們的速度分別是

    (2,2),(−2,2).(2,2),\qquad(-2,2).

    但網路在同一個輸入 (x,t)=(0,12)(x,t)=(0,\tfrac12) 只能輸出一個答案。L2 的最佳解會取平均:

    在交叉點參考兩種速度

    v1/2(0)=12(2,2)+12(−2,2)=(0,2). \begin{gathered} \reveal{1}{v_{1/2}(0)=} \reveal{3}{\frac12}\reveal{2}{(2,2)} \reveal{3}{+\frac12}\reveal{2}{(-2,2)}\\ \reveal{4}{=(0,2).} \end{gathered}
    1. 只看 t=12t=\tfrac12、原點這個 input。網路在這裡只能給一個 velocity。
    2. 這個 toy 有兩條相容的 reference paths,它們的速度分別是 (2,2)(2,2) 與 (−2,2)(-2,2)。
    3. 這個 toy 的兩種來路等可能,所以各乘 12\tfrac12 再相加。一般位置要使用 conditional weights,不能一律各取一半。
    4. 水平方向互相抵消,垂直方向留下 22。這支平均箭頭已經不等於任何一條 reference velocity。

    這支向上的箭頭不屬於任何一條 reference path。它是兩條可能來路在交叉點上的平均方向。

    不過,只算這一支箭頭,確實還不能說明 trajectory 會彎;它只告訴我們,交叉時的 optimal velocity 已經和兩條 reference velocities 不同。

    現在把每個端點從一個點換成一小團人,讓兩條零厚度的線變成兩股有寬度的人流。從左下方出發,沿著 learned velocity 前進:

    • 還沒進入交叉區時,附近幾乎只有往右上的人,所以 horizontal velocity 是正的;
    • 進入交叉區後,往左與往右的訊號開始平均,horizontal velocity 逐漸縮到 00;
    • 通過中間後,在平滑的 learned velocity field 下,trajectory 不能和右邊的人流相交再分開,因此會留在左側,horizontal velocity 轉成負的。

    也就是說,沿著同一條 ODE trajectory,velocity 的水平方向會經過

    向右  ⟶  0  ⟶  向左.\text{向右}\;\longrightarrow\;0\;\longrightarrow\;\text{向左}.

    方向一路在改,trajectory 自然就彎了。在零厚度的兩點 toy 裡,這個轉向全擠在交叉的一瞬間,velocity field 也不是 Lipschitz;把人流稍微加厚後,轉向才會攤成一段平滑的彎路。

    每一條 reference velocity 都決定出直線,不代表它們平均出的 vt∗(x)v_t^*(x) 沿著 ODE trajectory 也會走出直線。

    同一個交叉 coupling:左欄是交叉的直線 reference paths,右欄是沿 conditional mean velocity 產生的彎曲 ODE trajectories。

    圖把搬運方向畫成由左到右,和上面的由下往上 toy 使用不同座標;比較的仍是同一件事:左欄用配對端點畫直線,右欄沿平均 velocity 前進。兩欄共用同一組 p0,p1p_0,p_1 與初始 coupling,卻不會走出同一批 paths。點雲的寬度由 σ\sigma 表示。

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

    在 demo 裡切換配對方式:起點與終點的兩個 distributions 都沒有變,但 reference paths 的交叉程度會改變。隨機配對時,許多方向在同一位置互相抵消;依位置配對時,路線比較平行,marginal trajectories 也更接近直線。

    Velocity 變多少,決定我們 discretize 後要重新確認幾次

    Flow ODE 告訴我們每一個瞬間的速度:

    dxtdt=vt(xt).\frac{\mathrm dx_t}{\mathrm dt}=v_t(x_t).

    但真正要從 xtx_t 走到 xt+hx_{t+h},需要算的是這一小段時間累積下來的位移:

    整段路的位移從哪裡來

    xt+h=xt+∫tt+hvτ(xτ) dτ. \begin{gathered} \reveal{3}{x_{t+h}=}\reveal{1}{x_t} \reveal{3}{+}\reveal{3}{\int_t^{t+h} \reveal{2}{v_\tau(x_\tau)}\,\mathrm d\tau.} \end{gathered}
    1. xtx_t 是這一小段的出發位置。我們想知道經過 hh 時間後,會到哪裡。
    2. 中途時刻 τ\tau 的速度是 vτ(xτ)v_\tau(x_\tau);時間和位置都可能改變,不能只看出發時的一支箭頭。
    3. 從 tt 到 t+ht+h 積分,才得到這段路的精確位移。把它加回出發位置,就是精確終點;Euler 接著要近似的正是這個積分。

    這個積分通常沒有 closed-form solution,所以實作時需要 numerical solver:把連續時間切成一小段一小段,再用有限次計算近似整條路。

    最簡單的 Euler solver,會在每一步呼叫一次神經網路,取得當下的 vθ(xt,t)v_\theta(x_t,t),再更新

    xt+h≈xt+h vθ(xt,t).x_{t+h}\approx x_t+h\,v_\theta(x_t,t).

    每呼叫一次網路來詢問速度,就叫做一次 network evaluation。因此切成幾步,通常就要呼叫幾次網路,也直接決定生成要花多少時間。

    Euler 的近似等於把原本 vtv_t 到 vt+hv_{t+h} 之間的變化忽略掉,假設接下來這一小段會維持同一個 velocity。想像走路時只偶爾看一次導航:方向與速度都幾乎不變時問題不大;但如果沿途要轉彎、加速或減速,就很容易走過頭,偏離原本的 trajectory。

    因此:

    • trajectory 接近直線時,少量 network evaluations 就可能走得準;
    • velocity 快速變化時,步長必須縮小,否則終點的 distribution 很容易偏掉。

    這就產生了兩個新的問題:

    能不能讓 learned ODE trajectory 更直,讓我們 discretize 後,用更少次 network evaluations 也能走得準?

    或者,不改變 trajectory,能不能設計一個會自己判斷路況的 solver:velocity 穩定時走大步,方向或速度快速改變時自動把步長縮小?

    前一條路會帶我們研究如何讓 trajectory 更接近等速直線;後一條路則會帶到 adaptive ODE solvers。

    快速回顧一下

    想一想

    兩條 reference paths 在同一個 (x,t)(x,t) 交叉,velocity network 的 L2 最佳輸出是什麼?

    想一想

    哪一項最直接影響 conditional paths 會不會大量交叉?

    參考文獻

    1. Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023.
    2. Lipman, Y., et al. Flow Matching for Generative Modeling. ICLR 2023.
    3. Tong, A., et al. Improving and Generalizing Flow-Based Generative Models with Minibatch Optimal Transport. TMLR 2024.