spark L-BFGS实现

本文回顾了L-BFGS的快速算法,并详细解释了Spark如何利用breeze库实现这一算法。在Spark的LBFGS.ApproximateInverseHessian类中,通过重载*运算符来实现关键步骤,如变量memStep与si对应,memGradDelta对应yi等。算法的细节包括D0k的计算、alpha的调整以及反向和前向循环的巧妙运用,以适应内存中存储的历史梯度和步长顺序。
摘要由CSDN通过智能技术生成
  1. 我们将之前文章中LBFGS的快速算法重新复习下
    这里写图片描述
  2. spark 实现
    spark是直接调用的breeze库中的算法,具体是在LBFGS.AppoximateInverseHessian类重载了*运算符,代码在breeze.optimize包中的LBFGS.scala的105-140行,其中变量与上文算法中的对应关系,memStep对应si,memGradDelta对应yi,diag是每轮的初始值,
    D0k=sTk1yk1/yTk1yk1

    ,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的次序是反的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值