2. 4 蒙特卡洛计算中减少方差的技巧
蒙特卡洛求积分的方差为
{}nfV=
2
σ
.
其中
V
为被积函数的方差。
{}f
f
公式反映出增加随机点数时,蒙特卡洛计算的精度可以得
到改善,但是精度提高非常缓慢。因此用增加蒙特卡洛计算的随
机投点数来提高精度总是耗费大量的机时。
n
另一个减少计算结果误差的途径是减少的方差V。 f {}f
重要的减少方差V的技巧。 {}f
一、 分层抽样(stratified sampling)
数学上,分层抽样是基于黎曼积分的特性:
, 0
∫∫∫
+==
1
00
1
)()()(
a
a
dxxfdxxfdxxfI 1<< a
将积分区域划分成小区域是在数值积分中常用的技巧。
蒙特卡洛的分层抽样技巧的抽样步骤:
(1) 将积分区间(或空间)划分为不相交的子区间(或子空间);
然后在第个子区间(或子空间)内抽取个随机点。 i
i
n
(2) 如果将子区间长度(或子空间体积)记为{}i,我们将子区
间(或子空间)内所有点上的函数值乘上权重因子{}
i
ni之后迭加
起来,就得到该积分在这个子区间的积分估计值;
(3) 将所有子区间的积分值迭加起来,就得到在整个区间的积
分估计值。这样得到积分的估计值的方差为:
1
{}
{}
(){}
{}
2
2
1
2
j
j j
n
i
ij
j j
n
j
xfV
n
j
I
j
σ
∑∑∑
=
?
?
?
?
?
?
?
?
=
=
V
如果适当选择子区间{}i的大小和随机点数,就可以使计算
结果的方差得以减小。这里选择
i
n
{}i和的关键是要了解被积函数
在子区间内的特性。如果
i
n
f {}i的划分和的选择都不适当,也可
能造成更大的误差。
i
n
如果我们不管被积函数的特性,而简单地将积分区域划分成相
等的子区间{},并在各子区间内抽取相同数量的随机点数。这
种处理方法称为均匀分层抽样法。
i
i
n
求一维定积分的问题,比较一下用分层抽样法和用原始蒙特卡
洛方法计算得到的方差。
设所求积分为:
.
∫
=
1
0
)( dxxfI
数学上可以写成
I
.
∫∫
≡=
1
0
1
1
0
)()()( dxxfxgdxxf
在[0,1]区间插入J 个点,其中10
10
=<???<<=
J
xxx。令
1
1
1
11
() ,
()/ , ,
()
0,
() () ,( 1,2, , )
j
j
j
j
x
j
x
jj j
j
x
jj
x
pfxdx
f xpx xx
fx
Igxfxdxj
?
?
?
?
=
?
?
≤<
??
=
??
?
?
?
= = ???
?
?
∫
∫
其它
J
在上面的公式中,显然有关系式
.
∑
=
=
J
j
jj
IpI
1
如果用分层抽样蒙特卡洛方法计算的积分值, 在第j个子区间上
2
以
)(xf
j
分布密度函数抽取个简单子样
j
n
),,2,1( Jjx
ij
???=
,则积分的无偏
估计值为
j
p
11
2
j
σ
∫
?
j
j
x
x
?
j
I
2
2
2
j
j
j
σ
1
n
i
j
∑
=
?
)
{}x
i
)(
=dx dxxf
1
2
)(
I
J
+
[]fIII
jj
)()
2
?+?
j
)
2
j
I(
∑∑∑
===
?
?
?
?
?
?
?
?
==
J
j
J
j
n
i
ij
j
jjJ
j
xg
n
IpI
1
)(
1
.
令第j区间积分的方差为,根据方差的定义我们有关系式
{}==
jijj
dxxfxgxgV
1
22
)()()(σ .
则得到分层抽样计算结果的方差
{ }
J
IV
为:
{} {}
1
2
1
2
)(
1
J
j
ij
j
J
j
jJ
n
p
xgV
n
pI
∑∑
==
==V
.
如果用通常的原始蒙特卡洛方法计算,以分布密度函数抽取
N 个简单子样,则积分的无偏估计值为:
)(
1
xf
∑
=
=
N
i
i
xg
N
I
1
(
1
它的方差为:
{}
N
gV
N
I
g
N
i
2
1
2
1
σ
≡=
∑
=
V
其中又可以表示为
2
g
σ
[] []
∑
∫∫
=
?
??≡
J
j
x
x
g
j
j
IxgxfIxg
1
1
2
1
0
2
1
)()()(σ
[]dxxfIIxgp
j
J
j
x
x
Jj
j
j
)()(
1
2
1
∑
∫
=
?
??=
dxxxgIIIxgp
j
J
j
x
x
jj
j
j
)()()((2)((
1
1
∑
∫
=
?
?+?=
.
∑∑
==
?+=
J
j
j
J
j
jj
Ipp
1
2
1
2
)σ
设分层抽样法的总抽样数为N ,我们有
J
nnnN +???++=
21
.
3
比较这两种方法计算出的结果的方差,我们有
{} {}
2
1
2
1
22
)(
1
j
J
j j
j
J
j
jjjjJ
n
p
IIpp
N
IVI σσ
∑∑
==
?
?
?
?
?
?
?
?+=?V
2
1
2
1
)(
11
IIp
Nn
p
N
p
j
J
j
jj
J
j j
j
j
?+
?
?
?
?
?
?
?
?
?
∑∑
==
σ=
.
公式的右边第二项显然是大于零的量。第一项的正负则是取决于
分层抽样时子区间的划分和子区间内的抽样点数。
j
n
如果上式的值大于零,则分层抽样计算积分的方差小于采用
原始蒙特卡洛方法的方差。若取
Nn
p
j
j
1
=
,即n
jj
Np=,此时公式
(2.4.14)中第一项为零,公式(2.4.14)总是大于零。这就意味
着按比例的分层抽样的方差比原始蒙特卡洛方法小。这样的分层
抽样方法具有实用意义。
如果采用均匀分层抽样方法,将[0,1]区间分成J 个相等的
子区间,每个子区间内抽取的点数
J
N
j
=n,并且这些点是均匀分
布的,即
J
pxf
j
1
,1)(
1
==
,这时公式(2.4.14)中的第一项也为零,因
而(2.4.14)式的值总是正的。
由此我们也可以看出:均匀分层抽样法是一个减小方差的保
险方法。
二、 重要抽样法(importance sampling)
重要抽样法的原理起源于数学上的变量代换方法的思想,即
∫∫
.
∫
==
1
0
1
0
1
0
)(
)(
)(
)(
)(
)(
)( xdG
xg
xf
dxxg
xg
xf
dxxf
4
此时随机点的选择不再是均匀的,而是以分布函数G分布的。
新的被积函数为乘以权重
1
。公式(2.4.15)中
)(x
)(xf )(/ xg
dx
xdG )(
) =xg(
。
这里称为偏倚分布密度函数。该方法使原本对的抽样,变
成由另一个分布密度函数
)(xg )( xf
)
)
(
*
xf
(
(
)
xg
xf
≡
中产生简单子样,并附带一个
权重。这种方法也称为偏倚抽样法。
)(xg
公式右边积分中被积函数的方差为{ }gf /
f
V。如果选择恰当,
并使它在积分域内的函数曲线形状与接近,则该方差可以变得
很小。
)(xg
函数应当满足如下条件: )(xg
(1)应当是个分布密度函数。 )(xg
(2)不应在积分域内起伏太大,使之尽量等于常数,
以保证方差V比V小。
)(/)( xgxf
{}gf / {}f
(3)分布密度函数所对应的分布函数)(xg
( )Gx能够比较方便
地解析求出。
(4) 能方便地产生在积分域内满足分布函数( )Gx分布的随机
点。
如能按上述条件找到函数,我们就可以依下列步骤求积
分:
)(xg
(1) 根据分布密度函数产生随机点x . 例如采用反函数法。 )(xg
(2) 求出各抽样点x 的函数值,并将所有点上的该函数
值迭加起来,再除以抽样点数就得到积分结果。
)(/)( xgxf
n
也可以采用作为分布密度函数,利用舍选法来舍去)(/)( xgxfw ≡
5
或接受个随机点的x 的值。用此方法时,应至少可以事先判断
出的最大值。当然最好能从的函数中,推导出。 w )(/)( xgxf
max
w
x
N
,
2
??
{f
)(xg
)(xg
{gf / }
}g/
上述讨论可以很容易地推广到更高维的积分中。但是要注
意如下两个方面的问题:
null 在产生随机向量的所有分量后,再用舍选法往往更快,效率
更高。
x
G
null 在计算)(/)( xgxf
G G
值之前,做随机变量
N
xx ,,,
21
???到的变
换有时是很有用的。这时需要将雅可比行列式
yyy ,,,
21
???
),,,(
1 NN
yxxx ??? ,,(/)
21
yy ???包括在权重因子内。
重要抽样法无疑是蒙特卡洛计算中最基本和常用的技巧之
一。它无论在提高计算速度和增加数值结果的稳定性方面都有很
大的潜力。
局限性:
(1) 能寻找出某分布密度函数,并能解析求出其对应的分
布函数G的情况并不多。当然我们也可以用数值计算方法求出
,但通常这样处理不灵活,运算速度也慢,而且结果也不准
确。
)(x
)(xG
(2) 当所选择的在某点函数值为零或很快趋于零时(如高
斯分布),这时在该点的数值计算是十分危险的。其方差V可
能趋于无穷大。即使是在某点上函数不为零,但其值很小时,
方差
V
也可能很大。这一问题采用通常的从样本点估计方差的
方法却不一定能检查出来。这种情况会使计算结果不稳定。
)(xg
6
三、 控制变量法(相关抽样法)(control variates)
控制变量法利用数学上积分运算的线性特性:
[]
∫ ∫∫
+?= dxxgdxxgxfdxxf )()()()(
选择函数时要考虑到:g在整个积分区间都是容易精确算出,
并且在上式右边第一项的运算中对(
)(xg )(x
)gf ?积分的方差应当要比第
二项对积分的方差小。 f
在应用这种方法时,在重要抽样法中所遇到的,当趋于
零时,被积函数趋于无穷大的困难就不再存在,因而计算出
的结果稳定性比较好。 该方法也不需要从分布密度函数, 解
析求出分布函数G。 由此我们可以看出选择所受到的限制
比重要抽样法要小些。
)(xg
)(xg
)( gf ?
)(x )(xg
四、对偶变量法(antithetic variates)
通常在蒙特卡洛计算中采用互相独立的随机点来进行计算。
对偶变量法中却使用相关联的点来进行计算。它利用相关点
间的关系可以是正关联的,也可以是负关联的这个特点。
两个函数值和之和的方差为
1
f
2
f
{}{}{} { }( ) { }( ){ }2 fEffEfEfVfVffV
22112121
??++=+ .
如果我们选择一些点,它们使和是负关联的。这样就可以使上
式所示的方差减小。当然这需要对具体的函数和有充分的了
解。
1
f
2
f
1
f
2
f
7
例 已知是一个单调递增的函数,现求积分 )(xf
.
∫
=
1
0
)( dxxfI
解 首先,按通常的方法在积分域[0,1]区间上产生均匀分布的
随机点集{。计算对应每个点的函数}
i
x
i
x [ ] 2/)1()(
ii
xfxf ?+的值,再将
所有点上的函数值迭加起来,除以总的随机点数,则得到(2.4.18)
式的积分值。即
[]
∑
=
?+≈
N
i
ii
xfxf
N
I
1
2/)1()(
1
.
这种做法与通常的蒙特卡洛计算中将的值迭加起来不相同。
由于的单调递增性,
[
)(
i
xf
])(xf 2/)1()(
ii
xfxf ?+
的值应当比单个点的函数值
更接近于常数。因而方差也小些。 )(xf
i
这实际上是采用了和)(xf )1( xf ?的积分期望值的平均值作为
结果。由于采用相同的随机数列{ }
i
x
1( xf
,使得和两个函数
高度负关联,因而方差比和
)(xf )1( xf ?
)(xf )?两者各自积分的方差之和要
小。
8