Particle Filter
Kalman 滤波根据线性高斯模型可求得解析解,但是在非线性、非高斯的情况下无法得到解析解,对这类一般的情况,则要采用粒子滤波的方法
对于复杂的概率分布,可以通过一个简单的概率分布
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
=
1
N
∑
i
=
1
N
f
(
z
i
)
p
(
z
i
)
q
(
z
i
)
→
w
e
i
g
h
t
\begin{aligned} \mathbb{E}[f(z)]&=\int_zf(z)p(z)dz=\int_zf(z)\frac{p(z)}{q(z)}q(z)dz\\&=\frac1N\sum\limits_{i=1}^Nf(z_i)\boxed{\frac{p(z_i)}{q(z_i)} }\color{blue}\to weight \end{aligned}
E[f(z)]=∫zf(z)p(z)dz=∫zf(z)q(z)p(z)q(z)dz=N1i=1∑Nf(zi)q(zi)p(zi)→weight
通过对 q ( z ) q(z) q(z) 采样,然后对每一个采样的样本应用权重就得到了期望的近似,为了概率分布的特性,还需要对权重进行归一化。
在滤波问题中,需要求解
p
(
z
t
∣
x
1
:
t
)
p(z_t|x_{1:t})
p(zt∣x1: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(zti∣x1:t)p(zti∣x1:t),i=1,2,⋯,N
若每一个时刻 t t t 都需要采样 N N N 个点,则每个时刻都要计算 N N N个权重,使得计算较为繁杂,希望找到一个关于权重的递推公式,于是就引入了序列重要性采样(SIS)。
SIS
在 SIS (sequential importance sampling filter)中,解决的问题是 p ( z 1 : t ∣ x 1 : t ) p(z_{1:t}|x_{1:t}) p(z1:t∣x1: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})} wti∝q(z1:t∣x1:t)p(z1:t∣x1:t)
根据 LDS 中的推导可以得到上式分子的递推式:
p
(
z
1
:
t
∣
x
1
:
t
)
∝
p
(
x
1
:
t
,
z
1
:
t
)
=
p
(
x
t
∣
z
1
:
t
,
x
1
:
t
−
1
)
p
(
z
1
:
t
,
x
1
:
t
−
1
)
=
p
(
x
t
∣
z
t
)
p
(
z
t
∣
x
1
:
t
−
1
,
z
1
:
t
−
1
)
p
(
x
1
:
t
−
1
,
z
1
:
t
−
1
)
=
p
(
x
t
∣
z
t
)
p
(
z
t
∣
z
t
−
1
)
p
(
x
1
:
t
−
1
,
z
1
:
t
−
1
)
∝
p
(
x
t
∣
z
t
)
p
(
z
t
∣
z
t
−
1
)
p
(
z
1
:
t
−
1
∣
x
1
:
t
−
1
)
\begin{aligned}{\color{blue}p(z_{1:t}|x_{1:t})}\propto p(x_{1:t},z_{1:t})&=p(x_t|z_{1:t},x_{1:t-1})p(z_{1:t},x_{1:t-1})\\ &=p(x_t|z_t)p(z_t|x_{1:t-1},z_{1:t-1})p(x_{1:t-1},z_{1:t-1})\\ &=p(x_t|z_t)p(z_t|z_{t-1})p(x_{1:t-1},z_{1:t-1})\\ &\propto p(x_t|z_t)p(z_t|z_{t-1})\color{blue}p(z_{1:t-1}|x_{1:t-1}) \end{aligned}
p(z1:t∣x1:t)∝p(x1:t,z1:t)=p(xt∣z1:t,x1:t−1)p(z1:t,x1:t−1)=p(xt∣zt)p(zt∣x1:t−1,z1:t−1)p(x1:t−1,z1:t−1)=p(xt∣zt)p(zt∣zt−1)p(x1:t−1,z1:t−1)∝p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1: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(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:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1) 所以有:
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
{\color{blue}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})\color{blue}p(z_{1:t-1}|x_{1:t-1})}{q(z_t|z_{1:t-1},x_{1:t})\color{blue}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})}\color{blue}w_{t-1}^i
wti∝q(z1:t∣x1:t)p(z1:t∣x1:t)∝q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)=q(zt∣z1:t−1,x1:t)p(xt∣zt)p(zt∣zt−1)wt−1i
得到计算权重的的步骤:
- t − 1 t-1 t−1 时刻,采样完成并计算得到权重
- t t t 时刻,根据 q ( z t ∣ z 1 : t − 1 , x 1 : t ) q(z_t|z_{1:t-1},x_{1:t}) q(zt∣z1:t−1,x1:t) 进行采样得到 z t i z_t^i zti,然后计算得到 N N N 个权重
- 最后对权重归一化
SIS 算法会出现权值退化的情况,在一定时间后,可能会出现大部分权重很小,极少数较大,这是高维空间容易出现的情况,解决方法:
- 重采样,以权重作为概率分布,重新在已经采样的样本中采样,然所有样本赋予相同权重。这个方法的思路是将权重作为概率分布,然后得到累积密度函数,在累积密度上取点(阶梯函数)
- 选择合适的提议分布, 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(zt∣z1:t−1,x1:t)=p(zt∣zt−1),即:直接选择其状态转移概率分布,粒子 z t i ∼ p ( z t ∣ z t − 1 i ) z^{i}_t\sim p(z_t|z^{i}_{t-1}) zti∼p(zt∣zt−1i),这也称为生成与测试方法: w t i ∝ p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) p ( z t ∣ z t − 1 ) w t − 1 i = p ( x t ∣ z t ) w t − 1 i w_t^i\propto\frac{p(x_t|z_t)\cancel{p(z_t|z_{t-1})}}{\cancel{p(z_t|z_{t-1})}}{\color{blue}w_{t-1}^i }=p(x_t|z_t){\color{blue}w_{t-1}^i } wti∝p(zt∣zt−1) p(xt∣zt)p(zt∣zt−1) wt−1i=p(xt∣zt)wt−1i
采用重采样的 SIS 算法就是基本的粒子滤波算法。若选择上述提议分布,则称之为 SIR 算法。
参考文献
【1】粒子滤波
【2】粒子滤波算法
【3】Particle Filter Tutorial 粒子滤波:从推导到应用(四)
【4】粒子滤波(Particle filter)算法简介及MATLAB实现
【5】Particle Filter Tutorial 粒子滤波:从推导到应用(一)到( 四 )