今天的是关于Orb-SLAM的数学基础,不要把里头的内容想的太过高深,其实只要用心,什么都不是事,这里只是介绍了最简单的数学基础,如有不对的,不清楚的,还请大家留言,多多指教。
以往关于ORB-SLAM文章
一起研究ORB-SLAM(一)---结构和入口
一起研究ORB-SLAM(二)---Tracking线程
一起研究ORB-SLAM(三)--LocalMapping和LoopClosing线程
一起研究ORB-SLAM(四)--程序结构
小莱姆:师兄,不想学数学,太抽象了,学不懂,看不懂!
师兄:如果不学那我就不要你了,你自己看着办!!
1.Hessian 矩阵
函数F的二阶导数,映射到一个nxn 的一个矩阵,则该矩阵的每一个数值为该函数在该点的二阶导数,该矩阵称为Hessian矩阵
我想二阶导数大家都很清楚了,在罗嗦几句,关于二阶导数的几何意义:
1. 斜率的变化情况
2. 函数的凹凸性
根据以上的二阶导数的性质,就可以得知一些事情:
1. hessian矩阵的每一个值,代表了函数图像的每一个点的主曲率的大小。
2. hessian的特征值反应好在该点附近的函数图像的凹凸性,特征值越大,凸性越强。
2 Jacobian
函数的一阶导数的,就是将函数映射到一个nxn阶矩阵,
根据一阶导数的性质,我们可以知道,他的每一个数值,表示了函数在这一点的梯度的数值,
3 泰勒级数
设函数F: R->R 是一个无限可微的函数,则可以的到如下的函数表述:
则该函数可以被称为,函数f在点a的泰勒级数,前提必须是F在a点必须的可微的。
如果该泰勒级数有一个收敛半径r,并且|x-a|<r 则可以被人为函数在该点的数值为:
所以我们经常使用有限的序列进行函数的某点上的近似值的处理,如下公式,函数F在a点,使用a点的有限的泰勒级数进行估计。表达式如下:
则可以使用上述的表达式表示一个二阶的泰勒级数的展开式:
4 梯度下降
梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。其迭代公式为 ,其中 代表梯度负方向, 表示梯度方向上的搜索步长。梯度方向我们可以通过对函数求导得到,步长的确定比较麻烦,太大了的话可能会发散,太小收敛速度又太慢。一般确定步长的方法是由线性搜索算法来确定,即把下一个点的坐标看做是ak+1的函数,然后求满足f(ak+1)的最小值的 即可。
因为一般情况下,梯度向量为0的话说明是到了一个极值点,此时梯度的幅值也为0.而采用梯度下降算法进行最优化求解时,算法迭代的终止条件是梯度向量的幅值接近0即可,可以设置个非常小的常数阈值。
缺点:
· 靠近极小值时收敛速度减慢。
· 直线搜索时可能会产生一些问题。
· 可能会“之字形”地下降。
5 牛顿法
使用牛顿法不能区分,函数的极小极大和鞍点,接下来介绍一下牛顿法的:
设函数F是二阶可微函数,首先我们假设最初的估计点x0 附近的最小点是ˉx ,换句话说,我们需要函数f在该点附近是半正定的,由于这个条件的存在,所以必须存在ˉx是函数∇F的一个根,即 ∇F (¯x) = 0 ,所以我们可以假设x0是在ˉx的附近,则我们可以使用一阶泰勒级数描述函数∇F (¯x)的值,即:
小莱姆:一阶泰勒级数为啥会出现Hessian?
师兄:前面的是∇F
由于∇F (¯x) = 0 所以:式子可以变成如下的形式:
所以这就导致了一个递归的出现:
所以我们就可以定义一个增量更新的式子:
所以可以通过反复使用牛顿方法进行线性系统的求解:
若是将函数表示为一个二次型的形式,如下所示:
若,A是对称,并且是半正定的,则该二次型的最小值可以表示为:
通过上式可以获得对应参数为:
所以若是函数F满足二次型,则在无限次的迭代过程中,函数必须集中在一点,产生最优的点。
6 高斯牛顿法
在高维的情况下,Hessiam矩阵是非常难求的,所以牛顿法产生了极大的限制。
所以设F满足下面等式:
且,且d有二阶微分存在,并且Λ是一个mxm的矩阵,是一个对称且半正定的,所以我们需要求取他的最小值,所以可以通过方法可以将方程转化成最小二乘的形式,去估计模型的x值,
首先我们假设F(X) 式子中的a 为1/2 所以可以变化为“
则F的二阶导可以表示为:
由于Hd是关于矩阵的Hessian 张量,所以当d(x)是非常小的时候,则可以表示为:
所以高斯牛顿的方法可以通过上面的牛顿的方法表示为:
7 Levenberg-Marquardt
通过上面的方法,可以知道,使用牛顿类别的方法,很容陷入局部最小,或者鞍点的情况,所以就产生了另外一种算法,Levenberg-Marquardt,公式描述如下:
是不是就比高斯牛顿的方法,多了一个µI,µ>0 ,就是这个参数,可以适应很多的情况的变化,若是µ值很小,怎该函数就是一个高斯牛顿发,若是该值趋近于无穷,则下面公式中α趋近于0哦,就是一个梯度下降算法。
小莱姆:师兄,知不知道新播出的电视剧很好看啊!
师兄:你知道莱姆酒是很好喝的!!
小莱姆:。。。。。