运筹系列40:L-BFGS的pytorch版本

1. 原理简介

L是limited memory的意思。BFGS是四个数学家的名字。连续优化问题基本原理是泰勒二阶展开后,求导=0,用迭代的方法进行求解。
迭代公式很简单: f x k ′ + f x k ′ ′ ( x k + 1 − x k ) = 0 f'_{x_k}+f''_{x_k}(x_{k+1}-x_k)=0 fxk+fxk(xk+1xk)=0
f ′ f' f是一个向量, f ′ ′ f'' f是一个矩阵,称为Hessian阵。Hessian计算比较复杂,我们用迭代的方式计算,迭代方程改写为:
x k + 1 = x k − f ′ f ′ ′ − 1 x_{k+1}=x_k-f'f''^{-1} xk+1=xkff1。我们用D来近似 f ′ ′ − 1 f''^{-1} f1,迭代公式为:
在这里插入图片描述
在这里插入图片描述
注意如下几点:
(1)这里有2个迭代:第一个迭代计算 D D D,第二个迭代计算 f f f。为了节省时间,我们每一轮迭代都干脆让两个迭代一起进行。
(2)在深度学习时,数据量往往非常大。假设我们数据有10w维,那么每次迭代算出来的D有74.5G,内存、显存都放不下。所以我们用时间换空间,使用L-BFGS方法,将D的计算过程存储下来,需要的时候计算一下即可。
(3)为了进一步节省内存,我们只保留一定步数的计算过程。

2. 代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值