简介
L-BFGS的算法原理及步骤。
关键字
拟牛顿法、BFGS、L-BFGS、机器学习、优化方法
正文
1. 概述
L-BFGS由牛顿法发展而来,是为了提高计算效率而提出的近似计算方法,在施行牛顿法的过程中需要计算海森矩阵的逆,计算矩阵逆工作量巨大,所以采用符合拟牛顿条件的矩阵代替或进行计算,这种方法称为拟牛顿法,其代表性方法有DFP算法和BFGS算法,L-BFGS在BFGS的基础上进一步在有限的内存下进行近似而提高效率的算法。
2. 拟牛顿条件
假设问题是:
且有。
首先进行二阶泰勒展开,得到:
对其求导后,代入,可得:
上面的式子称作拟牛顿条件,要求,正定。
3. BFGS原理
BFGS算法考虑使用矩阵近似矩阵,对应的拟牛顿条件是上面的第1个。每次对进行迭代,所以算法核心就是如何求得。
令:
自然有:
考虑使满足:
得到的迭代公式:
4. BFGS算法
输入:目标函数,,精度要求
输出:的极小点
(1)选定,设置
(2)计算,如满足,则停止,得解。
(3)由求出
(4)求
(5)置
(6)计算,如满足,则停止,得解。否则计算
(7),转(3)
5. L-BFGS原理
在BFGS算法的提出目的是为了不计算矩阵的逆,然而上面的算法中(3)求,需要,还是需要计算矩阵逆,还好有办法可以不用算,仔细观察上面的式子,为了方便,这里再写一遍:
发现除了,剩下的都是向量,说明可以由来表达,而可以由来表达,依次类推,可以得到结论对于任何一个最终都可以使用 及这些向量来表达。
根据以上结论,在每次迭代时只要保存这些值,BFGS算法可以只使用表达,那么L-BFGS在这个基础上,再一次进行近似,就是只用有限的内存来保存近个向量的值来进行计算。
具体实现时,为了方便还要对表达式进行一定的变换,首先对进行变换,变换推导比较复杂,参考资料[3]给出了大概的思路和过程,具体变换为:
接下来记:
且假设,则有:
递推至,则有:
只使用近m次的结果来近似,得到:
以上是L-BFGS的原理部分,具体实现是采用递推的算法。
6. L-BFGS算法
以下算法来自Numerical Optimization
输入:当前的,函数,
输出:求时的更新方向
(1)
(2)
(3)
(4)
(5)
参考资料
[1] 李航.统计学习方法(第二版).清华大学出版社,2019.
[2] https://www.jianshu.com/p/287b43e837c1
[3] https://blog.csdn.net/Shenpibaipao/article/details/89352840
[4] https://blog.csdn.net/google19890102/article/details/46389869
[5] Numerical Optimization
[6] https://www.cnblogs.com/sunruina2/p/9244709.html