高斯牛顿法详解

本文深入讲解了优化算法的发展历程,包括最速下降法、牛顿法、高斯牛顿法等,重点阐述了高斯牛顿法及其在最小二乘问题上的应用,同时对比介绍了列文伯格-马夸尔特方法和拟牛顿法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、高斯牛顿法发展历程

1、从上倒下为高斯牛顿法的前世今生已经未来的演化:

最速下降法(一阶梯度法)
牛顿法(二阶梯度法)
高斯牛顿法
列文伯格法
马夸尔特法

二、问题的引出

1、考虑如下优化目标函数:
min⁡xF(x)\mathop {\min }\limits_x F(x)xminF(x)
其中,x=[x1,...,xn]T∈Rnx = {[{x_1},...,{x_n}]^T}\in {\R^n}x=[x1,...,xn]TRnnnn维待优化变量,F(x):Rn→RF(x):{\R^n} \to \RF(x)RnR是一个将nnn维变量映射成标量的非线性函数。

2、我们的目标:
对变量xxx进行优化,即寻找一组合适的xxx使得优化目标函数F(x)F(x)F(x)最小。

3、最直观的方法:
F(x)F(x)F(x)关于x=[x1,...,xn]T∈Rnx = {[{x_1},...,{x_n}]^T}\in {\R^n}x=[x1,...,xn]TRn的多元函数,我们只要利用F(x)F(x)F(x)一阶导数等于零这一公式求出F(x)F(x)F(x)达到极值时对应的若干组xxx
dFdx=0\frac{{dF}}{{dx}} = 0dxdF=0然后基于这些这些组xxx求出F(x)F(x)F(x)的全部极值,然后通过比较极值的大小就可以找到F(x)F(x)F(x)的最小值和其所对应的xxx取值。

4、直观方法的问题:
根据上述方法,我们可以找到F(x)F(x)F(x)全局最小值,但这里面有一个严重的问题。F(x)F(x)F(x)为复杂的非线性函数时,其关于xxx的一阶导数是十分复杂的,导致dFdx=0\frac{{dF}}{{dx}} = 0dxdF=0难以求解,或者说求得其全部解是十分困难的,即我们难以获得F(x)F(x)F(x)全局性质,自然后续的求极值比大小就无法进行,这个方法就走进了死胡同。

5、解决直观方法问题的思路
虽然我们难以求解dFdx=0\frac{{dF}}{{dx}} = 0dxdF=0,但我们给定一组xxx,求dFdx\frac{{dF}}{{dx}}dxdF的值是很容易的,就是把给定的xxx代入dFdx\frac{{dF}}{{dx}}dxdF算,批量处理这一过程是计算机最擅长的事情,即我们可以很容易获得F(x)F(x)F(x)局部性质。那么我们为了解决这样的一个优化问题,我们可以给定一个初值,然后利用F(x)F(x)F(x)在初值附近的局部性质(即在初值附近xxx如何变化可以使得F(x)F(x)F(x)更小)得到初值的变化增量Δx=[Δx1,...,Δxn]T\Delta x = {[\Delta {x_1},...,\Delta {x_n}]^T}Δx=[Δx1,...,Δxn]T,通过迭代,当Δx\Delta xΔx足够小时,我们就找到了F(x)F(x)F(x)比较小的一个值和其对应的xxx取值。与xxx相对应,这里Δx\Delta xΔx也是nnn维列向量。对应算法流程为:
在这里插入图片描述

这里有两点值得注意:

  • 基于局部性质找到的F(x)F(x)F(x)较小值并不一定是F(x)F(x)F(x)的最小值,因为我们只考察了F(x)F(x)F(x)在初值附近的局部情况,没有对F(x)F(x)F(x)全局性质进行考察。
  • Δx\Delta xΔx足够小时,算法结束。这个可以这样理解:此时xxx只有在变化一点点的情况下才会使F(x)F(x)F(x)变小,这说明F(x)F(x)F(x)的函数值已经到了一个谷底附近,xxx稍微变大一点都会使得F(x)F(x)F(x)从谷底向上走从而变大。之所以我们不把算法结束条件设置成Δx=0\Delta x = 0Δx=0这是因为我们恰好让F(x)F(x)F(x)函数值在谷底点几乎不可能,会导致算法一直在谷底点附近小范围内震荡。
  • 局部方法的核心在于如何获得增量Δx\Delta xΔx,下面的几种方法都是围绕这一问题进行讨论的。

以下讨论的前提均是第kkk次迭代,假设此时xxxxkx_kxk处,我们要寻找增量Δxk\Delta x_kΔxk

二、高斯牛顿法的前世

由于原理的相似性,最速下降法和牛顿法可以统称为一阶,二阶梯度法。这两种方法的原理分别是在局部用一次函数,二次函数对非线性函数F(x)F(x)F(x)进行近似,然后利用近似函数的最小值推测非线性函数F(x)F(x)F(x)的极小值。

1、一阶,二阶梯度法共有原理

F(x)F(x)F(x)xkx_kxk附近进行泰勒展开:
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+12ΔxkTH(xk)ΔxkF({x_k} + \Delta {x_k}) \approx F({x_k}) + J{({x_k})^T}\Delta {x_k} + \frac{1}{2}\Delta x_k^TH({x_k})\Delta {x_k}F(xk+Δxk)F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk其中:

  • J(xk)=[∂F(x)∂x1,...,∂F(x)∂xn]TJ({x_k}) = {[\frac{{\partial F(x)}}{{\partial {x_1}}},...,\frac{{\partial F(x)}}{{\partial {x_n}}}]^T}J(xk)=[x1F(x),...,xnF(x)]TF(x)F(x)F(x)关于xxx的一阶导数在xkx_kxk处取值,JJJ称为梯度或雅克比矩阵,需要注意的是J(xk)J({x_k})J(xk)是一个nnn维列向量,Δxk\Delta x_kΔxk也是一个nnn维列向量,因此泰勒展开中是J(xk)J({x_k})J(xk)的转置乘以Δxk\Delta x_kΔxk,从而得到一个标量
  • H(xk)H({x_k})H(xk)F(x)F(x)F(x)关于xxx的二阶导数在xkx_kxk处取值,HHH称为海塞矩阵,是一个n×nn\times nn×n的方阵

2、最速下降法(一阶梯度法)

1)最速下降法原理
最速下降法(一阶梯度法)就是保留泰勒展开的一阶项用来近似非线性函数F(x)F(x)F(x),即:F(xk+Δxk)≈F(xk)+J(xk)TΔxkF({x_k} + \Delta {x_k}) \approx F({x_k}) + J{({x_k})^T}\Delta {x_k}F(xk+Δxk)F(xk)+J(xk)TΔxk该式中,只有Δxk\Delta x_kΔxk是变量,而xkx_kxk是一个确定的数值,F(xk),J(xk)TF({x_k}),J{({x_k})^T}F(xk)J(xk)T均是一个确定的数值,即这是一个以Δxk\Delta x_kΔxk为变量的一次函数。Δxk\Delta x_kΔxk为一阶梯度的反向就一定可以保证函数值下降,因此:
Δxk=−J(xk)\Delta {x_k} = - J({x_k})Δxk=J(xk)通常我们还会在此基础上加一个步长λ\lambdaλ(步长可以根据一定条件计算,这里不展开讨论)使得
Δxk=−λJ(xk)\Delta {x_k} = - \lambda J({x_k})Δxk=λJ(xk)
2)最速下降法缺点
该方法过于贪心,容易走出锯齿线,反而增加迭代次数。

3、牛顿法和阻尼牛顿法(二阶梯度法)

1)牛顿法的原理
牛顿法(二阶梯度法)就是保留泰勒展开的一阶项和二阶项用来近似非线性函数F(x)F(x)F(x),即:
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+12ΔxkTH(xk)ΔxkF({x_k} + \Delta {x_k}) \approx F({x_k}) + J{({x_k})^T}\Delta {x_k} + \frac{1}{2}\Delta x_k^TH({x_k})\Delta {x_k}F(xk+Δxk)F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk该式中,只有Δxk\Delta x_kΔxk是变量,而xkx_kxk是一个确定的数值,F(xk),J(xk)TF({x_k}),J{({x_k})^T}F(xk)J(xk)T均是一个确定的数值,即这是一个以Δxk\Delta x_kΔxk为变量的二次函数。且二次项的系数为正,因此该函数拥有最小值。其取最小值的条件就是该式对Δxk\Delta x_kΔxk的导数等于零,即:
∂(F(xk)+J(xk)TΔxk+12ΔxkTH(xk)Δxk)∂Δxk=0\frac{{\partial (F({x_k}) + J{{({x_k})}^T}\Delta {x_k} + \frac{1}{2}\Delta x_k^TH({x_k})\Delta {x_k})}}{{\partial \Delta {x_k}}} = 0Δxk(F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk)=0解得:
H(xk)Δxk=−J(xk)H({x_k})\Delta {x_k} = - J({x_k})H(xk)Δxk=J(xk)该式即为牛顿法的增量方程。
2)牛顿法的缺点
海塞矩阵H(xk)H(x_k)H(xk)计算量太大了
3)阻尼牛顿法
阻尼牛顿法就是在使用牛顿法获得增量方向后,进一步对最优步长进行搜索:

  1. 通过牛顿法获取增量H(xk)Δxk=−J(xk)H({x_k})\Delta {x_k} = - J({x_k})H(xk)Δxk=J(xk),则增量方向为Δxk=−H(xk)−1J(xk)\Delta {x_k} = - H({x_k})^{-1}J({x_k})Δxk=H(xk)1J(xk)
  2. 沿着该增量方向一维搜索最优补偿λ\lambdaλ,使得F(xk+λΔxk)F(x_k + \lambda \Delta x_k )F(xk+λΔxk)最小

三、高斯牛顿法

1、高斯牛顿法的思想
高斯牛顿法针对最小二乘问题,采用一定的方法对牛顿法中的海塞矩阵H(xk)H(x_k)H(xk)进行近似,从而简化了计算量。
注意:只有最小二乘问题才能使用高斯牛顿法
2、最小二乘问题
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。最小二乘问题可以表述为:
min⁡xF(x)=∣∣f(x)∣∣2\mathop {\min }\limits_x F(x) = ||f(x)|{|^2}xminF(x)=f(x)2
3、高斯牛顿法原理
xxxxkx_kxk处,具有增量Δxk\Delta x_kΔxk,优化目标函数取值为:
min⁡xF(xk+Δxk)=∣∣f(xk+Δxk)∣∣2\mathop {\min }\limits_x F({x_k} + \Delta {x_k}) = ||f({x_k} + \Delta {x_k})|{|^2}xminF(xk+Δxk)=f(xk+Δxk)2不同于牛顿法,我们不对优化目标函数进行泰勒展开,我们对优化目标函数中的一部分,即f(x)f(x)f(x)进行一阶泰勒展开。 展开后优化目标函数为:
F(xk+Δxk)≈∣∣f(xk)+J(xk)TΔxk∣∣2F({x_k} + \Delta {x_k}) \approx ||f({x_k}) + J{({x_k})^T}\Delta {x_k}|{|^2}F(xk+Δxk)f(xk)+J(xk)TΔxk2其中:

  • J(xk)=[∂f(x)∂x1,...,∂f(x)∂xn]TJ({x_k}) = {[\frac{{\partial f(x)}}{{\partial {x_1}}},...,\frac{{\partial f(x)}}{{\partial {x_n}}}]^T}J(xk)=[x1f(x),...,xnf(x)]Tf(x)f(x)f(x)关于xxx的一阶导数在xkx_kxk处取值,JJJ称为梯度或雅克比矩阵,需要注意的是J(xk)J({x_k})J(xk)是一个nnn维列向量,Δxk\Delta x_kΔxk也是一个nnn维列向量,因此泰勒展开中是J(xk)J({x_k})J(xk)的转置乘以Δxk\Delta x_kΔxk,从而得到一个标量
  • 高斯牛顿法中的J(xk)J({x_k})J(xk)f(x)f(x)f(x)关于xxx的一阶导数在xkx_kxk处取值,而牛顿法中的J(xk)J({x_k})J(xk)F(x)F(x)F(x)关于xxx的一阶导数在xkx_kxk处取值

该式中,只有Δxk\Delta x_kΔxk是变量,而xkx_kxk是一个确定的数值,f(xk),J(xk)Tf({x_k}),J{({x_k})^T}f(xk)J(xk)T均是一个确定的数值,即这是一个以Δxk\Delta x_kΔxk为变量的二次函数。且二次项的系数为正,因此该函数拥有最小值。其取最小值的条件就是该式对Δxk\Delta x_kΔxk的导数等于零,即:
∂∣∣f(xk)+J(xk)TΔxk∣∣2∂Δxk=0\frac{{\partial ||f({x_k}) + J{{({x_k})}^T}\Delta {x_k}|{|^2}}}{{\partial \Delta {x_k}}} = 0Δxkf(xk)+J(xk)TΔxk2=0解得:
J(xk)J(xk)TΔxk=−J(xk)f(xk)J({x_k})J{({x_k})^T}\Delta {x_k} = - J({x_k})f({x_k})J(xk)J(xk)TΔxk=J(xk)f(xk)记:
H(xk)=J(xk)J(xk)T,g(xk)=−J(xk)f(xk)H({x_k}) = J({x_k})J{({x_k})^T},g({x_k}) = - J({x_k})f({x_k})H(xk)=J(xk)J(xk)T,g(xk)=J(xk)f(xk)则高斯牛顿法的增量方程为:
H(xk)Δxk=g(xk)H({x_k})\Delta {x_k} = g({x_k})H(xk)Δxk=g(xk)这里将J(xk)J(xk)TJ({x_k})J{({x_k})^T}J(xk)J(xk)T记作H(xk)H({x_k})H(xk)是有意义的,高斯牛顿法相当于在最小二乘这类问题上,用f(x)f(x)f(x)一阶泰勒展对F(x)F(x)F(x)的二阶泰勒展开进行了近似,从而用f(x)f(x)f(x)的雅克比矩阵JJJF(x)F(x)F(x)的海塞矩阵HHH进行了近似,减少了计算量。
4、高斯牛顿法算法流程
在这里插入图片描述

5、高斯牛顿法缺点

  • 在求解增量Δxk\Delta x_kΔxk时候,我们需要计算(J(xk)J(xk)T)−1{(J({x_k})J{({x_k})^T})^{ - 1}}(J(xk)J(xk)T)1,但是J(xk)J(xk)T{J({x_k})J{({x_k})^T}}J(xk)J(xk)T只有半正定性质,在实际计算中可能会遇见J(xk)J(xk)T{J({x_k})J{({x_k})^T}}J(xk)J(xk)T为奇异矩阵或者病态矩阵,从而导致增量不稳定,算法不收敛。出现这种现象的深层原因是F(x)F(x)F(x)xkx_kxk处的近似不像一个二次函数。这也应该是牛顿法的缺点?
    奇异矩阵:不满秩的方阵
    病态矩阵:求解方程组时如果对数据进行较小的扰动,则得出的结果具有很大波动,这样的矩阵称为病态矩阵。

  • 当我们求得的增量Δxk\Delta {x_k}Δxk过大时,我们使用泰勒展开进行局部近似就会不准确。从而导致算法不收敛。

四、列文伯格-马夸尔特方法(L-M方法,阻尼牛顿法)

1、列文伯格-马夸尔特方法的思想
针对高斯牛顿法的不足,L-M方法做了两点改进:

  • 在求解增量Δxk\Delta {x_k}Δxk时,对其设置了信赖区域
  • 在求得增量Δxk\Delta {x_k}Δxk对其近似效果进行了量化,并根据量化结果对信赖区域进行调整,再从新计算增量Δxk\Delta {x_k}Δxk,直到近似效果量化结果达到阈值。

2、信赖区域μ\muμ的设置及对增量方程的影响
1)信赖区域的引入
增加信赖区域μ\muμ的后,优化问题从无约束的最小二乘问题变成了有约束的最小二乘问题。即从
min⁡xF(xk+Δxk)=∣∣f(xk+Δxk)∣∣2\mathop {\min }\limits_x F({x_k} + \Delta {x_k}) = ||f({x_k} + \Delta {x_k})|{|^2}xminF(xk+Δxk)=f(xk+Δxk)2变成了:
min⁡xF(xk+Δxk)=∣∣f(xk+Δxk)∣∣2,s.t.∣∣DΔxk∣∣2≤μ\mathop {\min }\limits_x F({x_k} + \Delta {x_k}) = ||f({x_k} + \Delta {x_k})|{|^2},s.t.||D\Delta {x_k}|{|^2} \le \mu xminF(xk+Δxk)=f(xk+Δxk)2,s.t.DΔxk2μ其中,∣∣DΔxk∣∣2≤μ||D\Delta {x_k}|{|^2} \le \muDΔxk2μ是信赖区间对应的条件,DDD是系数矩阵,为nnn维行向量,μ\muμ是信赖半径。列文伯格方法和马夸尔特方法的主要区别就是系数矩阵D不同。

在求解该带有约束的优化函数过程中,可以通过构建拉格朗日函数将约束引入:
L(Δxk,λ)=∣∣f(xk+Δxk)∣∣2+λ(∣∣DΔxk∣∣2−μ)L(\Delta {x_k},\lambda ) = ||f({x_k} + \Delta {x_k})|{|^2} + \lambda (||D\Delta {x_k}|{|^2} - \mu )L(Δxk,λ)=f(xk+Δxk)2+λ(DΔxk2μ)同样,当该拉格朗日函数关于Δxk\Delta {x_k}Δxk的导数等于零时,可以求得对应的增量Δxk\Delta {x_k}Δxk。也可以这么理解,当∣∣DΔxk∣∣2>μ||D\Delta {x_k}|{|^2} > \muDΔxk2>μ时候,就是在优化目标函数中引入了系数为λ\lambdaλ的惩罚项。
2)增量方程
列文伯格-马夸尔特方法的增量方程如下
(H+λDTD)Δxk=g(xk)(H + \lambda {D^T}D)\Delta {x_k} = g({x_k})(H+λDTD)Δxk=g(xk) 其中,H(xk),g(xk)H({x_k}),g({x_k})H(xk),g(xk)与高斯牛顿法相同。
3、近似程度的量化
定义量化指标ρ\rhoρ衡量近似程度:
ρ=f(xk+Δxk)−f(xk)J(xk)TΔxk\rho = \frac{{f({x_k} + \Delta {x_k}) - f({x_k})}}{{J{{({x_k})}^T}\Delta {x_k}}}ρ=J(xk)TΔxkf(xk+Δxk)f(xk)

  • ρ\rhoρ接近1时,近似效果好;
  • ρ\rhoρ太小时,实际减小的值远小于近似函数减小的值,近似效果差,需要缩小近似范围μ\muμ
  • ρ\rhoρ较大时,实际减小的值大于近似函数减小的值,近似效果差,需要增大近似范围μ\muμ

4、列文伯格-马夸尔特算法流程
在这里插入图片描述

5、列文伯格方法
在列文伯格方法中,系数矩阵D=ID=ID=I,信赖区域时一个球形状
6、马夸尔特方法
在马夸尔特方法中,系数矩阵DDDJ(xk)J(xk)TJ({x_k})J{({x_k})^T}J(xk)J(xk)T对角元素的平方根。
7、列文伯格-马夸尔特与高斯牛顿相比
列文伯格-马夸尔特在一定程度上解决了线性方程组系数矩阵的非奇异和病态问题,但算法收敛速度相较于高斯牛顿更慢。因此,当问题性质较好时,选择高斯牛顿方法,问题接近病态时,选择列文伯格-马夸尔特方法。

五、拟牛顿法

为了解决牛顿法中海森矩阵H计算复杂的问题,拟牛顿法提供了另外一种解决思路:通过使用不含有二阶导数的矩阵UUU代替牛顿法中的HHH,根据矩阵UUU构造的不同,具有不同的拟牛顿法。

1、拟牛顿法的基本原理

牛顿法的搜索方向为:
d(t)=−Ht−1gtd^{(t)}=-H_t^{-1}g_td(t)=Ht1gt
现在我们要构造一个矩阵UUU来近似矩阵HHH,当f(x)f(x)f(x)为二次函数的时候,HHH矩阵为常数矩阵,且任意两点xtx^{t}xtxt+1x^{t+1}xt+1之间的梯度差为:
▽f(x(t+1))−▽f(x(t))=H⋅(x(t+1)−x(t))\bigtriangledown f(x^{(t+1)}) - \bigtriangledown f(x^{(t)}) = H\cdot (x^{(t+1)}-x^{(t)})f(x(t+1))f(x(t))=H(x(t+1)x(t))
因此有:
x(t+1)−x(t)=H−1⋅[▽f(x(t+1))−▽f(x(t))]x^{(t+1)}-x^{(t)} = H^{-1}\cdot [\bigtriangledown f(x^{(t+1)}) - \bigtriangledown f(x^{(t)})]x(t+1)x(t)=H1[f(x(t+1))f(x(t))]
因此,当f(x)f(x)f(x)不是二次函数的时候,仿照上式,我们可以构建H矩阵的近似矩阵UUU,要求矩阵UUU满足如下关系:
x(t+1)−x(t)=Ut+1⋅[▽f(x(t+1))−▽f(x(t))]x^{(t+1)}-x^{(t)}=U_{t+1}\cdot [\bigtriangledown f(x^{(t+1)})-\bigtriangledown f(x^{(t)})]x(t+1)x(t)=Ut+1[f(x(t+1))f(x(t))]
此时,我们可以按照下式来计算增量(也称为拟牛顿条件):
Δxt=Ut+1⋅Δgt\Delta x_t=U_{t+1}\cdot \Delta g_tΔxt=Ut+1Δgt

2、DFP

为了方便区分,下面把UUU称作DDD(表示DFP)

1)DFP结果

我们在已知DtD_tDt的情况下,想要使用增量形式求取Dt+1=ΔDt+DtD_{t+1} = \Delta D_t + D_tDt+1=ΔDt+Dt,构造ΔD\Delta DΔD如下:
ΔDt=ΔxtΔxtTΔgtTΔxt−DtΔgtΔgtTDtΔgtTDtΔgt\Delta D_t = \frac{\Delta x_t\Delta x_t^T}{\Delta g_t^T\Delta x_t}-\frac{D_t\Delta g_t\Delta g_t^TD_t}{\Delta g_t^TD_t\Delta g_t}ΔDt=ΔgtTΔxtΔxtΔxtTΔgtTDtΔgtDtΔgtΔgtTDt

2)DFP算法步骤

在这里插入图片描述
DFP算法的问题在于在求取增量的时候D矩阵仍要求逆

3、BFGS

为了方便区分,下面把UUU称作BBB(表示BFGS)

1)BFGS结果

ΔBt=ΔgtΔgtTΔxtTΔgt−BtΔxtΔxtTBtΔxtTBtΔxt\Delta B_t = \frac{\Delta g_t\Delta g_t^T}{\Delta x_t^T\Delta g_t}-\frac{B_t\Delta x_t\Delta x_t^TB_t}{\Delta x_t^TB_t\Delta x_t}ΔBt=ΔxtTΔgtΔgtΔgtTΔxtTBtΔxtBtΔxtΔxtTBt
与DFS相比就是Δx\Delta xΔxΔg\Delta gΔg调换了一下位置,但会为求取B矩阵的逆带来好处。

谢尔曼莫里森公式:描述当矩阵变化后,如何使用变化前矩阵的逆求变化后矩阵的逆
对于任意的非奇异方阵AAA,u,vu,vu,vnnn维向量,若1+vTA−1u≠01+v^TA^{-1}u\neq 01+vTA1u=0,则:
(A+uvT)−1=A−1−(A−1u)(vTA−1)1+vTA−1u(A+uv^T)^{-1} = A^{-1}-\frac{(A^{-1}u)(v^TA^{-1})}{1+v^TA^{-1}u}(A+uvT)1=A11+vTA1u(A1u)(vTA1)

通过引入两次谢尔曼莫里森公式,我们可以迭代求取得到BBB的逆:
Bt+1−1=(In−ΔxtΔgtTΔxtTΔgt)Bt−1(In−ΔgtΔxtTΔxtTΔgt)+ΔxtΔxtTΔxtTΔgtB^{-1}_{t+1}=\left (I_n-\frac{\Delta x_t \Delta g_t^T}{\Delta x_t^T \Delta g_t}\right )B_{t}^{-1}\left (I_n-\frac{\Delta g_t \Delta x_t^T}{\Delta x_t^T \Delta g_t}\right )+\frac{\Delta x_t \Delta x_t^T}{\Delta x_t^T \Delta g_t}Bt+11=(InΔxtTΔgtΔxtΔgtT)Bt1(InΔxtTΔgtΔgtΔxtT)+ΔxtTΔgtΔxtΔxtT
而一开始的B矩阵是一个单位矩阵,其逆就是自己

2)BFGS算步骤

在这里插入图片描述

4、L-BFGS

1)L-BFGS原理

在BFGS中,我们要保存B−1B^{-1}B1矩阵,实际上,我们仅保存每轮的Δx\Delta xΔxΔg\Delta gΔg即可递归的计算当前的BBB矩阵,从而减小内存占用
Bt+1−1=(∏i=t0ViT)B0−1(∏i=0tVi)+∑j=0t(∏i=tj+1ViT)(ρjΔxjΔxjT)(∏i=j+1tVi)B^{-1}_{t+1} = \left (\prod_{i=t}^0 V_i^T \right )B_0^{-1} \left (\prod_{i=0}^t V_i\right )+\sum_{j=0}^{t} \left (\prod_{i=t}^{j+1} V_i^T \right ) \left ( \rho_j\Delta x_j \Delta x_j^T\right ) \left (\prod_{i=j+1}^t V_i \right )Bt+11=(i=t0ViT)B01(i=0tVi)+j=0t(i=tj+1ViT)(ρjΔxjΔxjT)(i=j+1tVi)
其中:
ρt=1ΔxtTΔgtVt=In−ρtΔgtΔxtT\rho_t = \frac{1}{\Delta x_t^T \Delta g_t}\\ V_t = I_n-\rho_t \Delta g_t \Delta x_t^T ρt=ΔxtTΔgt1Vt=InρtΔgtΔxtT
实际应用中,我们也可以仅适用最近的m个Δx\Delta xΔxΔg\Delta gΔg来计算B−1B^{-1}B1
Bt−1=(∏i=t−1t−mViT)B0−1(∏i=t−mt−1Vi)+∑j=t−1t−m(∏i=tj+1ViT)(ρjΔxjΔxjT)(∏i=j+1tVi)B^{-1}_{t} = \left (\prod_{i=t-1}^{t-m} V_i^T \right )B_0^{-1} \left (\prod_{i=t-m}^{t-1} V_i\right )+\sum_{j=t-1}^{t-m} \left (\prod_{i=t}^{j+1} V_i^T \right ) \left ( \rho_j\Delta x_j \Delta x_j^T\right ) \left (\prod_{i=j+1}^t V_i \right )Bt1=(i=t1tmViT)B01(i=tmt1Vi)+j=t1tm(i=tj+1ViT)(ρjΔxjΔxjT)(i=j+1tVi)

2)L-BFGS应用

上述公式的代码实现如下,其中si=Δxis_i=\Delta x_isi=Δxi,yi=Δgiy_i=\Delta g_iyi=Δgi,Hk=Bk−1H_k=B_k^{-1}Hk=Bk1
在这里插入图片描述
因此,L-BFGS的算法流程如下:
在这里插入图片描述

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值