L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存受限的拟牛顿法 —— 数值优化算法

本文主要讲下个人对数值优化算法中几种常见算法的理解。


什么是优化算法?

给出函数f(X),现在要求 min f(X) 时的X值,这就是最优化问题。


1. 共轭梯度法

方程:A*x=b,A矩阵为对称正定矩阵,b为向量,目标为求解出向量 x 。

个人认为共轭梯度法并不能被当做是一个真正的优化算法,因为共轭梯度法很难单独使用,而是作为其他优化算法的一个辅助使用,因为共轭梯度法只是求解方程组解的一种算法。


2. 最速下降法

最为常用的优化算法之一,如果接触过神经网络模型的话应该对这个算法最为了解,直白的说就是在每次优化时都沿着函数梯度的负方向。该方法是优化算法中当步运算量最小的算法,但是对于一些复杂的优化问题,如病态优化问题,很难获得较好的优化结果,因为最速下降法(梯度下降法)只是一阶优化算法,而不是二阶优化算法。


3. 牛顿法

牛顿法是二阶优化算法,也是最为常见的优化算法。牛顿法是二阶优化算法,每步优化都需要计算出原函数的二阶梯度矩阵,即Hession矩阵,并获得类似H*x=b的形式的方程,并进行求解,因此使用牛顿法时可以搭配共轭梯度法进行使用。


4. 拟牛顿法(DFP/BFGS)

牛顿法需要计算原函数的二阶导Hession矩阵,并解H*x=b方程,相当于求解 Hession 的逆矩阵,为此拟牛顿法对Hession矩阵的逆矩阵进行拟合近似,于是有 \(B\approx H^{-1}\),各种拟牛顿法就是在求解这个B矩阵,为此常见的拟牛顿法有DFP法和BFGS法。


5. 内存受限的拟牛顿法(L-BFGS)

拟牛顿法虽然避免了牛顿法求解Hession逆矩阵的复杂运算,但是即使通过计算近似矩阵B可以替代Hession逆矩阵,但是矩阵B也会占用大量的内存空间,如果优化变量的size为n,那么矩阵B的size就是n*n,如果变量为1000000个,那么B矩阵中数字个数为1000000*1000000,因此为了避免因为内存无法存储B矩阵而导致无法计算的情况,于是有了内存受限的拟牛顿法(L-BFGS)。L-BFGS算法通过保留计算历史中的m个历史的变量值和一阶导数,来近似计算出\(B^{-1}b\),因此内存中只需要存储mn大小的空间,而不是nn大小的空间,这里m为远小于n的值,如n=1000000,m=30。



总结:


牛顿法,最后需要求解的是 \(H*x=b\),也就是\(x=H^{-1}*b\),难点在于求 \(H^{-1}\)以及存储矩阵\(H^{-1}\)


拟牛顿法,通过\(B\approx H^{-1}\),来解决对\(H^{-1}\)的复杂求解,但是没有解决对\(H^{-1}\)的存储问题,最终的求解形式为 \(x=B*b\)


内存受限的拟牛顿法,通过对最近历史中的m个变量值及其一阶导数的保存,并用此近似计算出\(B*b\),直接求出近似的 \(x\) 解,由此解决 \(H^{-1}\) 矩阵和 \(B\) 矩阵难以存储的问题。



posted on 2024-02-28 14:28  Angry_Panda  阅读(2095)  评论(0)    收藏  举报

导航