关于Marginalization的理解

Marginalization的在好多地方都出现过,概率里面,g2o,MSCKF,DSO等等

还记得本科低年级线性代数课里面解一个线性方程组的方法么。就是把一个矩阵三角化后,最下面那个方程就只和一个变量有关了。算出这个变量后,再一次带入其他方程,把其他变量的值求出来。

先抛开纯粹的边缘概率密度,其他几个地方的Marginalization都发生在解线性方程组中。所以这里的Marginalization就是标准的本科学习的解线性方程组的消元过程。(我们处理的对象都是使用泰勒展开线性化后的跟新增量)

当我们只关注一些变量的时候,我们使用矩阵变换把他们独立出来(对应于线性代数中三角化矩阵后下面的那些变量)

  1. 本身就是想要抛弃的变量(历史上的变量,多余的3d点)
  2. 只是当前步骤不需要的变量(g2o里面为了减小矩阵size,MSCKF里面求误差时临时消去3d点的误差)。这种情形,那些被消去的变量的值得准确度对结果还是有影响的,因为其他地方还会用到他们的值(jacobian矩阵的计算会用到3d点的值)

还有一个要注意的是所谓的first estimate jacobian。意思是对于那些被消去不更新的\Delta变量,在使用他们的时候,一定要用当时的线性化点。(https://blog.csdn.net/heyijia0327/article/details/52822104

其实还有个更简单的办法就是直接把不要的变量从方程中拿走。这个等价于减少了方程组的约束条件,在某些时候还是可以用的。比如MSCKF中,因为不知道3d的误差,一个方法是用Marginalization消除3d点的项,一个是直接把这一项扔点。最后得结果其实并么有本质上的差别。

那他们和概率里面的边缘化有啥关系呢?这些我们要求的变量其实都是高斯分布的随机变量,他们共同组成了一个多元高斯分布。消除其中的一部分,就等于在分布上边缘化了那一部分。

消元得到第一个变量值后,再带入求第二个变量值等于是计算了一个第二个变量基于第一个变量的条件概率密度。

猜你喜欢

转载自blog.csdn.net/ziliwangmoe/article/details/81482220