Monte Carlo Methods - 蒙特卡洛方法
本页目录
- 来源:Monte Carlo Casino(Monaco)
理论基础
大数定律(the law of large numbers): 令 X_{1},X_{2}, \dots 是 i.i.d. 的随机变量,而 \mu=\mathrm{E}(X_{i})<\infty,且 \overline{X}_{n}= (X_{1} + X_{2} + \dots + X_{n}) / n。那么当 n\to \infty, \overline{X}_{n} 依概率收敛(converges in probability)到 \mu:
\overline{X}_{n} \xrightarrow[]{P} \mu, \quad n\to \infty
这是较弱的版本,较强的版本是说“几乎处处收敛”。
不同的“收敛”:
- 几乎处处收敛(a.s.):
P\Big(\big\{\omega:\ \lim_{n\to\infty} X_n(\omega) = X(\omega)\big\}\Big) = 1,\qquad \text{记作 } X_n \xrightarrow{a.s.} X L^{p}收敛:
\lim_{n\to\infty} E\big[|X_n - X|^p\big] = 0,- 依概率收敛:
\lim_{n\to\infty} P\big(|\bar X_n - \mu| > \varepsilon\big) = 0,\qquad \text{记作 } \bar X_n \xrightarrow{P} \mu - 依分布收敛:
F_{X_n}(x)\to F_X(x),对F_X的所有连续点x成立,记作X_n \xrightarrow{d} X。
这里的强弱关系:a.s. ──┐ ├──▶ 依概率 P ──▶ 依分布 d L^q ─▶ L^p ──┘ (q>p≥1)可以通过 CLT 来理解一下大数定律,根据 CLT,可以得到,当
n\to \infty,有
\overline{X}_{n} \overset{\text{approx.}}{\sim} N\left( \mu, \frac{\sigma ^{2}}{n} \right)
当n\to \infty,这个正态分布的方差就接近0,于是\overline{X}_{n}就会集中在\mu。
随机数生成
在蒙特卡洛方法中,很重要的一个事就是从一个分布中去抽样。这就需要用伪随机数生成器(pseudo-random number generator)来实现。
通常一个伪随机数生成器会支持生成一个序列 u_{1},u_{2}, \dots u_{n},每个数独立且服从 U[0,1] 。
从 U\sim U[0,1] 可以得到 序列 u_{1}, u_{2}, \dots, u_{n},那么:
\mathrm{Bernoulli}(p):
x_{i}=\begin{cases} 1 & 0<u_{i}<p \\ 0 & p\leq u_{i}<1 \end{cases}\mathrm{Poisson}(\lambda):p_{k}=P(X=k)= \frac{\lambda ^{k}}{k!}e^{-\lambda},那么我们划分不同的区间I_{0}=(0,p_{0}),I_{1}=[p_{0},p_{0}+p_{1}),I_{2}=[p_{0}+p_{1},p_{0}+p_{1}+p_{2}),\dots,那么每个区间的长度就是对应的概率,只需要令x_{i}=k,若u_{i}\in I_{k}即可。
所以对于离散分布,通用的做法是去切分区间(0,1),使得一个取值对应的长度等于它的概率。
对于连续分布,就需要使用 逆变换采样:
- 若需要采样的分布 CDF 为
F(x),且F(x)有反函数F^{-1}(x),令U\sim U[0,1],那么X=F^{-1}(U)\sim F(x)。 - 这是因为
F_{X}(x)=P(X\leq x)=P(F^{-1}(U)\leq x)=P(U\leq F(x))=F(x)。
例如从序列u_{1}, u_{2}, \dots, u_{n}中得到: \mathrm{Exp}(\lambda):F(x)=1-e^{-\lambda x}\implies F^{-1}(u)=-\frac{\ln(1-u)}{\lambda},于是从序列u_{1},u_{2}, \dots, u_{n}中得到x_{i}=F^{-1}(u_{i})。\mathrm{Gamma}(r,\lambda):没有闭式的 CDF。但当r为正整数时,可以根据定义,拆成生成r个\mathrm{Exp}(\lambda)的序列,把对应位置相加即可得到服从伽马分布的序列。N(\mu,\sigma ^{2}):没有闭式的 CDF。有一种巧妙的方法:取两个相互独立的U_{1}\sim U[0,1]和U_{2}\sim U[0,1],那么
\begin{cases} Z_{1} = \sqrt{-2\ln(U_{1})}\cos(2\pi U_{2}) \\ Z_{2} = \sqrt{-2\ln (U_{1})} \sin(2\pi U_{2}) \end{cases}- 可以证明,这里
Z_{1},Z_{2}就是一对独立的标准正态分布变量。于是只需生成两个U[0,1]上的随机数序列u_{11},u_{12},u_{21},u_{22}, \dots ,u_{n 1}, u_{n 2},令
z_{2i-1}=\sqrt{-2\ln(u_{i 1})}\cos(2\pi u_{i 2}),\quad z_{2i}=\sqrt{-2\ln(u_{i 1})}\sin(2\pi u_{i 2})
最后令x_{i}=\mu+\sigma z_{i},就得到服从N(\mu,\sigma ^{2})的序列。