最近一段时间,终于从纷繁的文献中走出来了,大致能缕清楚卡尔曼滤波,粒子滤波,动态贝叶斯网络之间的关系了。写一篇学习日志,mark一下,用通俗易懂的话帮助自己理解那些莫名其妙的公式。简书不能输入公式,真是蛋疼,,,只好用图片凑活了,确实有点丑。
1.知识预热——条件概率与贝叶斯公式
条件概率的定义: 设A,B为随机试验的二个3事件,且P(A)>0,则称P(B|A)为在事件A发生的条件下事件B发生的条件概率。
这条定义很简单,就不做过多解释,需要关注它的乘法定理,
由乘法定理就很容易推出全概率公式,
,
全概率公式也叫贝叶斯公式。
式中P(A),P(B)称为先验概率,之所以称为先验概率,是因为它们根据以往经验和分析得到的概率,不考虑与其他事件的联系。P(A|B)则称为B发生后A的后验概率,它通常是‘’因果‘’中的“果”,所以被称为后验概率。注意式中事件B往往被认为是“因”,是给定的,也就是说P(B)往往是一个常数,分母P(B)可以被扔掉,贝叶斯公式又可以被表示为,
上式中的α表示归一化处理,保证概率和是1。
由于
所以贝叶斯公式也可以被表示为,
痛苦的经历告诉我,牢牢掌握条件概率和贝叶斯公式十分重要!它是后边一切推论呢基础!
2.一般时序模型
在去理解卡尔曼滤波,粒子滤波这些方法之前,一定要搞清楚我们要解决的问题是什么。根据《人工智能,一种现代方法》,我们可以建立起一个一般时间序列模型(简称时序模型),它规范了我们要解决的所有问题,如下图所示。
这个模型包含两个序列,一个是状态序列,用X表示,一个是观测序列(又叫测量序列、证据序列、观察序列,不同的书籍有不同的叫法,在这里统一叫观测序列。)用Y表示。状态序列反应了系统的真实状态,一般不能被直接观测,即使被直接观测也会引进噪声;观测序列是通过测量得到的数据,它与状态序列之间有规律性的联系。举个例子,假设有一个人待在屋子里不知道外边有没有下雨,他于是观察进屋子里的人是否带伞,这里有没有下雨就是状态,有没有带伞就是观测。
上边这个模型有两个基本假设:
一是马尔可夫假设。假设当前状态只与上一个状态有关,而与上一个状态之前的所有状态无关。用公式来表示(式中1:t表示时刻1到时刻t的所有采样时刻),
上面的P被称为状态转移概率。例如上面那个雨伞的例子,我们会认为今天下不下雨只与昨天下不下雨有关,与以前没有关系。
二是观测假设(又叫证据假设,观察者假设)。假设当前观测值只依赖于当前状态,与其他时刻的状态无关。用公式来表示,
上面的P被称为观测概率(也有其他叫法)。例如上面那个雨伞的例子,进来的人带不带伞只与今天下不下雨有关系,与之前或未来下不下雨没关系。
由此,一个模型(记为λ)可以被状态转移概率矩阵和观测概率矩阵唯一确定。
这两个假设可以极大地将问题简化,而且很多实际情况符合这两个假设,即使有些偏差,我们也可以对模型进行拓展。例如雨伞的例子,我们认为今天下不下雨不仅与昨天有关,还与前天甚至更早的时间有关,那么就可以对马尔可夫假设进行拓展,拓展成二阶甚至更高阶的马尔可夫模型,例如二阶
那么这个模型需要完成的任务有哪些呢?主要有以下几个方面:
(1)滤波,计算
(2)预测,计算
(3)平滑,计算
(4)最可能解释,计算
(5)评估(这是我自己加的,我觉得有必要加上这一点),计算
这里面的λ是指模型,这个公式意味着在该模型下,给定到目前为止的状态序列,计算输出特定观测序列的可能性。这其实是个评估问题,可以评估模型的好坏,概率越高,意味着模型越能反映观测序列与状态序列之间的联系,模型就越好。
(6)学习。计算λ,也即状态转移概率和观测概率
学习的目的是根据历史数据得到合理的模型,一般是根据一个目标函数,对模型进行迭代更新,例如使(5)中要计算的值最大便可以作为一个目标。
上边列出了一般时序模型要解决的所有问题,囊括的内容非常丰富,占了人工智能很大一块。尽管滤波只是其中一项,但理解模型的总体会对理解滤波有所帮助。下面把目光聚焦到滤波上来。
3.滤波问题
根据目前为止过去所有的测量数据,估计当前的状态,这便是滤波,但直接计算会有一个很明显的问题。注意到,计算值的条件是过去所有的测量数据,意味着计算每一个时刻的概率都要回顾整个历史测量数据,那么随着时间的推移,更新的代价会越来越大。所以需要找到一种办法,根据时刻t的滤波结果,和时刻t+1时刻的测量数据,就能计算出t+1时刻的滤波结果,这个计算过程叫做递归估计。用公式来表示,存在某个函数f,满足:
为了得到上面那个函数,对要求的概率作以下变换
第一步到第二步根据贝叶斯方程,第二步到第三步根据观测假设。第三步的的前一项是状态转移概率,模型已知,后面一项是一个单步预测,对单步预测做进一步的转换:
式中第一步应该比较好理解,t+1时刻某个状态可能由t时刻任何一个状态转移而来,所以t+1时刻某个状态的概率就等于t时刻所有可能状态的概率乘以相应的转移概率求和,第一步到第二步根据贝叶斯方程,第二步到第三步根据马尔科夫假设。注意到第三步第一项是状态转移概率,模型已知,第二项即t时刻的滤波结果,这样我们就可以利用t时刻的滤波结果递推t+1时刻的滤波结果了。递推公式可以表示为,
这种方法被称为前向递归。这里表示的状态是离散的,如果是连续的求和符号改为积分符号即可。
但这种方法有个最大的问题就是有确切的模型,也就是说状态转移概率和观测概率必须是已知的,但大多数情况它们并不是已知的,当然可以通过学习得到,但学习本身并不是那么容易的,那么如何才能在模型未知的情况下,实现上述递推呢?接下来就要看看卡尔曼滤波怎么巧妙地解决这个问题了!
今天先写到这,敲公式真心耗时间!!!