Levenberg-Marquardt算法简介和C++实现
转自:Levenberg-Marquardt
什么是最优化,可分为几大类?
答:Levenberg-Marquardt算法是最优化算法中的一种。最优化是寻找使得函数值最小的参数向量。它的应用领域非常广泛,如:经济学、管理优化、网络分析、最优设计、机械或电子设计等等。
根据求导数的方法,可分为2大类。第一类,若f具有解析函数形式,知道x后求导数速度快。第二类,使用数值差分来求导数。
根据 使用模型不同,分为非约束最优化、约束最优化、最小二乘最优化。
什么是Levenberg-Marquardt算法?
它是使用最广泛的非线性最小二乘算法,中文为列文伯格-马夸尔特法。它是利用梯度求最大(小)值的算法,形象的说,属于“爬山”法的一种。它同时具有梯度法和牛顿法的优点。当λ很小时,步长等于牛顿法步长,当λ很大时,步长约等于梯度下降法的步长。在作者的科研项目中曾经使用过多次。图1显示了算法从起点,根据函数梯度信息,不断爬升直到最高点(最大值)的迭代过程。共进行了12步。(备注:图1中绿色线条为迭代过程)。
图1 LM算法迭代过程形象描述
图1中,算法从山脚开始不断迭代。可以看到,它的寻优速度是比较快的,在山腰部分直接利用梯度大幅度提升(参见后文例子程序中lamda较小时),快到山顶时经过几次尝试(lamda较大时),最后达到顶峰(最大值点),算法终止。
如何快速学习LM算法?
学 习该算法的主要困难是入门难。 要么国内中文教材太艰涩难懂,要么太抽象例子太少。目前,我看到的最好的英文入门教程是K. Madsen等人的《Methods for non-linear least squares problems》本来想把原文翻译一下,贴到这里。请让我偷个懒吧。能找到这里的读者,应该都是E文好手,我翻译得不清不楚,反而事倍功半了。
可在 下面的链接中找到
http://www2.imm.dtu.dk/pubdb/public/publications.php? year=&pubtype=7&pubsubtype=§ion=1&cmd=full_view&lastndays=&order=author
或者直接下载pdf原文:
http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/3215/pdf/imm3215.pdf
LM算法是介于牛顿法与梯度下降法之间的一种非线性优化方法,对于过参数化问题不敏感,能有效处理冗余参数问题,使代价函数陷入局部极小值的机会大大减小,这些特性使得LM算法在计算机视觉等领域得到广泛应用。
算法流程
在LM算法中,每次迭代是寻找一个合适的阻尼因子λ,当λ很小时,算法就变成了GAuss-Newton法的最优步长计算式,λ很大时,蜕化为梯度下降法的最优步长计算式。
参考文献:
[1]. 张鸿燕, 狄征. Levenberg-Marquardt算法的一种新解释. 计算机工程与应用,2009,45(19),5-8.
from: http://heleiying.blog.163.com/blog/static/3110429201081693815164/
*********************************************************************************************************************************
重点:
该算法已经比较成熟,并有专门介绍该算法的网站,并提供不同的版本进行下载。下载的网址如下(含有C++代码和Matlab代码,不过都是在Linux操作系统下运行的):
C++实现网址:http://users.ics.forth.gr/~lourakis/levmar/index.html#download
Levenberg-Marquardt算法简介和C++实现相关推荐
- LM(Levenberg–Marquardt)算法原理及其python自定义实现
LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...
- Levenberg–Marquardt算法学习
本次是对Levenberg–Marquardt的学习总结,是为之后看懂sparse bundle ajdustment打基础.这篇笔记包含如下内容: 回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭 ...
- 非线性最小二乘问题与Levenberg–Marquardt算法详解
1 最小二乘问题 给定一组连续函数 f:Rn→Rm,m⩾n{\mathbf{f}}:{\mathbb{R}^n} \to {\mathbb{R}^m},{\text{ }}m \geqslant nf ...
- 手写系列之手写LM(Levenberg–Marquardt)算法(基于eigen)
紧接上次的手写高斯牛顿,今天顺便将LM算法也进行了手写实现,并且自己基于eigen的高斯牛顿进行了对比,可以很明显的看到,LM的算法收敛更快,精度也略胜一筹,这次高博的书不够用了,参考网上伪代码进行实 ...
- Levenberg–Marquardt算法
Levenberg-Marquardt 算法 最优估计算法中通常的做法都是写一个代价函数,并迭代计算最小化代价函数. 解决非线性最小二乘问题的方法有高斯牛顿法等,下面介绍Levenberg-Marqu ...
- lm opencv 算法_Levenberg–Marquardt算法学习(和matlab的LM算法对比)
回顾高斯牛顿算法,引入LM算法 惩罚因子的计算(迭代步子的计算) 完整的算法流程及代码样例 1. 回顾高斯牛顿,引入LM算法 根据之前的博文:Gauss-Newton算法学习 假设我们研究如 ...
- Levenberg–Marquardt algorithm
Levenberg-Marquardt又称莱文伯格-马夸特方法(Levenberg–Marquardt algorithm)能提供数非线性最小化(局部最小)的数值解. 此算法能借由执行时修改参数达到结 ...
- 高斯牛顿算法matlab代码,matlab实现高斯牛顿法、Levenberg–Marquardt方法
高斯牛顿法: function [ x_ans ] = GaussNewton( xi, yi, ri) % input : x = the x vector of 3 points % y = th ...
- Levenberg–Marquardt(LM)
Levenberg–Marquardt(LM)详解 1.基础概念 1.1.信赖域法 1.2.泰勒展开 1.2.正定矩阵(positive definite matrix) 1.3.雅克比矩阵(Jaco ...
- 数据结构与算法:算法简介
数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...
最新文章
- 实验: VMware使用快照间接备份原始VMDK文件
- oracle 收回 user,oracle 10.2.0.3对USER收回CONNECT及RESOURCE
- NLP中的词向量及其应用
- 【 MATLAB 】norm ( Vector and matrix norms )(向量范数以及矩阵范数)
- 题目1199:找位置
- 收藏 | 2020年腾讯技术工程十大热门文章
- Maven学习-优化和重构POM
- Python 绘制热力图参数详解
- python脚本在centos系统一键卸载重新安装Mysql
- 操作系统原理:文件系统
- 三星S5P6818之UBOOT网络配置
- windowsxp下载python下载视频_Python 实现视频下载
- Linux网络设备驱动程序设计----刘文涛
- 写给女朋友的java_Java会说情话的女朋友
- c语言万年历一行打印两个月,万年历 c语言 两月一行
- []int16转[]byte
- 韦东山ARM第一期作业(一)ARM时钟体系
- 狂神redis笔记_狂神说redis笔记(三)
- where条件中有权限校验的自定义函数优化方法
- 关于电脑怎么连接隐藏的无线WiFi信号
热门文章
- C++ 获取当前运行程序的路径
- C++ 函数需要有返回值,但非全分支return(RVO)
- presentation编程软件_编程难学?web相关知识,跟着淼哥学php全栈之路6
- mysql 查看3306端口_如何查看端口(3306)被那个程序占用?
- 深入理解计算机系统第四版_深入理解计算机系统第三版2.4节中文版的一处翻译问题及英文版可能的一处错误...
- 计算机系统的组成和应用,计算机系统组成与应用领域的考点
- ROS学习记录:基于Python的ROS话题消息编程
- 行车记录仪数据集_福特自动驾驶数据集公布 总体积达1.6TB或为数据最全的数据集之一...
- android httpclient webview,android – 访问WebView中的http响应头?
- xgboost 怎么读_【泰语单词】“祸从口出”泰语怎么表达?意想不到的简单