Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:モンテカルロ積分の原理 | 関連:推定量の信頼区間 | 第4章 分散減少法 目次

要点(BLUF)

1. 誤差の大きさ:標準誤差

モンテカルロ推定量 I^n=1ng(Ui)\hat{I}_n = \frac{1}{n}\sum g(U_i)モンテカルロ積分の原理)の分散は、独立標本なので

Var(I^n)=σ2n,σ2=Var(g(U))\text{Var}(\hat{I}_n) = \frac{\sigma^2}{n},\qquad \sigma^2 = \text{Var}(g(U))

標準偏差(=標準誤差)はその平方根 σ/n\sigma/\sqrt{n}中心極限定理より I^n\hat{I}_n は近似的に正規分布なので、誤差の典型的な大きさはこの標準誤差で測れます。

I^nI    σn|\hat{I}_n - I| \;\sim\; \frac{\sigma}{\sqrt{n}}

重要な含意:精度を1桁(10倍)上げるには、サンプルを100倍にする必要がある。モンテカルロが「遅い」と言われる理由です。改善の方向は2つ——nn を増やす(力技)か、σ\sigma を下げる(分散減少法、賢い)。

2. 実測:RMSE×√n は一定になる

01exdx\int_0^1 e^x dx の推定を各 nn で200回繰り返し、二乗平均平方根誤差(RMSE)を測ります。理論が正しければ RMSEσ/n\text{RMSE} \approx \sigma/\sqrt{n} なので、RMSE×nσ\text{RMSE}\times\sqrt{n} \approx \sigma(一定)になるはずです。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(21)
true = np.e - 1

for n in [100, 1000, 10000, 100000, 1000000]:
    errs = []
    for rep in range(200):                 # 各 n で200回繰り返し
        x = rng.random(n)
        errs.append(np.exp(x).mean() - true)
    rmse = np.sqrt(np.mean(np.array(errs)**2))
    print(f"n={n:>7}: RMSE={rmse:.5f}  RMSE x sqrt(n)={rmse*np.sqrt(n):.4f}")

# 理論的な sigma = sd of e^U on U(0,1)
xx = rng.random(2_000_000)
print(f"理論 sigma (e^U の標準偏差) = {np.exp(xx).std():.4f}")

出力:

n=    100: RMSE=0.05373  RMSE x sqrt(n)=0.5373
n=   1000: RMSE=0.01664  RMSE x sqrt(n)=0.5262
n=  10000: RMSE=0.00494  RMSE x sqrt(n)=0.4943
n= 100000: RMSE=0.00159  RMSE x sqrt(n)=0.5018
n=1000000: RMSE=0.00051  RMSE x sqrt(n)=0.5106
理論 sigma (e^U の標準偏差) = 0.4921

出力の意味nn が100倍になるたび RMSE はおよそ10分の1(0.0537 → 0.00494 → 0.00051)。一方 RMSE×n\text{RMSE}\times\sqrt{n} は 0.49〜0.54 でほぼ一定、理論の σ=0.4921\sigma = 0.4921 の周りに収まります。これが 1/n1/\sqrt{n} 則の実証です。n\sqrt{n} で割ると一定になる=誤差は σ/n\sigma/\sqrt{n} だと数値が裏付けています。

3. 次元に依らない——最大の長所

格子型の数値積分は、dd 次元で各軸を NN 分割すると点数 NdN^d、誤差は O(Nk/d)O(N^{-k/d})(台形則は k=2k=2)と、次元 dd が上がるほど収束が劇的に悪化します(次元の呪い)。

モンテカルロの誤差 σ/n\sigma/\sqrt{n} には次元 dd がどこにも出てきません。サンプル点はランダムなので「軸ごとに分割」という発想自体が無く、nn 点で測れば次元が10でも100でも誤差は 1/n1/\sqrt{n}

手法誤差オーダー次元の影響
台形則O(n2/d)O(n^{-2/d})次元で激減
シンプソン則O(n4/d)O(n^{-4/d})次元で激減
モンテカルロO(n1/2)O(n^{-1/2})なし

だから低次元では決定的手法に負けますが、おおむね d4d \ge 4 あたりからモンテカルロが逆転します。高次元積分(ベイズの周辺尤度、金融の多資産オプション)でモンテカルロが標準になるのはこのためです。

数式の直観的意味

σ/n\sigma/\sqrt{n}n\sqrt{n} は「独立な誤差は打ち消し合うが、完全には消えない」ことの表現です。nn 個の独立な揺らぎを足すと、和の標準偏差は n\sqrt{n} 倍(分散が nn 倍)。平均はそれを nn で割るので n/n=1/n\sqrt{n}/n = 1/\sqrt{n} だけ残る。ランダムウォークが n\sqrt{n} で広がるのと同じ算術です。次元に依らないのは、誤差が「g(U)g(U) という1次元の確率変数のばらつき σ\sigma」だけで決まり、UU が何次元空間の点かは σ\sigma の値に影響しても収束の指数 1/21/2 には影響しないから。改善するなら指数は動かせない(1/21/2 のまま)ので、係数 σ\sigma を削る——それが分散減少法の戦略です。

⚠️ よくある誤解・落とし穴

対応シミュレーション参照

本文の RMSE×√n 一定性の実測(default_rng(21))。

関連ノート