最近在做两幅图像间单应性矩阵估计的研究,遇到LM(Levenberg-Marquardt)算法求极值,在查找资料的过程中发现它兼具梯度下降、与牛顿法的特点,遂逐层抽丝剥茧,现总结牛顿法。
-
一维牛顿法解方程
求函数f(x)的根。复杂方程的根很难直接求得,最开始用牛顿法迭代来求方程的根。
方法是给一个初值x1,在x1处用一阶泰勒展式(为什么用一阶泰勒展式这里需要弄懂泰勒展式之后再来解释???)来近似表示函数f(x)见公式(1)。
f(x) = f(x1) + f’(x1)(x - x1) (1)
将f(x) = 0带入公式(1),求得交点x = x1 - f(x1)/f’(x1),这个x点并不是函数f(x)的根,但是距离真正的根更近了一点,如图1所示。
将上一步所求的x值作为x2值,在x2值处用一阶泰勒展式见公式(2)。
f(x) = f(x2) + f’(x2)(x - x2) (2)
将f(x) = 0带入公式(2),求得交点x = x2 - f(x2)/f’(x2),依次迭代进而推出公式(3)。
x(n+1)=x(n)-f(x(n))/f’(x(n)) (3)
最终求得的x值变化小于一个阈值就认为这个x值是函数f(x)的近似根。 -
一维牛顿法求极值
牛顿法用于求函数极值。对于f(x)的极值点也就是求f’(x)的根,那么也就是如上面介绍的求f’(x)=0的根。给定初值x1,在x1处用二阶泰勒展式见公式(4)。
f(x) = f(x1) + f’(x1)(x - x1) + 1/2f’’(x1)(x-x1)^2 (4)
对f(x)求导,令f’(x) = 0, 得x = x1 - f’(x1)/f’’(x1),依次迭代得
x(n+1)= x(n) - f’(x(n) )/f’’(x(n) )。 -
多维牛顿法求根
以上讨论的都是二维向量的情况,下面介绍当因变量X=(x1,x2,x3 … xn)一个向量时的求解,对多维向量进行泰勒展式:
令一阶泰勒为0得到:
整理:
假定方程组由一系列方程{f1=0, f2=0, …, fn=0}组成,可以将上式整理为矩阵形式:
n个未知数所以有n组方程才能求得n个未知数。
上式中的n*n矩阵为雅可比矩阵(Jacobian Matrix),简记为J(F)。同时,将自变量(x1,…,xn)记为X,将(t1,…,tn)记为T,将(f1,…,fn)记为F,则有:
化简后可得:
将方程组的解写为迭代形式,即可得到适用于方程组求解的牛顿法迭代公式:
-
多维牛顿法求极值