非线性最优化(二)——高斯牛顿法和Levengerg-Marquardt迭代

高斯牛顿法和Levengerg-Marquardt迭代都用来解决非线性最小二乘问题(nonlinear least square)。


From Wiki

The Gauss–Newton algorithm is a method used to solve non-linear least squares problems. It is a modification of Newton's method for finding a minimum of a function. Unlike Newton's method, the Gauss–Newton algorithm can only be used to minimize a sum of squared function values, but it has the advantage that second derivatives, which can be challenging to compute, are not required.


Description

Given m functions r = (r1, …, rm) of n variables β = (β1, …, βn), with m ≥ n, the Gauss–Newton algorithm iteratively finds the minimum of the sum of squares

S(\boldsymbol \beta)= \sum_{i=1}^m r_i(\boldsymbol \beta)^2.

Starting with an initial guess \boldsymbol \beta^{(0)} for the minimum, the method proceeds by the iterations

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} - \left(\mathbf{J_r}^\mathsf{T} \mathbf{J_r} \right)^{-1} \mathbf{ J_r} ^\mathsf{T} \mathbf{r}(\boldsymbol \beta^{(s)})

where, if r and β are column vectors, the entries of the Jacobian matrix are

(\mathbf{J_r})_{ij} = \frac{\partial r_i (\boldsymbol \beta^{(s)})}{\partial \beta_j},

and the symbol ^\mathsf{T} denotes the matrix transpose.

If m = n, the iteration simplifies to

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} - \left( \mathbf{J_r} \right)^{-1} \mathbf{r}(\boldsymbol \beta^{(s)})

which is a direct generalization of Newton's method in one dimension.

In data fitting, where the goal is to find the parameters β such that a given model function y = f(xβ) best fits some data points (xiyi), the functions riare the residuals

r_i(\boldsymbol \beta)= y_i - f(x_i, \boldsymbol \beta).

Then, the Gauss-Newton method can be expressed in terms of the Jacobian Jf of the function f as

\boldsymbol \beta^{(s+1)} = \boldsymbol \beta^{(s)} + \left(\mathbf{J_f}^\mathsf{T} \mathbf{J_f} \right)^{-1} \mathbf{ J_f} ^\mathsf{T}\mathbf{r}(\boldsymbol \beta^{(s)}).

Notes

The assumption m ≥ n in the algorithm statement is necessary, as otherwise the matrix JrTJr is not invertible (rank(JrTJr)=rank(Jr))and the normal equations (Δ in the "derivation from Newton's method" part) cannot be solved (at least uniquely).

The Gauss–Newton algorithm can be derived by linearly approximating the vector of functions ri. Using Taylor's theorem, we can write at every iteration:

\mathbf{r}(\boldsymbol \beta)\approx \mathbf{r}(\boldsymbol \beta^s)+\mathbf{J_r}(\boldsymbol \beta^s)\Delta

with \Delta=\boldsymbol \beta-\boldsymbol \beta^s. The task of finding Δ minimizing the sum of squares of the right-hand side, i.e.,

\mathbf{min}\|\mathbf{r}(\boldsymbol \beta^s)+\mathbf{J_r}(\boldsymbol \beta^s)\Delta\|_2^2,

is a linear least squares problem, which can be solved explicitly, yielding the normal equations in the algorithm.

The normal equations are m linear simultaneous equations in the unknown increments, Δ. They may be solved in one step, using Cholesky decomposition, or, better, the QR factorization of Jr. For large systems, an iterative method, such as the conjugate gradient method, may be more efficient. If there is a linear dependence between columns of Jr, the iterations will fail as JrTJr becomes singular.


Derivation from Newton's method

In what follows, the Gauss–Newton algorithm will be derived from Newton's method for function optimization via an approximation. As a consequence, the rate of convergence of the Gauss–Newton algorithm can be quadratic under certain regularity conditions. In general (under weaker conditions), the convergence rate is linear.

The recurrence relation for Newton's method for minimizing a function S of parameters, \boldsymbol\beta, is

\boldsymbol\beta^{(s+1)} = \boldsymbol\beta^{(s)} - \mathbf H^{-1} \mathbf g \,

where g denotes the gradient vector of S and H denotes the Hessian matrix of S. Since S = \sum_{i=1}^m r_i^2, the gradient is given by

g_j=2\sum_{i=1}^m r_i\frac{\partial r_i}{\partial \beta_j}.

Elements of the Hessian are calculated by differentiating the gradient elements, g_j, with respect to \beta_k

H_{jk}=2\sum_{i=1}^m \left(\frac{\partial r_i}{\partial \beta_j}\frac{\partial r_i}{\partial \beta_k}+r_i\frac{\partial^2 r_i}{\partial \beta_j \partial \beta_k} \right).

The Gauss–Newton method is obtained by ignoring the second-order derivative terms (the second term in this expression). That is, the Hessian is approximated by

H_{jk}\approx 2\sum_{i=1}^m J_{ij}J_{ik}

where J_{ij}=\frac{\partial r_i}{\partial \beta_j} are entries of the Jacobian Jr. The gradient and the approximate Hessian can be written in matrix notation as

\mathbf g=2\mathbf{J}_\mathbf{r}^\mathsf{T}\mathbf{r}, \quad \mathbf{H} \approx 2 \mathbf{J}_\mathbf{r}^\mathsf{T}\mathbf{J_r}.\,

These expressions are substituted into the recurrence relation above to obtain the operational equations

\boldsymbol{\beta}^{(s+1)} = \boldsymbol\beta^{(s)}+\Delta;\quad \Delta = -\left( \mathbf{J_r}^\mathsf{T}\mathbf{J_r} \right)^{-1} \mathbf{J_r}^\mathsf{T}\mathbf{r}.

Convergence of the Gauss–Newton method is not guaranteed in all instances. The approximation

\left|r_i\frac{\partial^2 r_i}{\partial \beta_j \partial \beta_k}\right| \ll \left|\frac{\partial r_i}{\partial \beta_j}\frac{\partial r_i}{\partial \beta_k}\right|

that needs to hold to be able to ignore the second-order derivative terms may be valid in two cases, for which convergence is to be expected.

  1. The function values r_i are small in magnitude, at least around the minimum.
  2. The functions are only "mildly" non linear, so that \frac{\partial^2 r_i}{\partial \beta_j \partial \beta_k} is relatively small in magnitude.


Improved version

With the Gauss–Newton method the sum of squares S may not decrease at every iteration. However, since Δ is a descent direction, unless S(\boldsymbol \beta^s) is a stationary point, it holds that S(\boldsymbol \beta^s+\alpha\Delta) < S(\boldsymbol \beta^s) for all sufficiently small \alpha>0. Thus, if divergence occurs, one solution is to employ a fraction, \alpha, of the increment vector, Δ in the updating formula

\boldsymbol \beta^{s+1} = \boldsymbol \beta^s+\alpha\  \Delta.

In other words, the increment vector is too long, but it points in "downhill", so going just a part of the way will decrease the objective function S. An optimal value for \alpha can be found by using a line search algorithm, that is, the magnitude of \alpha is determined by finding the value that minimizes S, usually using a direct search method in the interval 0<\alpha<1.

In cases where the direction of the shift vector is such that the optimal fraction, \alpha, is close to zero, an alternative method for handling divergence is the use of the Levenberg–Marquardt algorithm, also known as the "trust region method".[1] The normal equations are modified in such a way that the increment vector is rotated towards the direction of steepest descent,

\left(\mathbf{J^TJ+\lambda D}\right)\Delta=-\mathbf{J}^T \mathbf{r},

where D is a positive diagonal matrix. Note that when D is the identity matrix and \lambda\to+\infty, then \Delta/\lambda\to -\mathbf{J}^T \mathbf{r}, therefore the direction of Δ approaches the direction of the negative gradient -\mathbf{J}^T \mathbf{r}.

The so-called Marquardt parameter, \lambda, may also be optimized by a line search, but this is inefficient as the shift vector must be re-calculated every time \lambda is changed. A more efficient strategy is this. When divergence occurs increase the Marquardt parameter until there is a decrease in S. Then, retain the value from one iteration to the next, but decrease it if possible until a cut-off value is reached when the Marquardt parameter can be set to zero; the minimization of then becomes a standard Gauss–Newton minimization.

The (non-negative) damping factor, \lambda, is adjusted at each iteration. If reduction of S is rapid, a smaller value can be used, bringing the algorithm closer to the Gauss–Newton algorithm, whereas if an iteration gives insufficient reduction in the residual, \lambda can be increased, giving a step closer to the gradient descent direction. Note that the gradient of S with respect to δ equals -2(\mathbf{J}^{T} [\mathbf{y} - \mathbf{f}(\boldsymbol \beta) ] )^T. Therefore, for large values of \lambda, the step will be taken approximately in the direction of the gradient. If either the length of the calculated step, δ, or the reduction of sum of squares from the latest parameter vector, β + δ, fall below predefined limits, iteration stops and the last parameter vector, β, is considered to be the solution.

Levenberg's algorithm has the disadvantage that if the value of damping factor, \lambda, is large, inverting JTJ + \lambdaI is not used at all. Marquardt provided the insight that we can scale each component of the gradient according to the curvature so that there is larger movement along the directions where the gradient is smaller. This avoids slow convergence in the direction of small gradient. Therefore, Marquardt replaced the identity matrix, I, with the diagonal matrix consisting of the diagonal elements of JTJ, resulting in the Levenberg–Marquardt algorithm:

\mathbf{(J^T J + \lambda\, diag(J^T J))\boldsymbol \delta  = J^T [y - f(\boldsymbol \beta)]}\!.

Related algorithms

In a quasi-Newton method, such as that due to Davidon, Fletcher and Powell or Broyden–Fletcher–Goldfarb–Shanno (BFGS method) an estimate of the full Hessian,\frac{\partial^2 S}{\partial \beta_j \partial\beta_k}, is built up numerically using first derivatives \frac{\partial r_i}{\partial\beta_j} only so that after n refinement cycles the method closely approximates to Newton's method in performance. Note that quasi-Newton methods can minimize general real-valued functions, whereas Gauss-Newton, Levenberg-Marquardt, etc. fits only to nonlinear least-squares problems.

Another method for solving minimization problems using only first derivatives is gradient descent. However, this method does not take into account the second derivatives even approximately. Consequently, it is highly inefficient for many functions, especially if the parameters have strong interactions.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为右键新建菜单添加内容

右键菜单的内容由注册表关联,通过修改注册表就可以定制鼠标右键快捷菜单中的“新建”菜单所包含的项目。 需要注意的是&#xff0c;在修改注册表以前要先将注册表备份&#xff0c;以免出现问题时无法恢复。 一、增加菜单项目1&#xff0e;首先&#xff0c;决定要增加到菜单中的…

逆透视变换详解 及 代码实现(一)

逆透视变换详解 及 代码实现&#xff08;一&#xff09; 中主要是原理的说明&#xff1a; 一、世界坐标轴和摄像机坐标轴 从下图中可以看到&#xff0c;世界坐标为(X,Y,Z) 相机坐标为(Xc,Yc,Zc) 而世界坐标变换到相机坐标存在一个旋转矩阵变换R以及一个位移变换T。 根据上图…

C调用C++链接库

C调用C链接库&#xff1a; 1.编写C代码&#xff0c;编写函数的时候&#xff0c;需要加入对C的接口&#xff0c;也就是extern “c" 2.由于C不能直接用"class.function”的形式调用函数&#xff0c;所以C中需要为C写一个接口函数。例如本来要调用student类的talk函数&a…

逆透视变换详解 及 代码实现(二)

根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像&#xff0c;采用逆透视变换得到的图像&#xff0c;给出代码前我们先看下处理结果。 首先是原始图像&#xff1a; 下图为逆透视变换图像&#xff1a; 下面说具体的实现吧&#xff01;&#xff01; 一、…

[赵星理]《简单男人》--歌曲温暖你的心,激励你前进

简单的男人&#xff0c;简单的歌曲&#xff0c;赵星理《简单男人》送给所有身负家庭责任的人&#xff0c;要让家越来越美&#xff0c;再苦再累也不能后退。加油&#xff01;简单男人词曲&#xff1a;赵星理演唱&#xff1a;赵星理累不累也不许落泪醉不醉苦辣都值得回味要让家越…

ArrayList list = new ArrayList(20);中的list扩充几次

16. ArrayList list new ArrayList(20);中的list扩充几次&#xff08;&#xff09; A 0 B 1 C 2 D 3 答案&#xff1a;A ArrayList动态扩容机制 初始化&#xff1a;有三种方式 默认的构造器&#xff0c;将会以默认的大小来初始化内部的数组&#xff1a;public …

利用ATL创建com组件和如何在程序中使用组件的接口函数和设置接口的属性

这是一个ATL开发实例的流程&#xff1a; 1. 在atl中插入一个atl实例&#xff0c;然后添加一个类&#xff0c;派生自ccmdtarget。 2. 添加相应的属性或者方法&#xff0c;在这里需要明白一点的是&#xff0c;这个属性和方法其实是一个概念&#xff0c;只是添加一个属…

java 课外练习题

1.下列哪些是Thread类中的方法&#xff08;&#xff09; A start() B run() C exit() D getPriority() 解析&#xff1a;线程的就绪状态&#xff1a;新建线程后start()方法的调用&#xff0c;来启动线程&#xff0c;但此时线程并没有进入运行状态&#xff0c;只是…

关于ubuntu 是否需要使用std::到问题。

首先是在ubuntu下编译c要使用g&#xff0c;比如 g -Wall 01knap2.cpp -o 01knap2 而如果是编译c语言文件的话则需要用 gcc -Wall 01knap2.c -o 01knap2 即可&#xff0c;g编译得到的是.cpp文件&#xff0c;而gcc编译得到的是.c文件。 第二个是关于是否能够直接使用cout&#…

对一道基础string题及其变式题的思考与解析

1、下面程序的运行结果是&#xff08;&#xff09;&#xff08;选择一项&#xff09; String str1“hello”; String str2new String(“hello”); System.out.println(str1str2); A.true B.false C.hello D.he 答案&#xff1a;B 分析&#xff1a;str1没有使用new关键字&am…

Redo Log 和Checkpoint not complete

首先我们来看下 alertSID.log 日志&#xff1a; Mon Nov 30 17:31:54 2009 Thread 1 advanced to log sequence 14214 (LGWR switch) Current log# 3 seq# 14214 mem# 0: /u03/oradata/newccs/redo03.log Mon Nov 30 17:34:29 2009 Thread 1 advanced to log sequence 14215 (L…

组合数学中的项链计数

给c种不同颜色宝石能穿成多少种长度为s的宝石项链&#xff08;本质不同&#xff09; Burnside定理的应用&#xff1a; 当n为奇数时&#xff0c;有n种翻转&#xff0c;每种翻转都是以一个顶点和该顶点对边的中点对称。有k^(n/21)*n种。 当n为偶数时&#xff0c;有n种翻转&#x…

蓝桥杯 算法训练(四)结点选择(树形动态规划)

结点选择&#xff08;树形动态规划&#xff09;C语言 问题描述 有一棵 n 个节点的树&#xff0c;树上每个节点都有一个正整数权值。如果一个点被选择了&#xff0c;那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少&#xff1f; 输入格式 第一行包含一个整数…

SCVMM

通过SCVMM实现并管理虚拟机高可用性 1、 添加群集主机2、 创建虚拟网络3、 创建虚拟机并实现高可用性接着上一篇文章&#xff0c;这次我们来看一下&#xff0c;如果通过SCVMM R2来实现虚拟机的高可用性。首先将群集主机添加到SCVMM 1、 登陆到计算机Win2008R2&#xff0c;打开S…

机器学习统计学相关书籍

1. 《统计学完全教程》 All of statistics 卡耐基梅隆 沃塞曼 2. 第四版《概率论与数理统计》 莫里斯。德格鲁特&#xff08;Morris H.DeGroot&#xff09;和马克。舍维什&#xff08;Mark J.Shervish&#xff09; 3. 《线性代数导论》 吉尔伯特。斯特朗--网上视频教程堪称经…

序列化包含多种不明类型的集合

序列化包含多种不明类型的集合 代码&#xff1a;/Files/zhuqil/Kirin.rar 导言: 你是否曾经想过序列化构造对象&#xff0c;它里面有一个集合&#xff0c;这个集合包含接口或者抽象类&#xff1f;你是否不知道所有的你要序列化的类型&#xff1f;好吧&#xff0c;如果这样&…

机器学习入门方法推荐(少走弯路)入门视频推荐

入门可以看看下列的几个课程。第一第二个公认的经典了。1、首先当然是吴恩达的经典机器学习了&#xff0c; 可以在万能的b站搜&#xff0c;也可以在网易公开课搜 吴恩达机器学习http://study.163.com/course/courseMain.htm?courseId10045700292、台大林轩田教授的机器学习基石…

NLP大神推荐的机器学习入门书单(附大量百度网盘电子书)

转载自&#xff1a;http://blog.csdn.net/surgent777/article/details/53895048 继NLP之后&#xff0c;我又开了ML这个大坑。这是因为NLP涉及到太多的ML模型&#xff0c;仅仅拿过来用的话&#xff0c;我实现的HanLP已经快到个人极限了。而模型背后的原理、如何优化、如何并行化…

$HOME/$user/.权限导致用户无法登陆图形界面

在redhat linux下&#xff0c;用户登陆图形界面时将在$HOME/$user/.目中添加隐藏文件&#xff08;以.开头的文件&#xff09;&#xff0c;如果在无意中将$HOME/$user/.的写权限去除&#xff0c;将会导致用户无法成功登陆gnome&#xff0c;在正确输入用户名和密码的情况下&#…