蒙特卡罗方法

19.1 蒙特卡罗法

19.1.1 随机抽样

统计学和机器学习的目的是基于数据对概率分布的特征进行推断,蒙特卡罗法要解决的问题是:假设概率分布的定义已知,通过抽样获得概率分布的随机样本,并通过得到的随机样本对概率分布的特征进行分析。比如,从样本得到经验分布,从而估计总体分布;或者从样本计算出样本均值,从而估计总体期望。所以蒙特卡罗法的核心是随机抽样(random sampling)。

一般的蒙特卡罗法有直接抽样法、接受-拒绝抽样法、重要性抽样法等。接受-拒绝抽样法、重要性抽样法适用于概率密度函数复杂(如密度函数含有多个变量,各变量相互不独立,密度函数形式复杂)的情况。

这里介绍接受-拒绝抽样法(accept-reject sampling method)。假设有机变量 x x x,取值 x ∈ X x \in \mathcal{X} xX,其概率密度函数为 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

  1. 选择概率密度函数为 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
  2. 按照建议分布 q ( x ) q(x) q(x) 随机抽样得到样本 x ∗ x^* x,再按照均匀分布在 (0, 1) 范围内抽样得到 u u u
  3. 如果 u ≤ p ( x ∗ ) c q ( x ∗ ) u \leq \frac{p(x^*)}{c q(x^*)} ucq(x)p(x),则将 x ∗ x^* x 作为抽样结果;否则,回到步骤 (2)。
  4. 直至得到 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} xX,其概率密度函数为 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=1nf(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^nEp(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=1nf(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=1nf(xi)(19.5)

例 19.1

用蒙特卡罗积分法求 ∫ 0 1 e − x 2 / 2   d x \int_0^1 e^{-x^2/2} \, dx 01ex2/2dx

解:令 f ( x ) = e − x 2 / 2 f(x) = e^{-x^2/2} f(x)=ex2/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=110exi2/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:用蒙特卡洛积分法求解具体过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值