最优化八:高斯牛顿法、LM法

梯度法:x_{i+1} = x_i - \alpha _i \bigtriangledown f(x_i),负梯度方向

牛顿法:x_{i+1} = x_i - A_i^{-1}\bigtriangledown f(x_i),A为Hession矩阵

高斯牛顿法:x_{i+1} = x_i +\bigtriangleup x\bigtriangleup xJ^T(x_i)J(x_i)\bigtriangleup x = -J^T(x_i)f(x_i)的解

LM法:x_{i+1} = x_i +\bigtriangleup x\bigtriangleup x(J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i)的解

1 高斯牛顿法(Gauss-Newton)

针对优化问题求解x使得f(x)取得最小值,采用高斯牛顿法,步骤如下:

step1:给定初始点x_0

step2:对于第i此迭代,求解雅克比矩阵及函数值J(x_i),f(x_i)

step3:求解增量方程J^T(x_i)J(x_i)\bigtriangleup x = -J^T(x_i)f(x_i),得到\bigtriangleup x

step4:计算x_{i+1} = x_i + \bigtriangleup x

step5:如果\bigtriangleup x足够小,或者迭代次数达到阈值,停止,否则重复step2-5

证明过程如下:

对函数f(x)在x_0处进行一阶泰勒展开得到:

                                                           f(x) = f(x_0) + J(x_0)(x-x_0)

\bigtriangleup x = x-x_0得到:

                                                         f(x_0+\bigtriangleup x) = f(x_0) + J(x_0)\bigtriangleup x 

求解x使得f(x)取得最小值等价于求解\bigtriangleup x使得f(x_0+\bigtriangleup x)取得最小值,即:

                               \bigtriangleup x^* = argmin \frac{1}{2}\left \| f(x_0+\bigtriangleup x) \right \|^2=argmin\left \|f(x_0) + J(x_0)\bigtriangleup x \right \|^2

等式右边平方展开得到:

                                           \frac{1}{2}(\left \| f(x_0) \right \|^2 +2f(x_0)^TJ(x_0)\bigtriangleup x + \bigtriangleup x^TJ^T(x_0)J(x_0)\bigtriangleup x )

\bigtriangleup x求导等于0得到:

                                                         J^T(x_0)J(x_0)\bigtriangleup x = -J^T(x_0)f(x_0)

得到:

                                                     \bigtriangleup x =-(J^T(x_0)J(x_0))^{-1}\cdot J^T(x_0)f(x_0)

2 LM法(Levenberg-Marquadt法

高斯牛顿法存在缺陷,就是它要求我们所用的J^T(x_0)J(x_0)矩阵是可逆的(而且是正定的),但实际数据中计算得到的JTJ却只有半正定性。也就是说,在使用Gauss Newton方法时,可能出现JTJ为奇异矩阵或者病态的情况,此时增量的稳定性较差,导致算法不收敛。更严重的是,就算我们假设H非奇异也非病态,如果我们求出来的步长△x太大,也会导致我们采用的局部近似不够准确,这样一来我们甚至都无法保证它的迭代收敛,哪怕是让目标函数变得更大都是可能的。

由于Gauss-Newton方法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果,所以我们很自然地想到应该给△x添加一个信赖区域,不能让它太大而使得近似不准确。在信赖区域里边,我们认为近似是有效的;出了这个区域,近似可能会出问题。

那么如何确定这个信赖区域的范围呢?一个比较好的方法是根据我们的近似模型跟实际函数之间的差异来确定这个范围:如果差异小,我们就让范围尽可能大;如果差异大,我们就缩小这个近似范围。因此,考虑使用:

                                                                  \rho =\frac{f(x+\bigtriangleup x)-f(x)}{J(x)\bigtriangleup x}

来判断泰勒近似是否够好。ρ的分子是实际函数下降的值,分母是近似模型下降的值。如果ρ接近于1,则近似是好的。如果ρ太小,说明实际减小的值远少于近似减小的值,则认为近似比较差,需要缩小近似范围。反之,如果ρ比较大,则说明实际下降的比预计的更大,我们可以放大近似范围。

优化问题可以转化为如下带约束问题:

                                                    min(f(x_i+J(x_i) \bigtriangleup x_i)), s.t.\left \| D\bigtriangleup x_i \right \|<\mu

将非线性约束转化为线性约束可以得到求解方程:

                                                 (J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i)

总结LM算法流程如下:

step1: 给定初始值x0,以及初始化半径μ。

step2: 对于第i次迭代,(J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i),求解\bigtriangleup x

step3: 计算ρ。 若ρ>3/4,则μ=2μ; 若ρ<1/4,则μ=0.5μ;

step4: 如果ρ大于某阈值,认为近似可行。令x_{i+1} = x_i + \bigtriangleup x

 

你可能感兴趣的:(最优化方法)