M2.1 從一片葉子到一群葉子:Flow Map 與 Pushforward
一千片葉子
上一篇(M2.0)解決了一片葉子的問題:水流地圖 已知,葉子從 出發,一分鐘後在一個確定的位置。
現在換個玩法。你抓起一把葉子——一千片——從橋上撒下去。它們不會落在同一點,而是散在橋下一小塊水面上:靠中間多、靠邊少。一分鐘後,這一千片葉子會散成什麼樣子?哪裡密、哪裡稀?
每片葉子都順著同一張地圖走,但整團葉子不一定只平移到下游:前面的水流較快,葉子會被拉開;往中央匯合時,葉子又會變擠。已知每個起點會被送到哪,能不能算出搬運後的 density? 這次要追的不是一片葉子,而是整個 distribution。
課堂提問Q1
翻成數學。「一千片葉子的散佈」是什麼物件?「一分鐘後的散佈」又是什麼?我們想求的量,跟上一篇的 有什麼關係?
先想一想,再展開看整理後的答案
課堂上第一個反應通常是「一千個點的位置」。這沒錯,但它是樣本,不是我們想要的東西。一千片葉子是從某個分佈抽出來的:撒葉子的手決定了「落在橋下哪個位置」的機率密度 ——中間高、邊緣低。所以:
起點是一個隨機變數 ,一千片葉子是它的一千個獨立樣本。
每片葉子接下來的路是確定的。 上一篇說,從 出發的葉子在時刻 的位置是 ODE 的唯一解。把這個對應寫成一個函數:
叫 flow map:它不是一片葉子的路,而是「所有起點同時被送到哪」的一張總表。
一分鐘後的散佈是隨機變數 的分佈,記成 。我們想求的就是 。它和上一篇的關係是:上一篇算的是一個特定輸入 的輸出 ;這一篇是把整個分佈送進 。這個操作有名字,叫 pushforward(把分佈往前推),寫成 。
一塊會變形的果凍
把橋下那團葉子想成一塊軟果凍,每一小塊果凍就是一小群葉子。水流帶著果凍往下游走,同時把它揉變形:流速在前進方向變快的地方,果凍被拉長,同樣多的葉子占了更大的面積,變稀;水流往中央匯合的地方,果凍被壓扁,變密。
但有兩件事水流做不到。第一,它不能讓兩塊不同的果凍融成一塊——那需要兩片不同的葉子在同一時刻到達同一點,上一篇說這不會發生。第二,它不能把果凍撕開——軌跡是連續的。所以一分鐘後的果凍,是原本那塊被連續、不重疊地變形的結果:每一小塊有多少葉子沒變,只是占的面積變了。密度 = 葉子數 ÷ 面積,所以密度的變化完全由面積的伸縮決定。
圖:小塊中的點數不變;面積伸縮透過 Jacobian 改變密度。
flow map、pushforward、change of variables
Flow map 的性質。 假設速度場滿足存在唯一的條件,而且解在需要的正向、反向時間區間都存在。由 M2.0 可得:
- ;且 對 是 continuous 的(起點差一點、終點差一點,差距至多放大 倍——這是 M2.3 裡 Grönwall 不等式的內容,先當結論)。
- 可逆。 是一對一的:若 ,兩條軌跡在時刻 相交,唯一性說它們整條相同,故 。反函數就是「把時間倒著走」: 是 vector field 走 秒的 flow map。所以 是一個 diffeomorphism(可微、可逆、反函數也可微的映射),只要 夠 smooth。
- 若 不隨時間變,還有 :先走 秒再走 秒,等於一次走 秒。
Pushforward 的定義。 給一個可測映射 與一個分佈 , 是「先從 抽 、再算 」得到的分佈。用集合寫:對任何區域 ,
——落在 的機率,等於「會被送進 的那些起點」在 下的機率。這個定義對任何映射都成立,不需要可逆。
密度公式(change of variables)。 假設起點有 density ,且 是 diffeomorphism,Jacobian 的行列式不為零。此時:
三行推導:取 附近的小方塊 ,它的原像 是 附近的一個小平行體,體積是 (Jacobian 就是「局部把體積放大多少倍」)。兩邊的機率相等:。消掉 即得。
這正是上一節「密度變化完全來自面積伸縮」的公式版: 就是果凍那一小塊被放大的倍數。
展開細節一維的完整例子:ẋ = −x,起點是標準 Gaussian
flow map 是 Φ_t(x) = e^(−t) x(代入:d/dt e^(−t)x = −e^(−t)x = −Φ_t ✓)。反函數 Φ_t^(−1)(y) = e^t y,導數 e^t。若 p₀ = N(0,1),則 p_t(y) = p₀(e^t y)·e^t = (2π)^(−1/2) e^t exp(−e^(2t) y²/2), 也就是 N(0, e^(−2t)):所有葉子往原點收攏,分佈越來越窄,但總質量不變(積分仍是 1,因為多出來的 e^t 正好補償變窄)。這個例子在下一篇會再用一次,用另一條路算出同一個答案。
直覺的一半對、一半漏
公式描述的是局部體積,不是整個形狀。即使 ,一塊正方形仍可以被剪切成平行四邊形;面積沒變,形狀卻變了。對 smooth 的 flow, 會保體積;一般情況則是小塊中的葉子數不變,density 按局部體積伸縮的反比改變。
Pushforward 的集合定義只需要一個已選定的可測映射,不要求可逆。上面的單一反函數公式則需要更強的條件:若多個起點被送到同一點,就不能直接套用它;若一整塊質量被壓成一點,結果甚至不再有普通的 density。ODE 解不唯一時,也必須先說明選擇哪條解,才有一個確定的 。
數葉子,還是算公式
兩種方法各有成本。抽 個起點、解 ODE 後數落進某個固定區域的比例,sampling error 通常是 ;若要估計 density,還有直方圖格子大小帶來的誤差。Change of variables 沒有這種 sampling error,但一般要數值計算反向 flow 與 Jacobian,也不表示完全沒有誤差。
import numpy as np
t, N = 1.0, 1000
x0 = np.random.randn(N) # p0 = N(0,1)
xt = np.exp(-t) * x0 # Phi_t for xdot = -x(此例有 closed form)
ys = np.linspace(-2, 2, 200)
p_formula = np.exp(t) * np.exp(-(np.exp(t)*ys)**2/2) / np.sqrt(2*np.pi)
hist, edges = np.histogram(xt, bins=40, range=(-2, 2), density=True)
# 直方圖與 p_formula 應重合;N 改成 100 看直方圖變毛
檢查理解
參考文獻
- Hirsch, M. W., Smale, S., Devaney, R. L. Differential Equations, Dynamical Systems, and an Introduction to Chaos. Academic Press, 3rd ed., 2013.(第 7 章:flow 的定義與性質,。)
- Villani, C. Topics in Optimal Transportation. AMS Graduate Studies in Mathematics 58, 2003.(第 1 章:pushforward(transport of measure)的定義與 change of variables。)
- Grimmett, G., Stirzaker, D. Probability and Random Processes. Oxford University Press, 3rd ed., 2001.(第 4 章:隨機變數的函數與密度的變數變換公式。)