15 线性动态系统——kalman filter
我们知道在概率图模型中,加入了time 的因素,就得到了Dynamic Model,实际上也就说我们通常所说的State Space Model。
- 如果状态是离散的,就是我们上一节提到了Hidden Markov Model (HMM);
- 如果状态是连续的,如果状态之间的关系是线性的,就是线性高斯模型Linear Dynamic System (Kalman Filter),或者说是Linear Gaussian Model;
- 如果状态之间的关系是Non-Linear 的或者Non-Gaussian (非线性高斯模型)的,那么也就是Particle Filter。
1 背景
1.1 Dynamic Model Introduction
第一类问题,Learning 问题,即为在已知观测序列
O
O
O 的情况下求解
P
(
π
∣
O
)
P(\pi|O)
P(π∣O) 。其中,模型可以描
述为
π
(
λ
,
A
,
B
)
\pi(\lambda,A,B)
π(λ,A,B)。代表性的就是Hidden Markov Model。
第二类问题就是Inference 问题,大致可以分为Decoding,Probability of Evidence,Filtering,Smoothing 和Prediction 五类问题。
1.2 Kalman Filtering: Linear Gaussian Model
卡曼滤波是线性高斯模型,分为:
- 线性
- 高斯
上图为其概率图模型,其中的传递关系与HMM类似,都是使用发射矩阵和转移矩阵表示的。
Filtering 问题就是求
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)
P(zt∣x1,x2,⋯,xt), 实际上就是一个 Marginal Posterior 问题。对于 Linear 关系,Linear 主要反映在相邻时刻的两个状态之间的转移关系,当前时刻的隐变量状态和观测状态之间的关系。描述如下所示:
z
t
=
A
⋅
z
t
−
1
+
B
+
ϵ
x
t
=
C
⋅
z
t
+
D
+
δ
\begin{array}{l} z_{t}=A \cdot z_{t-1}+B+\epsilon \\ x_{t}=C \cdot z_{t}+D+\delta \end{array}
zt=A⋅zt−1+B+ϵxt=C⋅zt+D+δ
z
t
,
z
t
−
1
z_{t}, z_{t-1}
zt,zt−1 和
x
t
,
z
t
x_{t}, z_{t}
xt,zt 之间体现了线性的关系。而
ϵ
,
δ
\epsilon, \delta
ϵ,δ 是符合 Gaussian Distribution 的 ,
ϵ
∼
N
(
0
,
Q
)
,
δ
∼
N
(
0
,
R
)
\epsilon \sim \mathcal{N}(0, Q), \delta \sim\mathcal{N}(0, R)
ϵ∼N(0,Q),δ∼N(0,R) 。所以,大家都明白了 Linear 和 Gaussian 都是从何而来的,所以 Kalman Filtering 被称为Linear Gaussian Model 更合适。
Filtering 是一类问题的总称,我们之前在 Hidden Markov Model 中有详细的讨论过。那么,我们回顾一下 Hidden Markov Model 的基本信息做一个对比。
H
M
M
:
λ
=
{
π
,
A
,
B
}
\mathrm{HMM}: \lambda=\{\pi, \mathcal{A}, \mathcal{B}\}
HMM:λ={π,A,B}
状态转移矩阵:
A
=
[
a
i
j
]
a
i
j
=
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
B
=
[
b
j
(
k
)
]
b
j
k
=
P
(
o
t
=
v
t
∣
i
t
=
q
j
)
\begin{array}{l} A=\left[a_{i j}\right] \quad a_{i j}=P\left(i_{t+1}=q_{j} | i_{t}=q_{i}\right) \\ B=\left[b_{j}(k)\right] \quad b_{j} k=P\left(o_{t}=v_{t} | i_{t}=q_{j}\right) \end{array}
A=[aij]aij=P(it+1=qj∣it=qi)B=[bj(k)]bjk=P(ot=vt∣it=qj)那么,对于 Kalman Filtering 来说,状态转移矩阵,发射概率,初始矩阵,模型参数我们可以做出类似的表达:
P
(
z
t
∣
z
t
−
1
)
∼
N
(
A
⋅
z
t
−
1
+
B
,
Q
)
P
(
x
t
∣
z
t
)
∼
N
(
C
⋅
z
t
+
D
,
R
)
z
1
∼
N
(
μ
1
,
Σ
1
)
θ
=
{
A
,
B
,
C
,
D
,
Q
,
R
,
μ
1
,
Σ
1
}
\begin{array}{l} P\left(z_{t} | z_{t-1}\right) \sim \mathcal{N}\left(A \cdot z_{t-1}+B, Q\right) \\ P\left(x_{t} | z_{t}\right) \sim \mathcal{N}\left(C \cdot z_{t}+D, R\right) \\ z_{1} \sim \mathcal{N}\left(\mu_{1}, \Sigma_{1}\right) \\ \theta=\left\{A, B, C, D, Q, R, \mu_{1}, \Sigma_{1}\right\} \end{array}
P(zt∣zt−1)∼N(A⋅zt−1+B,Q)P(xt∣zt)∼N(C⋅zt+D,R)z1∼N(μ1,Σ1)θ={A,B,C,D,Q,R,μ1,Σ1} 在这一小节中,我们已经了解了基础的相关概念,那下一小节中,我们将描述了 Filtering 问题的建模和求解。
2 建模和求解
我们这一讲kalman filter最关心的就是filtering问题,也就是求这个边缘后验概率
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)
P(zt∣x1,x2,⋯,xt)。Filtering 问题公式化的表达即为求
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)
P(zt∣x1,x2,⋯,xt), 是一种 On-Line Learning 的思路,随着越来越多的数据不断的被观测到,隐藏状态得到不断的更新。也就是在观察变量序列
{
x
1
,
x
2
,
⋯
,
x
t
}
\left\{x_{1}, x_{2}, \cdots, x_{t}\right\}
{x1,x2,⋯,xt} 下,求得隐变量状态
z
t
z_{t}
zt 的分布。模型表达为如下所示:
图 1: 模型基本拓扑结构
首先我们回顾一下前向算法的求解思路。在这个算法中首先定义了中间变量为:
α
t
(
i
)
=
P
(
x
1
,
x
2
,
⋯
,
x
t
,
z
t
=
q
i
)
\alpha_{t}(i)=P\left(x_{1}, x_{2}, \cdots, x_{t}, z_{t}=q_{i}\right)
αt(i)=P(x1,x2,⋯,xt,zt=qi)而我们下一步则是要寻找
α
t
+
1
(
i
)
\alpha_{t+1}(i)
αt+1(i) 和
α
t
(
i
)
\alpha_{t}(i)
αt(i) 之间的关系。所以,可以按
α
1
(
i
)
,
α
2
(
i
)
,
⋯
,
α
t
(
i
)
\alpha_{1}(i), \alpha_{2}(i), \cdots, \alpha_{t}(i)
α1(i),α2(i),⋯,αt(i) 的顺序依次推断得到
α
t
(
i
)
\alpha_{t}(i)
αt(i), 从而得到根据当前的模型推断出观测序列的分布
P
(
O
∣
λ
)
P(O | \lambda)
P(O∣λ)
2.1 Filtering 问题思路
我们还是采用的前向算法的思路:
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
=
P
(
z
t
,
x
1
,
x
2
,
⋯
,
x
t
)
P
(
x
1
,
x
2
,
⋯
,
x
t
)
∝
P
(
z
t
,
x
1
,
x
2
,
⋯
,
x
t
)
=
P
(
x
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
,
z
t
)
⏟
P
(
x
t
∣
z
t
)
P
(
x
1
,
x
2
,
⋯
,
x
t
−
1
,
z
t
)
=
P
(
x
t
∣
z
t
)
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
⏟
prediction
P
(
x
1
,
x
2
,
⋯
,
x
t
−
1
)
⏟
const
∝
P
(
x
t
∣
z
t
)
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
\begin{aligned} P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right) &=\frac{P\left(z_{t}, x_{1}, x_{2}, \cdots, x_{t}\right)}{P\left(x_{1}, x_{2}, \cdots, x_{t}\right)} \\ & \propto P\left(z_{t}, x_{1}, x_{2}, \cdots, x_{t}\right) \\ &=\underbrace{P\left(x_{t} | x_{1}, x_{2}, \cdots, x_{t-1}, z_{t}\right)}_{P\left(x_{t} | z_{t}\right)} P\left(x_{1}, x_{2}, \cdots, x_{t-1}, z_{t}\right) \\ &=P\left(x_{t} | z_{t}\right) \underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{\text {prediction}} \underbrace{P\left(x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{\text {const}} \\ & \propto P\left(x_{t} | z_{t}\right) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \end{aligned}
P(zt∣x1,x2,⋯,xt)=P(x1,x2,⋯,xt)P(zt,x1,x2,⋯,xt)∝P(zt,x1,x2,⋯,xt)=P(xt∣zt)
P(xt∣x1,x2,⋯,xt−1,zt)P(x1,x2,⋯,xt−1,zt)=P(xt∣zt)prediction
P(zt∣x1,x2,⋯,xt−1)const
P(x1,x2,⋯,xt−1)∝P(xt∣zt)P(zt∣x1,x2,⋯,xt−1)很显然通过如上的推导,我们将 Filtering 问题回归到了一个 Prediction 的问题。那么这个 Pre-
diction 的问题,如何进一步求解此? 下一步,我们对 Prediction 的部分进何推导。
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
=
∫
z
t
−
1
P
(
z
t
,
z
t
−
1
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
d
z
t
−
1
=
∫
z
t
−
1
P
(
z
t
∣
z
t
−
1
,
x
1
,
x
2
,
⋯
,
x
t
−
1
)
⏟
P
(
z
t
∣
z
t
−
1
)
P
(
z
t
−
1
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
⏟
d
z
t
−
1
\begin{aligned} P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) &=\int_{z_{t-1}} P\left(z_{t}, z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) d z_{t-1} \\ &=\int_{z_{t-1}} \underbrace{P\left(z_{t} | z_{t-1}, x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{P\left(z_{t} | z_{t-1}\right)} \underbrace{P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right)} d z_{t-1} \end{aligned}
P(zt∣x1,x2,⋯,xt−1)=∫zt−1P(zt,zt−1∣x1,x2,⋯,xt−1)dzt−1=∫zt−1P(zt∣zt−1)
P(zt∣zt−1,x1,x2,⋯,xt−1)
P(zt−1∣x1,x2,⋯,xt−1)dzt−1通知上述的推导,我们又推到了一个 Filtering 的问题,那么这样我们形成了一个递归的表达。因此,我们可认为在一个 Filtering 问题中,我们通过一个 Prediction 问题,来构建形成了一个回归。
那么,下面我将详细的说明一下求解的过程:
t
=
1
p
(
z
1
∣
x
1
)
update
p
(
z
2
∣
x
1
)
prediction
t
=
2
p
(
z
2
∣
x
1
,
x
2
)
update
p
(
z
3
∣
x
1
,
x
2
)
prediction
⋯
⋯
t
=
T
{
P
(
z
N
∣
x
1
,
⋯
,
x
T
)
update
p
(
z
T
+
1
∣
x
1
,
⋯
,
x
T
)
prediction
\begin{array}{l} t=1 \\p\left(z_{1} | x_{1}\right) \text { update}\\p\left(z_{2} | x_{1}\right) \text { prediction }\\ t=2 \\ p\left(z_{2} | x_{1},x_{2}\right) \text { update} \\ p\left(z_{3} | x_{1}, x_{2}\right) \text { prediction } \\ \cdots \cdots\\ t=T\left\{\begin{array}{ll} P\left(z_{N} | x_{1}, \cdots, x_{T}\right) & \text { update } \\ p\left(z_{T+1} | x_{1}, \cdots, x_{T}\right) & \text { prediction} \end{array}\right. \end{array}
t=1p(z1∣x1) updatep(z2∣x1) prediction t=2p(z2∣x1,x2) updatep(z3∣x1,x2) prediction ⋯⋯t=T{P(zN∣x1,⋯,xT)p(zT+1∣x1,⋯,xT) update prediction很显然,以上是求解步骤,是一个online的过程,我们可以不断的往里面添加数据来更新隐变量状态
z
t
z_{t}
zt。
一个高斯分布的条件概率分布和边缘概率分布都是高斯分布,而且两个高斯分布的联合概率分布也是高斯分布,所以它的性质非常好,将已知信息全部代入进行求解,可以得到闭式解。
2.2 Filtering 问题求解具体分析
首先,我们需要明确一个问题,Gaussian Distribution 是一个具有非常好的性质的自共轭分布。通俗的讲就是,Gaussian 分布的边缘分布,条件分布,联合概率分布等都是符合高斯分布的。首先,我先回忆一下在Math Basis 那小节中,总结的线性高斯模型中,已知条件高斯分布,求变量高斯分布的公式:
(
1
)
:
P
(
X
)
=
N
(
X
∣
μ
,
Λ
−
1
)
(
2
)
:
P
(
Y
∣
X
)
=
N
(
X
∣
A
X
+
b
,
L
−
1
)
(
3
)
:
P
(
Y
)
=
N
(
Y
∣
A
X
+
b
,
L
−
1
+
A
−
1
Λ
A
)
(
4
)
:
P
(
X
∣
Y
)
=
N
(
Σ
{
A
T
L
(
y
−
b
)
+
Λ
μ
}
,
Σ
)
Σ
=
(
Λ
+
A
T
L
A
)
−
1
\begin{array}{l} (1):P(X)=\mathcal{N}\left(X | \mu, \Lambda^{-1}\right) \\ (2):P(Y | X)=\mathcal{N}\left(X | A X+b, L^{-1}\right) \\ (3):P(Y)=\mathcal{N}\left(Y | A X+b, L^{-1}+A^{-1} \Lambda A\right) \\ (4):P(X | Y)=\mathcal{N}\left(\Sigma\left\{A^{T} L(y-b)+\Lambda \mu\right\}, \Sigma\right) \quad \Sigma=\left(\Lambda+A^{T} L A\right)^{-1} \end{array}
(1):P(X)=N(X∣μ,Λ−1)(2):P(Y∣X)=N(X∣AX+b,L−1)(3):P(Y)=N(Y∣AX+b,L−1+A−1ΛA)(4):P(X∣Y)=N(Σ{ATL(y−b)+Λμ},Σ)Σ=(Λ+ATLA)−1从上小节中我们分析了 Filtering 问题的推导过程,我们可以看到 Filtering 问题可以被大致分成两个部分,也就是 Prediction 和 Update 两个部分。上一小节中我描述了大致的求解思路,那么这一小节我们将详细的描述怎么计算。
2.2.1 Prediction
预测问题被我们描述为,
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)
P(zt∣x1,x2,⋯,xt−1), 那下面我们来进行分析怎么求。
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
=
∫
z
t
−
1
P
(
z
t
∣
z
t
−
1
)
P
(
z
t
−
1
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
d
z
t
−
1
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)=\int_{z_{t-1}} P\left(z_{t} | z_{t-1}\right) P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) d z_{t-1}
P(zt∣x1,x2,⋯,xt−1)=∫zt−1P(zt∣zt−1)P(zt−1∣x1,x2,⋯,xt−1)dzt−1根据 Gaussian Distribution 的自共轭性(两个高斯分布相乘仍是高斯分布),所以
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)
P(zt∣x1,x2,⋯,xt−1) 一定是一个 Gaussian Distribution。事实上
x
1
,
x
2
,
⋯
,
x
t
−
1
x_{1}, x_{2}, \cdots, x_{t-1}
x1,x2,⋯,xt−1 中所有的信息都是已知的。为了方便表达
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
∼
P
(
z
t
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \sim P\left(z_{t}\right)
P(zt∣x1,x2,⋯,xt−1)∼P(zt)那么,我们令
- 第 t − 1 t-1 t−1 时刻: P ( z t − 1 ∣ x 1 , x 2 , ⋯ , x t − 1 ) ∼ N ( μ t − 1 , Σ t − 1 ) P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \sim \mathcal{N}\left(\mu_{t-1}, \Sigma_{t-1}\right) P(zt−1∣x1,x2,⋯,xt−1)∼N(μt−1,Σt−1)
- t t t 时刻的分布 P ( z t ∣ x 1 , x 2 , ⋯ , x t − 1 ) ∼ N ( μ t ∗ , Σ t ∗ ) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \sim \mathcal{N}\left(\mu_{t}^{*}, \Sigma_{t}^{*}\right) P(zt∣x1,x2,⋯,xt−1)∼N(μt∗,Σt∗) 。
并且, 根据 Gaussian Distribution 的自共轭性,我们可以令
P
(
z
t
∣
z
t
−
1
)
∼
N
(
z
t
∣
A
z
t
−
1
+
B
,
Q
)
P\left(z_{t} | z_{t-1}\right) \sim \mathcal{N}\left(z_{t} | A z_{t-1}+B, Q\right)
P(zt∣zt−1)∼N(zt∣Azt−1+B,Q) 。把
P
(
z
t
−
1
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right)
P(zt−1∣x1,x2,⋯,xt−1)看作
P
(
x
)
P(x)
P(x),把
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)
P(zt∣x1,x2,⋯,xt) 看作
P
(
y
)
P(y)
P(y) ,因此为
P
(
z
t
∣
z
t
−
1
)
P\left(z_{t} | z_{t-1}\right)
P(zt∣zt−1) 为
P
(
y
∣
x
)
P(y|x)
P(y∣x)。令
x
=
z
t
−
1
,
y
=
z
t
x=z_{t-1}, y=z_{t}
x=zt−1,y=zt, 代公式
(
1
)
−
(
4
)
(1)-(4)
(1)−(4), 可以计算出:
{ μ t ∗ = A μ t − 1 + B Σ t ∗ = Q + A Σ t − 1 A T \left\{\begin{array}{l} \mu_{t}^{*}=A \mu_{t-1}+B \\ \Sigma_{t}^{*}=Q+A \Sigma_{t-1} A^{T} \end{array}\right. {μt∗=Aμt−1+BΣt∗=Q+AΣt−1AT
2.2.2 Update
然而,对于 update 问题,我们的目标是求解:
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
∝
P
(
x
t
∣
z
t
)
⋅
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right) \propto P\left(x_{t} | z_{t}\right) \cdot P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)
P(zt∣x1,x2,⋯,xt)∝P(xt∣zt)⋅P(zt∣x1,x2,⋯,xt−1)在这个问题中
x
1
,
x
2
,
⋯
,
x
t
−
1
x_{1}, x_{2}, \cdots, x_{t-1}
x1,x2,⋯,xt−1 都是已知的,而
x
t
x_{t}
xt 是未知的。所以上式可以被改写为:
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
)
⏟
P
(
X
∣
Y
)
∝
P
(
x
t
∣
z
t
)
⏟
P
(
Y
∣
X
)
⋅
P
(
z
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
⏟
P
(
X
)
\underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)}_{P(X | Y)} \propto \underbrace{P\left(x_{t} | z_{t}\right)}_{P(Y | X)} \cdot \underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{P(X)}
P(X∣Y)
P(zt∣x1,x2,⋯,xt)∝P(Y∣X)
P(xt∣zt)⋅P(X)
P(zt∣x1,x2,⋯,xt−1)同样利用 Guassian Distribution 的自共轭性,我们可以将公式改为:
N
(
μ
t
,
Σ
t
)
∝
N
(
x
t
∣
C
z
t
+
D
,
R
)
⋅
N
(
μ
t
∗
,
Σ
t
∗
)
\mathcal{N}\left(\mu_{t}, \Sigma_{t}\right) \propto \mathcal{N}\left(x_{t} | C z_{t}+D, R\right) \cdot \mathcal{N}\left(\mu_{t}^{*}, \Sigma_{t}^{*}\right)
N(μt,Σt)∝N(xt∣Czt+D,R)⋅N(μt∗,Σt∗)所以,利用公式 (1,2,4) 我们可以求解出
μ
t
\mu_{t}
μt 和
Σ
t
\Sigma_{t}
Σt 根据公式
(
4
)
(4)
(4), 我们其实可以看到这个求解过程实际上非常的复杂,实际上也是一个迭代的过程。我们就不再做过多的描述了 (实际上把公式一代入,把符号换一下就可以)。 所以将第一小节和第二小节结合起来一下,第一小节给出了求解的主体思路,第二小节中给出了
每一步具体如何实现。并且利用了 Gaussian Linear Model 的计算公式来进行求解。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cengjing12/article/details/106601119
————————————————
版权声明:本文为CSDN博主「AI路上的小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cengjing12/article/details/106601119