文章以最小二乘法为切入点展开讨论卡尔曼滤波。卡尔曼滤波与最小二乘法只有很小的区别。
经典最小二乘法解决的问题: 考虑下面的 个测量:
每次测量都有自己的误差. 不可观测, 。 是适当维度的向量。最小二乘法通过最小化下面的式子来获得对 最有可能的估计:
这产生了一个问题,那就是每次测量误差都不一样,不能一概而论,如果每次测量都同样的权重。会导致结果被某些误差比较大的数据带偏。(其实多数情况下误差分布也是不知道的),所以更通用的形式是带权最小二乘法:
其中:
考虑一个有点复杂的问题:
两架飞机 我们想通过在 中观察到的 位置信息,近似得到速度,加速度,等信息。
而往往我们自身的状态也在改变。我们对自身状态的改变也是一个带有杂讯的测量。
这一过程可以表示为:
是不相关,均值为 的杂讯。一般记: 表示对 估计
这里,如果我们单看 式,这其实是一个最小二乘法可以解决的问题。
式子对应观测数据。比如第 次测量 的相对位置,也就是 则可以验证 。理想情况下,我们估计的 会有: .往往测量是有误差的 。而在验证之前,因为上一时刻的速度,位置等状态信息与现在有改变,导致测量的结果与状态的改变有关。要通过 式子对历史 进行状态转移。 这相当于不同参考系观测的数据要处理到同一个参考系。这是因为一个人看到另一个人速度的快慢也跟自身速度有关。
式是一组状态转移, 是 时刻,系统的一个输入。 则是对上一时刻状态的转移。例如,上一时刻 观察到 的位置信息到当前的变换。这里 理解为参考系 状态的改变。比如产生了一个加速。改变了你观测 的相对加速度。
卡尔曼滤波将会以下面的方式来估计状态:
上图中,假设 只能得到 相对于自身的位置和两次测量之间的时间间隔,以及自身位置速度,加速度等信息。
黄色箭头表示我们对 的速度,加速度等状态的估计。由于 的 时刻到与 时刻速度,加速度,位置等信息的不同,所以需要先通过状态转移对历史估计转移到新的估计。再利用 最新的位置来 矫正 转移后新的估计。获得 时刻 状态的估计。
如果没有 的状态转移,可以直接最小二乘法通过极小化目标函数来求 。
注意:此时可以假设 相当于静止的。且 匀加速运动,观测信息 是总时间的转移矩阵而不是时间间隔。你可以认为 .这个举例只是你便于理解上面 组成的系统,也可以不用参考。由于 的静止,我门忽略掉 .此时就是最小二乘法可以解决的问题。
其中,
其中:
对每一次观测进行归一化.(这里,其实默认假设了 )
你也可以认为 表示了权重,即带权最小二乘法(其实权重可以不仅仅限于 )
为什么权重要是 呢。单看 式,不同时刻误差的大小,让我们对某些测量结果不是那么相信。但虽然有不好的测量,但也一定程度上反映了真实的结果。经过归一化后,每次测量误差都变成了均值为 ,方差为 。而方差相同,意味著两次测量的可信度相同了。
这里其实假设了我们已经知道了测量误差的方差,但现实中我们往往是不知道的。把它假设出来,只是为了便于数学上的说明。如果不知道,那么大可认为方差都是一样。此时第一直觉是设置一个常数。其实大可认为是 。因为此时不管取何数值,都不会影响最终结果。因为各项权重都是一样的。
那么一般最小二乘法中, ,按照带权最小二乘法来说,我们默认了
经典的求导,令:
则:
一般会记:
正如标题曲线拟合那样,最小二乘法曲线拟合是不会随时间变化的。而 式组曾的系统却反应出的是一个会变的 ,也就是说, 是有区别的。所以 与 两者测量的 已经不一样了。
下面你会看到卡尔曼滤波如何将最小二乘法应用到上面 组成的系统中。
注意: ,即为 的协方差矩阵。这是卡尔曼滤波的关键。
证明:
解释一下:
当我们知道误差 时,这其实就是确定性求解。
这里, , ,这是因为,不同时刻的测量误差是不相关的。
进一步令
得到一组递推关系。将协方差转为在线计算。
注意,之所以要传递协方差很容易理解。上一时刻与当前时刻的状态是不同。比如参考系 位置,速度,加速度的改变。
由于 就是协方差 的这一性质,那么当经过 式,状态转移时,协方差也可以传递。
对于:
解释一下,对于前面的式子中,都是在最小二乘法的背景下来讨论的。那个时候, 是不随时间变化的。而在加入 的状态转移后,状态的转移,使得 时刻的 与 时刻的 有所不同。所以要有下标来做时间上的区分。
那么:
协方差传递矩阵为:
其中: .
这样就方便我们将最小二乘法扩展到 所组成的系统。
表示在不参考 与 时,系统对 的估计。
表示参考了 后,系统对 的估计。
这里,为了区分矩阵的逆。用上标 表示先验。
但,此时 这个操作是不对的,按照 来说,因为参考系 在不断的运动。观察到的数据两个时刻差异可能很大。但被观察的 却是一个匀加速运动。这就好比你 过去的观察数据 和 现在的观察数据 参考系的 状态一直在改变。所以最好只是利用当前观测数据来修正,不要牵扯过去。其实过去的数据也通过状态转移来传递,例如协方差。但没必要所有都传递。
所以修改最小二乘法。使它只需要使用 (即最新的观测数据)来更新修正 。
在最小二乘法中:
得:
因为: ,其中:
得到:
整理一下:
这样,我们不需要维护 在 的状态转移下的形式。只需要维护
在卡尔曼滤波中的形式为:
结合 共同组成了卡尔曼滤波的基本形式。其实就是最小二乘法
到这里,唯一与我们看到的卡尔曼滤波那几个公式形式不同的是 的计算。下面给出递推计算 .
有时候,为了方便计算,会定义: .
出现了 经典的五个公式的影子。
一个精巧的矩阵反演:
任意给定两个可逆矩阵
令: ,计算可得:
这也就是说,只要矩阵 可逆:
那么递推计算
根据
令:
如此,卡尔曼滤波的基本形式也已经走通。本质上还是最小二乘法。只是在状态转移时传递了协方差。那么最小二乘法的几种形式均可以引用在卡尔曼滤波。例如设置遗忘。
关于这5个公式:
回到最初 的那个问题。当我们知道 时刻的 。到了 时刻,产生了一组观测数据: .但由于 的速度一直在改变。那么我们要推算以现在的状态 观察历史的数据 应该是什么样的。比如 在 的反向上做了加速。那么观察到的 的加速度应该更大了。通过 得出。同时,我们将协方差矩阵 通过 也传递过来。
然后通过 的递推最小二乘法计算当前 中观察下的 的状态。
如么没有 的状转移,那么我们其实也得出了递推版本的最小二乘法
如何确定呢? .
根据最小二乘法:
其中, 足够小。可以定义:
即:
这是不是就在说明,当我们没有任何观测数据时, 的方差为