M3.4 每條路徑對,還是最後的分佈對:Weak 與 Strong Convergence
本篇重用3 篇
一百條假的股價
你寫了一個程式模擬股價:每天的漲跌有一個平均趨勢,加上隨機波動——就是 M3.1 的 SDE,用 Euler–Maruyama 一天一步跑一年。老闆問:「這個模擬準不準?」
你跑了一百條路徑,畫出來像一百條真的股價圖。但「準」是什麼意思?有兩種可能的回答,它們聽起來差不多、要求卻差很多:
- 每一條路徑都對。 如果真實世界擲出了某一串隨機的漲跌(同一組硬幣),我的模擬走出來的那條線,要跟「用同一串硬幣、但以無限小的步長算出來」的真實路徑幾乎重合。
- 最後的分佈對。 我不在乎哪一條線對哪一條,只在乎一年後價格的分佈——平均、變異、超過某個門檻的機率——跟真實的一樣。
就像比較兩批人的旅行:可以要求同一個人在兩種導航下走到接近的位置,也可以只比較兩批人最後的分布。同一個 numerical method,在這兩種比較下會有相同的誤差嗎? 先定義兩把尺,再決定要花多少計算。
課堂提問Q1
把兩個要求翻成數學。「同一串硬幣」在 SDE 的語言裡是什麼?兩個要求各在比較哪個量?
先想一想,再展開看整理後的答案
最容易卡住的是「同一串硬幣」這個說法。M3.0 說 SDE 裡的隨機性是一條 Brownian motion ;「同一串硬幣」就是同一條 的實現。真實路徑 是用這條 走出來的極限,模擬路徑 是用同一條 在步長 下、每步只看 走出來的。兩者共用噪聲,所以可以逐條相減。
要求一(strong)比較的是同一條噪聲下的終點差距,取期望:
要求二(weak)只比較某個統計量,不要求逐條配對;是否在實驗中共用 noise,都不會改變這個定義:
對一類夠光滑的測試函數 (平均是 、二階動差是 、超過門檻的機率是一個平滑化的階梯函數)。weak 說的是分佈接近,strong 說的是路徑接近。
若 是 -Lipschitz,則 ,因為 。所以這類 test function 的 weak error 可由 strong error 控制;對無界或不連續函數,還要額外的 moment 或 regularity 條件。反過來,相同 marginals 不保證同一條 noise 下的兩條路接近。
兩把尺
想像兩位評審在看你的模擬。
第一位拿著真實路徑的描圖紙,把你的每一條線疊上去比,量每一對線終點的差距,取平均。這是 strong 的尺——它在意「這一條對這一條」。
第二位根本不看哪條對哪條。她把你的一百個終點倒進一個直方圖,把真實的一百個終點倒進另一個直方圖,比兩個直方圖像不像。這是 weak 的尺。
這兩種比較會保留不同的誤差:逐條相減時,正負的隨機偏移都算進距離;先取 expectation 時,有些零均值項會抵消。這提示 weak approximation 為什麼可能有較高階數,但不是所有 SDE、所有統計量都必然有不同速率。
圖:strong error 共用噪聲逐路徑比較;weak error 只比較終點分布的期望。
一個方法,兩個階數
M2.3 對 ODE 說 Euler 的全域誤差是 。對 SDE,Euler–Maruyama 的結論是 [1, 2]:
這是一般的收斂保證,需要 Lipschitz、growth 與 moment 條件;weak order 還需要係數及 test function 夠 smooth [1, 2]。不是說每個例子的誤差都剛好按這兩個速率下降:additive noise 可以有 strong order ,某些統計量甚至完全沒有偏差。下面用 multiplicative noise 看首個漏掉的項。
看最簡單的 SDE (沒有 drift,噪聲乘在 上——這正是股價模型的骨架)。Euler–Maruyama 一步是 。真實的一步(用 Itô 的結果,這門課只引用)是 。把指數展開到二階:
Euler 少掉的那一項是 。現在用兩把尺量它:
- Strong 的尺看大小。 的標準差是 。乘上當下的 後,各步的項不再是 iid,但對已知的過去仍有 conditional mean 零。在適當 moment bound 下,這類 martingale differences 的二階矩可以累積成 ,開根號後得到 。這是階數的來源,完整證明還要控制誤差傳播。
- Weak 的尺看它的平均。——這一項在平均下完全消失。剩下的偏差來自更高階的項,每步 , 步累積成 。這就是 。
一句話:Euler 每步漏掉的主要誤差是一個零均值的隨機量。 逐路徑比,它累積成 ;只比分佈,它平均掉了,剩下的是 。
展開細節一般 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² 大小是 。在適當係數與 moment 條件下,martingale differences 的二階矩累積後給出 ;仍要另外控制傳播誤差。Additive noise 讓這個首項消失,夠平滑的 drift 下可提高到 strong order 1,並不是只看 g 為常數就不需其他條件。
Weak:對 smooth test function ,令 。利用 backward Kolmogorov equation 展開期望,可在相應 smoothness 與 growth 條件下得到單步 、全域 。Indicator 不符合這個證明的前提,其 rate 要另外分析;不能直接指定為 。完整條件與證明見 [1,4]。
該拿哪把尺
回答老闆。「準不準」取決於他要拿模擬做什麼:
- 若要比較某個終點統計量,例如 mean 或 second moment,就看對應的 weak error。 只給速率,還有未知常數,不能單憑一天一步就說已經夠準。
- 若要在同一條 Brownian noise 下比較精確解與 numerical approximation,就看 strong error。這是數學上指定的 coupling,不是要求程式預測真實世界下一次發生的隨機路徑。
抽樣問題通常重視 distribution,但不能只檢查一個 mean 就說整個 distribution 都對。也可以用 Wasserstein 等距離;strong coupling 有時正好提供它的上界。要選哪把尺,取決於用途,不是只要「生成樣本」就永遠不用 strong analysis。
對 indicator function,不能直接套用上面 smooth test function 的證明,但也不能直接宣布一定降成 階;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 大約是 ——步長每縮 4 倍誤差減半,斜率 。weak error 對 可以精確算(,真值是 ):,每次減 4 倍,斜率 。把兩條線畫在 log–log 圖上,一條 、一條 。
順帶看 weak(MC) 那一欄:用兩萬條路徑估同一個量,數字大約在 – 之間跳、幾乎不隨 下降——因為 的抽樣誤差()早就大過離散化偏差。這正是後面 quiz 要問的事:瓶頸已經不在步長。
(為什麼不用 ?因為 對任何 都精確成立——Euler–Maruyama 保住了這個 SDE 的平均,weak error 恰為零。挑一個會出錯的 才量得到斜率。)
可以再比較 。它不符合這裡的 smoothness 前提,所以要另做分析,不能預先指定實測斜率。若把兩條解的 noise 改成獨立抽取,逐條終點距離也不再是剛才定義的 strong approximation error;兩個精確樣本本來就可能離得很遠。
檢查理解
參考文獻
- 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。)
- Higham, D. J. An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations. SIAM Review 43(3), 2001.(用 逐段實作並量出兩個階數的教學文章;本篇程式的原型。)
- Särkkä, S., Solin, A. Applied Stochastic Differential Equations. Cambridge University Press, 2019.(第 8 章:Euler–Maruyama、Milstein、strong 與 weak order。)
- Milstein, G. N., Tretyakov, M. V. Stochastic Numerics for Mathematical Physics. Springer, 2004.(weak approximation 的一般理論與對 光滑性的要求。)