上一篇文章中主要讲解了最优化算法中的梯度下降法,类似的算法还有牛顿法、高斯-牛顿法以及LM算法等,都属于多轮迭代中一步一步逼近最优解的算法,本文首先从数学的角度解释这些算法的原理与联系,然后使用Opencv与C++实现LM算法。
1. 牛顿法。
(1) 牛顿法用于解方程的根。对于函数f(x),对其进行一阶泰勒展开,并忽略余项得到:

解上式得到:

上式就是牛顿法的迭代式,设置一个初值x0,然后经过多次迭代即可得到方程f(x)=0的根x*:

(2) 牛顿法用于解决最优化问题,即求函数值取得最小值时的输入参数。求方程根时,是求满足f(x)=0时的x;而求解函数最优化问题时,是求满足f'(x)=0时的x,此时我们可以把f'(x)看成一个函数F(x)=f'(x),那么问题就等效于求解F(x)=0的根,所以有迭代式:

而:

于是有下式,即为求解f(x)最优化参数的迭代式,其中f'(x)为一阶导数,f''(x)为二阶导数。

上述情况为一维函数的情况,即输入参数只有一个,如果是多维函数,其最优化迭代式也是相似的形式:

其中Xk+1、Xk、▽f(Xk)都是列向量,Xk+1和Xk分别为第k+1轮

本文介绍了最优化算法中的牛顿法、高斯-牛顿法及LM算法的原理与联系,并详细阐述了LM算法如何结合高斯-牛顿法与梯度下降法的优势,最后通过Opencv与C++实现了LM算法。
1万+

被折叠的 条评论
为什么被折叠?



