U3.2 把「彎」寫成一個算得出來的數
本篇重用M0.2導航的三十秒:Taylor 展開與「假設直線」·M2.3導航每 30 秒更新一次:Euler 法與它的誤差·M6.1兩個城市的人口分佈差多少:W₂ 距離·M3.4每條路徑對,還是最後的分佈對:Weak 與 Strong Convergence
「彎」到目前為止還是一個形容詞
U2.3 和 U2.5 都說軌跡越彎、少步數的誤差越大,而且 demo 量得出來。但「彎」到現在還是一個看圖說話的形容詞——沒有一個數,就沒辦法比較兩個模型、也沒辦法拿它當優化目標。
「彎」能不能寫成一個數?
而且那個數真的壓住誤差嗎?
Euler 走一步差多少
真實軌跡 滿足 。Euler 從 走一步得到 ,而真實解的 Taylor 展開是
前兩項就是 Euler 走的那一步,所以局部誤差是 ——整個誤差來源就是那個二階項。把它寫開:
兩項各有意思。第一項是「站在原地不動,速度場隨時間變了多少」;第二項是「粒子跑到新位置之後,看到的速度和原來差多少」。軌跡是等速直線的時候,兩項都是零,Euler 一步就精確。
一步的誤差怎麼變成終點的誤差
一步的誤差不會乖乖留在原地——它會被後面的流放大或縮小。如果 對 是 -Lipschitz,兩條相距 的軌跡經過時間 之後最多相距 (Grönwall)。把 步的局部誤差各自放大再加起來:
把每一步的局部誤差加起來、再把「被流放大」的因子收成一個常數 ,就得到這一篇要的那一行:
這個式子把 U2.5 那張 log-log 圖的兩個訊息分得很乾淨:
- 給斜率。 一階,所以 log-log 上是 。
- 積分給高度。 軌跡越彎,同樣步數誤差越大;積分為零時一步 Euler 就是精確解。
- 是速度場的正則性。它同時放大所有誤差,但不由「路徑直不直」控制——所以它不是我們這個單元要動的東西。
展開細節從單條軌跡的誤差到分布層級的 W₂ 上界
上面的不等式是對一條軌跡說的。取樣關心的是終點分布,所以要把它升級。
把單條軌跡的誤差對起點 取平方期望開根號:
理由是 是所有耦合裡距離的下確界,而「同一個 出發的那兩個終點」本身就是一個合法的耦合——任何一個耦合都給出上界。所以只要控制得住逐軌跡的誤差,就控制得住分布的距離。
反過來不成立: 很小不代表逐軌跡誤差小(兩堆樣本可以分布相同、卻沒有一對彼此靠近——這正是 U1.0 Q2 的那個坑)。
互動 demo:曲率積分真的壓住誤差嗎。 上面是一個不等式,這裡是六個設定的實測散點:橫軸曲率積分、縱軸 Euler 的終點誤差,兩軸都取對數。六個點排在一條斜率約 1 的線上( 通常 0.95 以上),所以那個積分不只是上界裡的一個符號,它真的在預測誤差。最有效的一招是換配對——線性路徑從獨立換成依位置,積分從約 9 掉到 1.4。(「怎麼換配對」本篇不處理,U3.3 與 U3.4 各給一個做法。這裡只要接受一件事:這個積分是可以被壓下去的,而且壓它就等於省步數。)
SDE 為什麼不能用同一個量
SDE 的軌跡是布朗運動加 drift, 根本不存在,「這條軌跡直不直」在那裡沒有意義。控制 Euler–Maruyama 誤差的是另一組東西:drift 對 、 的 Lipschitz 常數與導數界,以及噪聲強度 。而且它有兩種階數要分開講——弱收斂(邊際)是 、強收斂(單條軌跡)只有 。取樣只看終點分布,所以看弱誤差。
第一,拉直不會幫到 SDE。 曲率積分是 ODE 的量;SDE 那邊對應的是 drift 的正則性,兩者不是同一個東西。
第二,SDE 的誤差不會像 ODE 那樣線性累積。 U3.1 的 Langevin 項會把偏離拉回來,所以一部分離散誤差會被後面的步吃掉。但 U3.1 的 demo 也顯示這件事有條件:修正需要足夠大的 和足夠的剩餘時間,不是自動發生的。
粗略的圖像是:ODE 每一步犯錯少但全部累積,SDE 每一步犯錯多但錯不會全留下。
直的軌跡和厚的中間分布,能不能都要?
課堂提問Q1
U3.3 會用 reflow 把軌跡拉直,讓 往 0 靠。既然拉直之後誤差這麼小,那能不能再把 U3.1 的 Langevin 項加上去,同時享有直軌跡和自我修正?
先想一想,再展開看整理後的答案
不能,而且原因是結構性的,不是工程上還沒做到。
Reflow 的核心是把配對 換成確定性的耦合(每個 對到唯一的 ),並且 。U3.0 Q1 說過這時候發生什麼事:給定 ,端點就定死了,沒有後驗可以平均,所以沒有可回歸的 score——寫不出 SDE 取樣器。
要有 score 就得留 。但 把每一條條件路徑撐成一根有寬度的管子,管子互相重疊,於是邊際速度又變回一個平均, 就回不到 0 了。
這兩個要求要的是互斥的圖像:
「所有粒子沿確定的直線走」和「中間分布有厚度、偏了可以拉回來」不可能同時成立。
上面 demo 的數字剛好把這件事量出來,而且方向不是單一的:
- 線性路徑、獨立配對:積分約 9。
- 換成依位置配對(近似不交叉):掉到約 1.4——換配對是最有效的一招。
- 在好配對上加 :積分回升到約 3.5。這就是上面說的那個代價。
- 在壞配對上加 :反而掉到約 6。因為這時候 主要的作用是把速度場抹平,抹平帶來的好處大於管子重疊帶來的壞處。
所以「加 會讓軌跡更彎」這句話只在配對已經很好的時候才對。真正沒有例外的是那句結構性的話: 讓積分不可能等於 0。
實務上的折衷就是取小一點的 :路徑接近直線,同時留一點 score 可用。 該多大目前沒有定論。
消化一下
參考文獻
- 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. (把「軌跡有多直」當成要優化的量,下一篇的主線。)
- Kloeden, P. E., Platen, E. Numerical Solution of Stochastic Differential Equations. Springer. (Euler–Maruyama 的弱收斂 與強收斂 。)