拟牛顿法学习

本文详细介绍了拟牛顿法的基本思想和应用,特别是秩1矩阵的矫正步骤。通过逼近海森矩阵,利用秩1矩阵更新规则优化搜索方向,确保算法的收敛性和效率。在算法实现中,给出了SR1(拟牛顿法的一种)的迭代过程,包括步长选择和矩阵更新,展示了如何逐步接近最优解。
摘要由CSDN通过智能技术生成

拟牛顿法

拟牛顿法的基本思想就是将海森矩阵 G k = ∇ 2 f ( x k ) \mathbf{G}_k=\nabla^2 f\left(\mathbf{x}_k\right) Gk=2f(xk)用一个近似矩阵 B k \mathbf{B}_k Bk来代替

通常 B k \mathbf{B}_k Bk应该有3个特点

  1. B k ≈ G k \mathbf{B}_k\approx \mathbf{G}_k BkGk使相应的算法产生的方向近似于牛顿方向,以确保算法具有较快的收敛速度
  2. 对于所有的 k k k, B k \mathbf{B}_k Bk对称正定,从而使得算法产生的方向是函数 f f f x k \mathbf{x}_k xk处的下降方向
  3. B k \mathbf{B}_k Bk更新规则相对简单,即通常采用一个秩1矩阵或者秩2矩阵来矫正

f : R n → R f:\mathbb{R}^n\to \mathbb{R} f:RnR在开集 D ⊂ R n D\subset \mathbb{R}^n DRn上二次连续可微,则
f ( x ) ≈ ( x k + 1 ) + g k + 1 T ( x − x k + 1 ) + 1 2 ( x − x k + 1 ) T G k + 1 ( x − x k + 1 ) f\left(\mathbf{x}\right)\approx \left(\mathbf{x}_{k+1}\right)+\mathbf{g}_{k+1}^{T}\left(\mathbf{x}-\mathbf{x}_{k+1}\right)+\frac{1}{2}\left(\mathbf{x}-\mathbf{x}_{k+1}\right)^T\mathbf{G}_{k+1}\left(\mathbf{x}-\mathbf{x}_{k+1}\right) f(x)(xk+1)+gk+1T(xxk+1)+21(xxk+1)TGk+1(xxk+1)
求导
g ( x ) = g k + 1 + G k + 1 ( x − x k + 1 ) \mathbf{g}\left(\mathbf{x}\right)=\mathbf{g}_{k+1}+\mathbf{G}_{k+1}\left(\mathbf{x}-\mathbf{x}_{k+1}\right) g(x)=gk+1+Gk+1(xxk+1)

x = x k , s k = x k + 1 − x k , y k = g k + 1 − g k \mathbf{x}=\mathbf{x}_k,\mathbf{s}_{k}=\mathbf{x}_{k+1}-\mathbf{x}_k,\mathbf{y}_k=\mathbf{g}_{k+1}-\mathbf{g}_k x=xk,sk=xk+1xk,yk=gk+1gk,则有
G k + 1 s k ≈ y k \mathbf{G}_{k+1}\mathbf{s}_k\approx \mathbf{y}_k Gk+1skyk

现在要构造近似的矩阵 B k \mathbf{B}_k Bk,即
B k + 1 s k = y k \mathbf{B}_{k+1}\mathbf{s}_k=\mathbf{y}_k Bk+1sk=yk
H k + 1 = B k + 1 − 1 \mathbf{H}_{k+1}=\mathbf{B}_{k+1}^{-1} Hk+1=Bk+11,则有
H k + 1 y k = s k \mathbf{H}_{k+1}\mathbf{y}_{k}=\mathbf{s}_k Hk+1yk=sk

根据第三个特点,可以令
B k + 1 = B k + E k , H k + 1 = H k + D k \mathbf{B}_{k+1}=\mathbf{B}_{k}+\mathbf{E}_k,\quad\mathbf{H}_{k+1}=\mathbf{H}_k+\mathbf{D}_k Bk+1=Bk+Ek,Hk+1=Hk+Dk
其中 E k , D k \mathbf{E}_k,\mathbf{D}_k Ek,Dk是秩1矩阵或者秩2矩阵

秩1矫正

E k = α u k u k T \mathbf{E}_k=\alpha \mathbf{u}_k\mathbf{u}_k^T Ek=αukukT,其中 α ∈ R , u k ∈ R n \alpha \in \mathbb{R},\mathbf{u}_k\in\mathbb{R}^n αR,ukRn
于是
( B k + α u k u k T ) s k = y k \left(\mathbf{B}_k+\alpha\mathbf{u}_k\mathbf{u}_k^T\right)\mathbf{s}_k=\mathbf{y}_k (Bk+αukukT)sk=yk

α ( u k T s k ) u k = y k − B k s k \alpha\left(\mathbf{u}_k^T\mathbf{s}_k\right)\mathbf{u}_k=\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k α(ukTsk)uk=ykBksk
也就是说 u k \mathbf{u}_k uk平行于 y k − B k s k \mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k ykBksk,即存在 β \beta β,使得 u k = β ( y k − B k s k ) \mathbf{u}_k=\beta\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right) uk=β(ykBksk)

因此
E k = α β 2 ( y k − B k s k ) ( y k − B k s k ) T \mathbf{E}_k=\alpha\beta^2\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T Ek=αβ2(ykBksk)(ykBksk)T
以及
α β 2 [ ( y k − B k s k ) T s k ] ( y k − B k s k ) = ( y k − B k s k ) \alpha\beta^2\left[\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_k\right]\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)=\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right) αβ2[(ykBksk)Tsk](ykBksk)=(ykBksk)
如果 ( y k − B k s k ) T s k ≠ 0 \left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_{k}\neq 0 (ykBksk)Tsk=0

α β 2 [ ( y k − B k s k ) T s k ] = 1 \alpha\beta^2\left[\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_k\right]=1 αβ2[(ykBksk)Tsk]=1
于是
α β 2 = 1 ( y k − B k s k ) T s k \alpha\beta^2=\frac{1}{\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_k} αβ2=(ykBksk)Tsk1
然后
E k = ( y k − B k s k ) ( y k − B k s k ) T ( y k − B k s k ) T s k \mathbf{E}_k=\frac{\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T}{\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_k} Ek=(ykBksk)Tsk(ykBksk)(ykBksk)T
所以
B k + 1 = B k + ( y k − B k s k ) ( y k − B k s k ) T ( y k − B k s k ) T s k \mathbf{B}_{k+1}=\mathbf{B}_k+\frac{\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T}{\left(\mathbf{y}_{k}-\mathbf{B}_k\mathbf{s}_k\right)^T\mathbf{s}_k} Bk+1=Bk+(ykBksk)Tsk(ykBksk)(ykBksk)T
类似地
H k + 1 = H k + ( s k − H k y k ) ( s k − H k y k ) T ( s k − H k y k ) T y k \mathbf{H}_{k+1}=\mathbf{H}_{k}+\frac{\left(\mathbf{s}_{k}-\mathbf{H}_k\mathbf{y}_k\right)\left(\mathbf{s}_{k}-\mathbf{H}_k\mathbf{y}_k\right)^T}{\left(\mathbf{s}_{k}-\mathbf{H}_k\mathbf{y}_k\right)^T\mathbf{y}_k} Hk+1=Hk+(skHkyk)Tyk(skHkyk)(skHkyk)T

所以秩1矫正步骤
初始化:选定 x 0 \mathbf{x}_0 x0 H 0 \mathbf{H}_0 H0(通常选择 I n \mathbf{I}_n In)
步骤:
1.若 ∥ g k ∥ ≤ ϵ \|\mathbf{g}_k\|\le \epsilon gkϵ,停止,输出 x k \mathbf{x}_k xk
2.计算 d k = − H k g k \mathbf{d}_k=-\mathbf{H}_k\mathbf{g}_k dk=Hkgk
3.求步长 α k \alpha_k αk
4. x k + 1 = x k + α k d k \mathbf{x}_{k+1}=\mathbf{x}_k+\alpha_k\mathbf{d}_k xk+1=xk+αkdk,矫正 H k \mathbf{H}_{k} Hk得到 H k + 1 \mathbf{H}_{k+1} Hk+1
5.k=k+1,转1

代码:

function [x,fun_val]=sr1(f,g,x0,s,alpha,...
    beta,epsilon)
% sr1 with backtracking stepsize rule
%
% INPUT
%=======================================
% f ......... objective function
% g ......... gradient of the objective function
% x0......... initial point
% s ......... initial choice of stepsize
% alpha ..... tolerance parameter for the stepsize selection
% beta ...... the constant in which the stepsize is multiplied
%             at each backtracking step (0<beta<1)
% epsilon ... tolerance parameter for stopping rule
% OUTPUT
%=======================================
% x ......... optimal solution (up to a tolerance)
%             of min f(x)
% fun_val ... optimal function value
grad=g(x0);
fun_val=f(x0);
iter=0;
H_k=eye(length(x0));
while (norm(grad)>epsilon)
    iter=iter+1;
    dk=H_k*grad;
    t=s;
    while (fun_val-f(x0-t*dk)<alpha*t*grad'*dk)
        t=beta*t;
    end
    x=x0-t*dk;
    s_k=x-x0;
    y_k=g(x)-grad;
    H_k=H_k+(s_k-H_k*y_k)*(s_k-H_k*y_k)'/((s_k-H_k*y_k)'*y_k);
    fun_val=f(x);
    grad=g(x);
    x0=x;
    fprintf('iter_number = %3d norm_grad = %2.6f fun_val = %2.6f \n',...
        iter,norm(grad),fun_val);
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nightmare004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值