一、引言
下面我们引用文献【1】中的一段话作为本文的开始:
想象你在黄昏时分看着一只小鸟飞行穿过浓密的丛林,你只能隐隐约约、断断续续地瞥见小鸟运动的闪现。你试图努力地猜测小鸟在哪里以及下一时刻它会出现在哪里,才不至于失去它的行踪。或者再想象你是二战中的一名雷达操作员,正在跟踪一个微弱的游移目标,这个目标每隔10秒钟在屏幕上闪烁一次。或者回到更远的从前,想象你是开普勒,正试图根据一组通过不规则和不准确的测量间隔得到的非常不精确的角度观测值来重新构造行星的运动轨迹。在所有这些情况下,你都试图根据随对问变化并且带有噪声的观察数据去估计物理系统的状态(例如位置、速度等等)。这个问题可以被形式化表示为时序概率模型上的推理,模型中的转移模型描述了运动的物理本质,而传感器模型则描述了测量过程。为解决这类问题,人们发展出来了一种特殊的表示方法和推理算法——卡尔曼滤波。
二、基本概念
回想一下HMM的基本模型(如下图所示),其中涂有阴影的圆圈(yt-2, yt-1, yt)相当于是观测变量,空白圆圈(xt-2, xt-1, xt)相当于是隐变量。这其实揭示了卡尔曼滤波与HMM之间拥有很深的渊源。回到刚刚提及的那几个例子,你所观测到的物体状态(例如雷达中目标的位置或者速度)相当于是对其真实状态的一种估计(因为观测的过程中必然存在噪声),用数学语言来表述就是P(yt | xt),这就是模型中的测量模型或测量概率(Measurement Probability)。另外一方面,物体当前的(真实)状态应该与其上一个观测状态相关,即存在这样的一个分布P(xt | xt-1),这就是模型中的转移模型或转移概率(Transition Probability)。当然,HMM中隐变量必须都是离散的,观测变量并无特殊要求。
而从信号处理的角度来讲,滤波是从混合在一起的诸多信号中提取出所需信号的过程[2]。例如,我们有一组含有噪声的行星运行轨迹,我们希望滤除其中的噪声,估计行星的真实运动轨迹,这一过程就是滤波。如果从机器学习和数据挖掘的角度来说,滤波是一个理性智能体为了把握当前状态以便进行理性决策所采取的行动[1]。比如,前两天我们没出门,但是我们可以从房间里观察路上的行人有没有打伞(观测状态)来估计前两天有没有下雨(真实状态)。基于这些情况,现在我们要来决策今天(是否会有雨以及)外出是否需要打伞,这个过程就是滤波。读者应该注意把握上面两个定义的统一性。
所谓估计就是根据测量得出的与状态X(t) 有关的数据Y(t) = h[X(t)] + V(t) 解算出X(t)的计算值,其中随机向量V(t) 为测量误差,称为X的估计,Y 称为 X 的测量。因为是根据Y(t) 确定的.所以 是Y(t) 的函数。若 是Y 的线性函数,则 称作 X 的线性估计。设在 [t0, t1] 时间段内的测量为Y,相应的估计为,则
- 当t = t1 时, 称为X(t)的估计;
- 当t > t1 肘,称为X(t)的预测;
- 当t < t1 时, 称为X(t)的平滑。
最优估计是指某一指标函数达到最值时的估计。卡尔曼滤波就是一种线性最优滤波器。
因为后面会用到,这里我们补充一下关于协方差矩阵的概念。
设 n 维随机变量(X1, X2, …,Xn)的2阶混合中心距
σij = cov(Xi, Xj) = E[(Xi-E(Xi))(Xj-E(Xj))], (i,j = 1, 2, …, n)
都存在,则称矩阵