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算法)的理解相关推荐

  1. LM(Levenberg–Marquardt)算法原理及其python自定义实现

    LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...

  2. 手写系列之手写LM(Levenberg–Marquardt)算法(基于eigen)

    紧接上次的手写高斯牛顿,今天顺便将LM算法也进行了手写实现,并且自己基于eigen的高斯牛顿进行了对比,可以很明显的看到,LM的算法收敛更快,精度也略胜一筹,这次高博的书不够用了,参考网上伪代码进行实 ...

  3. 非线性最小二乘问题与Levenberg–Marquardt算法详解

    1 最小二乘问题 给定一组连续函数 f:Rn→Rm,m⩾n{\mathbf{f}}:{\mathbb{R}^n} \to {\mathbb{R}^m},{\text{ }}m \geqslant nf ...

  4. lm opencv 算法_Levenberg–Marquardt算法学习(和matlab的LM算法对比)

    回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭代步子的计算) 完整的算法流程及代码样例 1.      回顾高斯牛顿,引入LM算法 根据之前的博文:Gauss-Newton算法学习 假设我们研究如 ...

  5. Levenberg–Marquardt算法学习

    本次是对Levenberg–Marquardt的学习总结,是为之后看懂sparse bundle ajdustment打基础.这篇笔记包含如下内容: 回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭 ...

  6. Levenberg–Marquardt(LM)

    Levenberg–Marquardt(LM)详解 1.基础概念 1.1.信赖域法 1.2.泰勒展开 1.2.正定矩阵(positive definite matrix) 1.3.雅克比矩阵(Jaco ...

  7. Levenberg–Marquardt算法

    Levenberg-Marquardt 算法 最优估计算法中通常的做法都是写一个代价函数,并迭代计算最小化代价函数. 解决非线性最小二乘问题的方法有高斯牛顿法等,下面介绍Levenberg-Marqu ...

  8. 高斯牛顿算法matlab代码,matlab实现高斯牛顿法、Levenberg–Marquardt方法

    高斯牛顿法: function [ x_ans ] = GaussNewton( xi, yi, ri) % input : x = the x vector of 3 points % y = th ...

  9. 梯度下降、牛顿法、高斯牛顿L-M算法比较

    本文梳理一下常见的几种优化算法:梯度下降法,牛顿法.高斯-牛顿法和L-M算法,优化算法根据阶次可以分为一阶方法(梯度下降法),和二阶方法(牛顿法等等),不同优化算法的收敛速度,鲁棒性都有所不同.一般来 ...

最新文章

  1. ThickBox 3.1参数详解(转)
  2. 【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书
  3. 区块链智能合约入门:Hello world(2)
  4. maven多个web模块进行合并
  5. 【ABAP】SUBMIT程序相互调用
  6. html中的点击事件
  7. Linux:计划任务之at
  8. qcustomplot绘制热力图瀑布图_使用REmap绘制中国地图
  9. Python程序-生成回文
  10. C语言中文网C++教程笔记
  11. 自建rtmp直播和朋友一起异地看电影
  12. Nodejs设备接入阿里云IoT平台
  13. linux安卓管理软件,基于Android的文件管理系统源代码
  14. 关于C语言从键盘输入内容到数组
  15. Pycharm中.py文件调用其他.py文件的函数
  16. 朋友圈利诱裂变遭封杀,私域流量成裂变新关键
  17. matlab怎么求标准化特征向量,matlab特征向量标准化
  18. 如何等比例调整图片大小?
  19. win7无线网显示小太阳
  20. Latex 插入参考文献

热门文章

  1. ssh经常一段时间就断掉解决办法
  2. 2022危险化学品经营单位安全管理人员操作证考试题及答案
  3. 基于Android开发的记账软件(附带源码)
  4. bms电池管理系统BMS源码 凌力尔特方案,LTC6804数据采集
  5. 2019年12月大学英语四级参考答案
  6. YOLOv3原理及代码解析
  7. pytorch 数据处理(复数处理)记录
  8. 复数的三角形式与指数形式
  9. 三菱PLC与第三方设备TCP通讯_PROFINET下的 I-Device(智能设备)通信——大话与PLC通讯的N种方式第十讲...
  10. 一种全新的直播形式:一对一视频直播系统