前言
上一篇【机器学习】粒子滤波原理推导(一),我们就如何去求解粒子滤波Filter问题的期望,得到了各种递推式。但是会产生权值退化的问题。这篇文章就解释一下什么是权值退化,又该如何去解决
数学基础:【概率论与数理统计知识复习-哔哩哔哩】
权值退化
我们知道,对于每个时刻,我们采样n个样本,那么就会的到n个样本值和对应的权重值。那么对于所有的时刻,就会有
t
=
1
:
w
1
1
,
w
1
2
,
w
1
3
,
⋯
,
w
1
n
t
=
2
:
w
2
1
,
w
2
2
,
w
2
3
,
⋯
,
w
2
n
t
=
3
:
w
3
1
,
w
3
2
,
w
3
3
,
⋯
,
w
3
n
⋮
t
=
T
:
w
T
1
,
w
T
2
,
w
T
3
,
⋯
,
w
T
n
\begin{equation}\begin{aligned} &t=1: \\&&w_1^1,w_1^2,w_1^3,\cdots,w_1^n \\&t=2: \\&&w_2^1,w_2^2,w_2^3,\cdots,w_2^n \\&t=3: \\&&w_3^1,w_3^2,w_3^3,\cdots,w_3^n \\&\vdots \\&t=T: \\&&w_T^1,w_T^2,w_T^3,\cdots,w_T^n \nonumber \end{aligned}\end{equation}
t=1:t=2:t=3:⋮t=T:w11,w12,w13,⋯,w1nw21,w22,w23,⋯,w2nw31,w32,w33,⋯,w3nwT1,wT2,wT3,⋯,wTn
我们前面计算得到过权重的递推式
w
t
∝
P
(
x
t
∣
z
t
)
w
t
−
1
w_t\propto P(x_t|z_t)w_{t-1}
wt∝P(xt∣zt)wt−1
我们在应用的过程中,会产生权值退化的问题,什么意思呢?假如一开始,我们的权重初始全都是
1
n
\frac{1}{n}
n1,即对于时刻1,假设我们抽样得到0~9数值,得到权值都为0.1
也许在时刻i的时候,就会得到
就是会出现一家独大的情况。这是我们不想看到的,那么,怎么样才可以解决这个问题呢?
重采样
一般情况下,我们就是利用重采样技巧。
所谓重采样,就是根据采样出来的样本和权重值,在这个基础上,重新采样。
简单起见,假如现在我们只采样三次。那么就得到样本0,1,2和对应的权重0.1,0.2,0.7
一种很朴素的想法就是,我们就将这些权重值作为概率本身,对其进行抽样,抽样出哪一个就取出哪一个值
比如图中,我们就以这样的布局去转轮盘,转到哪一个就算是取对应的样本值。这种方法是很合理的。因为如果它的权重大,那么我们就认为它更加的接近原始分布 P ( z 1 : t ∣ x 1 : t ) P(z_{1:t}|x_{1:t}) P(z1:t∣x1:t)。
最后我们不断采样出新的样本值,将重采样的样本值作为我们新的样本值。旧的则扔掉。然后对于每一个样本值的权值,我们都设为 1 n \frac{1}{n} n1,n为重采样的次数。
这仅仅是重采样的一种较为简单的形式。重采样的方法却不止这一种。有一些改进版能够解决掉原始版本的一些问题。下面我们介绍一种较为常见的重采样技巧。
系统重采样
一般情况下,我们会把权重归一化,然后按照概率分布函数一样,权重依次累加,比如我们现在有权重w1,w2,w3。那么
如果3个w的值分别等于0.1,0.2,0.7。那么依次累加得到的结果就是【0.1,0.3,1】。
下面是系统重采样的流程
①归一化权重,令所有的权重的和为1.
②计算权重的累计函数值,记作 c c c
③将(0,1)区间分为N份(N为重采样的次数)。得到n个区间,将所有临界点记作数组 d d d
④从(0, 1 N \frac{1}{N} N1)均匀分布中随机抽样出一个值。记作 a a a
⑤计算 s = a + d [ i ] s=a+d[i] s=a+d[i]( i i i为数组d的一个区间的索引),我们迭代数组d的所有区间,得到数组s。并初始化j=0
⑥for i in N:
如果s[ i ] > c [ j ]:j++
否则将索引 j 保存起来
⑦迭代完N次之后,根据所有的索引 j 取出对应位置的粒子的值。就是我们重采样之后的样本。
值得注意的是,重采样之后,每一个粒子对应的权重都是 1 N \frac{1}{N} N1,我们再看看我们之前提到的权重递推式 w t ∝ P ( x t ∣ z t ) w t − 1 w_t\propto P(x_t|z_t)w_{t-1} wt∝P(xt∣zt)wt−1,不难发现,如果上一时刻所有的权重都相同了,那么计算当前时刻的权重就没有必要带上 w t − 1 w_{t-1} wt−1,因为当前时刻的权重我们只是按照权重大小重采样,所以所有的权重都除掉系数 w t − 1 w_{t-1} wt−1是不变的。所以 w t ∝ P ( x t ∣ z t ) w_t\propto P(x_t|z_t) wt∝P(xt∣zt)
粒子滤波实现流程
当 t = 1 t=1 t=1时
①在均匀分布中随机初始化粒子群,并且令当前时刻的权重w= 1 N \frac{1}{N} N1(N为采样次数)。
当 t ≥ 2 t\ge2 t≥2
②从 P ( z t ∣ z t − 1 ) P(z_t|z_{t-1}) P(zt∣zt−1)中抽样出粒子群记作 p i , i ∈ 1 , 2 , ⋯ , N p_{i},i\in1,2,\cdots,N pi,i∈1,2,⋯,N
③根据公式 w t = P ( x t ∣ z t ) w_t=P(x_t|z_t) wt=P(xt∣zt)当前时刻的权值。并归一化。
④重采样得到新的粒子群,求出粒子群的均值,为当前时刻的预测值。
⑤迭代②~④步骤,得到所有的均值。
结束
到此,粒子滤波的推导部分就全部完成了。推导过程并不严谨,如有问题,还望指出。阿里嘎多。