17.卡尔曼滤波:一种优化估计的方法

166 阅读2分钟

一、概述

对于隐马尔科夫模型(HMM),它主要适用于处理隐变量为离散值的情况。然而,当我们面临连续隐变量的 HMM 时,我们通常会采用卡尔曼滤波(Kalman Filtering)来描述线性高斯模型的状态变量,而对于非高斯非线性的状态变量,我们则会选择使用粒子滤波(Particle Filter)进行描述。

线性体现在上一时刻和这一时刻的隐变量以及隐变量和观测变量之间,它们的关系可以表示为:

zt=Azt1+B+εxt=Czt+D+δεN(0,Q)δN(0,R)z_{t}=A\cdot z_{t-1}+B+\varepsilon \\ x_{t}=C\cdot z_{t}+D+\delta \\ \varepsilon \sim N(0,Q)\\ \delta \sim N(0,R)

类比HMM中几个参数,我们也可以写出类似初始概率、转移概率或发射概率的形式:

P(ztzt1)N(Azt1+B,Q)P(xtzt)N(Czt+D,R)z1N(μ1,Σ1)P(z_{t}|z_{t-1})\sim N(A\cdot z_{t-1}+B,Q)\\ P(x_{t}|z_{t})\sim N(C\cdot z_{t}+D,R)\\ z_{1}\sim N(\mu _{1},\Sigma _{1})

所有的参数为:

θ=(A,B,C,D,Q,R,μ1,Σ1)\theta =(A,B,C,D,Q,R,\mu _{1},\Sigma _{1})

二、Filtering问题

在多个inference问题中,卡尔曼滤波更关心Filtering问题,即求边缘概率:

P(ztx1,x2,,xt)P(z_{t}|x_{1},x_{2},\cdots ,x_{t})

类似HMM的前向算法,我们需要找到一个递推关系:

P(ztx1,x2,,xt)=P(x1,x2,,xt,zt)P(x1,x2,,xt)P(x1,x2,,xt,zt)=P(xtx1,x2,,xt1,zt)P(xtzt)P(x1,x2,,xt1,zt)=P(xtzt)P(x1,x2,,xt1,zt)=P(xtzt)P(ztx1,x2,,xt1)prediction问题P(x1,x2,,xt1)P(xtzt)P(ztx1,x2,,xt1)P(z_{t}|x_{1},x_{2},\cdots ,x_{t})\\ =\frac{P(x_{1},x_{2},\cdots ,x_{t},z_{t})}{P(x_{1},x_{2},\cdots ,x_{t})}\\ \propto P(x_{1},x_{2},\cdots ,x_{t},z_{t})\\ =\underset{P(x_{t}|z_{t})}{\underbrace{P(x_{t}|x_{1},x_{2},\cdots ,x_{t-1},z_{t})}}\cdot P(x_{1},x_{2},\cdots ,x_{t-1},z_{t})\\ =P(x_{t}|z_{t})\cdot P(x_{1},x_{2},\cdots ,x_{t-1},z_{t})\\ =P(x_{t}|z_{t})\cdot \underset{prediction问题} {\underbrace{P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})}}\cdot P(x_{1},x_{2},\cdots ,x_{t-1})\\ \propto P(x_{t}|z_{t})\cdot P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})

上式结果中,P(xtzt)P(x_{t}|z_{t})已知,而另一项可做以下转化:

P(ztx1,x2,,xt1)=zt1P(zt,zt1x1,x2,,xt1)dzt1=zt1P(ztzt1,x1,x2,,xt1)P(ztzt1)P(zt1x1,x2,,xt1)Filtering问题dzt1=zt1P(ztzt1)P(zt1x1,x2,,xt1)dzt1P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})\\ =\int _{z_{t-1}}P(z_{t},z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})\mathrm{d}z_{t-1}\\ =\int _{z_{t-1}}\underset{P(z_{t}|z_{t-1})}{\underbrace{P(z_{t}|z_{t-1},x_{1},x_{2},\cdots ,x_{t-1})}}\\\cdot \underset{Filtering问题}{\underbrace{P(z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})}}\mathrm{d}z_{t-1}\\ =\int _{z_{t-1}}P(z_{t}|z_{t-1})\cdot P(z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})\mathrm{d}z_{t-1}

因此,我们找到了Filtering问题的递推式:

P(ztx1,x2,,xt)=CP(xtzt)zt1P(ztzt1)P(zt1x1,x2,,xt1)dzt1{\color{Red}{P(z_{t}|x_{1},x_{2},\cdots ,x_{t})}}=\\C\cdot P(x_{t}|z_{t})\cdot \int _{z_{t-1}}P(z_{t}|z_{t-1})\cdot {\color{Red}{P(z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})}}\mathrm{d}z_{t-1}

因此,我们可以确定求解Filtering问题的步骤如下:

t=1{P(z1x1)updateP(z2x1)predictiont=2{P(z2x1,x2)updateP(z3x1,x2)predictiont{P(ztx1,x2,,xt)updateP(zt+1x1,x2,,xt)predictiont=1\left\{\begin{matrix} P(z_{1}|x_{1})\rightarrow update\\ P(z_{2}|x_{1})\rightarrow prediction \end{matrix}\right.\\ t=2\left\{\begin{matrix} P(z_{2}|x_{1},x_{2})\rightarrow update\\ P(z_{3}|x_{1},x_{2})\rightarrow prediction \end{matrix}\right.\\ \vdots \\ t\left\{\begin{matrix} P(z_{t}|x_{1},x_{2},\cdots ,x_{t})\rightarrow update\\ P(z_{t+1}|x_{1},x_{2},\cdots ,x_{t})\rightarrow prediction \end{matrix}\right.

很明显这是一个online的过程。

三、Filtering问题求解

通过上述转化我们可以确定Filtering问题的计算是通过以下两步迭代计算进行的:

Step1 Prediction:

P(ztx1,x2,,xt1)=zt1P(ztzt1)P(zt1x1,x2,,xt1)dzt1P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})=\int _{z_{t-1}}P(z_{t}|z_{t-1})\cdot P(z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})\mathrm{d}z_{t-1}

Step2 Update:

P(ztx1,x2,,xt)=CP(xtzt)P(ztx1,x2,,xt1)P(z_{t}|x_{1},x_{2},\cdots ,x_{t})=C\cdot P(x_{t}|z_{t})\cdot P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})

我们可以确定的是几个高斯分布经过相乘或者积分运算后仍然是高斯分布,所以我们假设:

Prediction:P(ztx1,x2,,xt1)=N(ztμt,Σt)Update:P(ztx1,x2,,xt)=N(ztμt,Σt)Prediction:P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})=N(z_{t}|\mu _{t}^{*},\Sigma _{t}^{*})\\ Update:P(z_{t}|x_{1},x_{2},\cdots ,x_{t})=N(z_{t}|\mu _{t},\Sigma _{t})

代入高斯分布的形式可以得到:

Prediction:N(ztμt,Σt)=zt1N(ztAzt1+B,Q)N(zt1μt1,Σt1)dzt1Update:N(ztμt,Σt)=CN(xtCzt+D,R)N(ztμt,Σt)Prediction:N(z_{t}|\mu _{t}^{*},\Sigma _{t}^{*})=\int _{z_{t-1}}N(z_{t}|A\cdot z_{t-1}+B,Q)\cdot N(z_{t-1}|\mu _{t-1},\Sigma _{t-1})\cdot \mathrm{d}z_{t-1} \\ Update:N(z_{t}|\mu _{t},\Sigma _{t})=C\cdot N(x_{t}|C\cdot z_{t}+D,R)\cdot N(z_{t}|\mu _{t}^{*},\Sigma _{t}^{*})

接下来的求解需要用到2.高斯分布第六部分内容中我们得到的结论,即已知P(x)P(x)P(yx)P(y|x)来求P(y)P(y)P(xy)P(x|y),这里我们直接套用公式即可。

首先,在Prediction过程中:

P(ztx1,x2,,xt1)P(y)=zt1P(ztzt1)P(yx)P(zt1x1,x2,,xt1)P(x)dzt1\underset{P(y)}{\underbrace{P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})}}=\int _{z_{t-1}}\underset{P(y|x)}{\underbrace{P(z_{t}|z_{t-1})}}\cdot \underset{P(x)}{\underbrace{P(z_{t-1}|x_{1},x_{2},\cdots ,x_{t-1})}}\mathrm{d}z_{t-1}

代入计算P(y)P(y)的公式可得:

μt=Aμt1+BΣt=Q+AΣt1AT\mu _{t}^{*}=A\mu _{t-1}+B\\ \Sigma _{t}^{*}=Q+A\Sigma _{t-1}A^{T}

在update过程中:

P(ztx1,x2,,xt)P(xy)=CP(xtzt)P(yx)P(ztx1,x2,,xt1)P(x)\underset{P(x|y)}{\underbrace{P(z_{t}|x_{1},x_{2},\cdots ,x_{t})}}=C\cdot \underset{P(y|x)}{\underbrace{P(x_{t}|z_{t})}}\cdot \underset{P(x)}{\underbrace{P(z_{t}|x_{1},x_{2},\cdots ,x_{t-1})}}

代入计算P(xy)P(x|y)的的公式也可以得出结果,过程比较复杂,所以省略。

注意这里将x1,x2,,xt1x_{1},x_{2},\cdots ,x_{t-1}看做已知即可,然后再套用p(x)p(x)p(yx)p(y|x)等形式。

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情