Levenberg-Marquardt(LM算法)的理解
Levenberg-Marquardt LM算法 的理解
- 1. convex optimization
- 1.1 convex set
- 1.2 convex function
- 1.3 optimization problem
- 1.4 convex optimization
- 1.5 Duality
- 2. SLAM Bundle Adjustment
- 2.1 Gauss Newton's method
- 2.2 LM法
- 2.3 Regularizaion in optimization
- 2.4 μ\muμ的选取
1. convex optimization
先简单介绍一下凸优化的内容
First quickly introduction the convex optimization concepts.
1.1 convex set
Definition:
for x1,x2∈Ax_{1}, x_{2} \in Ax1,x2∈A, we say AAA is a convex set if and only if the following holds for any θ∈[0,1]\theta \in [0,1]θ∈[0,1]:
θx1+(1−θ)x2∈A\theta x_{1} + (1- \theta)x_{2} \in A θx1+(1−θ)x2∈A
凸函数的定义如上,不过可以通过下面的图简单理解。可以直觉得说,如果两点集合内的点的“连线“上的点都在集合内,那么它就是一个凸集合。
We can quickly understand it by the following graph. If all the elements between x1x_{1}x1 and x2x_{2}x2 are in the set AAA, we could say it is a convex set.
1.2 convex function
Definition:
we say f(x)f(x)f(x) with domain dom(f)dom(f)dom(f) is a convex function, if and only if , the following conditions holds for any θ∈[0,1]\theta \in [0,1]θ∈[0,1]:
f(θx1+(1−θ)x2)≤θf(x1)+(1−θ)f(x2)f(\theta x_{1} + (1-\theta)x_{2}) \le \theta f(x_{1}) + (1-\theta) f(x_{2}) f(θx1+(1−θ)x2)≤θf(x1)+(1−θ)f(x2)
θx1+(1−θ)x2,x1,x2∈dom(f)\theta x_{1} + (1-\theta)x_{2}, x_{1},x_{2} \in dom(f) θx1+(1−θ)x2,x1,x2∈dom(f)
1.3 optimization problem
General form:
minimize:f0(x)minimize : \quad f_{0}(x) minimize:f0(x)
subjectto:fi(x)≤0,i∈1,2,...,nsubject \ to : \quad f_{i}(x) \le 0, \ i \in {1,2,...,n} subject to:fi(x)≤0, i∈1,2,...,n
hj(x)=0,j∈1,2,...,m\quad \quad \quad \quad h_{j}(x) = 0, \ j \in {1,2,...,m} hj(x)=0, j∈1,2,...,m
f0(x)f_{0}(x)f0(x) is the objective function, and fi(x)f_{i}(x)fi(x) are inequality constraints, hj(x)h_{j}(x)hj(x) are equality constraints.
f0(x)f_{0}(x)f0(x)是优化的目标函数, fi(x)f_{i}(x)fi(x) 是不等式优化条件, hj(x)h_{j}(x)hj(x) 是等式优化条件。
for examples:
上面有几个简单的优化例子,可以发现SLAM问题(优化残差)也是其中之一。
1.4 convex optimization
f0(x)f_{0}(x)f0(x) , fi(x)f_{i}(x)fi(x) are all convex functions, and hj(x)h_{j}(x)hj(x) are affline equations, then the problem is a convex optimization problem.
如果f0(x)f_{0}(x)f0(x) , fi(x)f_{i}(x)fi(x) 都是凸函数的话,hj(x)h_{j}(x)hj(x)是affline, 那么问题就变成了凸优化问题。
为什么要引入凸优化问题呢?问题我们可以证明在凸优化问题中,局部最小值就是全局最小值!而且凸优化是一个成熟的技术,有非常成熟快速高效和完善的解决算法。
也就是说,如果我们证明一个问题是凸优化问题,我们就可以保证它有快速高效的精确解!
1.5 Duality
2. SLAM Bundle Adjustment
SLAM的后端Bundle Adjustment其实是一个无约束的最小二乘范数下的优化问题(但是它不一定是凸的,或许是,我也不知道有没有人去证明过,这应该是一个很好的研究课题!)。
2.1 Gauss Newton’s method
我们常用的有牛顿法,是直接对目标函数f0(x)f_{0}(x)f0(x) (下图中的F(x)F(x)F(x))进行处理的。
另外有高斯牛顿法,是对残差函数进行处理,我们简单写出了它的求导过程:
2.2 LM法
LM法则是在GN的基础上增加了一个阻尼因子。对于这个阻尼因子,不同的人有很多种解释方式(比如对x增加了一个阻尼,阻尼因子很大时接近最速下降法,阻尼因子比较小时,则更加接近高斯牛顿)。
但是我个人比较倾向于通过regularization来解读它。
2.3 Regularizaion in optimization
我们考虑这样一个问题:
在优化原本的目标函数的同时,增加了一个对x的regularization限制。对于这一个增加的regularization项,同样有很多解读方式,在这里我介绍一下其中一种:
引入regularization是由于A的误差:
在我们的SLAM问题中,A其实是残差函数的雅各比,b则是在线性化位置的残差函数的值(f(x0)f(x_{0})f(x0))。很明显,由于在x0x_{0}x0附近进行了线性化,其实在这里是存在误差的。我们假设误差为Δ\DeltaΔ的话:
这样的话,如果我们限制δx\delta xδx的大小,则可以限制整个线性化中引入的误差。
- 其实从泰勒展开的角度看,我们是在x0x_{0}x0附近做的泰勒展开,如果偏离x0x_{0}x0过多,那么我们的线性化近似就失效了!所以必须保证x0+δxx_{0}+\delta xx0+δx在x0x_{0}x0附近活动。
- 而且我们可以发现,μ\muμ的选取是和Δ\DeltaΔ相关的!
2.4 μ\muμ的选取
Δ\DeltaΔ其实是和hessian矩阵相关的。
而在GN算法中,其实是使用JTJJ^{T}JJTJ来近似hessian矩阵的,所以我们会在LM算法中见到μ\muμ的初试化:
Levenberg-Marquardt(LM算法)的理解相关推荐
- LM(Levenberg–Marquardt)算法原理及其python自定义实现
LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...
- 手写系列之手写LM(Levenberg–Marquardt)算法(基于eigen)
紧接上次的手写高斯牛顿,今天顺便将LM算法也进行了手写实现,并且自己基于eigen的高斯牛顿进行了对比,可以很明显的看到,LM的算法收敛更快,精度也略胜一筹,这次高博的书不够用了,参考网上伪代码进行实 ...
- 非线性最小二乘问题与Levenberg–Marquardt算法详解
1 最小二乘问题 给定一组连续函数 f:Rn→Rm,m⩾n{\mathbf{f}}:{\mathbb{R}^n} \to {\mathbb{R}^m},{\text{ }}m \geqslant nf ...
- lm opencv 算法_Levenberg–Marquardt算法学习(和matlab的LM算法对比)
回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭代步子的计算) 完整的算法流程及代码样例 1. 回顾高斯牛顿,引入LM算法 根据之前的博文:Gauss-Newton算法学习 假设我们研究如 ...
- Levenberg–Marquardt算法学习
本次是对Levenberg–Marquardt的学习总结,是为之后看懂sparse bundle ajdustment打基础.这篇笔记包含如下内容: 回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭 ...
- Levenberg–Marquardt(LM)
Levenberg–Marquardt(LM)详解 1.基础概念 1.1.信赖域法 1.2.泰勒展开 1.2.正定矩阵(positive definite matrix) 1.3.雅克比矩阵(Jaco ...
- Levenberg–Marquardt算法
Levenberg-Marquardt 算法 最优估计算法中通常的做法都是写一个代价函数,并迭代计算最小化代价函数. 解决非线性最小二乘问题的方法有高斯牛顿法等,下面介绍Levenberg-Marqu ...
- 高斯牛顿算法matlab代码,matlab实现高斯牛顿法、Levenberg–Marquardt方法
高斯牛顿法: function [ x_ans ] = GaussNewton( xi, yi, ri) % input : x = the x vector of 3 points % y = th ...
- 梯度下降、牛顿法、高斯牛顿L-M算法比较
本文梳理一下常见的几种优化算法:梯度下降法,牛顿法.高斯-牛顿法和L-M算法,优化算法根据阶次可以分为一阶方法(梯度下降法),和二阶方法(牛顿法等等),不同优化算法的收敛速度,鲁棒性都有所不同.一般来 ...
最新文章
- ThickBox 3.1参数详解(转)
- 【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书
- 区块链智能合约入门:Hello world(2)
- maven多个web模块进行合并
- 【ABAP】SUBMIT程序相互调用
- html中的点击事件
- Linux:计划任务之at
- qcustomplot绘制热力图瀑布图_使用REmap绘制中国地图
- Python程序-生成回文
- C语言中文网C++教程笔记
- 自建rtmp直播和朋友一起异地看电影
- Nodejs设备接入阿里云IoT平台
- linux安卓管理软件,基于Android的文件管理系统源代码
- 关于C语言从键盘输入内容到数组
- Pycharm中.py文件调用其他.py文件的函数
- 朋友圈利诱裂变遭封杀,私域流量成裂变新关键
- matlab怎么求标准化特征向量,matlab特征向量标准化
- 如何等比例调整图片大小?
- win7无线网显示小太阳
- Latex 插入参考文献