搜尋課程與筆記

搜尋筆記

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

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

    U3.2 29 分鐘閱讀 2026年10月

    U3.2 拉直(一):Reflow

    本篇重用2 篇

    要怎麼讓模型學出更直的 trajectory?

    在 U3.1 中,我們推得:固定步長 hh 與 Lipschitz 常數 LL 後,Euler 的 finite-step error 會被

    eLh∫01∥at(xt)∥ dte^Lh\int_0^1\|a_t(x_t)\|\,\mathrm dt

    控制,其中 at(xt)=ddtvt(xt)a_t(x_t)=\frac{\mathrm d}{\mathrm dt}v_t(x_t) 是沿著 trajectory 感受到的 velocity 變化。這個積分越小,error bound 就越小;如果 learned trajectory 是等速直線,at(xt)=0a_t(x_t)=0,Euler 一步也不會漏掉任何 velocity 變化。

    要怎麼做,才能讓模型學出的 velocity field
    產生接近等速直線、又仍然把 p0p_0 搬到 p1p_1 的 ODE trajectory?

    沿用前面的散場例子。想像你原本跟著一群人往東邊走,走到一半卻遇到另一大群人往北走;又或者原本的人潮突然分成兩邊,一半繼續往東,一半轉向北邊。當你不知道目的地、只能參考附近的人時,看到的方向越不一致,就越容易一路改變決定。

    放回 Flow Matching,知道自己要去哪裡的人走出 reference paths;迷路的人則沿著 learned velocity 前進。如果同一個位置附近同時出現許多不同的 reference velocities,L2 regression 會把它們平均起來;而沿途遇到的人一變,平均方向也會跟著變。即使每一條 reference path 都是直線,最後產生的 ODE trajectory 還是可能不斷轉向。

    所以問題變成:我們能不能重新安排起點與終點的配對,讓同一個位置看到的方向更一致,同時又不改變兩端的 distributions?

    使用已經一對一配好的端點

    想讓 learned velocity 看到的 reference paths 更確定、不要那麼凌亂,一個自然的想法是先找一組比較 deterministic 的配對。這裡的 deterministic(確定性)是指:給定起點之後,終點與中間怎麼走都已經決定,不需要再抽新的 randomness。

    咦?我們第一次訓練得到的 learned velocity,不是已經會走出一條 deterministic 的 ODE trajectory 了嗎?給定起點 Z0Z_0 與 velocity field vθv_\theta 後,

    dZtdt=vθ(Zt,t)\frac{\mathrm dZ_t}{\mathrm dt}=v_\theta(Z_t,t)

    會決定整條 trajectory。只要這條 ODE 的解是唯一的,不同起點出發的 trajectories 就不會在同一時刻交叉。

    因此,終點不再是從 p1p_1 隨機抓來配給 Z0Z_0:每個起點都會沿著自己的 flow trajectory,走到唯一的終點 Z1Z_1。

    補充為什麼 ODE trajectories 在同一時刻不會交叉?

    直覺上,velocity field vt(x)v_t(x) 是一個 function:給定同一個時間 tt 與位置 xx,它只會給出一個 velocity,不可能同時叫一個人往東、另一個人往北。因此兩條 trajectories 若在同一個 (x,t)(x,t) 相遇,當下收到的方向一定相同。

    不過,「當下方向相同」還不足以保證之後永遠走在一起;嚴謹的結論還需要 ODE 的解具有唯一性。假設兩條解 ZtZ_t 與 Z~t\widetilde Z_t 在同一時刻 t⋆t^\star 到達同一個位置:Zt⋆=Z~t⋆Z_{t^\star}=\widetilde Z_{t^\star}。把這個位置當成 t⋆t^\star 的初始條件後,兩條曲線都在解同一條 ODE;如果解是唯一的,它們往前與往後都必須是同一條 trajectory,不可能來自兩個不同的起點。

    因此,「不交叉」更精確地說,是兩條不同的 ODE trajectories 不能在同一個 (x,t)(x,t) 相遇後再分開。它們仍可能在不同時刻經過同一個空間位置。

    這條 ODE trajectory 很確定,卻不一定是直線;直接沿用它,並沒有解決少步 Euler 會漏掉 velocity 變化的問題。那我們能不能保留它已經決定好的起點與終點,卻把中間換成直線?

    如果我們利用 vθv_\theta 決定出來的端點配對,但重新用直線連接它們呢?

    想像散場後,我們先讓每個人照目前的導航走過一次。現在每個人的起點與實際抵達的位置都有了;與其再隨機替他指定一個終點,我們可以把同一個人的起點與終點重新配在一起,再畫一條直線作為下一輪的 reference path。

    把這個想法寫成數學時,我們先考慮模型學到理想 velocity vtv_t 的情況。令第一輪使用的 coupling 為 (X0,X1)∼π(0)(X_0,X_1)\sim\pi^{(0)};通常會從獨立配對開始。接著做三件事:

    1. 照 U3.0 的直線插值 It=(1−t)X0+tX1I_t=(1-t)X_0+tX_1,得到邊際速度 vt(x)=E[X1−X0∣It=x]v_t(x)=\mathbb E[X_1-X_0\mid I_t=x]。
    2. 解 ODE dZt(1)dt=vt(Zt(1))\frac{\mathrm dZ_t^{(1)}}{\mathrm dt}=v_t(Z_t^{(1)})、Z0(1)=X0Z_0^{(1)}=X_0,走到 t=1t=1 得到 Z1(1)Z_1^{(1)}。
    3. 把 (Z0(1),Z1(1))(Z_0^{(1)},Z_1^{(1)}) 的 joint distribution 當成新的 coupling:
    π(1):=Law⁡(Z0(1),Z1(1)).\pi^{(1)}:=\operatorname{Law}(Z_0^{(1)},Z_1^{(1)}).

    Liu、Gong 與 Liu [1] 把這一組「學 velocity、跑 ODE、把兩端配回去」的運算稱為 rectification。另外,因為它把舊的 coupling π(0)\pi^{(0)} 變成新的 π(1)\pi^{(1)},我們用 R\mathsf R 記錄 coupling 之間的關係:

    π(1)=R(π(0)).\pi^{(1)}=\mathsf R(\pi^{(0)}).

    R\mathsf R 的輸入與輸出都是 coupling。它沒有改 Flow Matching 的 objective;改的是下一輪要怎麼抽出一對 (X0,X1)(X_0,X_1) 來製造 reference paths。

    做到這裡,我們只完成了一次 rectification。如果再從 π(1)\pi^{(1)} 抽出端點、重新訓練 velocity 並產生下一組配對,就可以反覆寫成

    π(k+1)=R(π(k)).\pi^{(k+1)}=\mathsf R(\pi^{(k)}).

    原論文把這個反覆進行 rectification 的程序稱為 reflow。

    Rectification 的三步:由舊 coupling 畫 reference lines,平均出新的 velocity 並解 ODE,再把同一條 trajectory 的兩端配成新的 coupling。

    從左往右看:π(k)\pi^{(k)} 決定直線 It(k)I_t^{(k)},它們的 conditional mean velocity vt(k+1)v_t^{(k+1)} 決定新 ODE Zt(k+1)Z_t^{(k+1)},最後收集兩端得到 π(k+1)\pi^{(k+1)}。紫色箭頭把新配對送回下一輪;保留的是端點,下一輪仍要重新畫 reference lines、重新學 velocity。

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

    上下交叉後,ODE 會怎麼走?

    先用一個經典的交叉 toy 看一次。起點與終點各有上下兩個 Gaussian clusters:

    p0=12N((−2,1),σ2I)+12N((−2,−1),σ2I),p1=12N((2,1),σ2I)+12N((2,−1),σ2I).\begin{aligned} p_0&=\tfrac12\mathcal N((-2,1),\sigma^2I) +\tfrac12\mathcal N((-2,-1),\sigma^2I),\\ p_1&=\tfrac12\mathcal N((2,1),\sigma^2I) +\tfrac12\mathcal N((2,-1),\sigma^2I). \end{aligned}

    不過,我們故意把左上配到右下、左下配到右上。令 S∈{−1,+1}S\in\{-1,+1\} 各以 12\tfrac12 機率取樣,再設定

    X0=(−2,S)+σε0,X1=(2,−S)+σε1,ε0,ε1∼iidN(0,I).\begin{aligned} X_0&=(-2,S)+\sigma\varepsilon_0,\\ X_1&=(2,-S)+\sigma\varepsilon_1, \qquad \varepsilon_0,\varepsilon_1\overset{\mathrm{iid}}{\sim}\mathcal N(0,I). \end{aligned}

    因此,每一條直線 reference path 都會朝另一側走,兩束 paths 在中央交叉。但 learned velocity 在同一個 (x,t)(x,t) 只能給一個方向;它會依這個位置比較可能屬於哪一束,對兩束的 reference velocities 做 conditional average。

    補充初始 coupling 的 velocity 為什麼可以直接算?

    對直線插值 Xt=(1−t)X0+tX1X_t=(1-t)X_0+tX_1,固定 S=sS=s 後,位置的 mean、共同 variance 與 conditional velocity 分別是

    mt,s=(−2+4t,(1−2t)s),qt=(1−t)2+t2,ρt,s(x)=N(x;mt,s,σ2qtI),ut,s(x)=(4,−2s)+2t−1qt(x−mt,s).\begin{aligned} m_{t,s}&=(-2+4t,(1-2t)s),\\ q_t&=(1-t)^2+t^2,\\ \rho_{t,s}(x)&=\mathcal N(x;m_{t,s},\sigma^2q_tI),\\ u_{t,s}(x)&=(4,-2s)+\frac{2t-1}{q_t}(x-m_{t,s}). \end{aligned}

    所以 optimal velocity 是

    vt(x)=∑s∈{−1,+1}12ρt,s(x)ut,s(x)∑s∈{−1,+1}12ρt,s(x).v_t(x)= \frac{\displaystyle\sum_{s\in\{-1,+1\}}\tfrac12\rho_{t,s}(x)u_{t,s}(x)} {\displaystyle\sum_{s\in\{-1,+1\}}\tfrac12\rho_{t,s}(x)}.

    上下兩束的 prior 都是 12\tfrac12;但看到當下的位置 xx 後,兩束的權重會變成與 12ρt,s(x)\tfrac12\rho_{t,s}(x) 成正比。因此不能在每個位置都直接把 ut,+1u_{t,+1} 與 ut,−1u_{t,-1} 做算術平均。

    這個 closed form 只適用於原本的交叉 coupling。完成 rectification 後,端點配對已經改變;demo 會改用新端點建立的直線 paths,重新估計它們的 conditional mean velocity。

    互動 demo:從交叉配對走到 reflow 後的 ODE。 先看綠色 reference paths 如何交叉,再切到黃色 rectified ODE;這時 velocity 使用上面的 closed form,並按當下的 density 決定兩束各佔多少。最後切到紫色,demo 會把黃色 ODE 產生的新端點配回起點,再只用這批新配對重新估計 velocity。拖動時間,可以看到兩束 particles 在三個階段分別怎麼移動。

    這個程序後來也被帶到大規模影像生成:Liu 等人的 InstaFlow [2] 把 reflow 用在一步文字生圖;Esser 等人的 SD3 [3] 則採用 rectified flow 的線性路徑,但沒有反覆做 reflow。兩者都使用「rectified flow」這個名字,改動的部分並不完全一樣。

    Reflow 可以做到我們想做到的事嗎?

    直覺上,上面的方法似乎有那麼一點道理。但我們不能凡事只靠直覺,一樣要用數學檢查這個想法到底有沒有效、有沒有根據。

    我們想確認兩件事情:

    • Reflow 是否仍然建立一條從 p0p_0 到 p1p_1 的路徑,不會改掉最後生成的 distribution?
    • Reflow 是否真的會讓 ODE trajectories 越來越直?

    為了看清楚 Z(k)Z^{(k)} 怎麼產生 Z(k+1)Z^{(k+1)},下面先考慮理想 velocity 與精確、解唯一的 ODE,並假設端點具有有限二階矩。令 (Z0(k),Z1(k))∼π(k)(Z_0^{(k)},Z_1^{(k)})\sim\pi^{(k)} 表示舊配對。

    第 kk 輪仍然用直線連接這組端點,它的 reference process 是

    It(k)=(1−t)Z0(k)+tZ1(k).I_t^{(k)}=(1-t)Z_0^{(k)}+tZ_1^{(k)}.

    這條直線的 reference velocity 是 Z1(k)−Z0(k)Z_1^{(k)}-Z_0^{(k)}。依照 U2.1 的 L2 regression,為了和圖中的輪次一致,將舊配對 π(k)\pi^{(k)} 決定、用來產生新 ODE 的 optimal velocity 記成

    用舊配對重新平均下一輪的速度

    vt(k+1)(x)=E ⁣[Z1(k)−Z0(k)∣It(k)=x]. \begin{gathered} \reveal{4}{v_t^{(k+1)}(x)=}\\ \reveal{3}{\mathbb E\!\left[ \reveal{2}{Z_1^{(k)}-Z_0^{(k)}\mid} \reveal{1}{I_t^{(k)}=x}\right].} \end{gathered}
    1. 在時間 tt、位置 xx,只看舊配對重新畫出的直線中,哪些滿足 It(k)=xI_t^{(k)}=x。
    2. 每一條相容直線的速度,都是它的舊端點位移 Z1(k)−Z0(k)Z_1^{(k)}-Z_0^{(k)}。
    3. 對這些速度取 conditional expectation。平均的權重由本輪 coupling π(k)\pi^{(k)} 決定。
    4. 這個平均就是 vt(k+1)(x)v_t^{(k+1)}(x)。它要由本輪的 reference paths 重新決定;不是把上一輪的 field 再積分一次。

    下一輪不是沿用舊 trajectory 的 velocity,而是沿著這個重新平均出來的 field 前進:

    dZt(k+1)dt=vt(k+1)(Zt(k+1)),Z0(k+1)=Z0(k).\frac{\mathrm dZ_t^{(k+1)}}{\mathrm dt} =v_t^{(k+1)}(Z_t^{(k+1)}), \qquad Z_0^{(k+1)}=Z_0^{(k)}.

    舊 ODE 的端點決定新的 reference paths;它們平均出的 velocity,再決定新的 ODE trajectory。 每一輪的 vt(k+1)v_t^{(k+1)} 都由當輪的 π(k)\pi^{(k)} 重新決定,不是把同一個 field 反覆積分。

    (一)保留 marginals。 Rectification 重新安排的是「每個起點要配到哪個終點」,不是兩端各自的 distribution。新的 ODE 仍從原本的起點出發,因此

    Z0(k+1)=Z0(k)∼p0.Z_0^{(k+1)}=Z_0^{(k)}\sim p_0.

    接著回想 U2.2:在理想 velocity 與精確 ODE 下,學到的 ODE process Zt(k+1)Z_t^{(k+1)},會和它參考的 interpolation It(k)I_t^{(k)} 在每個時刻產生相同的 marginal。因為舊配對的終點 Z1(k)∼p1Z_1^{(k)}\sim p_1,所以 I1(k)=Z1(k)∼p1I_1^{(k)}=Z_1^{(k)}\sim p_1,進而得到

    Z1(k+1)∼p1.Z_1^{(k+1)}\sim p_1.

    所以 π(k+1)=Law⁡(Z0(k+1),Z1(k+1))\pi^{(k+1)}=\operatorname{Law}(Z_0^{(k+1)},Z_1^{(k+1)}) 仍然連接 p0p_0 與 p1p_1。

    想像原本每個人都配好一個目的地。Rectification 可以重新安排「誰去哪裡」,但出發地與目的地的整體人數分布不變。也就是說,端點的配對改了,但兩端的 distributions 沒有變。

    成本下降,和兩種 velocity variance 有什麼關係?

    (二)成本不會增加。 我們先看最具體的平方運輸成本,也就是每組端點的位移平方,再對 coupling 取平均:

    C(k):=Eπ(k) ⁣[∥Z1(k)−Z0(k)∥2].C^{(k)}:=\mathbb E_{\pi^{(k)}}\!\left[ \left\|Z_1^{(k)}-Z_0^{(k)}\right\|^2 \right].

    回到散場的例子,這個量比較的是每個人被分配到的目的地有多遠,不是他沿 ODE 實際走過的路有多長。那從舊配對產生下一輪後,C(k)−C(k+1)C^{(k)}-C^{(k+1)} 究竟會是多少?

    先看舊 reference paths。站在同一個時間、位置,不同的人可能要求不同的 velocity,而 vt(k+1)v_t^{(k+1)} 只能給它們的平均。原論文 [1] 用 VV 量出這些 reference velocities 離平均有多遠:

    V(π(k))=∫01E ⁣[∥(Z1(k)−Z0(k))−vt(k+1)(It(k))∥2]dt.V(\pi^{(k)}) =\int_0^1\mathbb E\!\left[ \left\| \left(Z_1^{(k)}-Z_0^{(k)}\right)-v_t^{(k+1)}(I_t^{(k)}) \right\|^2 \right]\mathrm dt.

    這就是 conditional variance:先固定 (x,t)(x,t),看相容的 reference velocities 有多不一致,再對位置與時間平均。向量的平方 norm 會把各分量的 variance 加總成一個數。V=0V=0 時,幾乎所有 (x,t)(x,t) 上的 reference velocities 都已經一致;它不是神經網路沒學好的誤差。

    在相同時間與位置,兩個 reference velocities 為 2,1 與 2,-1,平均為 2,0;若 reference velocities 一致,conditional variance 就是零。

    固定 It(k)=xI_t^{(k)}=x 後,左圖仍可能看到不同的 I˙t(k)\dot I_t^{(k)};它們與平均 vt(k+1)(x)v_t^{(k+1)}(x) 的平方距離,構成這裡的 conditional variance。VV 再對位置與時間平均。右圖的 reference velocities 全部一致,因此這個位置的 conditional variance 是零。

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

    再看新的 ODE trajectory。即使每個位置只給出一個 velocity,同一個人沿途看到的 velocity 還是可能改變。因為時間區間是 [0,1][0,1],這條 trajectory 的平均 velocity 就是總位移:

    ∫01vt(k+1)(Zt(k+1)) dt=Z1(k+1)−Z0(k+1).\int_0^1 v_t^{(k+1)}(Z_t^{(k+1)})\,\mathrm dt =Z_1^{(k+1)}-Z_0^{(k+1)}.

    因此,我們可以看同一條 trajectory 沿時間的 velocity variance,再對隨機起點取平均。Liu、Gong 與 Liu 的原論文 [1] 把這個量稱為 straightness:

    同一個人的速度沿途有多不一致

    S(Z(k+1))=∫01E ⁣[∥Z1(k+1)−Z0(k+1)−dZt(k+1)dt∥2]dt. \begin{gathered} \reveal{5}{S(Z^{(k+1)})=}\\ \reveal{5}{\int_0^1}\reveal{4}{\mathbb E\!\Big[ \reveal{3}{\left\| \begin{gathered} \reveal{2}{Z_1^{(k+1)}-Z_0^{(k+1)}}\\ -\reveal{1}{\frac{\mathrm d Z_t^{(k+1)}}{\mathrm dt}} \end{gathered} \right\|^2} \Big]}\reveal{5}{\mathrm dt.} \end{gathered}
    1. dZt(k+1)/dt\mathrm dZ_t^{(k+1)}/\mathrm dt 是新 ODE trajectory 上,這個人當下的 velocity。
    2. 整段時間長度是 11,所以端點位移 Z1(k+1)−Z0(k+1)Z_1^{(k+1)}-Z_0^{(k+1)} 就是這個人整段路的平均 velocity。
    3. 把當下 velocity 與這個人自己的平均 velocity 相減,再取平方長度。這一步沒有把不同人的速度混成同一個平均。
    4. 換一個起點便換一條 ODE trajectory;期望值把各條路上同一種平方偏差平均起來。
    5. 最後對 t∈[0,1]t\in[0,1] 積分,得到 straightness SS。若 S=0S=0,幾乎每個人的 velocity 沿途都等於自己的端點位移,也就是等速直線。

    S(Z(k+1))=0S(Z^{(k+1)})=0 時,幾乎每一條 ODE trajectory 都以固定速度走直線,因此一步 Euler 就能精確走到終點。不同人可以有不同速度;SS 比較的是同一個人的速度沿途有沒有變,不是把所有人的速度混在一起算 variance。

    對 trajectory Z_t=(t,t²),比較瞬間 velocity (1,2t) 和端點位移 (1,1),用兩者的差說明 straightness。

    先只看一條 Zt=(t,t2)Z_t=(t,t^2):端點位移是 Z1−Z0=(1,1)Z_1-Z_0=(1,1),但瞬間 velocity 是 Z˙t=(1,2t)\dot Z_t=(1,2t)。在 t=14t=\tfrac14,兩支箭頭分別為 (1,1)(1,1) 與 (1,12)(1,\tfrac12)。因此這條路的 S=∫01(1−2t)2 dt=13S=\int_0^1(1-2t)^2\,\mathrm dt=\tfrac13;一般情況再對隨機起點取期望。圖省略了輪次,上文的新 trajectory 則記成 Zt(k+1)Z_t^{(k+1)}。

    Week 5 投影片 34 · 點圖查看原圖
    展開細節straightness 和 U3.1 的加速度積分有什麼關係?

    這裡的 straightness 和 U3.1 使用的加速度積分

    ∫01∥at(Zt(k+1))∥ dt\int_0^1\left\|a_t(Z_t^{(k+1)})\right\|\,\mathrm dt

    並不是同一個量。SS 比較當下 velocity 與整段路所需的固定 velocity;加速度積分則量 velocity 沿途總共改變了多少,包含轉向、加速與減速。不過它們在等速直線上會接起來:

    S(Z(k+1))=0⟹dZt(k+1)dt=Z1(k+1)−Z0(k+1)⟹at(Zt(k+1))=0.S(Z^{(k+1)})=0 \quad\Longrightarrow\quad \frac{\mathrm dZ_t^{(k+1)}}{\mathrm dt} =Z_1^{(k+1)}-Z_0^{(k+1)} \quad\Longrightarrow\quad a_t(Z_t^{(k+1)})=0.

    所以 straightness 等於零時,U3.1 控制 Euler error 的加速度積分也等於零;但在一般情況下,兩個數值不必一起變大或變小。Reflow 的定理直接控制的是下面的 S+VS+V,要把它連到 finite-step error,仍然要使用 U3.1 的分析。

    接著把兩個 variance 接進成本計算。舊 reference velocity 可以拆成「conditional mean vt(k+1)(It(k))v_t^{(k+1)}(I_t^{(k)})」與「離平均的偏差」。後者在給定 It(k)I_t^{(k)} 時平均為零,因此展開平方後,交叉項會消失:

    C(k)=V(π(k))+∫01E ⁣[∥vt(k+1)(It(k))∥2]dt.C^{(k)} =V(\pi^{(k)}) +\int_0^1\mathbb E\!\left[\left\|v_t^{(k+1)}(I_t^{(k)})\right\|^2\right]\mathrm dt.

    這就是平方誤差的 variance 分解。接著,It(k)I_t^{(k)} 與 Zt(k+1)Z_t^{(k+1)} 在每個時刻的 marginal 相同,所以同一個函數 ∥vt(k+1)(⋅)∥2\|v_t^{(k+1)}(\cdot)\|^2 對它們取平均,結果也相同:

    ∫01E∥vt(k+1)(It(k))∥2 dt=∫01E∥vt(k+1)(Zt(k+1))∥2 dt.\begin{aligned} &\int_0^1\mathbb E\|v_t^{(k+1)}(I_t^{(k)})\|^2\,\mathrm dt\\ &\qquad=\int_0^1\mathbb E\|v_t^{(k+1)}(Z_t^{(k+1)})\|^2\,\mathrm dt. \end{aligned}

    最後看右邊。將 SS 的平方展開,交叉項用剛才的 ∫01vt(k+1)(Zt(k+1)) dt=Z1(k+1)−Z0(k+1)\int_0^1v_t^{(k+1)}(Z_t^{(k+1)})\,\mathrm dt=Z_1^{(k+1)}-Z_0^{(k+1)} 計算:

    S(Z(k+1))=∫01E∥vt(k+1)(Zt(k+1))∥2 dt−2C(k+1)+C(k+1).\begin{aligned} S(Z^{(k+1)}) &=\int_0^1\mathbb E\|v_t^{(k+1)}(Z_t^{(k+1)})\|^2\,\mathrm dt\\ &\quad-2C^{(k+1)}+C^{(k+1)}. \end{aligned}

    也就是「速度平方的時間平均,減去平均速度的平方」。移項後得到

    ∫01E∥vt(k+1)(Zt(k+1))∥2 dt=S(Z(k+1))+C(k+1).\int_0^1\mathbb E\|v_t^{(k+1)}(Z_t^{(k+1)})\|^2\,\mathrm dt =S(Z^{(k+1)})+C^{(k+1)}.

    把這條式子代回舊成本的分解,就得到原論文 Theorem 3.7 [1] 使用的等式:

    這一輪省下的成本來自哪裡

    C(k)−C(k+1)=V(π(k))+S(Z(k+1)). \begin{gathered} \reveal{3}{C^{(k)}-C^{(k+1)}=}\\ \reveal{1}{V(\pi^{(k)})}\reveal{2}{+S(Z^{(k+1)})}\reveal{3}{.} \end{gathered}
    1. V(π(k))V(\pi^{(k)}) 量的是同一個時間、位置上,舊 reference velocities 離 conditional mean 有多遠。
    2. S(Z(k+1))S(Z^{(k+1)}) 量的是同一條新 trajectory 上,瞬間 velocity 離它自己的時間平均有多遠。這是另一種 variance。
    3. 在理想 velocity 與精確 ODE 下,平方成本的下降量恰好等於這兩個非負量相加。因此成本不增加;這條等式沒有保證 VV 或 SS 本身逐輪下降。

    左邊是這一輪平方運輸成本下降了多少;右邊是舊 paths 在同一位置的 velocity variance,加上新 ODE 在同一條 trajectory 沿時間的 velocity variance。兩者都非負,因此 C(k+1)≤C(k)C^{(k+1)}\le C^{(k)};只要 V+S>0V+S>0,這一輪成本就會嚴格下降。

    運輸成本逐輪不增加,但成本下降量 V+SV+S,以及個別的 VV、SS,不保證逐輪變小。

    展開細節換成一般 convex transport cost,仍然不會增加嗎?

    會。令 convex function cc 描述搬運一段位移的成本,並假設相關 expectations 有限。新 ODE 的位移是 velocity 的時間積分;先對時間平均使用 Jensen,再利用兩個 process 的 marginals 相同,最後對 conditional mean 再使用一次 Jensen:

    E ⁣[c ⁣(Z1(k+1)−Z0(k+1))]=E ⁣[c ⁣(∫01vt(k+1)(Zt(k+1)) dt)]≤∫01E ⁣[c ⁣(vt(k+1)(Zt(k+1)))]dt=∫01E ⁣[c ⁣(vt(k+1)(It(k)))]dt≤E ⁣[c ⁣(Z1(k)−Z0(k))].\begin{aligned} &\mathbb E\!\left[c\!\left(Z_1^{(k+1)}-Z_0^{(k+1)}\right)\right] \\ &=\mathbb E\!\left[c\!\left(\int_0^1v_t^{(k+1)}(Z_t^{(k+1)})\,\mathrm dt\right)\right] \\ &\le\int_0^1\mathbb E\!\left[c\!\left(v_t^{(k+1)}(Z_t^{(k+1)})\right)\right]\mathrm dt \\ &=\int_0^1\mathbb E\!\left[c\!\left(v_t^{(k+1)}(I_t^{(k)})\right)\right]\mathrm dt \\ &\le\mathbb E\!\left[c\!\left(Z_1^{(k)}-Z_0^{(k)}\right)\right]. \end{aligned}

    兩次 Jensen 分別處理沿時間的平均,以及同一個 (x,t)(x,t) 上 reference velocities 的 conditional average。一般 convex cost 仍逐輪不增加;但精確的 V+SV+S 等式,是平方成本才有的分解。

    把每一輪的等式從 k=0k=0 加到 KK,中間的運輸成本會前後抵消:

    ∑k=0K(S(Z(k+1))+V(π(k)))=C(0)−C(K+1)≤C(0).\begin{aligned} \sum_{k=0}^{K}\Big( S(Z^{(k+1)})+V(\pi^{(k)}) \Big) &=C^{(0)}-C^{(K+1)}\\ &\le C^{(0)}. \end{aligned}

    右邊的 C(0)C^{(0)} 只由最初的 coupling 決定。左邊則是前 K+1K+1 輪留下的 S+VS+V 全部加起來,而且每一項都不小於零。將上面的不等式除以 K+1K+1,就得到這些數的平均:

    1K+1∑k=0K(S(Z(k+1))+V(π(k)))≤C(0)K+1.\frac{1}{K+1} \sum_{k=0}^{K} \Big(S(Z^{(k+1)})+V(\pi^{(k)})\Big) \le \frac{C^{(0)}}{K+1}.

    一組數裡的最小值一定不會大於平均值,因此

    min⁡0≤k≤K(S(Z(k+1))+V(π(k)))≤C(0)K+1=O(1/K).\min_{0\le k\le K} \Big(S(Z^{(k+1)})+V(\pi^{(k)})\Big) \le \frac{C^{(0)}}{K+1} =O(1/K).

    換句話說,reflow 做得越多輪,前面這些輪次裡至少能找到一輪,它的 ODE trajectory 已經更接近等速直線,而且 reference directions 也更一致。

    不過,這個總和其實還告訴我們另一件事。令

    Ak:=S(Z(k+1))+V(π(k))≥0.A_k:=S(Z^{(k+1)})+V(\pi^{(k)})\ge 0.
    各輪 A_k 的柱狀示意:柱高可以上下波動,最小的一根不大於平均線,不能從 best-iterate bound 推出逐輪下降。

    每根柱子是 Ak=S(Z(k+1))+V(π(k))A_k=S(Z^{(k+1)})+V(\pi^{(k)}),虛線是這幾輪的平均。紅柱不大於平均,對應剛才的 min⁡0≤k≤KAk≤C(0)/(K+1)\min_{0\le k\le K}A_k\le C^{(0)}/(K+1);柱高仍可以上下波動,因此這個 bound 沒有保證每一輪都更好。柱高只是示意,並非實測數據。

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

    如果每一輪都能繼續做 rectification,而且 C(0)<∞C^{(0)}<\infty,那麼

    ∑k=0∞Ak≤C(0)<∞.\sum_{k=0}^{\infty}A_k\le C^{(0)}<\infty.

    一串非負數的總和有限,每一項就必須趨近零;否則只要有某個正數反覆出現,總和便會一直增加。因此

    Ak⟶0,A_k\longrightarrow 0,

    而非負的 S(Z(k+1))S(Z^{(k+1)}) 與 V(π(k))V(\pi^{(k)}) 也都會趨近零。也就是說,在理想條件下,reflow 的確會漸近得到更直、方向更一致的 flow。

    但要注意這兩個結論的差別:O(1/K)O(1/K) 是針對前 K+1K+1 輪中最好的 S+VS+V,告訴我們其中最好的一輪可以有多好;Ak→0A_k\to0 則告訴我們,後面的 reference velocities 會漸近一致,ODE trajectories 也會在 SS 的意義下漸近成為等速直線。不過,這裡並沒有推出

    S(Z(k+2))≤S(Z(k+1)).S(Z^{(k+2)})\le S(Z^{(k+1)}).

    所以,成本 C(k)C^{(k)} 確實逐輪不增加;不保證單調下降的,是每一輪的下降量 AkA_k,以及其中的 SS、VV。 我們可以說後三者會趨近零,卻不能只靠上面的等式,就說它們每一輪都比上一輪小。

    成本下降也不等於已經找到最省的配對。後者需要在所有連接 p0p_0、p1p_1 的 couplings 中,比較哪一個成本最小,這才是 optimal transport(OT,最優傳輸)。

    補充這裡的 OT coupling 是什麼?

    令 Π(p0,p1)\Pi(p_0,p_1) 表示兩端 marginals 分別為 p0p_0、p1p_1 的所有 joint distributions。Quadratic optimal transport 找的是

    πOT∈argmin⁡π∈Π(p0,p1)E(X0,X1)∼π∥X1−X0∥2.\pi_{\mathrm{OT}}\in \underset{\pi\in\Pi(p_0,p_1)}{\operatorname{argmin}} \mathbb E_{(X_0,X_1)\sim\pi}\|X_1-X_0\|^2.

    也就是兩端的 distributions 不變,但在所有合法配對中,找出平均位移平方最小的那一種。Reflow 證明成本不比上一輪大;OT 還要求它不比任何其他合法配對大,兩個要求並不相同。

    此外,S+V→0S+V\to0 只代表 coupling 給出的路徑會越來越直;但這個結果不能推出普通 reflow 一定收斂到 OT coupling。

    展開細節路徑已經完全直,為什麼還可能不是 OT?

    Straightness 與 OT 問的是兩件不同的事:straightness 問「每組端點之間能不能等速直走」,OT 還要進一步在所有合法 couplings 中,比較哪一種配對讓指定的 transport cost 最小。可以直走的配對可能有很多個,但它們要搬的距離不一定一樣。

    例如令

    p0=p1=N(0,I2),p_0=p_1=\mathcal N(0,I_2),

    再把每個起點旋轉 90∘90^\circ,令 X1=RX0X_1=RX_0。它的直線 interpolation 是

    It=((1−t)I+tR)X0.I_t=((1-t)I+tR)X_0.

    對 90∘90^\circ rotation 而言,

    det⁡((1−t)I+tR)=(1−t)2+t2>0,\det((1-t)I+tR)=(1-t)^2+t^2>0,

    所以這個矩陣在 0≤t≤10\le t\le1 都可逆。給定 (It,t)(I_t,t) 就能唯一找回 X0X_0,同一個位置不會出現彼此衝突的 reference velocities;這個 coupling 已經是 straight 的,S=V=0S=V=0。

    但它不是 quadratic OT。因為 p0=p1p_0=p_1,直接使用 identity coupling X1=X0X_1=X_0 的成本是

    E∥X1−X0∥2=0,\mathbb E\|X_1-X_0\|^2=0,

    而旋轉配對需要把每個點搬到另一個位置,成本嚴格大於零。路線沒有繞路,不代表一開始選的目的地就是最近、最省的目的地。 後續研究也給出了更一般的 non-optimal straight fixed points [5,6]。

    展開細節後續研究在什麼條件下得到更強的結論?

    有,但都需要額外條件,或修改原本的 rectification。

    • Bansal 等人 [4] 證明:如果第一次 rectification 所得到的 endpoint map 滿足特定的 Jacobian 條件,接下來的 2-RF 會是完全直的。他們也在 Gaussian-to-Gaussian 與部分 Gaussian-mixture 例子中驗證這些條件;若再滿足更強的 commutativity 條件,得到的 map 也會是二次成本下的 Monge optimal map。
    • Hertrich、Chambolle 與 Delon [5] 則給出 non-optimal fixed points 與 vanishing-loss counterexamples:即使 flow 已經直,甚至額外限制 velocity 是 gradient field,在缺少 support 與 regularity 條件時仍不代表 OT。
    • Wang 等人 [6] 進一步證明,在 centered Gaussian 的例子裡,普通 rectified flow 只有在兩端 covariance matrices commute 時才得到 OT;不 commute 時,第一輪就可能停在一個 non-optimal fixed point。他們提出的 cc-rectified flow 會針對指定成本限制 velocity 的形式,才在額外的 compactness 與 uniform-integrability 條件下得到收斂至 OT 的保證。

    因此,後續結果補上的是「在什麼額外條件或修改下,可以得到更強保證」,並沒有把普通 reflow 在一般情況下直接升級成 straightness 逐輪單調下降,或必然收斂至 OT。

    課堂提問Q1

    ODE trajectories 在解唯一時不會互相交叉。既然 reflow 把同一條 trajectory 的起點與終點配在一起,為什麼一次 rectification 之後還可能不夠直?

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

    因為下一輪並不沿著原本的 ODE trajectories 訓練,而是只保留它們的端點,再重新畫直線:

    It=(1−t)Z0(1)+tZ1(1).I_t=(1-t)Z_0^{(1)}+tZ_1^{(1)}.

    兩條彎曲的 ODE trajectories 可以互不相交,但連接各自端點的兩條弦仍然可能相交。到了交叉處,下一輪的 optimal velocity 又得平均不同方向,所以新的 ODE trajectory 仍可能轉彎。

    Rectification 做的是把原本「隨機抓的端點」換成「同一條 ODE trajectory 的兩端」。這通常已經會大幅減少交叉,卻不保證一次就把 V(π(1))V(\pi^{(1)}) 壓到零;因此才有把輸出再送回去的 reflow。

    互動 demo:同一個起點,比較 reflow 0 次與 1 次。 拖動黃色起點,將 numerical steps 固定在 1、2 或 3,再比較原本的 velocity 與完成一次 rectification 後的結果。黃線是細切的 ODE trajectory,紫線則是少步 Euler;兩者的終點距離直接告訴我們,這一輪的 velocity 只查詢幾次是否已經足夠。

    消化一下

    想一想

    Rectification 為什麼保邊際?

    想一想

    S(Z(1))=0S(Z^{(1)})=0 代表什麼?

    想一想

    為什麼一次 rectification 之後,新的 reference lines 仍可能交叉?

    想一想

    在理想 velocity 與精確 ODE 下,下列哪一句正確?

    參考文獻

    1. Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. (rectification 運算、三個性質、straightness 與 O(1/K)O(1/K) 的收斂。)
    2. Liu, X., et al. InstaFlow: One Step is Enough for High-Quality Diffusion-Based Text-to-Image Generation. ICLR 2024. (把 reflow 推到文字生圖上、真的做到一步。)
    3. Esser, P., et al. Scaling Rectified Flow Transformers for High-Resolution Image Synthesis. ICML 2024. (大規模用線性路徑訓練的實務細節;注意它並沒有做 reflow 迭代。)
    4. Bansal, V., Roy, S., Rinaldo, A., Sarkar, P. On the Convergence and Straightness of Rectified Flow. ICLR 2025. (給出 2-RF 完全變直的 sufficient condition,並分析它何時同時是 Monge map。)
    5. Hertrich, J., Chambolle, A., Delon, J. On the Relation between Rectified Flows and Optimal Transport. NeurIPS 2025. (non-optimal fixed points、vanishing loss 不足以推出 OT,以及所需的額外條件。)
    6. Wang, L., Xu, Z., Liu, Q., Zhou, H. H. Computational and Statistical Guarantees of the cc-Rectified Flow. arXiv preprint, 2026. (ordinary RF 的 Gaussian failure case,以及 cc-rectified flow 在額外條件下的 OT convergence。)