本篇重用4 篇
在 U3.0 裡,我們看到 Euler 每走一步,只在起點詢問一次 velocity,接著便假設這一小段的方向與速度都不會改變。如果方向轉了,原本的箭頭會帶我們走偏;即使沿著直線前進,只要中途加速或減速,照著舊速度走也會走過頭或走不夠遠。
所以真正要量的不是 geometric curvature,而是:Euler 忽略了多少 velocity 變化?它累積之後,又會讓終點偏掉多少?
Velocity 沿 trajectory 改變了多少,能不能寫成一個數?
而且那個數真的壓住誤差嗎?
互動 demo:同一個起點、同一個 velocity field,只改 Euler 步數。 拖動黃色起點,再用滑桿調整 Euler 步數。細切的 reference trajectory 不會改變;Euler 每一步只重新確認一次方向,所以步數太少時會直接切過彎曲的路段,終點也會跟著偏離。
Euler 一步漏掉了什麼?
下面採用 Hairer、Nørsett 與 Wanner [1] 的標準 Euler 誤差分析,先看一步漏掉的部分,再追它如何一路累積到終點。
考慮一個 ground-truth ODE trajectory:
dtdxt=vt(xt).
從 t 走到 t+h 的精確位移是
xt+h=xt+∫tt+hvτ(xτ)dτ.
Euler 把整段 velocity 都換成在 t 時刻的 vt(xt),因此走到 xt+hvt(xt)。
先固定第 k 步,令 t=tk、t+h=tk+1。把精確終點與「從精確起點試走一次 Euler」的差記成 rk:
藍線沿途更新 velocity,紅線只沿用起點的 vtk(xtk)。這裡兩者從同一個精確位置 xtk 出發,所以 rk 只量這一步漏掉的變化;還沒有加入前幾步累積的錯位。
Week 5 投影片 7 · 點圖查看原圖
這個式子告訴我們漏掉的是 velocity 變化,但還沒有量出它有多大。我們直接把沿著 trajectory 感受到的 acceleration 記成
as(xs):=dsdvs(xs).
從 t 到任意的中間時刻 τ,velocity 的改變就是這段時間累積的 acceleration:
vτ(xτ)=vt(xt)+∫tτdsdvs(xs)ds=vt(xt)+∫tτas(xs)ds.
把它代回精確位移,再交換兩個積分的順序:
xt+h=xt+hvt(xt)+∫tt+h∫tτas(xs)dsdτ=xt+hvt(xt)+∫tt+h(t+h−s)as(xs)ds.
最後那個積分,就是 Euler 這一步沒有算到的部分。它的大小滿足
∥xt+h−xt−hvt(xt)∥≤h∫tt+h∥aτ(xτ)∥dτ.
所以我們要量的,是沿著 trajectory 前進時,velocity 改變得有多快。把 at(xt) 用 chain rule 展開:
第一項問的是:站在同一個位置,velocity field 有沒有隨時間改變?第二項問的是:即使場沒有變,粒子走到另一個位置後,看到的 velocity 是否不同?兩個來源加起來,就是粒子實際感受到的加速度。
左欄固定 x,看時間改變帶來的 ∂tvt(xt);右欄沿著 xt 移動,看空間變化帶來的 (vt⋅∇)vt(xt)。兩者相加,才是沿 ODE trajectory 的完整 acceleration at(xt)。
Week 5 投影片 11 · 點圖查看原圖
補充Acceleration 和 geometric curvature 不一樣
令 ρt=dtdxt 是移動速度的大小,Tt 是 trajectory 的單位切線方向,s 是弧長。Geometric curvature 定義成
κt=dsdTt,它量的是方向隨弧長改變多快,不是隨時間轉得多快。Acceleration 則可以拆成
at(xt)=dtdρtTt+ρt2κtNt.其中 Nt 是 trajectory 轉彎方向的單位法向量。第一項來自加速或減速,第二項才來自 trajectory 轉彎。因此直線 trajectory 雖然有 κt=0,只要速度大小仍在改變,at(xt) 就不會是零。Euler error 用到的是完整的 acceleration,不是只有 curvature。
只有當 trajectory 是等速直線時,at(xt)=0,Euler 才不會漏掉任何 velocity 變化,從任意時刻一步走到終點也會精確。
一步的誤差怎麼一路帶到終點?
如果第一步走偏,第二步就不只要承受新的 Euler 誤差;我們還會站在錯的位置,查到不同的 velocity。把時間切成 tk=kh,並將 Euler 在 tk 的位置記成 x^tk。兩條 trajectory 在這一刻相差
ek:=∥xtk−x^tk∥.
上面已經推得,精確 trajectory 的第 k 步可以寫成
xtk+1=xtk+hvtk(xtk)+rk,
其中 Euler 漏掉的 local remainder 是
rk=∫tktk+1(tk+1−s)as(xs)ds,∥rk∥≤h∫tktk+1∥as(xs)∥ds.
Euler 自己走的則是
x^tk+1=x^tk+hvtk(x^tk).
兩條式子相減:
xtk+1−x^tk+1=(xtk−x^tk)+h(vtk(xtk)−vtk(x^tk))+rk.
右邊三項分別是:上一刻已經累積的錯位、因為站錯位置而查到的 velocity 差,以及這一步新漏掉的變化。要控制第二項,我們需要假設 vt 對位置是 L-Lipschitz。
補充L-Lipschitz:原本的 input 離得越近,function output 也不會突然差太多
對任意時刻 t 與兩個位置 x,y,如果
∥vt(x)−vt(y)∥≤L∥x−y∥,我們就說 vt 對位置是 L-Lipschitz。這裡 function 的 input 是位置 x,output 是 velocity vt(x)。想像地圖上的每個位置都有一支 velocity 箭頭:兩個人只相距 δ,他們看到的箭頭最多相差 Lδ。L 越小,附近的箭頭變化得越平順;L 越大,走偏一點就可能查到很不一樣的方向與速度。
這裡限制的是同一個時刻、不同位置的 velocity 差;沿時間產生的 velocity 變化,已經包含在 local remainder rk 裡。
現在對剛才相減後的式子取 norm。左邊依照定義就是下一刻的誤差 ek+1;右邊則用三角不等式,把三種誤差分開:
ek+1=∥xtk+1−x^tk+1∥≤上一刻的誤差 ek∥xtk−x^tk∥+h站錯位置造成的 velocity 差∥vtk(xtk)−vtk(x^tk)∥+這一步新漏掉的變化∥rk∥.
第一項就是 ek。第二項再用 L-Lipschitz:兩個位置相差 ek,查到的 velocity 最多相差 Lek;乘上步長 h 後,這一項最多是 hLek。因此
ek+1≤ek+hLek+∥rk∥=(1+hL)ek+∥rk∥.
也就是說,下一步的誤差由兩部分組成:前面累積的 ek 可能被 flow 放大成 (1+hL)ek,再加上這一步新產生的 local remainder ∥rk∥。
ek=∥xtk−x^tk∥ 是累積誤差,rk 是第 k 步新漏掉的變化。r0 在 t1 進入後,還要經過 N−1 步;rN−1 在最後一步才進入。因此,前者的上界帶著 (1+hL)N−1,後者沒有後續放大因子。
Week 5 投影片 16 · 點圖查看原圖
現在把這個 recurrence 從 e0=0 一路展開到 N=1/h:
eN≤k=0∑N−1(1+hL)N−1−k∥rk∥≤eLhk=0∑N−1∫tktk+1∥as(xs)∥ds=eLh∫01∥at(xt)∥dt.
第二行用的是 (1+hL)N≤eL。它就是 Grönwall inequality 在這個離散 recurrence 裡的樣子:前面的錯位可能被後續 flow 放大,但在時間區間 [0,1] 上,放大倍數最多收進 eL。
因此,對每一條從同一起點出發的 trajectory,
這條式子把三個因素分開了:
- h 是我們把時間切得多細。 步數加倍時,Euler error 會以一階速度下降。
- 加速度積分量的是這條 trajectory 沿途累積了多少 velocity 變化。 方向改變、加速與減速都會算進去;它越大,同樣步長下漏掉的變化通常越多。
- eL 是 velocity field 會不會把小偏差放大的程度。 兩條 trajectory 的加速度積分相同,場比較陡的那一條仍可能更難積分。
對 Euler 而言,真正要量的是沿著 ODE trajectory 累積的 velocity 變化 ∫01∥at(xt)∥dt,不是 geometric curvature。
展開細節從單條軌跡到 W₂:模型沒學準與 Euler 沒走準是兩種誤差
上面的推導暫時假設我們拿得到 vt。但真正生成時使用的是學到的 vθ,還要再用 Euler 離散它。因此,終點和目標 p1 的距離其實有兩個來源:
- Modeling error: vθ 和理想的 vt 不完全相同;
- Discretization error: 即使 vθ 已經固定,Euler 也只是在近似它的 continuous ODE。
讓三條路徑從同一個 X0∼p0 出發:
dtdXt=vt(Xt),dtdXt=vθ(Xt,t),Xtk+1=Xtk+hvθ(Xtk,tk).
三條路共用同一個 X0。藍色 Xt 與紫色 Xt 的差來自 field;紫色 Xt 與紅色 Xtk 的差才來自 Euler。增加步數會讓紅線更接近紫線,但不會自行把 vθ 改成 vt。
Week 5 投影片 19 · 點圖查看原圖 X1 是理想 ODE 的終點,X1 是把 learned ODE 精確解完的終點,X1 才是實際用 Euler 得到的終點。將它們的 distributions 分別記成
X1∼p1,X1∼p1,X1∼p1.W2 會在所有 couplings 中尋找平均平方距離最小的一個:
W22(q,r)=Γ∈Π(q,r)infE(Y,Y)∼Γ∥Y−Y∥2.我們讓三條路徑使用相同的 X0,便為每一對終點提供了一個合法 coupling。接著用 W2 的 triangle inequality 把問題拆開:
最後真正看到的 gapW2(p1,p1)≤modeling errorW2(p1,p1)+discretization errorW2(p1,p1).第一項:vθ 和 vt 的誤差
先定義 U2.4 看過的 population velocity error:
Ev:=∫01EXt∼pt[∥vθ(Xt,t)−vt(Xt)∥2]dt.假設 vθ 對位置是 L-Lipschitz。比較從同一個 X0 出發的 Xt 與 Xt,在 learned velocity 中加減 vθ(Xt,t):
dtd∥Xt−Xt∥≤∥vθ(Xt,t)−vt(Xt)∥≤≤L∥Xt−Xt∥∥vθ(Xt,t)−vθ(Xt,t)∥+velocity prediction error∥vθ(Xt,t)−vt(Xt)∥.把 prediction error 記成
δt:=∥vθ(Xt,t)−vt(Xt)∥.Grönwall inequality 把它沿時間累積到終點:
∥X1−X1∥≤eL∫01δtdt.將兩邊平方、取 expectation,再用 Cauchy–Schwarz inequality,
E∥X1−X1∥2≤e2LE[(∫01δtdt)2]≤e2L∫01E[δt2]dt=e2LEv.而 (X1,X1) 是 p1 與 p1 的一組 coupling,所以
W2(p1,p1)≤eLEv.這一項即使把 ODE 解得再精確也不會消失;它來自模型沒有完全學到 vt。
第二項:Euler 對 learned ODE 的誤差
現在把 vθ 當成已經固定的 velocity field,將上面的 Euler 推導原封不動地套到它。令
at(Xt):=dtdvθ(Xt,t),A(X0):=∫01∥at(Xt)∥dt.同樣讓精確 learned ODE 與 Euler 使用相同的 X0。把前面的 pathwise bound 代入 W2 定義:
W22(p1,p1)≤E∥X1−X1∥2≤e2Lh2E[A(X0)2],也就是
W2(p1,p1)≤eLh(E[A(X0)2])1/2.這一項會隨步長 h 縮小;它才是本篇正在分析的 finite-step error。
把兩項合起來:
W2(p1,p1)≤eL[Ev+h(E[A(X0)2])1/2].所以,把 trajectory 變直、把步數增加,只能壓低 discretization error;如果 vθ 本身沒有學準,終點仍然會留下 modeling error。 反過來,training loss 很小也不代表少步生成一定準,因為 Euler 還可能漏掉 learned trajectory 沿途的 velocity 變化。
這些 coupling 都使用相同的 X0,因此只提供 W2 的上界。W2 可以在所有 couplings 裡另找更便宜的配對,所以 W2 很小時,逐條 trajectory 的誤差仍不一定小;這正是 U1.0 Q2 的那個坑。
消化一下
參考文獻
- Hairer, E., Nørsett, S. P., Wanner, G. Solving Ordinary Differential Equations I: Nonstiff Problems. Springer. (Euler 的局部/全域誤差與 Grönwall 論證的標準參考。)
- Liu, X., Gong, C., Liu, Q. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. (把「軌跡有多直」當成要優化的量,下一篇的主線。)