当最优化问题参数个数增加,求解问题所需要的时间和空间复杂度会增加。计算时间和空间是一个权衡,只需要存储一阶梯度时,时间复杂度可能为超线性;如果利用Hessian矩阵可以达到二次收敛,但是需要 o(n2) 的空间复杂度。
另外对于拟牛顿算法所得到的Hessian矩阵式稠密的,不能利用到稀疏矩阵的一些性质。针对以上问题本小节给出求解大规模无约束最优化问题的一些思路,主要内容包括
在牛顿算法中,根据牛顿方程 ∇2fkpNk=−∇fk ,在Hessian矩阵存在并且可逆的情况下,可以得到搜索方向,并且收敛速度为二次收敛。但是一般情况下Hessian逆矩阵求解复杂度较高,对于稀疏的Hessian可以通过稀疏消元法或者矩阵分解得到。
非精确牛顿方法,可以快速得到搜索方向,一般通过共轭梯度(CG)或者Lanczos方法。通过这些方法可以不用显式存储Hessian矩阵,但是效率没有牛顿方法快。
非精确牛顿方法需要保证残差满足一定规则保证收敛,对于非精确的搜索方向 pk ,满足 rk=∇2fkpk+∇fk ,并且 ||rk||≤ηk||∇fk|| ,其中 ηk 的序列称之为forcing sequence,决定了收敛速度。
定理:如果 ∇2fk 存在并且连续,存在最优解x*。对于非精确牛顿方法,如果初始点 x0 在最优解附近,则有 xk→x∗ ,并且 ||∇2f(x∗)(xk+1−x∗)||≤η^||∇2f(x∗)(xk+1−x∗)||
定理:在上述定理基础上如果每一步的 ηk→0 则收敛速度为超线性;进一步,如果 ∇2fk Lipschitz连续并且 ηk=o(|∇fk|) 则收敛速度为二次收敛。
注:当 ηk=min(0.5,||∇fk||−−−−−−√) 时,方法能得到超线性收敛速度;当 ηk=min(0.5,||∇fk||) 时,达到二次收敛速度。
通过CG方法计算得到搜索方向,也称之为Truncated Newton 方法。由于CG算法需要保证Hessian正定,如果Hessian存在非正的特征值,则需要在找到某个下降方向则立即返回,算法如下:
算法中关键点是CG算法,该方法能够适用于大规模问题,但是存在一个缺点是当实际中Hessian接近奇异时,该方向不是一个好的选择。
通过上述算法我们可以在不知道Hessian矩阵的前提下计算得到Hessian矩阵和向量的乘积即 ∇2fkd ,d可以为任何向量。另外通过自动微分的方法也可以得到类似解,思路为 ∇2fkd=∇f(xk+hd)−∇f(xk)h ,其中需要核实的选择向量h。
在基础Cauchy Point算法的基础上,优化搜索方向。TR算法的建模方法为
上述算法的缺点是会接受任何下降方向作为搜索方向,即使下降方向非常小。Lanczos就是一类避免该问题的方法。
基于有限内存的方法主要解决的问题是,1)Hessian矩阵存储较大或者计算困难。2)二是近似的Hessian是稠密的。
有限内存方法通过维护有限个向量来隐式表示Hessian矩阵,通过该方法至少线性收敛。
该类方法比较类似,本节主要介绍LBFGS算法,即在BFGS上进行有限内存限制。
L-BFGS通过最近m次的曲度信息来重建Hessian矩阵。
回顾一下BFGS算法思路
综上可以得到LBFGS算法
在实际中LBFGS表现较好,主要缺点是当实际的Hessian矩阵的特征向量分布较宽时,即条件数比较大时,收敛速度变慢。
另外LBFGS中应用到的思路可以应用到其他拟牛顿方法中。LBFGS主要用到的原理是矩阵可以近似为低秩空间中表示。
实际需求要保持近似的Hessian矩阵和实际的保持相同的稀疏性,期望用较少的存储得到更好的解和收敛性。
前提是通过知道Hessian中不为0的点,即为 Ω=(i,j)|H(i,j)≠0
建模思路为
实际效果不太好
通过该小结的学习,需要了解
1)大规模无约束最优化需要解决那些问题
2)非精确牛顿方法求解思路
3)LBFGS求解和推导