搜尋課程與筆記

搜尋筆記

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

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

    M6.1 12 分鐘閱讀 2026年10月

    M6.1 兩個城市的人口分佈差多少:W₂ 距離

    本篇重用2 篇

    兩張人口地圖

    你手上有兩張同一個地區的人口密度圖:一張是 1990 年的,一張是 2020 年的。三十年間人口從老城區往東邊的新開發區移了一大塊。你想用一個數字說出「這三十年人口分佈變了多少」。

    第一個想到的量是 M5.1 的 KL:逐點比兩張圖的密度。但你馬上碰到一個奇怪的現象:新開發區在 1990 年是農地、密度為零,log⁡(p2020/p1990)\log(p_{2020}/p_{1990}) 在那裡是 log⁡(正數/0)=∞\log(\text{正數}/0)=\infty。KL 說「差無限多」。更糟的是,如果新開發區在隔壁(搬了一公里)或在另一個縣(搬了一百公里),只要 1990 年那裡都是零,KL 都說無限大——它看不出搬了多遠。

    若我們在意的是人口搬移的尺度,只逐點比較密度就不夠。能不能把距離也放進定義,問「把這張地圖搬成另一張,至少需要搬多遠」? 上一篇的 coupling 正好記錄了哪裡的質量搬到哪裡。

    課堂提問Q1

    翻成數學。逐點比較的量(KL、∫∣p−q∣\int|p-q|)為什麼看不見「搬多遠」?要看見它,「差多少」的定義裡必須包含什麼?

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

    課堂上會發現:KL、total variation 12∫∣p−q∣ dx\tfrac12\int|p-q|\,dx、以及所有形如 ∫f(p(x),q(x)) dx\int f(p(x),q(x))\,dx 的量,都是在每一個位置 xx 分別比 p(x)p(x) 與 q(x)q(x)、然後加起來。它們從不把位置 xx 的密度和位置 y≠xy\neq x 的密度放在一起比。所以「這裡少了一塊、那裡多了一塊」在它們眼裡只是「這裡有差、那裡有差」——兩塊之間的距離 ∣x−y∣|x-y| 根本沒出現在公式裡。

    要看見「搬多遠」,定義裡就得有 ∣x−y∣|x-y|,也就是得有「哪裡的人搬到哪裡」——這正是 M6.0 的 coupling π(x,y)\pi(x,y)。給一個 coupling,「平均搬家距離的平方」是 E(x,y)∼π∣x−y∣2\mathbb E_{(x,y)\sim\pi}|x-y|^2;不同的 coupling 給不同的數,取最省的那個:

    W2(μ,ν)2=min⁡π∈Π(μ,ν) E(x,y)∼π[∥x−y∥2].W_2(\mu,\nu)^2=\min_{\pi\in\Pi(\mu,\nu)}\ \mathbb E_{(x,y)\sim\pi}\big[\|x-y\|^2\big].

    這就是 Kantorovich 問題取成本 c(x,y)=∥x−y∥2c(x,y)=\|x-y\|^2 再開根號。它叫 2-Wasserstein 距離。讀法:把 μ\mu 搬成 ν\nu,最省的搬法下,平均要搬多遠(均方根)。

    兩堆沙

    把 μ\mu 想成一堆沙、ν\nu 想成另一堆同重量的沙。KL 拿一把篩子在每個位置比兩堆沙的高度,只要有一堆在某處是零就爆掉。W2W_2 拿一台推土機:問「把左邊那堆推成右邊那堆的形狀,推土機平均要跑多遠」。

    兩堆沙相隔一公里,推土機平均跑一公里;相隔一百公里,跑一百公里——W2W_2 隨距離變大,正是起點問題要的性質。兩堆沙完全不重疊也沒關係,推土機還是有得推——W2W_2 對不重疊的分佈是有限的。兩堆沙形狀相同、只是位置平移了 aa:每一粒沙都搬 aa,W2=∥a∥W_2=\|a\|——W2W_2 對平移的反應就是平移的距離。

    W₂、KL 與 TV 衡量分佈差異的方式

    圖:逐點距離在支撐錯開後容易飽和;W₂ 仍會反映質量實際要搬多遠。

    W2W_2 對什麼敏感、對什麼不敏感

    定義(重述)。 對 Rd\mathbb R^d 上有二階動差的機率分佈 μ,ν\mu,\nu,

      W2(μ,ν)=(min⁡π∈Π(μ,ν)∫∥x−y∥2 dπ(x,y))1/2.  \boxed{\;W_2(\mu,\nu)=\Big(\min_{\pi\in\Pi(\mu,\nu)}\int\|x-y\|^2\,d\pi(x,y)\Big)^{1/2}.\;}

    (換成 ∥x−y∥p\|x-y\|^p 開 pp 次方就是 WpW_p;本系列只用 p=2p=2。)

    性質一:任何一個 coupling 給上界。 這是定義裡「min⁡\min」的直接後果,卻是實務上最常用的一句話:

    對任何 π∈Π(μ,ν):W2(μ,ν)2  ≤  Eπ∥x−y∥2.\text{對任何 }\pi\in\Pi(\mu,\nu):\qquad W_2(\mu,\nu)^2\;\le\;\mathbb E_\pi\|x-y\|^2 .

    你不需要找到最佳搬法才能說「W2W_2 不超過多少」——隨便找一個合法的搬法,算它的平均平方距離,就是一個上界。最常用的兩個 coupling:獨立 coupling π=μ⊗ν\pi=\mu\otimes\nu 給 W22≤E∥X∥2+E∥Y∥2−2 EX⋅EYW_2^2\le\mathbb E\|X\|^2+\mathbb E\|Y\|^2-2\,\mathbb E X\cdot\mathbb E Y;任何一個把 μ\mu 推成 ν\nu 的映射 TT 給 W22≤Eμ∥x−T(x)∥2W_2^2\le\mathbb E_\mu\|x-T(x)\|^2。第二個特別有用:如果你手上有一個「從 μ\mu 抽樣、經過某個程序、得到 ν\nu 的樣本」的機制,那個程序本身就是一個 coupling,它的平均位移平方就是 W22W_2^2 的上界。

    性質二:它是真正的距離。 W2(μ,ν)≥0W_2(\mu,\nu)\ge0、等於零 ⟺ μ=ν\mu=\nu(最佳 coupling 只能是 y=xy=x)、對稱(Π(μ,ν)\Pi(\mu,\nu) 與 Π(ν,μ)\Pi(\nu,\mu) 只差交換座標)、三角不等式 W2(μ,ρ)≤W2(μ,ν)+W2(ν,ρ)W_2(\mu,\rho)\le W_2(\mu,\nu)+W_2(\nu,\rho)(把兩個最佳 coupling「接起來」——gluing——再用 L2L^2 的三角不等式;展開框有細節)。KL 三者只滿足第一項。

    性質三:對平移與縮放的反應是精確的。 若 ν\nu 是 μ\mu 平移 aa,W2=∥a∥W_2=\|a\|(這裡的 aa 是平移向量;維度那個字母 dd 留給 Rd\mathbb R^d)。若 μ=N(m1,Σ1)\mu=\mathcal N(m_1,\Sigma_1)、ν=N(m2,Σ2)\nu=\mathcal N(m_2,\Sigma_2),有 closed form:

    W22=∥m1−m2∥2+tr(Σ1+Σ2−2(Σ21/2Σ1Σ21/2)1/2),W_2^2=\|m_1-m_2\|^2+\mathrm{tr}\Big(\Sigma_1+\Sigma_2-2\big(\Sigma_2^{1/2}\Sigma_1\Sigma_2^{1/2}\big)^{1/2}\Big),

    一維時就是 (m1−m2)2+(σ1−σ2)2(m_1-m_2)^2+(\sigma_1-\sigma_2)^2——均值差的平方加標準差差的平方。這條式子讓 W2W_2 的兩個成分分開看:一項量「位置差多少」、一項量「散佈差多少」。

    展開細節三角不等式的證明骨架(gluing),與 W₂ 對弱收斂的意義

    設 π₁₂ 是 μ,ν 的最佳 coupling、π₂₃ 是 ν,ρ 的最佳 coupling。「黏合引理」(gluing lemma)說可以造一個三變數的聯合分佈 (X,Y,Z),使 (X,Y) ∼ π₁₂、(Y,Z) ∼ π₂₃(把兩張表沿共用的 ν 那一邊黏起來;離散時就是 π_{ijk} = π₁₂(i,j)π₂₃(j,k)/ν(j))。那麼 (X,Z) 是 μ,ρ 的一個 coupling,所以 W₂(μ,ρ) ≤ ‖X−Z‖{L²} ≤ ‖X−Y‖{L²} + ‖Y−Z‖_{L²} = W₂(μ,ν) + W₂(ν,ρ)。 第一個 ≤ 是性質一(任何 coupling 給上界),第二個是 L² 的 Minkowski 不等式。

    在固定有界區域上,W2(μn,μ)→0W_2(\mu_n,\mu)\to0 等價於 weak convergence。要給特定統計量的定量誤差,還需要它的條件:若 ff 是 KK-Lipschitz,則 ∣Eμf−Eνf∣≤KW2(μ,ν)|\mathbb E_\mu f-\mathbb E_\nu f|\le K W_2(\mu,\nu)。

    KL 控制 W2W_2 也需要參考分布的條件。對標準 Gaussian μ\mu,Talagrand 不等式是 W2(ν,μ)2≤2KL(ν∥μ)W_2(\nu,\mu)^2\le2\mathrm{KL}(\nu\|\mu);對曲率下界為 κ>0\kappa>0 的 strongly log-concave 參考分布,常數相應為 2/κ2/\kappa。不能對任意 log-concave 分布直接使用常數 2 [1]。

    直覺對了,而且能算

    回答起點問題。「人口分佈變了多少」應該跟「平均搬多遠」有關——對,而且 W2W_2 正是那個數:把 1990 年的分佈最省地搬成 2020 年的分佈,平均要搬多遠。新開發區在隔壁與在另一個縣,W2W_2 差一百倍;KL 兩者都是無限大。

    它同時說出兩件事。第一,逐點比較的量在「差異是位置」時失效——不是算錯,是它們的定義裡沒有位置。第二,你不必真的解出最佳搬法就能報數字:任何一個合理的搬法(例如把每個里的人口按地理上最近的新里對應過去)算出來的平均位移,就是 W2W_2 的一個上界;若你另外知道一個下界(例如兩個分佈的均值差——性質三說 W2≥∥m1−m2∥W_2\ge\|m_1-m_2\|),數字就被夾在一個區間裡。

    這個距離使用了位置的幾何:形狀改變,也要透過重新分配質量來計算成本。KL 則比較密度比值,兩者不是同一種差距。本篇把 W2W_2 當成有限距離使用時,要求兩端二階動差有限;若不滿足而考慮 W1W_1,也仍需另外檢查一階動差,不能把它當成所有厚尾問題的解法。

    兩個 Gaussian 跑一次,再用一個爛 coupling 算上界

    import numpy as np
    from scipy.optimize import linprog
    rng = np.random.default_rng(0)
    # 一維兩個 Gaussian:closed form W₂² = (m1−m2)² + (σ1−σ2)²
    m1, s1, m2, s2 = 0.0, 1.0, 3.0, 2.0
    print(np.sqrt((m1 - m2)**2 + (s1 - s2)**2))                       # 3.162
    # 用樣本 + LP 驗證:各抽 60 點、等權,解 assignment(Kantorovich 的離散版)
    x = np.sort(rng.normal(m1, s1, 60)); y = np.sort(rng.normal(m2, s2, 60))
    C = (x[:, None] - y[None, :])**2
    A = np.zeros((120, 3600))
    for i in range(60): A[i, i*60:(i+1)*60] = 1                       # 列和
    for j in range(60): A[60 + j, j::60] = 1                          # 欄和
    res = linprog(C.ravel(), A_eq=A, b_eq=np.ones(120) / 60, bounds=(0, None))
    print(np.sqrt(res.fun))                                           # ≈ 3.30(60 個樣本的抽樣誤差)
    # 任何 coupling 給上界:獨立 coupling(隨機亂配)與「排序後一對一」
    print(np.sqrt(C.mean()))                                          # 獨立 coupling:≈ 3.80,是上界
    print(np.sqrt(np.mean((x - y)**2)))                               # 排序配對:≈ 3.30,與 LP 完全相同(一維的最佳解)
    # KL 看不見距離:把 m2 從 3 改成 30,W₂ 變成 30.02,而兩團不重疊的樣本估出來的 KL 都是「無限大」

    解析 Gaussian 距離是 10≈3.162\sqrt{10}\approx3.162;有限樣本的 LP 與排序配對給出同一個 empirical W2W_2,但不必等於 population 值。獨立 coupling 的成本是這兩份 empirical distributions 的上界,不是自動成為 population 的上界。若直接把不重疊的有限樣本當成原子分布,KL 會無限大;若改用 Gaussian 或其他平滑密度估計,KL 則可能有限,不能混為一談。

    互動 demo:移動與縮放分佈並切換 coupling,比較三個距離與搬運上界。

    檢查理解

    想一想

    你要比較兩個模型生成的「人臉圖片」與真實人臉的差距,把每張圖用某個特徵向量表示。模型 A 的特徵分佈與真實分佈幾乎不重疊但很近;模型 B 的分佈與真實分佈部分重疊但有一團跑到很遠的地方。你想要一個「跑得越遠罰越重」的指標,該用:

    想一想

    你有一個程序:從 μ\mu 抽一點 xx,走一個確定的映射得到 y=T(x)y=T(x),而 yy 的分佈是 ν\nu。你算出 Eμ∥x−T(x)∥2=4\mathbb E_\mu\|x-T(x)\|^2=4。關於 W2(μ,ν)W_2(\mu,\nu) 你能說的是:

    想一想

    兩個一維、標準差皆為正的 Gaussian 有相同均值,但標準差不同。這時:

    參考文獻

    1. Villani, C. Optimal Transport: Old and New. Springer, 2009.(第 6 章:Wasserstein 距離的定義、距離公理、gluing lemma、與弱收斂的關係;第 22 章:Talagrand 不等式。)
    2. Peyré, G., Cuturi, M. Computational Optimal Transport. Foundations and Trends in Machine Learning 11(5–6), 2019.(第 2.4 節:Wasserstein 距離;第 2.6 節:Gaussian 之間的 closed form。)
    3. Santambrogio, F. Optimal Transport for Applied Mathematicians. Birkhäuser, 2015.(第 5 章:Wasserstein 空間的性質。)
    4. Ambrosio, L., Gigli, N., Savaré, G. Gradient Flows in Metric Spaces and in the Space of Probability Measures. Birkhäuser, 2nd ed., 2008.(第 7 章:W2W_2 的度量結構。)