Levenberg-Marquardt迭代(LM算法)-改进Guass-Newton法
1、前言
a、对于工程问题,一般描述为:从一些测量值(观测量)x 中估计参数 p?即x = f(p),
其中,x为测量值构成的向量,参数p为待求量,为了让模型能适应一般场景,这里p也为向量。
这是一个函数求解问题,可以使用Guass-Newton法进行求解,LM算法是对Newton法的改进。
c、如果函数f为线性函数,那这个问题就变成了最小二乘问题(请参阅我另一篇博客:最小二乘法),
d、这篇博客中讲解的LM法、Newton法主要用于函数f为非线性函数的情况。
2、x = f(p)问题的Newton法求解
当迭代到第k次的时候得到参数
,其中
为残差:
对f(p)进行一阶泰勒公式展开,J为Jacobi(雅可比)矩阵,因为参数p是个向量,因此对p的求导即对p逐个元素求偏导:
计算第k+1次的残差:
通过第k次到第k+1次的迭代,
可以发现已经把非线性问题
转化为线性求解
,则最小二乘解为:
则k+1次的参数p为:
3、加权Newton迭代
在Newton法中,所有的因变量都是等量加权的,除此之外,可以使用一个加权的矩阵对因变量进行加权。
例如,当测量矢量 x 满足一个协方差矩阵为
的高斯分布,且希望最小化Mahalanobis距离
。
当这个协方差矩阵可以是对角的,则表示 x 各坐标之间相互独立。
当协方差矩阵为正定对称矩阵时,正规变为:
备注:马氏距离
通过协方差反向传播,一阶近似下的协方差可以这么计算:
如果不可逆,那这个取逆过程为广义逆。
4、Levenberg-Marquardt迭代(LM算法)
LM算法是对Newton迭代的改进。
(4)式的正规方程可以简化写成:
LM算法将上式改为:
,其中
,即N的对角线元素乘以
,非对角线元素不变
的设定策略为:在初始化时,
通常设定为
。
如果通过解增量正规方程得到的
导致误差减小,那么接受该增量并在下一次迭代前将
除以10。
反之,如果
值导致误差增加,那么将
乘以10并重新解增量正规方程,继续这一过程直到求出的一个误差下降的
为止。
对不同的
重复地解增量正规方程直到求出一个可以接受的
。
LM算法的直观解释:当
非常小时,该方法与Newton迭代本质相同。
当
非常大时(本质上大于1),此时
的非对角线元素相对于对角元素而言变得不重要,此时算法倾向于下降法。
LM算法在Newton迭代和下降方法之间无缝地移动,Newton法将使得算法在解的领域附近快速收敛,下降法使得算法在
运行困难时保证代价函数是下降的。
5、Newton法(LM法)两个适用场景的转换
a、在上一篇博客Newton法(牛顿法 Newton Method)中讲述了牛顿法适用的两个场景:1、函数求解;2、目标函数的最优化求解
上一篇博客中的f(x)相当于这篇博客中的 x –f(p),上一篇博客中是为了求x,这篇博客中是已知x,求p,只是表述不同。
b、这两个场景有时候是可以相互转换的:
例如:函数求解问题 f(x) = 0,那也可以认为是求解 min||f(x)||,其中||.||表示二范数,即
例如:目标函数优化问题 min ||f(x)||,当这个优化问题的理论最优解就是为 0 时,那么这个问题也可以转化为求解 f(x) = 0
Levenberg-Marquardt迭代(LM算法)-改进Guass-Newton法的更多相关文章
- LM算法
最小二乘法的概念 最小二乘法的目标:求误差的最小平方和,对应有两种:线性和非线性. 线性最小二乘的解是closed-form即x=(A^T A)^{-1}A^Tb, 而非线性最小二乘没有closed- ...
- LM算法与非线性最小二乘问题
摘录的一篇有关求解非线性最小二乘问题的算法--LM算法的文章,当中也加入了一些我个人在求解高精度最小二乘问题时候的一些感触: LM算法,全称为Levenberg-Marquard算法,它可用于解决非线 ...
- BP神经网络算法改进
周志华机器学习BP改进 试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较. 1.方法设计 传统的BP算法改进主要有两类: - 启 ...
- 算法:Astar寻路算法改进,双向A*寻路算法
早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢 ...
- matlab实现高斯牛顿法、Levenberg–Marquardt方法
高斯牛顿法: function [ x_ans ] = GaussNewton( xi, yi, ri) % input : x = the x vector of 3 points % y = th ...
- 【强化学习】DQN 算法改进
DQN 算法改进 (一)Dueling DQN Dueling DQN 是一种基于 DQN 的改进算法.主要突破点:利用模型结构将值函数表示成更加细致的形式,这使得模型能够拥有更好的表现.下面给出公式 ...
- Newton法(牛顿法 Newton Method)
1.牛顿法应用范围 牛顿法主要有两个应用方向:1.目标函数最优化求解.例:已知 f(x)的表达形式,,求 ,及g(x)取最小值时 ...
- JVM探究 面试题 JVM的位置 三种JVM:HotSpot 新生区 Young/ New 养老区 Old 永久区 Perm 堆内存调优GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法
JVM探究 面试题: 请你弹弹你对JVM的理解?Java8虚拟机和之前的变化更新? 什么是OOM?什么是栈溢出StackOverFlowError?怎么分析 JVM的常用调优参数有哪些? 内存快照如何 ...
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?
Java中 Set 和 List 集合 的contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用 Set 而不使用 List 的原因是效率问题, 前者的 set ...
随机推荐
- Appium自动化测试教程-自学网-monkey日志管理
日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和 ...
- eclipse和scala整合,打包配置文件及打包步骤
我写的是maven项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- Flume实时监控目录sink到hdfs,再用sparkStreaming监控hdfs的这个目录,对数据进行计算
目标:Flume实时监控目录sink到hdfs,再用sparkStreaming监控hdfs的这个目录,对数据进行计算 1.flume的配置,配置spoolDirSource_hdfsSink.pro ...
- GreenPlum 数据库创建用户、文件空间、表空间、数据库
前几篇文章介绍了GreenPlum数据库的安装.启动.关闭.状态检查.登录等操作,数据库已经创建好了,接下来介绍如何使用数据库.按照习惯,需要先创建测试用户.表空间.数据库.先创建测试用户dbdrea ...
- 2019 ICPC Asia Xuzhou Regional
目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...
- OpenCV:Python下OpenCV安装和入门最强详细攻略
一.关于OpenCV简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效— ...
- ORACLE批量导入图片到BLOB字段
要插入图片的表不是固定的,而且是批量插入很多张,还要考虑到因为图片的文件名错误,修改后要再次插入,此时应避免已经插入的重复执行操作, 浪费时间. 所以就选择先用一张临时表来暂时保存从文件系统读取的照片 ...
- Hadoop(1)---运行Hadoop自带的wordcount出错问题。
在hadoop2.9.0版本中,对namenode.yarn做了ha,随后在某一台namenode节点上运行自带的wordcount程序出现偶发性的错误(有时成功,有时失败),错误信息如下: // : ...
- vue.js 中this.$router.push()的使用
在vue项目中,跳转可以用router-link直接跳到某个页面 因为有时候会需要做一些判断等情况,所以要用到 this.$router.push() 因为外链跳转根本就不在router的设计考虑范围 ...
- 【转】Python基础-字符串
原文地址http://blog.chinaunix.net/uid-21169302-id-446256.html Python-String-Function 字符串中字符大小写的变换: * S.l ...