数值优化(Numerical Optimization)学习系列-大规模无约束最优化(Large-Scale Unconstrained Optimization)

概述

当最优化问题参数个数增加,求解问题所需要的时间和空间复杂度会增加。计算时间和空间是一个权衡,只需要存储一阶梯度时,时间复杂度可能为超线性;如果利用Hessian矩阵可以达到二次收敛,但是需要 o(n2) 的空间复杂度。
另外对于拟牛顿算法所得到的Hessian矩阵式稠密的,不能利用到稀疏矩阵的一些性质。针对以上问题本小节给出求解大规模无约束最优化问题的一些思路,主要内容包括

  1. 非精确牛顿方法
  2. 基于有限内存的拟牛顿方法
  3. 稀疏拟牛顿方法
  4. 其他

非精确牛顿方法(Inexact Newton Methods)

在牛顿算法中,根据牛顿方程 2fkpNk=fk ,在Hessian矩阵存在并且可逆的情况下,可以得到搜索方向,并且收敛速度为二次收敛。但是一般情况下Hessian逆矩阵求解复杂度较高,对于稀疏的Hessian可以通过稀疏消元法或者矩阵分解得到。
非精确牛顿方法,可以快速得到搜索方向,一般通过共轭梯度(CG)或者Lanczos方法。通过这些方法可以不用显式存储Hessian矩阵,但是效率没有牛顿方法快。

局部收敛性

非精确牛顿方法需要保证残差满足一定规则保证收敛,对于非精确的搜索方向 pk ,满足 rk=2fkpk+fk ,并且 ||rk||ηk||fk|| ,其中 ηk 的序列称之为forcing sequence,决定了收敛速度。

定理:如果 2fk 存在并且连续,存在最优解x*。对于非精确牛顿方法,如果初始点 x0 在最优解附近,则有 xkx ,并且 ||2f(x)(xk+1x)||η^||2f(x)(xk+1x)||

定理:在上述定理基础上如果每一步的 ηk0 则收敛速度为超线性;进一步,如果 2fk Lipschitz连续并且 ηk=o(|fk|) 则收敛速度为二次收敛。

注:当 ηk=min(0.5,||fk||) 时,方法能得到超线性收敛速度;当 ηk=min(0.5,||fk||) 时,达到二次收敛速度。

Line Search Newton-CG方法

通过CG方法计算得到搜索方向,也称之为Truncated Newton 方法。由于CG算法需要保证Hessian正定,如果Hessian存在非正的特征值,则需要在找到某个下降方向则立即返回,算法如下:
数值优化(Numerical Optimization)学习系列-大规模无约束最优化(Large-Scale Unconstrained Optimization)_第1张图片
算法中关键点是CG算法,该方法能够适用于大规模问题,但是存在一个缺点是当实际中Hessian接近奇异时,该方向不是一个好的选择。

通过上述算法我们可以在不知道Hessian矩阵的前提下计算得到Hessian矩阵和向量的乘积即 2fkd ,d可以为任何向量。另外通过自动微分的方法也可以得到类似解,思路为 2fkd=f(xk+hd)f(xk)h ,其中需要核实的选择向量h。

Trust Region Newton-CG方法

在基础Cauchy Point算法的基础上,优化搜索方向。TR算法的建模方法为

mk(p)=fk+fTkp+12pTBkp, st. ||p||Δ
,可以通过CG算法得到B.算法为
数值优化(Numerical Optimization)学习系列-大规模无约束最优化(Large-Scale Unconstrained Optimization)_第2张图片
该算法和Line Search方法的主要区别在于搜索方向需要满足一定约束。

Trust-Region Newton–LANCZOS方法

上述算法的缺点是会接受任何下降方向作为搜索方向,即使下降方向非常小。Lanczos就是一类避免该问题的方法。

有限内存的拟牛顿方法

基于有限内存的方法主要解决的问题是,1)Hessian矩阵存储较大或者计算困难。2)二是近似的Hessian是稠密的。
有限内存方法通过维护有限个向量来隐式表示Hessian矩阵,通过该方法至少线性收敛。
该类方法比较类似,本节主要介绍LBFGS算法,即在BFGS上进行有限内存限制。
L-BFGS通过最近m次的曲度信息来重建Hessian矩阵。

LBFGS推导

回顾一下BFGS算法思路

xk+1=xkαkHkfkHk+1=vTkHkvk+ρksksTkρk=1/yTksk,vk=IρkyksTksk=xk+1xk,yk=fk+1fk

L-BFGS 的思路是保留有限个m个 (si,yi) 对,重建Hessian矩阵而不是保存整个Hessian矩阵。
根据Hessian重构规则,计算第k步的Hessian矩阵只能通过前m个 (si,yi) 计算得到,即
Hk=vTk1Hk1vk1+ρk1sk1sTk1=vTk1(vTk2Hk2vk2+ρk2sk2sTk2)vk1+ρk1sk1sTk1=vTk1vTk2Hk2vk2vk1+vTk1ρk2sk2sTk2vk1+ρk1sk1sTk1=...=vTk1vk2...vTkmH0kvkm...vk2vk1+ρkm(vTk1...vkm+1T)skmsTkm(vkm+1...vk1)+...+ρk1sk1sTk1

通过该分解可以快速计算得到 Hkfk ,算法为:
数值优化(Numerical Optimization)学习系列-大规模无约束最优化(Large-Scale Unconstrained Optimization)_第3张图片
上述算法有三个要点,可证明通过该算法可以得到 Hkfk ,分别说明如下
1) 参数q推导如下: qk=fk ,则
qi=qi+1αiyi=qi(ρisTiqk+1)yi=qi+1(ρiyisTi+1qk+1)=(IρiyisTi)qi+1=viqi+1=...=vivi+1vi+2...vk1qk

2) 由于
αi=ρisTiqi=ρisTivivi+1vi+2...vk1qk

3)初始化r时,此时 rkm1=H0kqkm=vkmvkm+1vkm+2...vk1qk
4)推导r,
ri=ri1+si(αiβ)=ri1+si(αiρiyTiri1)=siαi+ri1siρiyTiri1=siαi+vTiri1=siαi+vTi(si1αi1+vTi1ri2)=siαi+vTisi1αi1+vTivTi1si2αi2+...+vTivTi1...vTkmskmαkm+vTivTi1...vTkmrkm1

5)计算 rk1=Hkk 并且代入相关参数。
6)该算法时间复杂度大约为4mn。
7)变量 H0k 和计算没有关系,并且每一步的选择都不同,一般选择为 H0k=γkI γk=sTk1yk1yTk1yk1 ,该选择在实践中比较有效。

LBFGS算法

综上可以得到LBFGS算法
数值优化(Numerical Optimization)学习系列-大规模无约束最优化(Large-Scale Unconstrained Optimization)_第4张图片
在实际中LBFGS表现较好,主要缺点是当实际的Hessian矩阵的特征向量分布较宽时,即条件数比较大时,收敛速度变慢。
另外LBFGS中应用到的思路可以应用到其他拟牛顿方法中。LBFGS主要用到的原理是矩阵可以近似为低秩空间中表示。

稀疏拟牛顿方法

实际需求要保持近似的Hessian矩阵和实际的保持相同的稀疏性,期望用较少的存储得到更好的解和收敛性。
前提是通过知道Hessian中不为0的点,即为 Ω=(i,j)|H(i,j)0
建模思路为

min||BBk||2=(i,j)Ω(B(i,j)Bk(i,j))2s.t. Bsk=yk,B=BT,B(i,j)=0,(i,j)Ω

实际效果不太好

总结

通过该小结的学习,需要了解
1)大规模无约束最优化需要解决那些问题
2)非精确牛顿方法求解思路
3)LBFGS求解和推导

你可能感兴趣的:(数值优化,数值优化,大规模无约束最优化,LBFGS)