particleFilter粒子滤波

粒子滤波

Kalman 滤波根据线性高斯模型可以求得解析解,但是在非线性,非高斯的情况,是无法得到解析解的,对这类一般的情况,我们叫做粒子滤波,我们需要求得概率分布,需要采用采样的方式。

我们希望应用 Monte Carlo 方法来进行采样,对于一个概率分布,如果我们希望计算依这个分布的某个函数 f ( z ) f(z) f(z) 的期望,可以利用某种抽样方法,在这个概率分布中抽取 N N N 个样本,则 E [ f ( z ) ] ≃ 1 N ∑ i = 1 N f ( z i ) \mathbb{E}[f(z)]\simeq\frac{1}{N}\sum\limits_{i=1}^Nf(z_i) E[f(z)]N1i=1Nf(zi)。但是如果这个概率十分复杂,那么采样比较困难。对于复杂的概率分布,我们可以通过一个简单的概率分布 q ( z ) q(z) q(z) 作为桥梁(重要值采样):
E [ f ( z ) ] = ∫ z f ( z ) p ( z ) d z = ∫ z f ( z ) p ( z ) q ( z ) q ( z ) d z = ∑ i = 1 N f ( z i ) p ( z i ) q ( z i ) \mathbb{E}[f(z)]=\int_zf(z)p(z)dz=\int_zf(z)\frac{p(z)}{q(z)}q(z)dz=\sum\limits_{i=1}^Nf(z_i)\frac{p(z_i)}{q(z_i)} E[f(z)]=zf(z)p(z)dz=zf(z)q(z)p(z)q(z)dz=i=1Nf(zi)q(zi)p(zi)
于是直接通过对 q ( z ) q(z) q(z) 采样,然后对每一个采样的样本应用权重就得到了期望的近似,当然为了概率分布的特性,我们需要对权重进行归一化。

在滤波问题中,需要求解 p ( z t ∣ x 1 : t ) p(z_t|x_{1:t}) p(ztx1:t),其权重为:
w t i = p ( z t i ∣ x 1 : t ) q ( z t i ∣ x 1 : t ) , i = 1 , 2 , ⋯   , N w_t^i=\frac{p(z_t^i|x_{1:t})}{q(z_t^i|x_{1:t})},i=1,2,\cdots,N wti=q(ztix1:t)p(ztix1:t),i=1,2,,N
于是在每一个时刻 t t t,都需要采样 N N N 个点,但是即使采样了这么多点,分子上面的那一项也十分难求,于是希望找到一个关于权重的递推公式。为了解决这个问题,引入序列重要性采样(SIS)。

SIS

在 SIS 中,解决的问题是 p ( z 1 : t ∣ x 1 : t ) p(z_{1:t}|x_{1:t}) p(z1:tx1:t)
w t i ∝ p ( z 1 : t ∣ x 1 : t ) q ( z 1 : t ∣ x 1 : t ) w_t^i\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})} wtiq(z1:tx1:t)p(z1:tx1:t)
根据 LDS 中的推导:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲p(z_{1:t}|x_{1:…
于是分子的递推式就得到了。对于提议分布的分母,可以取:
q ( z 1 : t ∣ x 1 : t ) = q ( z t ∣ z 1 : t − 1 , x 1 : t ) q ( z 1 : t − 1 ∣ x 1 : t − 1 ) q(z_{1:t}|x_{1:t})=q(z_t|z_{1:t-1},x_{1:t})q(z_{1:t-1}|x_{1:t-1}) q(z1:tx1:t)=q(ztz1:t1,x1:t)q(z1:t1x1:t1)
所以有:
w t i ∝ p ( z 1 : t ∣ x 1 : t ) q ( z 1 : t ∣ x 1 : t ) ∝ p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) p ( z 1 : t − 1 ∣ x 1 : t − 1 ) q ( z t ∣ z 1 : t − 1 , x 1 : t ) q ( z 1 : t − 1 ∣ x 1 : t − 1 ) = p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) q ( z t ∣ z 1 : t − 1 , x 1 : t ) w t − 1 i w_t^i\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})}\propto \frac{p(x_t|z_t)p(z_t|z_{t-1})p(z_{1:t-1}|x_{1:t-1})}{q(z_t|z_{1:t-1},x_{1:t})q(z_{1:t-1}|x_{1:t-1})}=\frac{p(x_t|z_t)p(z_t|z_{t-1})}{q(z_t|z_{1:t-1},x_{1:t})}w_{t-1}^i wtiq(z1:tx1:t)p(z1:tx1:t)q(ztz1:t1,x1:t)q(z1:t1x1:t1)p(xtzt)p(ztzt1)p(z1:t1x1:t1)=q(ztz1:t1,x1:t)p(xtzt)p(ztzt1)wt1i
我们得到的对权重的算法为:

  1. t − 1 t-1 t1 时刻,采样完成并计算得到权重
  2. t 时刻,根据 q ( z t ∣ z 1 : t − 1 , x 1 : t ) q(z_t|z_{1:t-1},x_{1:t}) q(ztz1:t1,x1:t) 进行采样得到 z t i z_t^i zti。然后计算得到 N N N 个权重。
  3. 最后对权重归一化。

SIS 算法会出现权值退化的情况,在一定时间后,可能会出现大部分权重都逼近0的情况,这是由于空间维度越来越高,需要的样本也越来越多。解决这个问题的方法有:

  1. 重采样,以权重作为概率分布,重新在已经采样的样本中采样,然后所有样本的权重相同,这个方法的思路是将权重作为概率分布,然后得到累积密度函数,在累积密度上取点(阶梯函数)。
  2. 选择一个合适的提议分布, q ( z t ∣ z 1 : t − 1 , x 1 : t ) = p ( z t ∣ z t − 1 ) q(z_t|z_{1:t-1},x_{1:t})=p(z_t|z_{t-1}) q(ztz1:t1,x1:t)=p(ztzt1),于是就消掉了一项,并且采样的概率就是 p ( z t ∣ z t − 1 ) p(z_t|z_{t-1}) p(ztzt1),这就叫做生成与测试方法。

采用重采样的 SIS 算法就是基本的粒子滤波算法。如果像上面那样选择提议分布,这个算法叫做 SIR 算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值