L-BFGS剖析

    机器学习中经常利用梯度下降法求最优解问题,通过大量的迭代来得到最优解,但是对于维度较多的数据,除了占用大量的内存还会很耗时,L-BFGS算法是一种在牛顿法基础上提出的一种求解函数根的算法,下面由简入深尽量用简洁的语言剖析算法的本质。

一.牛顿法

    解决函数求根问题 f(x)函数在x1点的导数,是该函数在x1点的切线的斜率y/x,f(x1)=f(x1)/(x1-x2) ,x1-x3=f(x1)/f'(x1),得出x2=x1-f(x1)/f'(x1),当第k次迭代时:xk=xk-1-f(xk-1)/f'(xk-1)

L-BFGS剖析_第1张图片

牛顿法求根的流程:

1.已知函数f(x)的情况下随机产生x0

2.由已知的x0按照xk=xk-1-f(xk-1)/f'(xk-1)公式进行k次迭代

3.当迭代结果xk与上一次迭代结果xk-1相同或小于一定阈值时本次的结果即为函数f(x)的根

利用牛顿法求函数的驻点

当函数f(x)的一阶导数f'(x)=0时,点(x,f(x))为函数f(x)的驻点

求某函数的驻点即为求该函数的导函数的根,同样可以利用牛顿法进行求解

对于f(x)函数来说迭代公式为xk=xk-1-f'(xk-1)/f''(xk-1)

牛顿法求驻点的本质

任意函数在xk点附近的二阶泰勒展开公式为:

该公式表达的函数的几何意义为:通过2次函数对于原函数的最佳拟合

时,

结果依然是xk=xk-1-f'(xk-1)/f''(xk-1)

对于多元函数一阶导数f'(x)->梯度:

L-BFGS剖析_第2张图片

二阶导数f''(x)->hessian矩阵:

L-BFGS剖析_第3张图片

多元函数下的牛顿法求极值迭代:

L-BFGS剖析_第4张图片

问题:H矩阵维度超大,求逆矩阵非常困难怎么办???


二.BFGS算法

    一种通过迭代逼近的你牛顿算法,逼近方法:

其中:


是一维的,回到迭代公式:

BFGS指的是在牛顿法迭代过程中,使用Dk矩阵代替Hk矩阵进行迭代,第一个D矩阵D0为单位矩阵,随着迭代次数增多,公式中的Dk矩阵由单位矩阵越来越趋近于真实的H块矩阵

初次迭代时由于使用单位矩阵迭代矩阵,等价于梯度下降算法,所以BFGS算法是一种随着迭代由梯度下降法逐步过渡到牛顿法的算法

三.L-BFGS算法

    对于传统的BFGS算法,每次运算都需要存储Dk矩阵

L-BFGS算法是对于BFGS算法的近似,回到

D0已知,只需要知道S0-SK,Y0-YK就可以一步步算出dk+1

只保留最后M组向量,只通过m次迭代计算出Dk+1的近似值,当做Dk+1带入

公式中使用,这种用法便是L-BFGS。

你可能感兴趣的:(L-BFGS剖析)