l bfgs算法java代码_数值优化:理解L-BFGS算法

3aa2f6790ca06b1a04abc9bea71a2f63.png译自《Numerical Optimization: Understanding L-BFGS》,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了。对我而言,的确比零散地看论文要轻松得多。原文并没有太多关注实现,对实现感兴趣的话推荐原作者的golang实现。

a1184540910f86bb1460f459aabf6eff.png

数值优化是许多机器学习算法的核心。一旦你确定用什么模型,并且准备好了数据集,剩下的工作就是训练了。估计模型的参数(训练模型)通常归结为最小化一个多元函数

636fe018f01050c0c11bcddc281ac25f.png,其中输入

41609b101bc5201ed04b28acd61c0e8d.png是一个高维向量,也就是模型参数。换句话说,如果你求解出:

8376269a51fc05b5fa356aec4a2da232.png

那么

41609b101bc5201ed04b28acd61c0e8d.png*就是最佳的模型参数(当然跟你选择了什么目标函数有关系)。

在这篇文章中,我将重点放在讲解L-BFGS算法的无约束最小化上,该算法在一些能用上批处理优化的ML问题中特别受欢迎。对于更大的数据集,则常用SGD方法,因为SGD只需要很少的迭代次数就能达到收敛。在以后的文章中,我可能会涉及这些技术,包括我个人最喜欢的AdaDelta 。

注 : 在整个文章中,我会假设你记得多元微积分。所以,如果你不记得什么是梯度或海森矩阵,你得先复习一下。

a1184540910f86bb1460f459aabf6eff.png

牛顿法

大多数数值优化算法都是迭代式的,它们产生一个序列,该序列最终收敛于

bed0f3386c636276ef1c287298e2b726.png,使得

636fe018f01050c0c11bcddc281ac25f.png达到全局最小化。假设,我们有一个估计

7f4de5c1a404501eade9c9c0dc6ad95a.png,我们希望我们的下一个估计

6eb39d638da5f450a983df69f93e63f2.png有这种属性:

58f8dc5937b2fbf27cec29c650be361d.png

牛顿的方法是在点

7f4de5c1a404501eade9c9c0dc6ad95a.png附近使用二次函数近似

ba2936186d0f6aa02a13a3b9602c2fb8.png。假设

ba2936186d0f6aa02a13a3b9602c2fb8.png是二次可微的,我们可以用

ba2936186d0f6aa02a13a3b9602c2fb8.png在点

72a6c8fc8a1d740b7c6cb933db630a4a.png的泰勒展开来近似

ba2936186d0f6aa02a13a3b9602c2fb8.png

70972faf6b600d3c2cbbf511b65e7bf9.png

其中,

10fdc2fe2473034d4f753fc59af678bc.png

bd01699312069fbb48321a1061415bbe.png分别为目标函数

ba2936186d0f6aa02a13a3b9602c2fb8.png在点

7f4de5c1a404501eade9c9c0dc6ad95a.png处的梯度和Hessian矩阵。当

d67262015a8a0e8cf3f08bd6ea4b4b96.png时,上面的近似展开式是成立的。你可能记得微积分中一维泰勒多项式展开,这是其推广。

为了简化符号

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值