M3.4 15 分鐘閱讀 2026年9月

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

本篇重用M3.1水流加亂流:SDE 是加了噪聲的 ODE·M2.3導航每 30 秒更新一次:Euler 法與它的誤差·M3.0醉漢一小時後在哪:Random Walk 到 Brownian Motion

一百條假的股價

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

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

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

先用直覺想:這兩個要求哪個比較嚴格?「一天一步」對哪一個來說夠?如果要把誤差減半,兩個要求各需要把步長縮小多少?寫下你有多確定。

課堂提問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+hWt\Delta W=W_{t+h}-W_t 走出來的。兩者共用噪聲,所以可以逐條相減。

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

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

要求二(weak)不共用噪聲——真實與模擬各自抽自己的樣本,只比較某個統計量:

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 說的是路徑接近。

兩者的關係一句話:strong 蘊含 weak(路徑都對了,分佈當然對),反之不成立——分佈對了,每條路徑可以完全對不上。

先看畫面:兩把尺

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

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

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

第二位評審寬鬆得多:只要你的路徑「在統計上」走得像,就算每一條都跟真實的錯開,她也給滿分。而寬鬆的尺會給出更快的收斂——同樣的步長縮小一半,weak 誤差減半,strong 誤差只減到原來的 1/21/\sqrt2

寫成數學:一個方法,兩個階數

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

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

我們說 Euler–Maruyama 有 strong order 12\tfrac12weak order 11。同一個演算法,兩個速率。這不是兩個定理巧合地不一樣,而是同一件事的兩面,可以在一個小例子裡看清楚。

看最簡單的 SDE dx=σxdWtdx=\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(σΔW12σ2h)x_{t+h}=x_t\exp(\sigma\Delta W-\tfrac12\sigma^2h)。把指數展開到二階:

xt+h=xt(1+σΔW+12σ2[(ΔW)2h]+).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)2h]\tfrac12\sigma^2x_t\big[(\Delta W)^2-h\big]。現在用兩把尺量它:

  • Strong 的尺看它的大小。(ΔW)2(\Delta W)^2 的典型大小是 hhM3.0ΔWh\Delta W\sim\sqrt h),所以 (ΔW)2h(\Delta W)^2-h 的標準差是 2h\sqrt2\,h。每步漏掉的量 h\sim h,但這些漏掉的量是隨機的、正負互相獨立N=T/hN=T/h 步累積起來像 random walk:總和 Nh=T/hh=Th\sim\sqrt N\cdot h=\sqrt{T/h}\cdot h=\sqrt{Th}。這就是 h1/2h^{1/2}
  • Weak 的尺看它的平均E[(ΔW)2h]=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),各步近乎獨立,N = T/h 步以「平方和開根號」累積 → O(√(N h²)) = O(h^{1/2})。若 g 是常數(additive noise),這一項恆為零,Euler–Maruyama 的 strong order 直接變成 1。

Weak:對光滑的 φ,令 u(t,x) = E[φ(x_T) | x_t = x](它滿足向後的 Kolmogorov 方程)。單步的 weak 誤差是 E[u(t+h, x̂_{t+h})] − E[u(t+h, x_{t+h})];把 u 對 x 展開,零均值的隨機項全部被期望消掉,剩下的首項是 O(h²);N 步累積成 O(h)。條件:φ、f、g 要夠光滑(一般要求 φ 有四階以上的有界導數);φ 是不光滑的指標函數時,weak order 可能掉到 1/2。這門課只用結論,證明見 Kloeden & Platen [1] 第 10 與 14 章、Milstein & Tretyakov [4]。

回到股價:該拿哪把尺

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

  • 若他要的是一年後價格的分佈——平均報酬、風險值、超過某門檻的機率——那是 weak 的問題。一天一步(h=1/252h=1/252)給 O(h)O(h) 的偏差,通常已經遠小於這些統計量本身的抽樣誤差(一百條路徑的 Monte Carlo 誤差 1/100=10%\sim1/\sqrt{100}=10\%)。把步長縮小一半,偏差減半。
  • 若他要的是逐日對照某條真實走勢——例如拿模擬去對沖一條特定路徑、或做路徑相依的產品定價時需要每條路徑本身準——那是 strong 的問題。一天一步的誤差是 O(h)O(\sqrt h),要減半得把步長縮到四分之一。

多數「模擬」的目的其實都是第一種:我們要的是樣本,不是某一條特定的路徑。這時 strong error 是過度嚴格的尺——你為一個沒人要求的目標付出了四倍的計算。這就是為什麼「用 SDE 抽樣本」的世界裡,看的永遠是 weak error。

這個判斷依賴兩個假設。第一,被比較的統計量夠光滑——weak order 11 是對光滑 φ\varphi 說的,若你要的是「價格恰好超過 100 的機率」這種階梯函數,階數會掉。第二,你不需要共用噪聲——一旦你的用途要求「同一組隨機數下模擬與真實對上」(例如把模擬拿去和真實資料逐日對比),你就回到了 strong 的世界。

回到股價:把兩條斜率量出來

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.1450.0710.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.0850.0210.00530.085\to0.021\to0.0053,每次減 4 倍,斜率 11。把兩條線畫在 log–log 圖上,一條 12\tfrac12、一條 11

順帶看 weak(MC) 那一欄:用兩萬條路徑估同一個量,數字大約在 0.030.030.080.08 之間跳、幾乎不隨 hh 下降——因為 xT2x_T^2 的抽樣誤差(20/200000.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)=x\varphi(x)=x 換成 φ(x)=1[x>1]\varphi(x)=\mathbf 1[x>1](超過起始價的機率)。weak error 的斜率會從 1 掉下來——階梯函數不光滑,展開框裡「把 uuxx 展開」的步驟失效。再把 dWdW 換成模擬與真實各自獨立抽的噪聲:strong error 不再隨 hh 下降(兩條路徑本來就不該對上),只剩 weak error 有意義。

先消化一下

想一想

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

想一想

你把 dx=σxdWdx=\sigma x\,dW 換成 additive noise 的 dx=xdt+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=λxdt+μxdWdx=\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 光滑性的要求。)