当前位置: 首页 > news >正文

【概率方法】重要性采样


从一个极简分布出发

假设我们有一个关于随机变量 X X X 的函数 f ( X ) f(X) f(X),满足如下分布

p ( X ) p(X) p(X)0.90.1
f ( X ) f(X) f(X)0.10.9

如果我们要对 f ( X ) f(X) f(X) 的期望 E p [ f ( X ) ] \mathbb{E}_p[f(X)] Ep[f(X)] 进行估计,并且我们有一些从 p p p 中采样的样本,那么朴素的想法是,直接关于 p p p 采样,把采样到的值加起来求平均
E p [ f ( X ) ] = 1 n ∑ i f i ( X ) \mathbb{E}_p[f(X)] = \frac{1}{n} \sum_{i} f_i(X) Ep[f(X)]=n1ifi(X)
但是问题在于,如果采样的样本个数比较少,很可能采样的全都是 0.1,那么和理论值 0.9*0.1+0.1*0.9=0.18 就相差很大。也就是这样的估计方法方差过大。

这个问题的本质原因在于 f ( X ) f(X) f(X) p ( X ) p(X) p(X)形状的不匹配: f ( X ) f(X) f(X)贡献比较大的值的位置, p ( X ) p(X) p(X)采样的概率很小,一旦采样个数过少, f ( X ) f(X) f(X)不足以产生足够的对 E p [ f ( X ) ] \mathbb{E}_p[f(X)] Ep[f(X)]的贡献,因此产生很大的方差

有什么解决办法呢?


重要性采样

如果我们可以换另一个已知的简单的采样分布 q ( X ) q(X) q(X)使得它和 ∣ p ( X ) f ( X ) ∣ |p(X)f(X)| p(X)f(X)匹配,那么方差就能够变小。(这也是此方法命名为重要性采样的原因)

我们可以给积分里面上下乘以一个 q(X),就可以变换成关于 q q q 求另一个表达式的期望

E p [ f ( X ) ] = ∫ X p ( X ) f ( X ) d X = ∫ X q ( X ) p ( X ) q ( X ) f ( X ) d X = E q [ p ( X ) q ( X ) f ( X ) ] \mathbb{E}_p[f(X)] = \int_X p(X)f(X) dX=\int_X q(X) \frac{p(X)}{q(X)}f(X) dX= \mathbb{E}_q[\frac{p(X)}{q(X)}f(X)] Ep[f(X)]=Xp(X)f(X)dX=Xq(X)q(X)p(X)f(X)dX=Eq[q(X)p(X)f(X)]

由于 p , q , f p,q,f p,q,f 的值我们都是可以计算的,假设 q q q 也可以正常采样,那么这个期望是可以求的。


真的有用?

我们不妨取 q ( X ) q(X) q(X) ∣ p ( X ) f ( X ) ∣ |p(X)f(X)| p(X)f(X) 完美匹配,即 q ( X ) = 0.5 , X = x i , ∀ i q(X) = 0.5, \ \ X=x_i,\ \forall i q(X)=0.5,  X=xi, i
然后我们关于 q q q 采样,求 p ( X ) q ( X ) f ( X ) \frac{p(X)}{q(X)}f(X) q(X)p(X)f(X) 的期望

q ( X ) q(X) q(X)0.50.5
p ( X ) q ( X ) f ( X ) \frac{p(X)}{q(X)}f(X) q(X)p(X)f(X)0.180.18

好了,你随便从 q q q 采,能和理论值不一样算我输
在这里插入图片描述
无论怎么取,我们估计的期望 E ^ q [ p ( X ) q ( X ) f ( X ) ] = 0.18 ∗ 0.5 + 0.18 ∗ 0.5 = 0.18 \mathbb{\hat{E}}_q[\frac{p(X)}{q(X)}f(X)] =0.18 * 0.5 + 0.18 * 0.5 = 0.18 E^q[q(X)p(X)f(X)]=0.180.5+0.180.5=0.18 和理论值完美符合。


重要性采样真的是有用的。不过这只是一个极端的例子,实际上要取这样的一个 q q q 也并不是很容易,还是要到具体领域问题里面具体分析。

http://www.lryc.cn/news/257202.html

相关文章:

  • MyBatis 四大核心组件之 StatementHandler 源码解析
  • 用Guava做本地缓存示例
  • Django多对多ManyToManyField字段
  • docker-centos中基于keepalived+niginx模拟主从热备完整过程
  • 软件科技成果鉴定测试需提供哪些材料?
  • 办公word-从不是第一页添加页码
  • Android笔记(十七):PendingIntent简介
  • 为 Compose MultiPlatform 添加 C/C++ 支持(2):在 jvm 平台使用 jni 实现桌面端与 C/C++ 互操作
  • 【PyTorch】卷积神经网络
  • qt可以详细写的项目或技术
  • 操作系统笔记——储存系统、文件系统(王道408)
  • 基于Html+腾讯云播SDK开发的m3u8播放器
  • uniapp小程序分享为灰色
  • python:五种算法(OOA、WOA、GWO、PSO、GA)求解23个测试函数(python代码)
  • DIP——添加运动模糊与滤波
  • SQL Server查询计划(Query Plan)——SQL处理过程
  • 【动手学深度学习】(十二)现代卷积神经网络
  • 【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)
  • TCP通信
  • 2023济南大学acm新生赛题解
  • docker-compose安装教程
  • 【rabbitMQ】rabbitMQ用户,虚拟机地址(添加,修改,删除操作)
  • Python高级算法——动态规划
  • MySQL在Centos7环境安装
  • halcon视觉缺陷检测常用的6种方法
  • openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup
  • 报错:Uncaught ReferenceError: Cannot access ‘l‘ before initialization
  • 计算机视觉-机器学习-人工智能顶会 会议地址
  • 784. 字母大小写全排列
  • HarmonyOS鸿蒙应用开发——HTTP网络访问与封装