从贝叶斯到卡尔曼滤波

1. 说明

本文是来自忠厚老实的老王在B站讲的卡尔曼滤波,经过自己理解写的总结笔记,课讲的非常好,一定要去听

2. 贝叶斯公式和应用

对于事件A和B,设其同时发生的概率为P(A=aB=b), 则存在:

P(A=aB=b)=P(A=a|B=b)P(B=b)=P(B=b|A=a)P(A=a)

这是数学本质,A和B同时发生的概率为发生B的概率和在发生B时发生A的概率的乘积,很好理解。

P(A=a|B=b)=P(B=b|A=a)P(A=a)P(B=b)

经过变形可以得到,这就贝叶斯公式

贝叶斯公式本质只是条件概率,如何基于这个公式对其进行应用呢?

比如说测量现实温度,我们预设一个概率空间A对现实进行预测,我们当然可以通过加权积分的方式得到一个最终的预测值,但这个预设的概率空间的准确性很一般,这个时候,找到了一个它的影子A',他们之间相关,而且状态空间A‘在现实中能够直接观测到一个结果a',也就说明在这个现实下A’是朝着a'进行塌缩的,那么相对应的A会朝着相似的方向塌缩成a,所以只需要知道A, A‘, a',还有A与A’之间的联系,就能够确定a了

  • 举一个简单例子

有两个温度计A和B,要测量今天的温度,测得如下结果:

P(A=10)=0.8,P(A=11)=0.2

P(B=10)=0.7,P(B=11)=0.2

而且温度计B在出厂的时候测的和A的相关关系为:

P(B=11|A=10)=0.3

P(B=10|A=10)=0.6

现在,我们想要结合两个测量结果让结果更准确,让B去修正A,根据贝叶斯公式:

P(A=10|B=10)=P(B=10|A=10)P(A=10)P(B=10)=0.60.80.7=0.685

当B=10的时候也就是说在一次观测中B这个系统朝着B=10这个方向塌缩了, 此时A也跟着塌缩P(A=10 | B= 10) =0.685, 和最初的P(A=10)=0.8相比就进一步收敛了,当然这里还遗留了一个问题:B=11的时候呢?这就属于另一个问题,多次观测的塌缩融合问题,后文另提

  • 如何理解似然

    PA|B(a|b)=PB|A(b|a)PA(a)PB(b) 通常为 =

    其中PB|A(b|a)叫做似然概率,表示事件a事件b发生的概率,这个值是一个固定值,只是表示的是A和影子状态B之前的相关性仅此而已,和PA(a)大小无关,不会随着猜测PA(a)的改变而改变,是一个预设值,表示两个系统的相关性。

3. 连续贝叶斯公式

在连续的概率分布中,只有单点概率密度而没有单点的概率,单点概率为0,但还是要计算概率为此要使用微分的思想化积为加,对于一个连续的贝叶斯概率P(X<x|Y=y)推导推导过程如下:

P(X<x|Y=y)=u=xP(X=u|Y=y)=u=xP(Y=y|X=u)P(X=u)P(Y=y)使=limεu=xP(y<Y<y+ε|X=u)P(u<X<u+ε)P(y<Y<y+ε)0=limεu=x(fY|X(ξ1|u)×ε)(fX(ξ2)×ε)fY(ξ3)×εξ1(y,y+ε),ξ2(u,u+ε),ξ3(y,y+ε)=limεu=x(fY|X(y|u))(fX(u))fY(y)×ε使=x(fY|X(y|u))(fX(u))fY(y)d(u)=>x(fY|X(y|x))(fX(x))fY(y)d(x)()

最后的形式和离散贝叶斯很像,但是却变成了概率密度的相乘,多了个积分符号的dx, 其实很好理解,从推导的过程中可以知道,使用【概率密度*dx】代替【概率】后,分子分母约掉了一个dx,同时把整个x域的概率加起来

因为fY(y)可以通过全概率密度的方式计算出来,

fY(y)=x=x=+fY|X(y|x)fX(x)dx

所以连续贝叶斯公式还有另一个形式

P(X<x|Y=y)=xη(fY|X(y|x))(fX(x))d(x)η=1fY(y)=1+fY|X(y|x)fX(x)dx

4. 贝叶斯滤波

在推导了连续的贝叶斯公式后,接下来就能够推导贝叶斯滤波算法,贝叶斯滤波基于贝叶斯概率的思想,首先对观测的建模得到预测方程,就能够基于前一个状态对下一个状态进行预测,同时对下一个状态进行观测得到预测方程,最终将两者融合后就能够得到一个比较准确的后验,整个过程如下所示:


对于贝叶斯滤波算法的开始需要预测方程和观测方程

**预测方程:Xk=f(Xk1)+QK, **

**观测方程: Yk=h(XK)+Rk **

Xk1: K-1时刻状态X的实际值
Xk: K时刻状态X的预测值
f: 前一状态和当前时刻的关系

h: 实际值和观测值的关系

QK: k时刻预测随机噪声

Rk: k时刻的观测噪声

Yk: k时刻的观测值

其中: X0,Q1,Q2...QK,R1,R2....Rk 相互独立

并且有观测值: y1,y2,...,yn

X0以及X的概率密度函数fx0(x), QK的概率密度函数fQk(x)RK的概率密度函数fRk(x)

注意,此处的预测方程和观测方程中变量都是Xk,Yk而不是xk,yk, 表示的还是一个范围下的随机变量;


  • 如何理解预测方程和观测方程?

预测方程使用f做$ X_{k}Q_{K}$去1.弥补建模的不准确。 2.模拟实际中存在的噪声

观测方程是在预测方程的基础上,使用h对预测出来的系统状态Xk做从系统状态到状态的转换,用Rk去模拟观测噪声

这个时候再回到贝叶斯思想的本身去看这两个方程,为了得到系统状态,利用随机过程对系统进行建模得到预测方程A,由于这个模型是不准的,为此找了与A有联系的影子A’,A‘能在现实中坍缩成a’,所以A也会朝着这个方向塌缩成a;Xk就是A, 而Yk就是A’,要谨记它们不是一个具体的值,而是概率空间下的随机变量,RKQK是让两个系统成为概率空间的原因;此外将XKYkYk=h(f(xk1+Rk)+QK) , 提醒我们YkXKRkQK,


  • 推导过程

    :fX+(x)=η(fY|X(y|x))fX(x)η=1fY(y)=1+fY|X(y|x)fX(x)dx

    fX+(x): x的后验概率密度也就是fX|Y(x|y)的简略写法

    fX(x): x的先验概率密度,从观测方程得出

    y: 观测值y

此处的目标是只需要求出fX+(x)即可,有了概率密度函数后,后验x值使用积分x+=+xfX+(x)dx计算可得

先验fX(x)的推导,概率是概率密度的积分,要求概率密度,对概率求导即可

P(X1<x)=u=xP(X1=u)P(X1=u)=v=+P(X1=u|X0=v)P(X0=v)()=v=+P(X1f(X0)=uf(v)|X0=v)P(X0=v)=v=+P(Q1=uf(v)|X0=v)P(X0=v)=v=+P(Q1=uf(v))P(X0=v)Q1XX0=limε0v=+fQ1(uf(v))εfX0(v)ε=limε0v=+fQ1(uf(v))fX0(v)d(v)εεd(v)

P(X1<x)=u=xP(X1=u)=u=+limε0v=+fQ1(uf(v))fX0(v)d(v)ε=xv=+fQ1(uf(v))fX0(v)d(v)d(u)

fX1(x)=d(P(X1<x))dx=v=+fQ1(uf(v))fX0(v)d(v)()


似然fY|X(y|x)的推导, 思路也是一样,对概率取一个微积分空间然后求导

fY1|X1(y1|x1)=limε0P(y1<Y1<y1+ε|X1=x)ε=limε0P(y1h(x)<Y1h(X1)<y1h(x)+ε|X1=x)ε=limε0P(y1h(x)<R1<y1h(x)+ε|X1=x)ε=limε0P(y1h(x)<R1<y1h(x)+ε)εR1X1=fR1(y1h(x))


最后后验概率的值为:

f1+(x)=η1fR1[y1h(x)]fX1(x)η1=1fY1(y)=1+fR1[y1h(x)]fX1(x)dx

5. 卡尔曼滤波

**预测方程:Xk=F(Xk1)+QK, **

**观测方程: Yk=H(XK)+Rk **

由于贝叶斯滤波的每一步推导都有无穷积分,而无穷积分解析解一般不存在导致贝叶斯滤波难以落地,为此做了两个:

  1. f和h都假设为线性关系
  2. Qk,Rk假设为正态噪声服从QkN(0,Q)RKN(0,R) ,这就是卡尔曼滤波

假设XK1N(uk1+,σk1+),先验fK(x)的计算如下

fXk(x)=+fQ[xf(v)]fXk1+(v)dv(1)=+(2πQ)12e(xFv)22Q(2πσkj1+)12e(vuk1+)22σk1+dv

这个积分想要进一步化简并不容易,但仔细观察(1)参考此文可以发现这实质是fQfXk1卷积的过程,时域的卷积就等于频域的乘积,可以通过傅里叶变化计算完后逆变换回来,最后计算得

fXk(x)N(uk,σk)uk=Fuk1+,σk=F2σk1+Q


对于后验fXk+

fXk+=ηfR(ykhx)fxk(x)=η(2πR)12e(ykhx)22R(2πσk)12e(xuk)22σkη=1+(2πR)12e(ykhx)22R(2πσk)12e(xuk)22σk

最后计算得到

Xk+N(uk+,σk+)uk+=hσkyk+Rukh2σk+R,σk+=Rσkh2σk+R=>Xk+N(hσkyk+Rukh2σk+R,Rσkh2σk+R)

k=hσkh2σk+R, 则

uk+=uk+k(ykhuk)σk+=(1kh)σk

最终所有公式为

:uk=Fuk1+:σk=F2σk1+Q:uk+=uk+k(ykhuk):σk+=(1kh)σkk=hσkh2σk+R

会发现结果已经没有别的概率,只是期望和方差的加加减减,这是因为高斯函数的运算具有封闭性。

6. 矩阵形式的卡尔曼滤波

期望uk变成了向量$\vec{u_{k}^{-}} ,\sigma_{k}\Sigma_{k}$,关于正太分布中为什么方差变成了协方差矩阵参考多维高斯分布

其中要特别注意,构建协方差矩阵时,不是用X2Σ,而是用XTΣX这样的形式,因为这种形式算下来最后是一个1x1的值;

矩阵形式的卡尔曼滤波如下:小写的σh变成了矩阵形式大写的ΣH, 1变成了单位矩阵I

uk=Fuk1+Σk=FΣk1+FT+Quk+=uk+k(ykHuk)Σk+=(IkH)Σk:k=HΣkHΣkHT+R

7. 应用

用来做系统预测的时候,一定会首先建模

**预测方程:Xk=F(Xk1)+QK, **

**观测方程: Yk=H(XK)+Rk **

其中有一些要点,

1是F会导致预测模型是否能够拟合实际, 建模可以傻瓜式建模Xk=Xk1+QK, 使用QK去做修正,但会不准确

2.是Q和R,观测值yk的出现后会R的大小会决定Yk的塌缩程度,如果Rk小说明Yk这个系统值很集中塌缩值要求很精确,所以要求输入得Xk也要塌缩的精确,这时候候xk+就更靠近 yk,所以说我们更相信观测值;相反RK大说明Yk系统值塌缩得不准确,那么Xk塌缩得范围也大一些就会靠近自己得先验均值,这个时候就说xk+更靠近预测值

3.是预测值X0的初值随便设置没关系的原因,X0设置的粗糙只是说系统一开始粗糙,但观测方程的塌缩,会让结果塌缩到正确的点,初值影响并不太大。

posted @   woder  阅读(2387)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示