数值优化-BFGS

本文详细介绍了数值优化中的BFGS算法,包括BFGS更新公式,如何保证下降方向,以及其在严格凸和非凸函数中的应用。针对非凸函数,讨论了Wolfe条件及其弱化和强化形式,并提出谨慎更新策略。同时,介绍了有限内存BFGS(L-BFGS)以降低计算复杂度,并探讨了BFGS在非光滑函数中的应用和线搜索策略。
摘要由CSDN通过智能技术生成

数值优化-BFGS

根据前文的拟牛顿法,我们希望求得矩阵 B B B 来近似海森阵的逆,从而还原出海森阵中的曲率信息,满足
Δ x ≈ B k + 1 Δ g , M k + 1 B k + 1 = I \Delta x \approx B^{k+1}\Delta g, M^{k+1}B^{k+1}=I ΔxBk+1Δg,Mk+1Bk+1=I
因为满足要求的矩阵有无数多个,因此通过构建优化问题,来求得一个最优的 B B B
min ⁡ B ∥ H 1 2 ( B − B k ) H 1 2 ∥ 2  s.t.  B = B T Δ x = B Δ g H = ∫ 0 1 ∇ 2 f [ ( 1 − τ ) x k + τ x k + 1 ] d τ \begin{array}{c} \min _B \left\| H^\frac{1}{2}\left(B - B^k\right)H^\frac{1}{2}\right\|^2 \\ \begin{aligned} \text { s.t. } B&=B^{\mathrm{T}} \\ \Delta x &=B \Delta g \end{aligned}\\ H=\int_0^1 \nabla^2 f\left[(1-\tau) x^k+\tau x^{k+1}\right] d \tau \end{array} minB H21(BBk)H21 2 s.t. BΔx=BT=BΔgH=012f[(1τ)xk+τxk+1]dτ

BFGS更新

我们可通过BFGS更新公式来求得满足要求的矩阵 B B B
B k + 1 = ( I − Δ x Δ g T Δ g T Δ x ) B k ( I − Δ g Δ x T Δ g T Δ x ) + Δ x Δ x T Δ g T Δ x B 0 = I , Δ x = x k + 1 − x k , Δ g = ∇ f ( x k + 1 ) − ∇ f ( x k ) \begin{aligned} & B^{k+1}=\left(I-\frac{\Delta x \Delta g^T}{\Delta g^T \Delta x}\right) B^k\left(I-\frac{\Delta g \Delta x^T}{\Delta g^T \Delta x}\right)+\frac{\Delta x \Delta x^T}{\Delta g^T \Delta x} \\ & B^0=I, \Delta x=x^{k+1}-x^k, \Delta g=\nabla f\left(x^{k+1}\right)-\nabla f\left(x^k\right) \end{aligned} Bk+1=(IΔgTΔxΔxΔgT)Bk(IΔgTΔxΔgΔxT)+ΔgTΔxΔxΔxTB0=I,Δx=xk+1xk,Δg=f(xk+1)f(xk)
这样, M = B − 1 M=B^{-1} M=B1 即为海森阵的逆矩阵的近似,且满足:

  • 无需求二阶导数
  • 线性方程组有闭式解(求出 B B B 后,即可直接求出 d = − B g d=-Bg d=Bg
  • 轻量,便于存储( O ( n 2 ) O(n^2) O(n2)
  • 保证下降方向
  • 包含曲率信息

为了保证下降方向 B = M − 1 B=M^{-1} B=M1 需正定。
我们可以证明:若满足
Δ g ⊤ Δ x > 0 \Delta g^\top\Delta x > 0 ΔgΔx>0
BFGS更新可以保留 B B B 的正定
证明见文章末尾。

BFGS用于严格凸的光滑函数

对于严格凸函数
⟨ y − x , ∇ f ( y ) − ∇ f ( x ) ⟩ > 0 ⇒ Δ g ⊤ Δ x > 0 \langle y-x,\nabla f(y)-\nabla f(x)\rangle >0\Rightarrow \Delta g^\top\Delta x > 0 yx,f(y)f(x)⟩>0ΔgΔx>0
因此一定能保证 d d d 为下降方向。
用于严格凸函数的BFGS算法如下:
initialize    x 0 , g 0 ← f ( x 0 ) ,   B 0 ← I ,   k ← 0 while    ∥ g k ∥ > δ do d ← − B k g k t ← backtracking line serach (Armijo) x k + 1 ← x k + t d g k + 1 ← ∇ f ( x k + 1 ) B k + 1 ← BFGS ( B k , g k + 1 − g k , x k + 1 − x k ) k ← k + 1 end   while return \begin{aligned} &\textbf{initialize}~~ x^{0},g^{0}\leftarrow f(x^{0}),\,B^{0}\leftarrow I,\,k\leftarrow 0\\ &\textbf{while}~~ \Vert g^{k}\Vert>\delta\quad\textbf{do}\\ &\qquad d\leftarrow -B^{k}g^{k}\\ &\qquad t\leftarrow \text{backtracking line serach (Armijo)}\\ &\qquad x^{k+1}\leftarrow x^{k}+td\\ &\qquad g^{k+1}\leftarrow \nabla f(x^{k+1})\\ &\qquad B^{k+1}\leftarrow \text{BFGS}(B^{k},g^{k+1}-g^{k},x^{k+1}-x^{k})\\ &\qquad k\leftarrow k+1\\ &\textbf{end while}\\ &\textbf{return} \end{aligned} initialize  x0,g0f(x0),B0I,k0while  gk>δdodBkgktbacktracking line serach (Armijo)xk+1xk+tdgk+1f(xk+1)Bk+1BFGS(Bk,gk+1gk,xk+1xk)kk+1end whilereturn

BFGS用于非凸函数

对于非凸函数,我们可以在线搜索中使用 Wolfe Condition 来保证 Δ g ⊤ Δ x > 0 \Delta g^\top\Delta x > 0 ΔgΔx>0,从而保证下降方向:
Wolfe → Δ g T Δ x > 0 → B  is PD → d  为下降方向 \text{Wolfe}\rightarrow \Delta g^{T}\Delta x>0\rightarrow B\text{ is PD}\rightarrow d\text{ 为下降方向} WolfeΔgTΔx>0B is PDd 为下降方向

Wolfe Condition

weak wolfe condition

给定参数 0 < c 1 < c 2 < 1 0<c_{1}<c_{2}<1 0<c1<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值