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

我们希望应用 Monte Carlo 方法来进行采样,对于一个概率分布,如果我们希望计算依这个分布的某个函数 13.粒子滤波 - 图1#card=math&code=f%28z%29#crop=0&crop=0&crop=1&crop=1&id=C3CyX&originHeight=26&originWidth=38&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 的期望,可以利用某种抽样方法,在这个概率分布中抽取 13.粒子滤波 - 图2 个样本,则 13.粒子滤波 - 图3%5D%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits%7Bi%3D1%7D%5ENf(z_i)#card=math&code=%5Cmathbb%7BE%7D%5Bf%28z%29%5D%5Csimeq%5Cfrac%7B1%7D%7BN%7D%5Csum%5Climits%7Bi%3D1%7D%5ENf%28z_i%29#crop=0&crop=0&crop=1&crop=1&id=VJ1ZW&originHeight=66&originWidth=199&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)。但是如果这个概率十分复杂,那么采样比较困难。对于复杂的概率分布,我们可以通过一个简单的概率分布 13.粒子滤波 - 图4#card=math&code=q%28z%29#crop=0&crop=0&crop=1&crop=1&id=QrK9m&originHeight=26&originWidth=36&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 作为桥梁(重要值采样):

13.粒子滤波 - 图5%5D%3D%5Cintzf(z)p(z)dz%3D%5Cint_zf(z)%5Cfrac%7Bp(z)%7D%7Bq(z)%7Dq(z)dz%3D%5Csum%5Climits%7Bi%3D1%7D%5ENf(zi)%5Cfrac%7Bp(z_i)%7D%7Bq(z_i)%7D%0A#card=math&code=%5Cmathbb%7BE%7D%5Bf%28z%29%5D%3D%5Cint_zf%28z%29p%28z%29dz%3D%5Cint_zf%28z%29%5Cfrac%7Bp%28z%29%7D%7Bq%28z%29%7Dq%28z%29dz%3D%5Csum%5Climits%7Bi%3D1%7D%5ENf%28z_i%29%5Cfrac%7Bp%28z_i%29%7D%7Bq%28z_i%29%7D%0A#crop=0&crop=0&crop=1&crop=1&id=s9MlC&originHeight=66&originWidth=558&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

于是直接通过对 13.粒子滤波 - 图6#card=math&code=q%28z%29#crop=0&crop=0&crop=1&crop=1&id=MWNDn&originHeight=26&originWidth=36&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 采样,然后对每一个采样的样本应用权重就得到了期望的近似,当然为了概率分布的特性,我们需要对权重进行归一化。

在滤波问题中,需要求解 13.粒子滤波 - 图7#card=math&code=p%28zt%7Cx%7B1%3At%7D%29#crop=0&crop=0&crop=1&crop=1&id=WeRVh&originHeight=26&originWidth=82&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=),其权重为:

13.粒子滤波 - 图8%7D%7Bq(zt%5Ei%7Cx%7B1%3At%7D)%7D%2Ci%3D1%2C2%2C%5Ccdots%2CN%0A#card=math&code=wt%5Ei%3D%5Cfrac%7Bp%28z_t%5Ei%7Cx%7B1%3At%7D%29%7D%7Bq%28zt%5Ei%7Cx%7B1%3At%7D%29%7D%2Ci%3D1%2C2%2C%5Ccdots%2CN%0A#crop=0&crop=0&crop=1&crop=1&id=Ufe1A&originHeight=62&originWidth=278&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

于是在每一个时刻 13.粒子滤波 - 图9,都需要采样 13.粒子滤波 - 图10 个点,但是即使采样了这么多点,分子上面的那一项也十分难求,于是希望找到一个关于权重的递推公式。为了解决这个问题,引入序列重要性采样(SIS)。

SIS

在 SIS 中,解决的问题是 13.粒子滤波 - 图11#card=math&code=p%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29#crop=0&crop=0&crop=1&crop=1&id=eCAGw&originHeight=26&originWidth=93&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)。

13.粒子滤波 - 图12%7D%7Bq(z%7B1%3At%7D%7Cx%7B1%3At%7D)%7D%0A#card=math&code=wt%5Ei%5Cpropto%5Cfrac%7Bp%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29%7D%7Bq%28z%7B1%3At%7D%7Cx_%7B1%3At%7D%29%7D%0A#crop=0&crop=0&crop=1&crop=1&id=wTL3E&originHeight=59&originWidth=150&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

根据 LDS 中的推导:

13.粒子滤波 - 图13%5Cpropto%20p(x%7B1%3At%7D%2Cz%7B1%3At%7D)%26%3Dp(xt%7Cz%7B1%3At%7D%2Cx%7B1%3At-1%7D)p(z%7B1%3At%7D%2Cx%7B1%3At-1%7D)%5Cnonumber%5C%5C%0A%26%3Dp(x_t%7Cz_t)p(z_t%7Cx%7B1%3At-1%7D%2Cz%7B1%3At-1%7D)p(x%7B1%3At-1%7D%2Cz%7B1%3At-1%7D)%5Cnonumber%5C%5C%0A%26%3Dp(x_t%7Cz_t)p(z_t%7Cz%7Bt-1%7D)p(x%7B1%3At-1%7D%2Cz%7B1%3At-1%7D)%5Cnonumber%5C%5C%0A%26%5Cpropto%20p(xt%7Cz_t)p(z_t%7Cz%7Bt-1%7D)p(z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D)%0A%5Cend%7Balign%7D%0A#card=math&code=%5Cbegin%7Balign%7Dp%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29%5Cpropto%20p%28x%7B1%3At%7D%2Cz%7B1%3At%7D%29%26%3Dp%28xt%7Cz%7B1%3At%7D%2Cx%7B1%3At-1%7D%29p%28z%7B1%3At%7D%2Cx%7B1%3At-1%7D%29%5Cnonumber%5C%5C%0A%26%3Dp%28x_t%7Cz_t%29p%28z_t%7Cx%7B1%3At-1%7D%2Cz%7B1%3At-1%7D%29p%28x%7B1%3At-1%7D%2Cz%7B1%3At-1%7D%29%5Cnonumber%5C%5C%0A%26%3Dp%28x_t%7Cz_t%29p%28z_t%7Cz%7Bt-1%7D%29p%28x%7B1%3At-1%7D%2Cz%7B1%3At-1%7D%29%5Cnonumber%5C%5C%0A%26%5Cpropto%20p%28xt%7Cz_t%29p%28z_t%7Cz%7Bt-1%7D%29p%28z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D%29%0A%5Cend%7Balign%7D%0A#crop=0&crop=0&crop=1&crop=1&id=Kt53G&originHeight=113&originWidth=610&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

于是分子的递推式就得到了。对于提议分布的分母,可以取:

13.粒子滤波 - 图14%3Dq(zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D)q(z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D)%0A#card=math&code=q%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29%3Dq%28z_t%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D%29q%28z%7B1%3At-1%7D%7Cx_%7B1%3At-1%7D%29%0A#crop=0&crop=0&crop=1&crop=1&id=kP9LW&originHeight=26&originWidth=385&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

所以有:

13.粒子滤波 - 图15%7D%7Bq(z%7B1%3At%7D%7Cx%7B1%3At%7D)%7D%5Cpropto%20%5Cfrac%7Bp(xt%7Cz_t)p(z_t%7Cz%7Bt-1%7D)p(z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D)%7D%7Bq(zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D)q(z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D)%7D%3D%5Cfrac%7Bp(x_t%7Cz_t)p(z_t%7Cz%7Bt-1%7D)%7D%7Bq(zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D)%7Dw%7Bt-1%7D%5Ei%0A#card=math&code=wt%5Ei%5Cpropto%5Cfrac%7Bp%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29%7D%7Bq%28z%7B1%3At%7D%7Cx%7B1%3At%7D%29%7D%5Cpropto%20%5Cfrac%7Bp%28x_t%7Cz_t%29p%28z_t%7Cz%7Bt-1%7D%29p%28z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D%29%7D%7Bq%28zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D%29q%28z%7B1%3At-1%7D%7Cx%7B1%3At-1%7D%29%7D%3D%5Cfrac%7Bp%28x_t%7Cz_t%29p%28z_t%7Cz%7Bt-1%7D%29%7D%7Bq%28zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D%29%7Dw%7Bt-1%7D%5Ei%0A#crop=0&crop=0&crop=1&crop=1&id=d3qvX&originHeight=59&originWidth=702&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

我们得到的对权重的算法为:

  1. 13.粒子滤波 - 图16 时刻,采样完成并计算得到权重
  2. t 时刻,根据 13.粒子滤波 - 图17#card=math&code=q%28zt%7Cz%7B1%3At-1%7D%2Cx_%7B1%3At%7D%29#crop=0&crop=0&crop=1&crop=1&id=GCxhJ&originHeight=26&originWidth=137&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 进行采样得到 13.粒子滤波 - 图18。然后计算得到 13.粒子滤波 - 图19 个权重。
  3. 最后对权重归一化。

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

  1. 重采样,以权重作为概率分布,重新在已经采样的样本中采样,然后所有样本的权重相同,这个方法的思路是将权重作为概率分布,然后得到累积密度函数,在累积密度上取点(阶梯函数)。
  2. 选择一个合适的提议分布,13.粒子滤波 - 图20%3Dp(zt%7Cz%7Bt-1%7D)#card=math&code=q%28zt%7Cz%7B1%3At-1%7D%2Cx%7B1%3At%7D%29%3Dp%28z_t%7Cz%7Bt-1%7D%29#crop=0&crop=0&crop=1&crop=1&id=hvZrO&originHeight=26&originWidth=250&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=),于是就消掉了一项,并且采样的概率就是 13.粒子滤波 - 图21#card=math&code=p%28zt%7Cz%7Bt-1%7D%29#crop=0&crop=0&crop=1&crop=1&id=P2oFi&originHeight=26&originWidth=87&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=),这就叫做生成与测试方法。

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