最近又复习粒子滤波,感觉实际代码和推导总是有那么一些差距那一理解,主要是好好的分布为什么一转就变成特征似然程度了。这个东西让我们理一遍

之前理解粒子的思想可能是有一些问题的,对于一个未知分布来说的话,我们想要知道这个分布的期望,好,现在我们均匀的去撒粒子吧,其实蒙特卡洛方法来说,我们只要对大量的粒子求平均就可以知道我们想要分布的期望了。但是在粒子滤波的问题里面,我们偏偏对每一个粒子反馈的情报加上了一个权,这个权代表我们-是不是很信任这个分布。再看这个权的分布形式,实际上就是它和目标的相似程度。现在我们明白了,粒子滤波的结构实际上是加了一层重要性采样的思想在里面的蒙特卡洛方法。

现在我们要解决的就是如何估计这个相似程度的问题。粒子滤波在这里做了很牛逼的一件事。我们不知道这个东西原本的分布是什么,,但是我们可以观察某一个特征啊,如果这个特征的分布能够代表原来的分布的话,我们是不是可以近似这样来理解!!!!!!!

让我们一步一步理解这个思路:
蒙特卡洛方法是什么,就是试验,用大量的样本去替代概率。
比如说,我们想要知道一个骰子投出点数的期望,我们就不断去投这个骰子,把每一次的结果平均取来,就可以知道这个筛子的期望了。
在这个过程之中,有一个非常重要的点:为什么我们通过简单的平均就能够推算出这个骰子的期望呢?原因在于每一次单独实验的概率分布都是符合骰子本来的概率分布的。对于蒙特卡洛方法来说,样本的分布和要求取期望的分布一致至关重要。

蒙特卡洛方法应用的另一个常用的例子是使用计算面积。
就是这个玩意:

我们用维基百科蒙特卡洛方法词条的这个图来说明。如果我想要知道这个四分之一圆的面积,一种方法当然是测量半径,然后用圆面积公式4πr24\pi r^2来算。但是假设我们回到古代,并不知道π \pi的具体数值。就没有办法算圆的面积了么?这时候我们可以用蒙特卡洛方法解决,在一个矩形空间均匀撒下粒子,然后计算落在圆面积里面的粒子和撒下所有粒子的比值,这个比值刚好就是圆面积和这个矩形空间面积的比值。于是,圆的面积就可以被反推回来了。
这个例子实际上是由一定误导性的,原因在于:这不是最朴素的蒙特卡洛方法!!为什么呢?试问:每一个粒子遵从的是什么分布?为了让求值正确,我们投放粒子的时候是在整个空间均匀分布的。但是,属于圆的部分在这个矩形空间并非是均匀分布的。换而言之,这两个分布,不一样啊,那还算什么蒙特卡洛方法呢。那么这套算法究竟是经历了什么,让它又歪打正着算出正确的结果了呢,这就是我们要重点讨论的问题:重要性采样。

在此之前,我们还需要绕个圈子,好更好的引出我们的问题。蒙特卡洛方法其实核心就在于解决一个分布的期望问题,而且,这个分布的概率分布还他妈必须是已知的!(或者你能够确信我们的样本一定一定是和要求期望的分布时一致的)
比如,一个变量xx的概率分布是p(x)p(x),我们要求它的期望怎么求?按照定义

E(x)=∫xp(x)dx

E(x)= \int x p(x)dx
很好,现在我告诉你,这个 p(x)p(x)形式巨复杂巨难算,臣妾根本积不出来(在高维的情况下尤甚)。那好,我就们不得不祭出蒙特卡洛了,蒙特卡洛告诉你,想知道期望,按照这个分布得到一些样本,平均就好了嘛。问题又来了,我们该怎么按照这个分布生成样本呢。
比如,我们想要按照正态分布生成一些样本,继而通过这些样本获取它的期望。但是,就计算机的角度来说,我们只能够得到均匀分布的随机数如何从均匀分布的随机数得到高斯分布的随机数呢?概率累计!

这里我们使用:http://blog.csdn.net/tudouniurou/article/details/6277526 的一个例子
例如我想按照标准正态分布N(0,1)取10个随机数,那么我首先在[0,1]上按照均匀分布取10个点

0.4505 0.0838 0.2290 0.9133 0.1524 0.8258 0.5383 0.9961 0.0782 0.4427

然后,我去找这些值在cdf上对应的x0,如下

-0.1243 -1.3798 -0.7422 1.3616 -1.0263 0.9378 0.0963 2.6636 -1.4175 -0.1442

用画图来表述的话,是这样的:

可是问题在这里:本来这个分布我就积不出来,你还要我积分,有啥用呢。重点来了!积不出来,我可以试着用其他方法啊,让我们改变一下求期望积分的形式:

E(x)=∫xp(x)q(x)q(x)dx

E(x)= \int x \frac{p(x)} {q(x)} q(x)dx
对,我们把这个积分项目上下乘以了一个q(x),这是我们已知的一个分布,并且这个分布在数学上来说是可以随意设定的。那么,这个式子其实可以理解为:现在我们求取的是 xp(x)q(x)x \frac{p(x)} {q(x)}的期望,这个变量是按照 q(x)q(x)分布的。看不太明白?让我们来看一个例子,这个例子出自
Udacity的机器人人工智能教程-CS373 Artificial Intelligence for Robotics Programming a Robotic Car:

绿色的点是一个机器人,看色的线代表激光发出的测量线,现在它被随机放在了地图的一个位置,它想要知道自己到底在哪里,于是,它就开始猜测:由于没有任何的先验信息,所以一开始,它可能存在与房间的任何一个角落,每一个红色的点即代表机器人对自己所处位置的一个猜想,这就是我们在蒙特卡洛方法里面所提到的样本。而猜测(红色点)的分布是均匀的,也就是之前式子里面的q(x)q(x)分布。当然,每一个猜测有好有坏,不然我们简单的把所有粒子一平均,机器人对自己位置的猜想肯定一直会处于整个房间的最中心了。p(x)q(x)\frac{p(x)} {q(x)}这部分我们称之为权值,就是为了衡量每个猜测的好坏,也就是衡量我们随意决定的分布和真实分布之间的相似度。
在这里其实还有一个小问题的,我们应该如何去衡量p(x)q(x)\frac{p(x)} {q(x)},在机器人定位问题里面,p(x)p(x)我们根本不知道!不知道的东西怎么去衡量啊,粒子滤波在这里有很牛逼的一招:这个不知道,我们可以抓特征啊。在这个问题里面,由于机器人知道整个房间的地图,又能探测到自己周边环境的样子,所以它可以把p(x)q(x)\frac{p(x)} {q(x)}转换为计算当前猜测点的特和探测器感知的周围环境的似然程度!粒子滤波器牛逼的地方就在这里:我不知道真实情况怎么分布的,但是我可以追踪你的一个特征,并且我假设:这个特征的分布期望和原始目标的分布期望是一致的。这就好像是老师叫你去操场上找人,但是你并不知道要找的人会在操场哪里出现,而且最关键的是你还不认识那个人。这时候老师说,不知道不认识不要紧,你只要找那个穿着红衣服的人就可以了。然后你就去操场一看,哟,红衣服在这里,虽然你不认识他,但是你认为红衣服是他在这个状态空间的唯一特征,所以你还是准确找到了这个人。
这样,p(x)q(x)\frac{p(x)} {q(x)}在实际计算中实际上就近似于计算特征的相似程度了。在这个问题里面,就是比较猜测位置姿态所应该得到的环境信息和实际得到的环境信息之间的差异。
当然,为了更好的性能,我们还是希望p(x)q(x)\frac{p(x)} {q(x)}尽可能接近于1,也就是q(x)q(x)尽可能接近于原始p(x)p(x)的分布的,这个问题我们可以通过粒子重采样解决。在这里我们不深入讨论,只给出重采样迭代之后的效果:






可以看到,在移动过程中,机器人的猜测渐渐全部收敛到机器人的真实位置了!
真他妈好玩。

最后回到之前我们提到的算面积那个问题,它实际上也是采用了重要性采样的思想,而权重分布变成了0-1分布,所以得到了之前的结果。
均匀的撒粒子只是一种折中的方法。在不知道原始分布是什么样子的情况下,均匀分布的粒子最具有适应性,为了提升性能,我们在做重采样的时候,依然会不断优化粒子,使其趋近于原来的概率分布。这样使其不断接近真实分布,从而完成整个蒙特卡洛的思路。

粒子滤波与重要性采样相关推荐

  1. 粒子滤波 particle filter —从贝叶斯滤波到 粒子滤波—Part-III(重要性采样序贯重要性采样SIS)

    粒子滤波 particle filter -从贝叶斯滤波到粒子滤波-Part-III(重要性采样&序贯重要性采样SIS) 原创不易,路过的各位大佬请点个赞 机动目标跟踪/非线性滤波/传感器融合 ...

  2. 基于序贯重要性重采样的粒子滤波and(RBPF)

    基于序贯重要性重采样的粒子滤波 重要性采样 重要性采样算法 序贯重要性重采样SIR(粒子滤波) 重采样过程 Rao-Blackwellized粒子滤波RBPF(混合卡尔曼滤波器MKF) 尽管高斯逼近可 ...

  3. rbpf粒子滤波slam matlab程序_学习笔记(优达学城)- 车辆定位之粒子滤波器(整合版)...

    1.代码传送门 首先,一如既往的,打开传送门! Fred159/CarND-Kidnapped-Vehicle-Project​github.com 代码, 很重要,但更重要的是从代码的行与行之间探索 ...

  4. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  5. 粒子滤波实现物体跟踪

    转自http://www.cnblogs.com/cfantaisie/archive/2011/06/16/2082267.html 粒子滤波实现物体跟踪的算法原理: 1)初始化阶段-提取跟踪目标特 ...

  6. 机器人学习--粒子滤波/MCL定位的理论基础(先验知识)

    跨学科(未学过数理统计和滤波等课程)的研究人员看懂粒子滤波或MCL定位的理论 2019年剑桥大学一名教授 Simon Godsill 发表了一篇论文: Godsill S. Particle filt ...

  7. 基于粒子滤波的物体跟踪

    一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu/~hess/)实现 ...

  8. 高斯粒子滤波matlab,粒子滤波(Particle filter)matlab实现 | 学步园

    粒子滤波是以贝叶斯推理和重要性采样为基本框架的.因此,想要掌握粒子滤波,对于上述两个基本内容必须有一个初步的了解.贝叶斯公式非常perfect,但是在实际问题中,由于变量维数很高,被积函数很难积分,常 ...

  9. 卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理

    所有滤波问题其实都是求感兴趣的状态的后验概率分布,只是由于针对特定条件的不同,可通过求解递推贝叶斯公式获得后验概率的解析解(KF.EKF.UKF),也可通过大数统计平均求期望的方法来获得后验概率(PF ...

  10. OpenCV3学习(12.5) opencv实现粒子滤波目标跟踪

    OpenCV高版本已经把粒子滤波的CV方面的condensation算法给去掉了,以前学的condensation算法不能用C++开发还是只能用C版本,(OpenCV3学习(12.4) 粒子滤波Con ...

最新文章

  1. 后摩尔定律时代的芯片新选择!
  2. 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
  3. HBase读写流程、flush、文件合并、region拆分
  4. dpdk18.11 收发包流程分析
  5. lynda ux_UX心态
  6. 蓝桥杯 BEGIN-4 入门训练 Fibonacci数列
  7. 浅评-我所用的输入法
  8. ggplot2都有哪些使用不多但是却异常强大的图层函数
  9. 在win7物理机,使用vmware,3台centos7系统,分别部署httpd,php-fpm,mariadb
  10. MySQL(13)-----多表查询(子查询)
  11. 华为笔试题大全(史上最齐全)
  12. 锐捷无线AC基础命令
  13. 计算机毕业设计ssm基于远程协作的汽车故障诊断系统t6ipg系统+程序+源码+lw+远程部署
  14. CCNA(七)思科路由器基本配置
  15. 定时监控服务端口是否正常 发送邮件
  16. MEMORY系列之“DDR概述”
  17. Relief特征提取算法实战
  18. 中国互联网家装用户超三千万,95后成为家装消费主力用户群体
  19. wamp设置php目录,PHP配置环境更改wamp的www目录
  20. samba guest ok

热门文章

  1. h5将数字翻译为大写汉字_js 将阿拉伯数字翻译成中文的大写数字
  2. 小喇叭上面有红叉,显示未插入扬声器或耳机,电脑没声音
  3. android按键录制,安卓按键精灵怎么录制脚本
  4. EventRecorder 使用注意事项
  5. 宝塔面板+小鸟云服务器+wordpress建站使用
  6. python barplot宽度,如何在seaborn barplot上设置宽度
  7. BPMN,BPEL,XPDL
  8. android支付宝sdk流程,支付宝SDK
  9. java植物大战僵尸_JAVA课程设计——植物大战僵尸(团队)
  10. Android开发自定义短视频系统源码全局悬浮按钮