L-BFGS算法介绍

本文由作者林洋港授权网易云社区发布。


一、 L-BFGS是什么

L-BFGS是解无约束非线性规划问题最常用的方法,具有收敛速度快、内存开销少等优点,在机器学习各类算法中常有它的身影。简单的说,L-BFGS和梯度下降、SGD干的同样的事情,但大多数情况下收敛速度更快,这点在大规模计算中很重要。下图是深度学习Autoencoder模型不同优化方法的比较。

L-BFGS算法介绍_第1张图片

二、 L-BFGS“之前”的那些方法


这里的“之前”并不是说L-BFGS问世之前就已经存在的方法,而是指为了更好的理解L-BFGS需要了解的其他方法。无约束问题定义:

b969f667-a1f1-4dcc-96e3-6109fe5e7ead

我们先从泰勒展开开始,这可以说是本文介绍的所有方法的基础。f在b3a89ad5-2177-4c7d-9d42-1fcf0e1ec48b的一阶泰勒展开为

2266b6c1-1d53-436d-a5d1-3efdc6c3258b

二阶泰勒展开为

2e918e73-6183-479e-ae01-331a8b37d063

去掉最后的余项,得到

aa668410-b74d-45dc-b5ee-13a960e1f1f2

d7e23b5e-5e9e-4c44-824b-fa5d87706e3f

2.1 最速下降法(Gradient descent)


CD算法的一个前提条件就是f在b3a89ad5-2177-4c7d-9d42-1fcf0e1ec48b连续可微,并且在b3a89ad5-2177-4c7d-9d42-1fcf0e1ec48b处的导数不为0。由公式1可知当第二项<0时f的值将下降。由Cauchy-Schwartz不等式可得

e40640ad-6a3f-4351-8186-1eb94e63bc4e为最速下降方向。因此迭代公式为

d025153f-991c-4161-a7f3-0abfce55e271

26553732-86f1-4ba0-bc3b-1dea3596c3b5满足3827f58c-18ae-49b7-8aaa-cdfe6a7dce13

2.2 牛顿法(Newton method)


由于f的极值点就是满足f的导数为0,根据公式2,得到

512d2eb8-5a50-44b8-a798-b565574c6663

假设Hesse矩阵b2d10085-c935-40c0-87b0-3f9469c4040d可逆,由上式可得牛顿法迭代公式

5bfa9974-1769-4854-a377-7a1f919faaad

牛顿法具有二次终止性的特点,即经过有限次迭代必达到极小点。例如,对于二次凸函数

3757cd18-5d9c-4b1c-95e4-7a73ea87bd4a

A是对称正定矩阵,取任意初始点34d155dd-13bf-4c9f-904d-edc11d322d18,根据公式3有06084f55-a798-4c10-88f8-8e8759d83778

显然经过1次迭代即达到极值点。

但牛顿法要求f二次连续可微,并且Hesse矩阵7da88b2c-e1fb-4cc5-8e38-ea4a6c603123满足可逆和正定两个条件;同时,牛顿方向7902faf3-f255-47b6-b60b-a2e207025e60不一定每次迭代都是下降方向。

阻尼牛顿法是牛顿法的修正,与牛顿法的区别是迭代公式增加了牛顿方向上的一维搜索,即7f62aae2-2334-4c14-b543-5f2454e696a7

其中9ff9ba42-c1a8-4461-9167-297026f2cf82

c947439c-ff16-4518-9a2b-a49fcc03ec7c是一维搜索得到的步长,满足

f8e36756-ccd9-4897-b51d-dfc96560e37c

2.3 拟牛顿法(Quasi-Newton Method)

牛顿法每次迭代都需要计算b3a89ad5-2177-4c7d-9d42-1fcf0e1ec48b处的Hesse矩阵的逆,同时Hesse矩阵也不一定是正定的。人们又提出了拟牛顿法,其基本思想是用不包含二阶导数的矩阵来近似Hesse矩阵的逆。f16628426-3c00-4675-9e33-4d3db3cc3e49处展开成2阶泰勒级数并取近似,即

L-BFGS算法介绍_第2张图片

设Hesse矩阵可逆,可得b76f8a30-e0f6-483d-b4fa-dea949d1e378

设近似矩阵为89e63edd-d207-4c95-b6ee-179591616cc8根据上述,必须满足425f1ff6-496f-494d-bb94-0abd80a24fdb

公式7称为拟牛顿条件。89e63edd-d207-4c95-b6ee-179591616cc8的不同构造方法,决定了不同的拟牛顿方法。

537a4061-ba66-4de5-94e4-45efe27c64c2n阶对称正定矩阵时,满足牛顿条件的4d6774ec-d068-4350-a6e4-94441750ff34也必须是n阶对称正定矩阵。因此4d6774ec-d068-4350-a6e4-94441750ff34的一般构造策略为:e2fc7ff4-73d4-41d8-839e-69b349626bbe取为任意n阶对称正定矩阵(通常为单位矩阵I),然后通过下式求出89e63edd-d207-4c95-b6ee-179591616cc8

5f2e0a5b-ff7a-4f6e-8d42-12175b5dace3

f0ae2747-0574-4579-ba63-44259af657ab称为校正矩阵。

DFP算法将校正矩阵定义为:0708d067-f7c8-43e1-b531-564ec9c449d0

至此,根据公式45671011可以由b3a89ad5-2177-4c7d-9d42-1fcf0e1ec48b得出a580677f-7d09-44aa-9296-1c64f16b87ee并且不需要每次迭代计算Hesse矩阵。

BFGS算法用矩阵9b9bd8c1-e07e-4d88-94a9-7b87a6984d1d近似公式8中的Hesse矩阵325d877c-91af-4b21-b385-61f647f0a38c,从而得到3774e720-866a-4888-b702-a7793512a94d

qp互换,589ee10f-bba0-4ce2-b66f-2db24b64fd0c分别取代fd2ee157-6b57-4b04-89de-0fa0935ea024由DFP公式可以得到

bb43832b-1285-4b78-838e-4977d03db3e8

6376ae75-50ba-428b-a4aa-ef01e6efe4b0,从而得到BFGS公式:

f1dc3992-13b9-4a9d-be64-d241d2e012ee

从公式11和公式12可以看出,拟牛顿法每次迭代只需要根据前次迭代的4d6774ec-d068-4350-a6e4-94441750ff34即可以计算出16628426-3c00-4675-9e33-4d3db3cc3e49,不需要求出Hesse矩阵的逆。

2.4 L-BFGS(limited-memory BFGS)

BFGS算法中每次迭代计算需要前次迭代得到的4d6774ec-d068-4350-a6e4-94441750ff34矩阵,该矩阵的存储空间至少为N(N+1)/2N为特征维数,对于高维的应用场景,需要的存储空间将是非常巨大的。L-BFGS的基本思想就是通过存储前m次迭代的少量数据来替代前一次的4d6774ec-d068-4350-a6e4-94441750ff34矩阵。令y=q,s=p,公式12可以改写成

L-BFGS算法介绍_第3张图片

公式13展开并取前m项的近似,可得

L-BFGS算法介绍_第4张图片

由于ρVsy这些变量都最终可以由qp两个向量计算得到,因此,我们只需存储最后m次的qp向量即可算出89e63edd-d207-4c95-b6ee-179591616cc8加上对角阵H0,总共需要存储2*m+1个N维向量(实际应用中m一般取4到7之间的值,因此需要存储的数据远小于Hesse矩阵)。

注:公式4中步长的确定需要使用一维搜索,顾名思义,一维搜索就是沿着直线方向寻找使得目标函数值最小的参数值。一维搜索具体又分为精确一维搜索和非精确一维搜索,具体可参看相关文献。

三、 其他相关方法

由于L-BFGS是建立在目标函数的2阶泰勒展开基础上的,其前提条件就是函数的2阶导不为0。在机器学习中一般如果用L2正则都是可以满足这个条件的。如果用的是L1正则,则目标函数可能出现2阶导为0的情况。对于使用L1正则的情况,可以使用OWL-QN方法(Orthant-Wise Limited-memory Quasi-Newton),它是基于L-BFGS修改的。

据说百度首创了Shooting算法,收敛速度比L-BFGS快得多,目前还不知道怎么做的。


L-BFGS算法介绍_第5张图片

此外,Chih-Jen Lin(LIBSVM作者)提出的信赖域牛顿方法(Trust Region Newton Method),其收敛速度也比L-BGFS快,他开发的另一个针对大规模线性分类的软件LIBLINEAR用的就是这种优化方法。

L-BFGS算法介绍_第6张图片

此外,Chih-Jen Lin(LIBSVM作者)提出的信赖域牛顿方法(Trust Region Newton Method),其收敛速度也比L-BGFS快,他开发的另一个针对大规模线性分类的软件LIBLINEAR用的就是这种优化方法。


免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 Spring Boot 学习系列(07)—properties文件读取
【推荐】 HTTP/2部署使用

你可能感兴趣的:(L-BFGS算法介绍)