- 我们将之前文章中LBFGS的快速算法重新复习下
- spark 实现
spark是直接调用的breeze库中的算法,具体是在LBFGS.AppoximateInverseHessian类重载了*运算符,代码在breeze.optimize包中的LBFGS.scala的105-140行,其中变量与上文算法中的对应关系,memStep对应si,memGradDelta对应yi,diag是每轮的初始值,
D0k=sTk−1yk−1/yTk−1yk−1
,as是alpha,算法中的rho与这里是倒数关系。dir是要返回结果变量,在后向循环中可以认为是q,在前向循环中是r。注意到这里第一轮for训练是从0到historyLength,第二轮是从historyLength到0,与算法的次序正好相反,这是因为在memStep和memGradDelta中,最新的值是存在最前面的(insert,s(k), s(k-1), …, s(0),在update函数中可以看到),在算法中最新的值是往后放的(append, s(0), s(1), …, s(k))。算法第一轮for的使用次序应该是从sk到s0,对应到这里就应该是s0到sk,因此index的次序是反的。
spark L-BFGS实现
最新推荐文章于 2023-04-09 15:10:23 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)