19.1 蒙特卡罗法
19.1.1 随机抽样
统计学和机器学习的目的是基于数据对概率分布的特征进行推断,蒙特卡罗法要解决的问题是:假设概率分布的定义已知,通过抽样获得概率分布的随机样本,并通过得到的随机样本对概率分布的特征进行分析。比如,从样本得到经验分布,从而估计总体分布;或者从样本计算出样本均值,从而估计总体期望。所以蒙特卡罗法的核心是随机抽样(random sampling)。
一般的蒙特卡罗法有直接抽样法、接受-拒绝抽样法、重要性抽样法等。接受-拒绝抽样法、重要性抽样法适用于概率密度函数复杂(如密度函数含有多个变量,各变量相互不独立,密度函数形式复杂)的情况。
这里介绍接受-拒绝抽样法(accept-reject sampling method)。假设有机变量 x x x,取值 x ∈ X x \in \mathcal{X} x∈X,其概率密度函数为 p ( x ) p(x) p(x)。目标是得到该概率分布的随机样本,以对这个概率分布进行分析。
接受-拒绝法的基本想法如下。假设
p
(
x
)
p(x)
p(x) 不能直接抽样。找一个可以抽样的分布,称为建议分布(proposal distribution)。假设
q
(
x
)
q(x)
q(x) 是建议分布的概率密度函数,并且有
q
(
x
)
q(x)
q(x) 的
c
c
c 倍一定大于等于
p
(
x
)
p(x)
p(x),其中
c
>
0
c > 0
c>0,如图 19.1 所示。按照
q
(
x
)
q(x)
q(x) 进行抽样。假设抽样得到的结果是
x
∗
x^*
x∗,再按照
p
(
x
∗
)
c
q
(
x
∗
)
\frac{p(x^*)}{c q(x^*)}
cq(x∗)p(x∗) 的比例随机决定是否接受
x
∗
x^*
x∗。直观上,落到
p
(
x
∗
)
p(x^*)
p(x∗) 范围内的就接受(绿色),落到
p
(
x
∗
)
p(x^*)
p(x∗) 范围外的就拒绝(红色)。接受-拒绝法实际是按照
p
(
x
)
p(x)
p(x) 的涵盖面积(或涵盖体积)占
c
q
(
x
)
cq(x)
cq(x) 的涵盖面积(或涵盖体积)的比例进行抽样。
接受-拒绝抽样的具体算法如下。
算法 19.1(接受-拒绝法)
输入:抽样的目标概率分布的概率密度函数
p
(
x
)
p(x)
p(x)。
输出:概率分布的随机样本
x
1
,
x
2
,
…
,
x
n
x_1, x_2, \ldots, x_n
x1,x2,…,xn。
参数:样本数
n
n
n。
- 选择概率密度函数为 q ( x ) q(x) q(x) 的概率分布,作为建议分布,使其对任一 x x x 满足 c q ( x ) ≥ p ( x ) c q(x) \geq p(x) cq(x)≥p(x),其中 c > 0 c > 0 c>0。
- 按照建议分布 q ( x ) q(x) q(x) 随机抽样得到样本 x ∗ x^* x∗,再按照均匀分布在 (0, 1) 范围内抽样得到 u u u。
- 如果 u ≤ p ( x ∗ ) c q ( x ∗ ) u \leq \frac{p(x^*)}{c q(x^*)} u≤cq(x∗)p(x∗),则将 x ∗ x^* x∗ 作为抽样结果;否则,回到步骤 (2)。
- 直至得到 n n n 个随机样本,结束。
接受-拒绝法的优点是容易实现,缺点是效率可能不高。如果 p ( x ) p(x) p(x) 的涵盖体积占 c q ( x ) cq(x) cq(x) 的涵盖体积的比例很低,就会导致拒绝的比例很高,抽样效率很低。注意,一般是在高维空间进行抽样,即使 p ( x ) p(x) p(x) 与 c q ( x ) cq(x) cq(x) 很接近,两者涵盖体积的差异也可能很大(与我们在三维空间的直观不同)。
19.1.2 数学期望估计
一般的蒙特卡罗法如直接抽样法、接受-拒绝抽样法、重要性抽样法,也可以用于数学期望估计(estimation of mathematical expectation)。假设有随机变量 x x x,取值 x ∈ X x \in \mathcal{X} x∈X,其概率密度函数为 p ( x ) p(x) p(x), f ( x ) f(x) f(x) 为定义在 X \mathcal{X} X 上的函数,目标是求函数 f ( x ) f(x) f(x) 关于概率密度函数 p ( x ) p(x) p(x) 的数学期望 E p ( x ) [ f ( x ) ] E_{p(x)}[f(x)] Ep(x)[f(x)]。
针对这个问题,蒙特卡罗法按照概率分布
p
(
x
)
p(x)
p(x) 独立地抽取
n
n
n 个样本
x
1
,
x
2
,
…
,
x
n
x_1, x_2, \ldots, x_n
x1,x2,…,xn,比如用以上的抽样方法,之后计算函数
f
(
x
)
f(x)
f(x) 的样本均值
f
^
n
\hat{f}_n
f^n:
f
^
n
=
1
n
∑
i
=
1
n
f
(
x
i
)
(19.1)
\hat{f}_n = \frac{1}{n} \sum_{i=1}^n f(x_i) \tag{19.1}
f^n=n1i=1∑nf(xi)(19.1)
作为数学期望 E p ( x ) [ f ( x ) ] E_{p(x)}[f(x)] Ep(x)[f(x)] 的近似值。
根据大数定律,当样本容量增大时,样本均值以概率 1 收敛于数学期望:
f
^
n
→
E
p
(
x
)
[
f
(
x
)
]
,
n
→
∞
(19.2)
\hat{f}_n \rightarrow E_{p(x)}[f(x)], \quad n \rightarrow \infty \tag{19.2}
f^n→Ep(x)[f(x)],n→∞(19.2)
这样就得到了数学期望的近似计算方法:
E
p
(
x
)
[
f
(
x
)
]
≈
1
n
∑
i
=
1
n
f
(
x
i
)
(19.3)
E_{p(x)}[f(x)] \approx \frac{1}{n} \sum_{i=1}^n f(x_i) \tag{19.3}
Ep(x)[f(x)]≈n1i=1∑nf(xi)(19.3)
19.1.3 积分计算
一般的蒙特卡罗法也可以用于定积分的近似计算,称为蒙特卡罗积分(Monte Carlo integration)。假设有一个函数
h
(
x
)
h(x)
h(x),目标是计算该函数的积分:
∫
X
h
(
x
)
d
x
\int_{\mathcal{X}} h(x) \, dx
∫Xh(x)dx
如果能够将函数
h
(
x
)
h(x)
h(x) 分解成一个函数
f
(
x
)
f(x)
f(x) 和一个概率密度函数
p
(
x
)
p(x)
p(x) 的乘积的形式,那么就有
∫
X
h
(
x
)
d
x
=
∫
X
f
(
x
)
p
(
x
)
d
x
=
E
p
(
x
)
[
f
(
x
)
]
(19.4)
\int_{\mathcal{X}} h(x) \, dx = \int_{\mathcal{X}} f(x) \, p(x) \, dx = E_{p(x)}[f(x)] \tag{19.4}
∫Xh(x)dx=∫Xf(x)p(x)dx=Ep(x)[f(x)](19.4)
于是函数
h
(
x
)
h(x)
h(x) 的积分可以表示为函数
f
(
x
)
f(x)
f(x) 关于概率密度函数
p
(
x
)
p(x)
p(x) 的数学期望。实际上,给定一个概率密度函数
p
(
x
)
p(x)
p(x),只要取
f
(
x
)
=
h
(
x
)
p
(
x
)
f(x) = \frac{h(x)}{p(x)}
f(x)=p(x)h(x),就可得式 (19.4)。也就是说,任何一个函数的积分都可以表示为某一个函数的数学期望的形式,而函数的数学期望又可以通过函数的样本均值估计。于是,就可以利用样本均值来近似计算积分,这就是蒙特卡罗积分的基本想法。
∫
X
h
(
x
)
d
x
=
E
p
(
x
)
[
f
(
x
)
]
≈
1
n
∑
i
=
1
n
f
(
x
i
)
(19.5)
\int_{\mathcal{X}} h(x) \, dx = E_{p(x)}[f(x)] \approx \frac{1}{n} \sum_{i=1}^n f(x_i) \tag{19.5}
∫Xh(x)dx=Ep(x)[f(x)]≈n1i=1∑nf(xi)(19.5)
例 19.1
用蒙特卡罗积分法求 ∫ 0 1 e − x 2 / 2 d x \int_0^1 e^{-x^2/2} \, dx ∫01e−x2/2dx。
解:令 f ( x ) = e − x 2 / 2 f(x) = e^{-x^2/2} f(x)=e−x2/2,
p ( x ) = 1 ( 0 < x < 1 ) p(x) = 1 \quad (0 < x < 1) p(x)=1(0<x<1)
也就是说,假设随机变量 x x x 在 (0, 1) 区间遵循均匀分布。
使用蒙特卡罗积分法,如图 19.2 所示,在 (0, 1) 区间按照均匀分布抽取 10 个随机样本 x 1 , x 2 , … , x 10 x_1, x_2, \ldots, x_{10} x1,x2,…,x10。计算样本的函数均值 f ^ 10 \hat{f}_{10} f^10:
f ^ 10 = 1 10 ∑ i = 1 10 e − x i 2 / 2 = 0.832 \hat{f}_{10} = \frac{1}{10} \sum_{i=1}^{10} e^{-x_i^2/2} = 0.832 f^10=101i=1∑10e−xi2/2=0.832
也就是积分的近似。随机样本数越大,计算就越精确。
例 19.2
用蒙特卡罗积分法求 ∫ − ∞ ∞ x 1 2 π exp ( − x 2 2 ) d x \int_{-\infty}^{\infty} x \frac{1}{\sqrt{2\pi}} \exp \left( -\frac{x^2}{2} \right) \, dx ∫−∞∞x2π1exp(−2x2)dx。
解:令 f ( x ) = x f(x) = x f(x)=x,
p ( x ) = 1 2 π exp ( − x 2 2 ) p(x) = \frac{1}{\sqrt{2\pi}} \exp \left( -\frac{x^2}{2} \right) p(x)=2π1exp(−2x2)
p ( x ) p(x) p(x) 是标准正态分布的密度函数。
使用蒙特卡罗积分法,按照标准正态分布在区间 ( − ∞ , ∞ ) (-∞, ∞) (−∞,∞) 抽样 x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,…,xn,取其平均值,就得到要求的积分值。当样本增大时,积分值趋于 0。
本章介绍的马尔可夫链蒙特卡罗法也适用于概率密度函数复杂、不能直接抽样的情况,旨在解决一般的蒙特卡罗法,如接受-拒绝抽样法、重要性抽样法,抽样效率不高的问题。一般的蒙特卡罗法中的抽样样本是独立的,而马尔可夫链蒙特卡罗法中的抽样样本不是独立的,样本序列形成马尔可夫链。
例19.1 p(x)=1(0<x<1) 公式解析
例19.1 计算蒙特卡洛积分的具体过程
例 19.2:用蒙特卡洛积分法求解具体过程