首页 > 其他分享 >拟牛顿法

拟牛顿法

时间:2023-12-15 23:11:05浏览次数:33  
标签:begin end matrix nabla 牛顿 beta ky

1 拟牛顿法

牛顿法:$$x_{k+1} = x_k - \nabla^2 f(x_k)^{-1} \nabla f(x_k)$$
牛顿法的缺陷在于 \(\nabla^2 f(x_k)\) 难以求取和存储,因此有拟牛顿法(Quasi-Newton methods),通过在牛顿法的迭代中加入近似求取每一步\(Hessian\)矩阵的迭代步,仅通过迭代点处的梯度信息来求取\(Hessian\)矩阵的近似值。

我们把\(Hessian\)矩阵在第\(k\)步的迭代的近似值记作\(B_k\),通过\(B_k\)代替\(\nabla^2 f(x_k)\),得到新的迭代式:$$x_{k+1} = x_k - B_k^{-1} \nabla f(x_k)$$

为了保证\(B_{k+1}\)能较好地近似第\(k+1\)步的\(Hessian\)矩阵,令\(H_k = B_k^{-1}\),可以得到以下两个式子:

\[\begin{aligned} x_{k+1} = x_k - H_k \nabla f(x_k) \\ H_{k+1} = f(H_k) \end{aligned}\]

注意: 拟牛顿法是一种思想而不是具体方法,只要能满足上述迭代式并且收敛,那就是拟牛顿法

2 算法框架

令\(H_0 = I\),给出迭代初始值\(x_0\)和迭代停止阈值\(\epsilon > 0\)

while(1) {
计算梯度:\(\nabla f(x_k)\);
if(\(\| \nabla f(x_k) \|\) < \(\epsilon\))
break;
计算搜索方向:\(d_k = -H_k \nabla f(x_k)\);
更新迭代点:\(x_{k+1} = x_k - d_k\);
根据\(x_k\)处的信息更新\(H_k\);
}

为了观察\(f(x_{k+1})和f(x_k)\)的差值,使用泰勒展开:$$f(x_{k+1}) = f(x_k) + g_k^T d + o(|d|^2)$$
这里默认\(g_k^T<0\),但因为这里\(x_k\)和\(g_k\)(迭代点\(x_k\)处的梯度)固定,只能改变 d,因此问题转化为$$\max_d |g_k^Td|$$
当\(\cos<g_k, d>\)固定时,只要\(\|d\|^2\)够大,\(|g_k^Td|\)会变成\(\infty\),需要进行约束。规定\(\|d\|_{B_k}\), 定义为\(\|d^TB_kd\|\),则:$$\max_d |g_k^Td| \qquad s.t. |d|_{B_k} = 1$$
由 \(Cauchy-Schwartz\)不等式,

\[|g_k^Td| = \sqrt{(g_k^Td)^2} \leq \sqrt{(g_k^TB_k^{-1}g_k)(d^TB_kd)} = \sqrt{g_k^TB_k^{-1}g_k} \]

当且仅当\(d = -B_k^{-1}g_k\), "="

3 如何确定\(H_k\)的迭代更新?

设\(s_k = x_{k+1} - x_k, y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\),则$$B_{k+1}s_k = y_k$$

\[H_{k+1}y_k = s_k \]

SR1

根据\(x_k\)处的信息得到一个修正量\(\Delta H_k\)来更新:$$H_{k+1} = H_k + \Delta H_k$$

由于我们希望\(H_k\)接近\(\nabla^2 f(x_k)^{-1}\), \(H_{k+1}\)接近\(\nabla^2 f(x_{k+1})^{-1}\),有$$\Delta H_k = \nabla2f(x_{k+1}) - \nabla2f(x_k)$$
由于\(\nabla^2f(x_{k+1})^{-1} 和 \nabla^2f(x_k)^{-1}\)对称,所以\(\Delta H_k\)对称。

该算法设\(\delta H_k = \beta uu^T\),那么迭代式为$$H_{k+1} = H_k + \beta uu^T \tag{1}$$
其中\(\beta \in \mathbb{R}, u \in \mathbb{R}^n\)

在\((1)\)两边乘上\(y_k\),再根据\(H_{k+1}y_k = s_k\),有$$H_{k+1}y_k = H_ky_k + \beta uu^T y_k = s_k$$

\[\rightarrow s_k - H_ky_k = \beta (u^Ty_k)u \tag{2} \]

而\(\beta (u^T y_k)\)是实数,有 $$u = \frac{1}{\beta (u^T y_k)} (s_k - H_ky_k)$$
令\(\gamma = \frac{1}{\beta (u^T y_k)}\),所以$$u = \gamma (s_k - H_ky_k) \tag{3}$$
(2)可以表示成\(s_k - H_ky_k = \beta uu^T y_k\),将(3)代入,有

\[\begin{aligned} s_k - H_ky_k & = \beta \gamma^2 (s_k - H_ky_k)(s_k - H_ky_k)^Ty_k \\ & = \beta \gamma^2 (s_k - H_ky_k)[(s_k - H_ky_k)^Ty_k] \end{aligned} \tag{4} \]

注意到\(\beta \gamma^2 \in \mathbb{R}\) 和 \((s_k - H_ky_k)^Ty_k \in \mathbb{R}\),所以$$s_k - H_ky_k = [\beta \gamma^2(s_k - H_k y_k)^T y_k](s_k - H_ky_k)$$
显然当\(\beta \gamma^2(s_k - H_k y_k)^T y_k = 1\)时成立,则$$\beta \gamma^2 = \frac{1}{(s_k-H_ky_k)^Ty_k} \tag{5}$$
将(3)(5)代入(1),有

\[\begin{aligned} H_{k+1} & = H_k +\beta \gamma^2(s_k - H_ky_k)(s_k - H_ky_k)^T \\ & = H_k + \frac{(s_k-H_ky_k)(s_k-H_ky_k)^T}{(s_k-H_ky_k)^Ty_k} \end{aligned} \]

令\(H_0 = I\),给出迭代初始值\(x_0\)和迭代停止阈值\(\epsilon > 0\)

while(1) {
计算梯度:\(\nabla f(x_k)\);
if(\(\| \nabla f(x_k) \|\) < \(\epsilon\))
计算搜索方向:\(d_k = -H_k \nabla f(x_k)\);
更新迭代点:\(x_{k+1} = x_k - d_k\);
更新\(H_{k+1} = H_k + \frac{(s_k-H_ky_k)(s_k-H_ky_k)^T}{(s_k-H_ky_k)^Ty_k}\);
}

DFP

其基本思路同\(SR1\)类似,我们令\(\Delta H_k = \beta uu^T + \gamma vv^T\),有$$H_{k+1} = H_k + \beta uu^T + \gamma vv^T \tag{1} $$
\(\beta\) 和 \(\gamma\)是待定系数

在上式两边右乘\(y_k\): $$s_k = H_{k+1}y_k = H_ky_k + \beta uu^Ty_k + \gamma vv^T y_k \tag{2}$$
取\(u = s_k, v = H_ky_k\)(取的过程我不知道┭┮﹏┭┮),改写(2): $$s_k - H_ky_k = \beta uu^T y_k + \gamma vv^T y_k$$
令\(\beta uu^T y_k = s_k, \gamma vv^T y_k = - H_ky_k\),所以 $$u = s_k = \beta uu^Ty_k = (\beta u^Ty_k)u$$
为了上式恒成立,有\(\beta u^Ty_k = 1\),因此$$\beta = \frac{1}{u^Ty_k} = \frac{1}{s_k^Ty_k}$$
同理, \(\gamma = - \frac{1}{v^Ty_k} = - \frac{1}{y^T_kH_ky_k}\)

将\(\beta, \gamma, u, v\)代入(1),我们可以得到迭代式 $$H_{k+1} = H_k + \frac{s_ks_kT}{s_KTy_k} - \frac{H_ky_ky_kTH_k}{y_kTH_ky_k}$$

令\(H_0 = I\),给出迭代初始值\(x_0\)和迭代停止阈值\(\epsilon > 0\)

while(1) {
计算梯度:\(\nabla f(x_k)\);
if(\(\| \nabla f(x_k) \|\) < \(\epsilon\))
计算搜索方向:\(d_k = -H_k \nabla f(x_k)\);
更新迭代点:\(x_{k+1} = x_k - d_k\);
更新\(H_{k+1} = H_k + \frac{s_ks_k^T}{s_K^Ty_k} - \frac{H_ky_ky_k^TH_k}{y_k^TH_ky_k}\);
}

BFGS

考虑对\(B_k\) (对\(\nabla^2 f(x_k)\)的近似) 的修正,同DFP得到$$B_{k+1} = B_{k} + \frac{y_ky_kT}{y_kTs_k} - \frac{B_ks_ks_kTB_k}{s_kTB_ks_k} \tag{1} $$

引理1(矩阵求逆引理)

\[\begin{aligned} (A^{-1}+BD^{-1}C)^{-1} & \equiv A - AB(D+CAB)^{-1}CA \\ (D+CAB)^{-1} & \equiv D^{-1} - D^{-1}C(A^{-1}+BD^{-1}C)^{-1}BD^{-1} \\ AB(D+CAB)^{-1} & \equiv (A^{-1} + BD^{-1}C)^{-1}BD^{-1} \\ (D+CAB)^{-1}CA & \equiv D^{-1}C(A^{-1}+BD^{-1}C)^{-1}\end{aligned} \]

证明

对一个矩阵分别进行LDU和UDL分解:

\[\left[ \begin{matrix} A^{-1} & -B \\ C & D \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 \\ CA & 1 \end{matrix} \right] \left[ \begin{matrix} A^{-1} & 0 \\ 0 & D+CAB \end{matrix} \right] \left[ \begin{matrix} 1 & -AB \\ 0 & 1 \end{matrix} \right] \tag{LDU} \]

\[\left[ \begin{matrix} A^{-1} & -B \\ C & D \end{matrix} \right] = \left[ \begin{matrix} 1 & -BD^{-1} \\ 0 & 1 \end{matrix} \right] \left[ \begin{matrix} A^{-1}+BD^{-1}C & 0 \\ 0 & D \end{matrix} \right] \left[ \begin{matrix} 1 & 0 \\ D^{-1}C & 1 \end{matrix} \right] \tag{ULD} \]

两边同时求逆

\[\begin{aligned} (\left[ \begin{matrix} A^{-1} & -B \\ C & D \end{matrix} \right])^{-1} & = \left[ \begin{matrix} 1 & AB \\ 0 & 1 \end{matrix} \right] \left[ \begin{matrix} A & 0 \\ 0 & (D+CAB)^{-1} \end{matrix} \right] \left[ \begin{matrix} 1 & 0 \\ -CA & 1 \end{matrix} \right] \\ & = \left[ \begin{matrix} A-AB(D+CAB)^{-1}CA & AB(D+CAB)^{-1} \\ -(D+CAB)^{-1}CA & (D+CAB)^{-1} \end{matrix} \right] \end{aligned} \]

\[\begin{aligned} (\left[ \begin{matrix} A^{-1} & -B \\ C & D \end{matrix} \right])^{-1} & = \left[ \begin{matrix} 1 & 0 \\ -D^{-1}C & 1 \end{matrix} \right] \left[ \begin{matrix} (A^{-1}+BD^{-1}C)^{-1} & 0 \\ 0 & D^{-1} \end{matrix} \right] \left[ \begin{matrix} 1 & BD^{-1} \\ 0 & 1 \end{matrix} \right] \\ & = \left[ \begin{matrix} (A^{-1}+BD^{-1}C)^{-1} & (A^{-1}+BD^{-1}C)^{-1}BD^{-1} \\ -D^{-1}C(A^{-1}+BD^{-1}C)^{-1} & D^{-1}-D^{-1}C(A^{-1}+BD^{-1}C)^{-1}BD^{-1} \end{matrix} \right] \end{aligned} \]

参考 《机器人学中的状态估计》 @深蓝学院

递归使用上面的引理1,令\(A = B_k + \frac{y_ky_k^T}{y_k^Ts_k},u = - \frac{B_ks_k}{s_k^TB_ks_k}, v = B_ks_k\)代入SMW公式,其中\(A^{-1}\)的计算再用一次SMW,可以得到

\[\begin{aligned} H_{k+1} = B^{-1}_{k+1} & = (B_k + \frac{y_ky_k^T}{y_k^Ts_k} - \frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k})^{-1} \\ & = H_k + (1+\frac{y_k^TH_ky_k}{s_k^Ty_k}) \frac{s_ks_k^T}{s_k^Ty_k}-(\frac{s_ky_k^TH_k+H_ky_ks_k^T}{s_k^Ty_k}) \end{aligned} \]

令\(H_0 = I\),给出迭代初始值\(x_0\)和迭代停止阈值\(\epsilon > 0\)

while(1) {
计算梯度:\(\nabla f(x_k)\);
if(\(\| \nabla f(x_k) \|\) < \(\epsilon\))
计算搜索方向:\(d_k = -H_k \nabla f(x_k)\);
更新迭代点:\(x_{k+1} = x_k - d_k\);
更新\(H_{k+1} = H_k + (1+\frac{y_k^TH_ky_k}{s_k^Ty_k}) \frac{s_ks_k^T}{s_k^Ty_k}-(\frac{s_ky_k^TH_k+H_ky_ks_k^T}{s_k^Ty_k})\);
}

标签:begin,end,matrix,nabla,牛顿,beta,ky
From: https://www.cnblogs.com/wanyy-home/p/17904350.html

相关文章

  • [最优化方法笔记] 牛顿法与修正牛顿法
    1.牛顿法1.1梯度下降法的缺点对于无约束优化问题:\[\min_{x\in\mathbb{R}^n}f(x)\]使用梯度下降法进行迭代:\[x^{k+1}=x^k-\alpha_k\nablaf(x^k)\]梯度下降的基本策略式沿着一阶导数的反方向(即最速下降方向)迭代。然而,当\(\text{Hessian}\)矩阵\(\nabla^2f(x......
  • 牛顿法、割线法、二分法
    1clear;clc;2%%牛顿法3f=@(x)x^4-4*x^2+4;%函数4df=@(x)4*x^3-8*x;%一阶导数5ddf=@(x)12*x^2-8;%二阶导数6N=1000;%最大迭代次数7x=zeros(N,1);%储存迭代点8x(1)=log(8);%初始点9eps=0.00001;%容许误差1011%迭代过程12fork=2:1:N13x(k)......
  • 放热公式与牛顿冷却定律的区别
    牛顿冷却定律和放热公式都是物理学中的概念,但是它们的应用场景和公式不同。牛顿冷却定律是指物体所损失的热的速率与物体和其周围环境间的温度差是成比例的。当物体表面与周围存在温度差时,单位时间从单位面积散失的热量与温度差成正比,比例系数称为热传递系数。其公式如下:$$\fra......
  • 牛顿插值法 不同阶图像对比及Python代码实现
    importmatplotlib.pyplotaspltimportnumpyasnpdefnewton_interpolation(X,Y,x):"""计算x点的插值"""sum=Y[0]temp=np.zeros((len(X),len(X)))#将第一行赋值foriinrange(0,len(X)):temp[i,0]=Y[i]......
  • 牛顿迭代法实现开平方
    笔算开平方的算法通常使用牛顿迭代法,也称为牛顿切线法。算法步骤如下:选择一个初始猜测值x0,一般来说可以选择1。根据牛顿迭代法的公式,计算下一个猜测值x1=(x0+a/x0)/2,其中a是待求平方根的数。重复步骤2,直到x1和x0的差值小于一个给定的精度eps,即|x1-x0|<eps。下面是......
  • 牛顿
    牛顿(1643-1727)牛顿1643年1月4日(儒略历1642年12月25日)诞生于英格兰东部小镇乌尔斯索普一个自耕农家庭。出生前八九个月父死于肺炎。自小瘦弱,孤僻而倔强。3岁时母亲改嫁,由外祖母抚养。11岁时继父去世,母亲又带3个弟妹回家务农。在不幸的家庭生活中,牛顿小学时成绩较差,“除设计机械外......
  • 牛顿插值法代码
    function[A,y]=newtonzi(X,Y,x)%Newton插值函数%X为已知数据点的x坐标%Y为已知数据点的y坐标%x为插值点的x坐标%函数返回A差商表%y为各插值点函数值n=length(X);m=length(x);fort=1:mz=x(t);A=zeros(n,n);A(:,1)=Y';s=0.0;y=0.0;c1=1.......
  • 优化算法——拟牛顿法之DFP算法
    4、求解具体的优化问题  求解无约束优化问题function.py#coding:UTF-8'''Createdon2015年5月19日@author:zhaozhiyong'''fromnumpyimport*#fundeffun(x):return100*(x[0,0]**2-x[1,0])**2+(x[0,0]-1)**2......
  • 优化算法——拟牛顿法之BFGS算法
    一、BFGS算法简介  BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BFGS校正。  同DFP校正的推导公式一样,DFP校正见博文“优化算法——拟牛顿法之DFP算法”。对于拟牛顿方程:。function.py#codin......
  • 优化算法——拟牛顿法之L-BFGS算法
    四、L-BFGS算法中的方向的计算方法五、实验仿真lbfgs.py#coding:UTF-8fromnumpyimport*fromfunctionimport*deflbfgs(fun,gfun,x0):result=[]#保留最终的结果maxk=500#最大的迭代次数rho=0.55sigma=0.4H0=eye(shape(x0)[0])......