U3.0 每一條參考路徑都是直線,為什麼學出來的 ODE trajectory 卻是彎的?
在 U2.1 裡,我們已經看過實際生成的方法:從 出發,每一步詢問一次目前的 velocity,再用 Euler method 往前走。沿用那裡的 notation, 是 sampler 在時間 算出的近似位置:
而 U2.3 沿用 Lipman 等人的 Flow Matching [2],選擇的 reference paths 都是直線,每一條路的 reference velocity 也都是常數。直覺上,既然方向從頭到尾都不變,我們學到的 optimal velocity 是不是也會讓 trajectory 保持直線?如果是,似乎就可以把 放得很大,甚至一步直接走到終點。
但是:
每一條 reference path 都是直線的話,
學出來的 Flow ODE 會是直線嗎?
Toy example:考慮兩條直線就能看出問題
考慮兩組配對:
兩條 reference paths 都在 通過原點。它們的速度分別是
但網路在同一個輸入 只能輸出一個答案。L2 的最佳解會取平均:
在交叉點參考兩種速度
- 只看 、原點這個 input。網路在這裡只能給一個 velocity。
- 這個 toy 有兩條相容的 reference paths,它們的速度分別是 與 。
- 這個 toy 的兩種來路等可能,所以各乘 再相加。一般位置要使用 conditional weights,不能一律各取一半。
- 水平方向互相抵消,垂直方向留下 。這支平均箭頭已經不等於任何一條 reference velocity。
這支向上的箭頭不屬於任何一條 reference path。它是兩條可能來路在交叉點上的平均方向。
不過,只算這一支箭頭,確實還不能說明 trajectory 會彎;它只告訴我們,交叉時的 optimal velocity 已經和兩條 reference velocities 不同。
現在把每個端點從一個點換成一小團人,讓兩條零厚度的線變成兩股有寬度的人流。從左下方出發,沿著 learned velocity 前進:
- 還沒進入交叉區時,附近幾乎只有往右上的人,所以 horizontal velocity 是正的;
- 進入交叉區後,往左與往右的訊號開始平均,horizontal velocity 逐漸縮到 ;
- 通過中間後,在平滑的 learned velocity field 下,trajectory 不能和右邊的人流相交再分開,因此會留在左側,horizontal velocity 轉成負的。
也就是說,沿著同一條 ODE trajectory,velocity 的水平方向會經過
方向一路在改,trajectory 自然就彎了。在零厚度的兩點 toy 裡,這個轉向全擠在交叉的一瞬間,velocity field 也不是 Lipschitz;把人流稍微加厚後,轉向才會攤成一段平滑的彎路。
每一條 reference velocity 都決定出直線,不代表它們平均出的 沿著 ODE trajectory 也會走出直線。
圖把搬運方向畫成由左到右,和上面的由下往上 toy 使用不同座標;比較的仍是同一件事:左欄用配對端點畫直線,右欄沿平均 velocity 前進。兩欄共用同一組 與初始 coupling,卻不會走出同一批 paths。點雲的寬度由 表示。
在 demo 裡切換配對方式:起點與終點的兩個 distributions 都沒有變,但 reference paths 的交叉程度會改變。隨機配對時,許多方向在同一位置互相抵消;依位置配對時,路線比較平行,marginal trajectories 也更接近直線。
Velocity 變多少,決定我們 discretize 後要重新確認幾次
Flow ODE 告訴我們每一個瞬間的速度:
但真正要從 走到 ,需要算的是這一小段時間累積下來的位移:
整段路的位移從哪裡來
- 是這一小段的出發位置。我們想知道經過 時間後,會到哪裡。
- 中途時刻 的速度是 ;時間和位置都可能改變,不能只看出發時的一支箭頭。
- 從 到 積分,才得到這段路的精確位移。把它加回出發位置,就是精確終點;Euler 接著要近似的正是這個積分。
這個積分通常沒有 closed-form solution,所以實作時需要 numerical solver:把連續時間切成一小段一小段,再用有限次計算近似整條路。
最簡單的 Euler solver,會在每一步呼叫一次神經網路,取得當下的 ,再更新
每呼叫一次網路來詢問速度,就叫做一次 network evaluation。因此切成幾步,通常就要呼叫幾次網路,也直接決定生成要花多少時間。
Euler 的近似等於把原本 到 之間的變化忽略掉,假設接下來這一小段會維持同一個 velocity。想像走路時只偶爾看一次導航:方向與速度都幾乎不變時問題不大;但如果沿途要轉彎、加速或減速,就很容易走過頭,偏離原本的 trajectory。
因此:
- trajectory 接近直線時,少量 network evaluations 就可能走得準;
- velocity 快速變化時,步長必須縮小,否則終點的 distribution 很容易偏掉。
這就產生了兩個新的問題:
能不能讓 learned ODE trajectory 更直,讓我們 discretize 後,用更少次 network evaluations 也能走得準?
或者,不改變 trajectory,能不能設計一個會自己判斷路況的 solver:velocity 穩定時走大步,方向或速度快速改變時自動把步長縮小?
前一條路會帶我們研究如何讓 trajectory 更接近等速直線;後一條路則會帶到 adaptive ODE solvers。
快速回顧一下
參考文獻
- Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023.
- Lipman, Y., et al. Flow Matching for Generative Modeling. ICLR 2023.
- Tong, A., et al. Improving and Generalizing Flow-Based Generative Models with Minibatch Optimal Transport. TMLR 2024.