Kalman 滤波根据线性高斯模型可以求得解析解,但是在非线性,非高斯的情况,是无法得到解析解的,对这类一般的情况,我们叫做粒子滤波,我们需要求得概率分布,需要采用采样的方式。
我们希望应用 Monte Carlo 方法来进行采样,对于一个概率分布,如果我们希望计算依这个分布的某个函数 $f(z)$ 的期望,可以利用某种抽样方法,在这个概率分布中抽取 $N$ 个样本,则 $\mathbb{E}[f(z)]\simeq\frac{1}{N}\sum\limits_{i=1}^Nf(z_i)$。但是如果这个概率十分复杂,那么采样比较困难。对于复杂的概率分布,我们可以通过一个简单的概率分布 $q(z)$ 作为桥梁(重要值采样):
$$
\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)}
$$
于是直接通过对 $q(z)$ 采样,然后对每一个采样的样本应用权重就得到了期望的近似,当然为了概率分布的特性,我们需要对权重进行归一化。
在滤波问题中,需要求解 $p(z_t|x_{1:t})$,其权重为:
$$
w_t^i=\frac{p(z_t^i|x_{1:t})}{q(z_t^i|x_{1:t})},i=1,2,\cdots,N
$$
于是在每一个时刻 $t$,都需要采样 $N$ 个点,但是即使采样了这么多点,分子上面的那一项也十分难求,于是希望找到一个关于权重的递推公式。为了解决这个问题,引入序列重要性采样(SIS)。
在 SIS 中,解决的问题是 $p(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})}
$$
根据 LDS 中的推导:
$$
\begin{align}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})\nonumber\
&=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})\nonumber\
&=p(x_t|z_t)p(z_t|z_{t-1})p(x_{1:t-1},z_{1:t-1})\nonumber\
&\propto p(x_t|z_t)p(z_t|z_{t-1})p(z_{1:t-1}|x_{1:t-1})
\end{align}
$$
于是分子的递推式就得到了。对于提议分布的分母,可以取:
$$
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})
$$
所以有:
$$
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
$$
我们得到的对权重的算法为:
-
$t-1$ 时刻,采样完成并计算得到权重
- t 时刻,根据 $q(z_t|z_{1:t-1},x_{1:t})$ 进行采样得到 $z_t^i$。然后计算得到 $N$ 个权重。
- 最后对权重归一化。
SIS 算法会出现权值退化的情况,在一定时间后,可能会出现大部分权重都逼近0的情况,这是由于空间维度越来越高,需要的样本也越来越多。解决这个问题的方法有:
- 重采样,以权重作为概率分布,重新在已经采样的样本中采样,然后所有样本的权重相同,这个方法的思路是将权重作为概率分布,然后得到累积密度函数,在累积密度上取点(阶梯函数)。
- 选择一个合适的提议分布,$q(z_t|z_{1:t-1},x_{1:t})=p(z_t|z_{t-1})$,于是就消掉了一项,并且采样的概率就是 $p(z_t|z_{t-1})$,这就叫做生成与测试方法。
采用重采样的 SIS 算法就是基本的粒子滤波算法。如果像上面那样选择提议分布,这个算法叫做 SIR 算法。