sinanmu · 2020年05月12日

【易懂教程】我是如何十分钟理解与推导贝叶斯滤波(Bayes Filter)算法?

“很多时候一些算法看起来极其复杂,极其难懂。不是因为我们愚不可及。而是因为我们看到的已经是别人省略过很多步骤和省略很多脑海中思考过的思路最后呈现出的公式和文字。而好的博客就是应该尽量还原这些思考过程以及省略掉的步骤。”——

@Ai酱

像卡尔曼滤波(Kalman filters)、粒子滤波(Particle filters),隐含马尔科夫模型(Hidden Markov models),动态贝叶斯网络(Dynamic Bayesian networks)等等算法。这些算法都和贝叶斯滤波算法非常相似.因此学好了贝叶斯滤波再学其他算法那就容易很多了。

破解概念上的束缚之贝叶斯滤波算法到底有什么用?

学东西最烦的是看了半个月的算法细节,结果发现自己还是不知道这算法有什么用,怎么实现。今天博主就开篇破解贝叶斯中的概念上的障碍。让大家快速学习贝叶斯滤波算法,并且能够用到自己的项目中。贝叶斯滤波算法它做的工作就是根据已有的信息来计算概率。比如我想根据一些信息识别某个人性别是不是女,那贝叶斯滤波算法要做的是就是计算这个人是女的概率P(女)。来了新的信息就计算新的概率。。如果你不理解这句话看接下来这个例子你就懂了。假如现在贝叶斯滤波算法是要根据你已输入的信息分析某个人是男是女。贝叶斯滤波算法最终的输出是计算出根据现有信息判断这个人是男性的概率是多少,女性的概率是多少。然后你的算法就选择概率更大的那种情况输出结果。如果有新的信息进来(比如“那个人有长头发”),贝叶斯算法要重新计算这个人是男性的概率是多少,女性的概率是多少。。

那它具体怎么做的呢?

当你什么信息都不提供给贝叶斯滤波算法的时候,然后你问贝叶斯算法那个人的性别是女的概率是多少。贝叶斯滤波算法会告诉你P(女)=0.5。注意:P(女)=0.5这个表示的含义是“根据已有信息,那个人是女性概率是0.5”. 现在P(女)=P(男)=0.5我们是没法判断性别。这个数值“0.5”是我们设置的一个初始值,一般是需要根据你的统计经验设置的(如果你是想用贝叶斯滤波算法进行垃圾邮件识别,那么它是垃圾邮件这个概率肯定不会有0.5这么大。毕竟垃圾邮件还是少数。你需要统计收到的邮件中垃圾邮件的占比,然后作为算法的初始值。好让算法在没有任何提示信息的情况下能输出当前邮件是垃圾邮件的概率)。

然后,回到性别识别那个问题。

当你告诉算法这个人有长头发,你再问算法这个人现在性别是女的概率是多少。贝叶斯滤波算法会根据概率论中的条件概率知识算出“在知道某个人有长头发的条件下,这个人性别是女的概率P(女)=0.87”。至于它到底怎么算的文章后面会讲。现在你只需要对整个算法有个直观理解即可。为什么它能知道根据“有长头发”这个信息来更新概率呢?这是因为算法需要我们告诉它“长头发中女性占比是多少(这个叫做先验知识)”,P(女)=0.87这个也是需要我们经过统计才能得到的数据。

当你再告诉算法这个人使用口红,然后你再问算法这个人现在性别是女的概率是多少?贝叶斯滤波算法会根据概率论中条件概率知识,以及需要你告诉它“使用口红的人中女性占比是多少”,来更新当前这个人是女性的概率P(女)=0.91。

以上就是贝叶斯算法做的工作。现在我想聪明的你已经对贝叶斯滤波算法已经有了一个直观的理解。我总结一下贝叶斯滤波算法做的工作:它做的工作就是根据不断接收到的新信息和我提供的一些已经知道的统计值,来不断更新概率。更新概率值的方法是根据概率论中的条件概率计算公式来更新的。贝叶斯滤波算法计算的结果是一个概率值有什么用呢?

比如我要它根据我提供的一些信息识别某个人是不是女,那它就得计算这个人是女的概率P(女).如果我想让它根据雷达测距判断机器人离障碍物距离,那它就得计算出机器人离障碍物各种距离取值的概率(为何要计算概率?因为雷达测量会存在误差),比如计算机器人离障碍物10cm远的概率是0.87,离障碍物11cm远的概率是0.21,离障碍物9cm远的概率是0.01。那么我就认为机器人离障碍物距离是10cm。

1.jpg2.jpg3.jpg4.jpg5.jpg6.jpg

由于文章里面公式很多知乎markdown不支持公式没办法里面只能截图。

推荐阅读:


欢迎关注我的知乎专栏适合初学者的机器学习神经网络理论到实践
1 阅读 433
推荐阅读
0 条评论
关注数
4
内容数
15
理工思维科普编程、读书、AI、机器人
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
Arm中国学堂公众号
关注Arm中国学堂
实时获取免费 Arm 教学资源信息
Arm中国招聘公众号
关注Arm中国招聘
实时获取 Arm 中国职位信息