搜尋課程與筆記

搜尋筆記

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

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

    M3.4 13 分鐘閱讀 2026年10月

    M3.4 每條路徑對,還是最後的分佈對:Weak 與 Strong Convergence

    本篇重用3 篇

    一百條假的股價

    你寫了一個程式模擬股價:每天的漲跌有一個平均趨勢,加上隨機波動——就是 M3.1 的 SDE,用 Euler–Maruyama 一天一步跑一年。老闆問:「這個模擬準不準?」

    你跑了一百條路徑,畫出來像一百條真的股價圖。但「準」是什麼意思?有兩種可能的回答,它們聽起來差不多、要求卻差很多:

    1. 每一條路徑都對。 如果真實世界擲出了某一串隨機的漲跌(同一組硬幣),我的模擬走出來的那條線,要跟「用同一串硬幣、但以無限小的步長算出來」的真實路徑幾乎重合。
    2. 最後的分佈對。 我不在乎哪一條線對哪一條,只在乎一年後價格的分佈——平均、變異、超過某個門檻的機率——跟真實的一樣。

    就像比較兩批人的旅行:可以要求同一個人在兩種導航下走到接近的位置,也可以只比較兩批人最後的分布。同一個 numerical method,在這兩種比較下會有相同的誤差嗎? 先定義兩把尺,再決定要花多少計算。

    課堂提問Q1

    把兩個要求翻成數學。「同一串硬幣」在 SDE 的語言裡是什麼?兩個要求各在比較哪個量?

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

    最容易卡住的是「同一串硬幣」這個說法。M3.0 說 SDE 裡的隨機性是一條 Brownian motion WtW_t;「同一串硬幣」就是同一條 WtW_t 的實現。真實路徑 xTx_T 是用這條 WW 走出來的極限,模擬路徑 x^T(h)\hat x_T^{(h)} 是用同一條 WW 在步長 hh 下、每步只看 ΔW=Wt+h−Wt\Delta W=W_{t+h}-W_t 走出來的。兩者共用噪聲,所以可以逐條相減。

    要求一(strong)比較的是同一條噪聲下的終點差距,取期望:

    estrong(h)=E[ ∣xT−x^T(h)∣ ].e_{\text{strong}}(h)=\mathbb E\big[\,|x_T-\hat x^{(h)}_T|\,\big].

    要求二(weak)只比較某個統計量,不要求逐條配對;是否在實驗中共用 noise,都不會改變這個定義:

    eweak(h)=∣ E[φ(xT)]−E[φ(x^T(h))] ∣,e_{\text{weak}}(h)=\big|\,\mathbb E[\varphi(x_T)]-\mathbb E[\varphi(\hat x^{(h)}_T)]\,\big|,

    對一類夠光滑的測試函數 φ\varphi(平均是 φ(x)=x\varphi(x)=x、二階動差是 x2x^2、超過門檻的機率是一個平滑化的階梯函數)。weak 說的是分佈接近,strong 說的是路徑接近。

    若 φ\varphi 是 KK-Lipschitz,則 eweak≤K estronge_{\mathrm{weak}}\le K\,e_{\mathrm{strong}},因為 ∣E[φ(xT)−φ(x^T)]∣≤E∣φ(xT)−φ(x^T)∣|\mathbb E[\varphi(x_T)-\varphi(\hat x_T)]|\le\mathbb E|\varphi(x_T)-\varphi(\hat x_T)|。所以這類 test function 的 weak error 可由 strong error 控制;對無界或不連續函數,還要額外的 moment 或 regularity 條件。反過來,相同 marginals 不保證同一條 noise 下的兩條路接近。

    兩把尺

    想像兩位評審在看你的模擬。

    第一位拿著真實路徑的描圖紙,把你的每一條線疊上去比,量每一對線終點的差距,取平均。這是 strong 的尺——它在意「這一條對這一條」。

    第二位根本不看哪條對哪條。她把你的一百個終點倒進一個直方圖,把真實的一百個終點倒進另一個直方圖,比兩個直方圖像不像。這是 weak 的尺。

    這兩種比較會保留不同的誤差:逐條相減時,正負的隨機偏移都算進距離;先取 expectation 時,有些零均值項會抵消。這提示 weak approximation 為什麼可能有較高階數,但不是所有 SDE、所有統計量都必然有不同速率。

    兩把尺:逐路徑比,還是比直方圖

    圖:strong error 共用噪聲逐路徑比較;weak error 只比較終點分布的期望。

    一個方法,兩個階數

    M2.3 對 ODE 說 Euler 的全域誤差是 O(h)O(h)。對 SDE,Euler–Maruyama 的結論是 [1, 2]:

    estrong(h)≤C h1/2,eweak(h)≤C′ h1.e_{\text{strong}}(h)\le C\,h^{1/2},\qquad e_{\text{weak}}(h)\le C'\,h^{1} .

    這是一般的收斂保證,需要 Lipschitz、growth 與 moment 條件;weak order 11 還需要係數及 test function 夠 smooth [1, 2]。不是說每個例子的誤差都剛好按這兩個速率下降:additive noise 可以有 strong order 11,某些統計量甚至完全沒有偏差。下面用 multiplicative noise 看首個漏掉的項。

    看最簡單的 SDE dx=σ x dWtdx=\sigma\,x\,dW_t(沒有 drift,噪聲乘在 xx 上——這正是股價模型的骨架)。Euler–Maruyama 一步是 x^t+h=x^t(1+σΔW)\hat x_{t+h}=\hat x_t(1+\sigma\Delta W)。真實的一步(用 Itô 的結果,這門課只引用)是 xt+h=xtexp⁡(σΔW−12σ2h)x_{t+h}=x_t\exp(\sigma\Delta W-\tfrac12\sigma^2h)。把指數展開到二階:

    xt+h=xt(1+σΔW+12σ2[(ΔW)2−h]+…).x_{t+h}=x_t\Big(1+\sigma\Delta W+\tfrac12\sigma^2\big[(\Delta W)^2-h\big]+\dots\Big).

    Euler 少掉的那一項是 12σ2xt[(ΔW)2−h]\tfrac12\sigma^2x_t\big[(\Delta W)^2-h\big]。現在用兩把尺量它:

    • Strong 的尺看大小。(ΔW)2−h(\Delta W)^2-h 的標準差是 2 h\sqrt2\,h。乘上當下的 xtx_t 後,各步的項不再是 iid,但對已知的過去仍有 conditional mean 零。在適當 moment bound 下,這類 martingale differences 的二階矩可以累積成 N O(h2)N\,O(h^2),開根號後得到 O(h)O(\sqrt h)。這是階數的來源,完整證明還要控制誤差傳播。
    • Weak 的尺看它的平均。E[(ΔW)2−h]=0\mathbb E[(\Delta W)^2-h]=0——這一項在平均下完全消失。剩下的偏差來自更高階的項,每步 O(h2)O(h^2),NN 步累積成 O(h)O(h)。這就是 h1h^1。

    一句話:Euler 每步漏掉的主要誤差是一個零均值的隨機量。 逐路徑比,它累積成 h\sqrt h;只比分佈,它平均掉了,剩下的是 hh。

    展開細節一般 SDE 的版本:為什麼 strong 是 1/2、weak 是 1(Kloeden & Platen 的兩個定理)

    一般 dx = f(x)dt + g(x)dW。Euler–Maruyama 的單步展開比真實解少掉的首項是 ½ g(x)g′(x)[(ΔW)² − h](Itô–Taylor 展開的下一項;補上它就是 Milstein 方法,strong order 升到 1)。

    Strong:這一項的 L² 大小是 O(h)O(h)。在適當係數與 moment 條件下,martingale differences 的二階矩累積後給出 O(h)O(\sqrt h);仍要另外控制傳播誤差。Additive noise 讓這個首項消失,夠平滑的 drift 下可提高到 strong order 1,並不是只看 g 為常數就不需其他條件。

    Weak:對 smooth test function φ\varphi,令 u(t,x)=E[φ(xT)∣xt=x]u(t,x)=\mathbb E[\varphi(x_T)\mid x_t=x]。利用 backward Kolmogorov equation 展開期望,可在相應 smoothness 與 growth 條件下得到單步 O(h2)O(h^2)、全域 O(h)O(h)。Indicator 不符合這個證明的前提,其 rate 要另外分析;不能直接指定為 1/21/2。完整條件與證明見 [1,4]。

    該拿哪把尺

    回答老闆。「準不準」取決於他要拿模擬做什麼:

    • 若要比較某個終點統計量,例如 mean 或 second moment,就看對應的 weak error。O(h)O(h) 只給速率,還有未知常數,不能單憑一天一步就說已經夠準。
    • 若要在同一條 Brownian noise 下比較精確解與 numerical approximation,就看 strong error。這是數學上指定的 coupling,不是要求程式預測真實世界下一次發生的隨機路徑。

    抽樣問題通常重視 distribution,但不能只檢查一個 mean 就說整個 distribution 都對。也可以用 Wasserstein 等距離;strong coupling 有時正好提供它的上界。要選哪把尺,取決於用途,不是只要「生成樣本」就永遠不用 strong analysis。

    對 indicator function,不能直接套用上面 smooth test function 的證明,但也不能直接宣布一定降成 1/21/2 階;diffusion 的平滑性與其他條件可能保住更好的速率。共用 noise 則只是 coupling 的選擇,也可以用來降低 weak error 估計的 Monte Carlo variance。

    把兩條斜率量出來

    import numpy as np
    rng = np.random.default_rng(1)
    sigma, T, M = 1.0, 1.0, 20000                              # M = 路徑數(步數在下面叫 N = T/h)
    W_fine = np.cumsum(np.sqrt(1/4096) * rng.standard_normal((M, 4096)), axis=1)   # 一條「真實」Brownian motion
    x_true = np.exp(sigma * W_fine[:, -1] - 0.5 * sigma**2 * T)                     # dx = σ x dW 的精確解(Itô)
    for h in [1/16, 1/64, 1/256]:
        k = int(4096 * h)
        dW = np.diff(np.concatenate([np.zeros((M, 1)), W_fine[:, k-1::k]], axis=1), axis=1)  # 同一條 W,粗步長
        x_em = np.prod(1 + sigma * dW, axis=1)
        strong = np.abs(x_em - x_true).mean()                       # 共用噪聲,逐路徑比
        weak_exact = abs((1 + sigma**2 * h)**(T/h) - np.exp(sigma**2 * T))   # φ(x)=x²:E[x̂²] 有 closed form,真值是 e
        weak_mc    = abs((x_em**2).mean() - np.exp(sigma**2 * T))   # 同一個量用 20000 條路徑估
        print(f"h={h:.4f}  strong={strong:.3f}  weak(exact)={weak_exact:.4f}  weak(MC)={weak_mc:.3f}")
    # 期待:h 縮 4 倍,strong 約減半(order 1/2)、weak(exact) 約減 4 倍(order 1);weak(MC) 被抽樣誤差蓋住

    三個步長下,strong error 大約是 0.145→0.071→0.0350.145\to0.071\to0.035——步長每縮 4 倍誤差減半,斜率 12\tfrac12。weak error 對 φ(x)=x2\varphi(x)=x^2 可以精確算(E[x^T2]=(1+σ2h)T/h\mathbb E[\hat x_T^2]=(1+\sigma^2h)^{T/h},真值是 eσ2T=ee^{\sigma^2T}=e):0.085→0.021→0.00530.085\to0.021\to0.0053,每次減 4 倍,斜率 11。把兩條線畫在 log–log 圖上,一條 12\tfrac12、一條 11。

    順帶看 weak(MC) 那一欄:用兩萬條路徑估同一個量,數字大約在 0.030.03–0.080.08 之間跳、幾乎不隨 hh 下降——因為 xT2x_T^2 的抽樣誤差(≈20/20000≈0.14\approx20/\sqrt{20000}\approx0.14)早就大過離散化偏差。這正是後面 quiz 要問的事:瓶頸已經不在步長。

    (為什麼不用 φ(x)=x\varphi(x)=x?因為 E[x^T]=1\mathbb E[\hat x_T]=1 對任何 hh 都精確成立——Euler–Maruyama 保住了這個 SDE 的平均,weak error 恰為零。挑一個會出錯的 φ\varphi 才量得到斜率。)

    可以再比較 φ(x)=1[x>1]\varphi(x)=\mathbf 1[x>1]。它不符合這裡的 smoothness 前提,所以要另做分析,不能預先指定實測斜率。若把兩條解的 noise 改成獨立抽取,逐條終點距離也不再是剛才定義的 strong approximation error;兩個精確樣本本來就可能離得很遠。

    檢查理解

    想一想

    氣象局用 SDE 模擬明天氣溫,跑一萬次,只發布「明天氣溫超過 30 度的機率」。衡量這個模擬準不準,該看:

    想一想

    你把 dx=σx dWdx=\sigma x\,dW 換成 additive noise 的 dx=−x dt+dWdx=-x\,dt+dW,再量 Euler–Maruyama 的 strong error。斜率會:

    想一想

    「weak error 已經小於 Monte Carlo 的抽樣誤差」這句話的正確解讀是:

    參考文獻

    1. Kloeden, P. E., Platen, E. Numerical Solution of Stochastic Differential Equations. Springer, 1992.(第 9.6 節 strong convergence 定義、第 9.7 節 weak convergence 定義;第 10.2 節 Euler 的 strong order 1/2;第 14.1 節 weak order 1。)
    2. Higham, D. J. An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations. SIAM Review 43(3), 2001.(用 dx=λx dt+μx dWdx=\lambda x\,dt+\mu x\,dW 逐段實作並量出兩個階數的教學文章;本篇程式的原型。)
    3. Särkkä, S., Solin, A. Applied Stochastic Differential Equations. Cambridge University Press, 2019.(第 8 章:Euler–Maruyama、Milstein、strong 與 weak order。)
    4. Milstein, G. N., Tretyakov, M. V. Stochastic Numerics for Mathematical Physics. Springer, 2004.(weak approximation 的一般理論與對 φ\varphi 光滑性的要求。)