刘浚嘉:PR:机器人学的概率方法学习路径​zhuanlan.zhihu.com

PR 采样分章 第一节:蒙特卡洛采样、重要性采样

引言

还记得我们之前学过的贝叶斯推断吗?刘浚嘉:PR Ⅱ:贝叶斯估计/推断及其与MAP的区别​zhuanlan.zhihu.com

贝叶斯推断要解决的不是如何估计参数,而是用来估计新测量数据出现的概率,对于新出现的数据

那么实际项目中,我们如何计算贝叶斯估计里这个积分呢?基于采样的马尔可夫链蒙特卡罗(Markov Chain Monte Carlo,简称MCMC)方法

基于近似的变分推断(Variational Inference,简称VI)方法

本文主要介绍采样方法,其余的会在后续文章出现。

采样 —— 一种近似技术

当我们需要以较小的代价近似许多项的和或某个积分时,采样是一种很灵活且明智的选择。所以这不只是贝叶斯推断特有的方法,是一种普适性的积分近似技术。对于近似一个分布来说,从其中按概率分布采样来实现是一个非常自然的想法。

蒙特卡洛采样基础简述Monto Carlo:

1.蒙特卡洛方法Monte Carlo 可以通过采用随机投点法来求解不规则图形的面积。求解结果并不是一个精确值,而是一个近似值。当投点的数量越来越大时,该近似值也越接近真实值。

2. 蒙特卡洛方法也可以用于根据概率分布来随机采样的任务。

思路

把和或者积分视作某分布下的期望,然后通过估计对应的平均值来近似这个期望

这种思路就是加权求和,其权重为随机变量 x 的概率分布(求和时)或者概率密度函数(求积分时)。概率越高的地方,该变量被采样的几率越大,对应函数值的权重越大,故通过采样数据的经验平均可以近似整体的和或积分。

开始采样

我们根据

抽取 n 个样本

计算期望从而得到 s 的近似:

理论保障上述经验平均值是 无偏 的,

根据 大数定律,若样本

是独立同分布的,其平均值几乎必然收敛到期望值,

根据 中心极限定理,

的分布会收敛到以

为均值、

为方差的正态分布(只要

有界,那么方差

必然会趋于0。同时我们可以利用正态分布的累计函数来估计

的置信区间。

问题

这种方法过于理想,所有结论依赖于我们可以从基准分布 p(x) 中轻易地采样,因为大部分时候 p(x) 都是未知的或者是形状诡异的分布 。一个直观的改进方法是:能不能通过某种变换,将概率分布函数转化成我们熟知的一些简单分布,这样我们从标准分布中采样即可得到 p(x) 中采样一样的结果。

重要性采样 Importance Sampling (IS)

在上一节我们理所当然的把 p(x) 当成概率分布,f(x) 视为被积函数。 p(x)f(x)当然不是唯一的分解方式啦,当从 p(x) 中采样不可行时,我们也可以构造一个分解:

这样我们就可以把更便于采样的 q(x) 视作采样概率,然后估计

在此分布下的期望。相当于在新的采样函数下,函数值 f(x) 被乘上了一个采样权重或likelihood ratio

学RL的同学应该很熟悉重要性采样,在off-policy的算法中用来处理产生动作的策略和学习策略不一致的问题。通过一个简单的可预测的分布去估计一个服从另一个分布的随机变量的均值。

在实际应用off-policy时,迭代过程通常会有两个策略:Behavior policy,用于生成学习过程所需要选择的动作,这一个简单的,探索性非常强的关于动作选择的分布;

Target policy,这是我们最终希望得到的最优动作选择分布。

应用Importance Sampling可以通过Behavior policy估计Target policy可能反馈回来的收益的均值,即用一个简单分布去估计服从另一个分布的随机变量的均值。

Implementation

# 定义一个函数 f(x)

def f_x(x):

return 1/(1 + np.exp(-x))

# 定义两个分布 p(x), q(x)

def distribution(mu=0, sigma=1):

# return probability given a value

distribution = stats.norm(mu, sigma)

return distribution

# 采样点数

n = 1000

mu_target = 3.5

sigma_target = 1

mu_appro = 3

sigma_appro = 1

p_x = distribution(mu_target, sigma_target)

q_x = distribution(mu_appro, sigma_appro)

# 从 p(x) 采样,这里为了图方便p(x)也设定成了正态分布,所以看起来采样很容易,对于非高斯还是很麻烦的

s = 0

for i in range(n):

# draw a sample

x_i = np.random.normal(mu_target, sigma_target)

s += f_x(x_i)

print("simulate value", s/n) # 0.954

# 从 q(x) 进行重要性采样

value_list = []

for i in range(n):

# sample from different distribution

x_i = np.random.normal(mu_appro, sigma_appro)

value = f_x(x_i)*(p_x.pdf(x_i) / q_x.pdf(x_i))

value_list.append(value)

# mean: 0.949, variance: 0.304

从构造出的近似分布采样得到的均值很接近原分布的采样期望,验证了重要性采样的理论。

这个q(x)难道就可以随意设定吗?我们试验一下,当两个分布dissimilar的时候:

# 采样点数

n = 5000

mu_target = 3.5

sigma_target = 1

mu_appro = 1

sigma_appro = 1

p_x = distribution(mu_target, sigma_target)

q_x = distribution(mu_appro, sigma_appro)

通过 q(x) 得到的均值为 0.995,方差为83.86。

方差过大的原因是,当两个分布过于不同时,p(x)/q(x) 的值会有巨大的差异,从而增加了方差。正如PRML中所述:Hence a major drawback of the importance sampling method is the potential to produce results that are arbitrarily in error and with no diagnostic indication. This also highlights a key requirement for the sampling distribution

, namely that it should not be small or zero in regions where

may be significant.

即,approximate distribution的大体趋势应该和desired distribution保持一致,不能出现差别很大的分布特性。

一个好的 q 分布的选择可以显著地提高蒙特卡罗估计的效率,而一个糟糕的 q 分布选择则会使效率更糟糕。一般的经验是 q(x) 定义在 p(x)|f(x)| 较大的地方,由此我们引出了最优采样函数的概念。

最优采样函数——方差最小

我们可以推导出最优的采样函数

,对于任意蒙特卡洛采样:

可以转化为重要性采样:

显然,估计的期望和采样分布 q 的选择无关,

。但是方差却有关:

方差想要最小,q 就应该满足:

Z 为归一化常数,选择适当的 Z 使得

之和或者积分为 1。

一个好的采样函数,应该把更多的权重放在被积函数较大的地方。

观察上式,如果 f(x) 的符号一致,

,这意味着采样一个样本就足以得到原来的积分或和的值了。理论上确实是很美好,但这也意味着计算

和计算之前的 p(x)f(x) 没区别,这并没有什么实际意义。

有偏重要性采样

最优采样函数并不一定是适合采样的那个,只是方差最小的一个而已,其他能降低方差的 q 其实都可以。这种方法有一个优势,即不需要归一化的 p 或 q 分布。在处理离散变量时,有偏重要采样估计可以表示为

有偏是指

,只有当

且上式分母收敛到 1 时,等式才渐进成立。故也称为渐进无偏。

实际中,我们会倾向于将采样函数构造成常用的分布形式——高斯分布等,以方便采样。故有偏重要性采样更为常见。

延伸阅读Importance Sampling for Keras​www.idiap.ch

在神经网络训练中,通过重要性采样来取代之前的uniform data sampling,从而加速训练收敛。Importance Sampling & Sequential Importance Sampling - Berkeley​people.eecs.berkeley.edu

关联阅读刘浚嘉:PR Sampling Ⅱ:马尔可夫链蒙特卡洛 MCMC及python实现​zhuanlan.zhihu.com刘浚嘉:PR Sampling Ⅲ: M-H and Gibbs 采样​zhuanlan.zhihu.com刘浚嘉:Reinforcement-Learning-in-Robotics 专栏目录​zhuanlan.zhihu.com

更多系列文章见关联库Reinforcement-Learning-in-Robotics​github.com

Reference

python实现采样函数_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现相关推荐

  1. python求pai的近似值_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现

    刘浚嘉:PR:机器人学的概率方法学习路径​zhuanlan.zhihu.com PR 采样分章 第一节:蒙特卡洛采样.重要性采样 引言 还记得我们之前学过的贝叶斯推断吗? 刘浚嘉:PR Ⅱ:贝叶斯估计 ...

  2. 蒙特卡洛采样_PR Sampling : 蒙特卡洛采样、重要性采样及python实现

    作者:刘浚嘉 专栏地址:https://www.zhihu.com/column/c_1188392852261134336 引言 还记得我们之前学过的贝叶斯推断吗?https://zhuanlan. ...

  3. python有哪些函数怎么用_必须掌握的常用python函数有哪些?

    必须掌握的常用python函数有哪些? 更新时间:2020年11月02日   作者:spoto 必须掌握的常用Python的安装设置过程中需要注意的事项,今天我们就另一个学员们经常询问的问题进行解答. ...

  4. 大学计算机python编程的函数及作用总结_【转】python 内置函数总结(大部分)...

    python 内置函数大讲堂 python全栈开发,内置函数 1.内置函数 python的内置函数截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python ...

  5. 在python中有关函数的表达正确的是_在 Python 中有关函数的表达中正确的是( )。_学小易找答案...

    [单选题]会稽有佳山水,名士多居之,爱好养生的王羲之常与( )等宴集于山阴之兰亭. [判断题]截交线既在截平面上,又在立体表面上,故截交线是截平面与立体表面的共有线,截交线上每一点均为其共有性. [单 ...

  6. python中fac函数是什么意思_好程序员Python教程系列之递归函数与匿名函数调用

    原标题:好程序员Python教程系列之递归函数与匿名函数调用 好程序员Python教程系列递归函数与匿名函数调用,函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python ...

  7. 多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样

    全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...

  8. python高阶函数filter_Python进阶系列连载(13)——Python内置高阶函数filter(上)...

    前言 进阶部分连载继续~ 如果还没看过我的入门连载部分,先看: 当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一遍~ 前文传送门: filter filter是什么意思呢? 我 ...

  9. python key=lambda函数_使用’key’和lambda表达式的python max函数

    我来自OOP背景,尝试学习Python.我使用的是max函数,该函数使用lambda表达式返回Player类型的实例,其中players列表中的totalScore最大. def winner(): ...

最新文章

  1. python系统问题
  2. 一个用PPT画画的程序员
  3. netbeans卸载 linux,NetBeans_6.1自己使用。(linux-ubuntu下)
  4. Android 使用PDF.js浏览pdf
  5. 用Scikit-learn和TensorFlow进行机器学习(一)
  6. 对两个字符串进行比较,取出两个字符串中一样部分的长度
  7. 全国计算机等级考试题库二级C操作题100套(第22套)
  8. WPF疑难杂症之二(全屏幕窗口)
  9. Android第二十四期 - 游戏公告跑马灯效果
  10. 奇怪的ISA服务停止故障
  11. 行政区划简称(包括别称)
  12. 海康NVR录像机集成大华摄像头
  13. Mac 快速打开终端快捷键
  14. h5广告与html5,什么才是H5广告?
  15. 【Linux服务器运行jar包】
  16. VM安装win7系统一直失败,可能是镜像文件不对
  17. 浣熊优化算法(COA)(含MATLAB代码)
  18. Xamarin 总结 (官方文档笔记)
  19. 出国留学考试指导大全:托福85分是个坎儿
  20. 小程序:Thu May 05 2022 11:03:00 GMT+0800 (中国标准时间) 渲染层错误

热门文章

  1. 设计模式之模板方法模式(Template Method Pattern)
  2. aspose word转pdf 中文乱码
  3. 关于jsp网页弹出窗口
  4. Java 实现归并排序
  5. AIR2.0 打开exe
  6. 1064:奥运奖牌计数
  7. cnpm报错 : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本
  8. 制作niceScroll滚动条
  9. 油气勘探开发从业务到IT的一体化解决方案(全文)
  10. excel单元格内容拆分