牛顿法、拟牛顿法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛顿法、拟牛顿法相关的知识,希望对你有一定的参考价值。

参考技术A 根据二阶泰勒展开,用一阶和二阶倒数确定参数迭代步长和方向

设初始向量 ,它在 处的泰勒展开如下:

,当 时

注:矩阵求导公式:

 

对上式相对于 求导:



因此可以得到 处的迭代方程:

对应 这种形式,步长 ,方向

从上述公式可以知道,牛顿法的每一次迭代都需要计算二阶海塞矩阵,当特征和数据非常多时,时间和空间开销都会比较大。

拟牛顿法只是一种方法的统称,即用一个近似矩阵B去替代逆海塞矩阵 ,然后在每一轮迭代中更新B

怎样找到逆海塞矩阵的替代矩阵?

对上一节中的①式做一下变换:

令 , ,上式变成:

再令 , ,得到:



也就是说,第k步迭代的海塞矩阵可以通过第k步的迭代步长和一阶导数差值拟合。

BFGS( Broyden–Fletcher–Goldfarb–Shanno ):
https://blog.csdn.net/itplus/article/details/21897443

用 表示 的近似, 表示 的近似:

那么 的迭代公式为

设 ②,再根据①式得到的 :

交换 和 的位置:

令: ,以及

解出:

再带入到②中:

L-BFGS:

BFGS中B矩阵的每次更新都需要nXn的空间开销,L-BFGS不会直接存储B,而是①只存取需要用到的n个向量,并且②只保存了最近的m次迭代的结果,所以L-BFGS算法又做了近似。

牛顿法梯度下降法与拟牛顿法

牛顿法、梯度下降法与拟牛顿法

0 引言

机器学习中在求解非线性优化问题时,常用的是梯度下降法和拟牛顿法,梯度下降法和拟牛顿法都是牛顿法的一种简化

牛顿法是在一个初始极小值点做二阶泰勒展开,然后对二阶泰勒展开式求极值点,通过迭代的方式逼近原函数极值点

在牛顿法迭代公式中,需要求二阶导数,而梯度下降法将二阶导数简化为一个固定正数方便求解

拟牛顿法也是在求解过程中做了一些简化,不用直接求二阶导数矩阵和它的逆

1 关于泰勒展开式

1.1 原理

如果我们有一个复杂函数 f ( x ) f(x) f(x), 对这个复杂函数我们想使用 n 次多项式(多项式具有好计算,易求导,且好积分等一系列的优良性质)去拟合这个函数,这时就可以对 f ( x ) f(x) f(x)进行泰勒展开,求某一点 x 0 x_0 x0附近的 n 次多项式:

注意:
n 次多项式只是在 x 0 x_0 x0 较小的邻域内能较好拟合 f ( x ) f(x) f(x),也就是说,泰勒展开式其实是一种局部近似的方法,只近似 x = x 0 x=x_0 x=x0那一点的函数性

1.2 例子

现在要求 f ( x ) = c o s ( x ) f(x)=cos(x) f(x)=cos(x) x 0 = 0 x_0=0 x0=0 处的二阶泰勒展开,因为我们去掉了高阶项,所以只是近似

直接套用公式
f ( x 0 ) = f ( 0 ) = c o s ( 0 ) = 1 f(x_0)=f(0)=cos(0)=1 f(x0)=f(0)=cos(0)=1
f ′ ( x 0 ) = f ′ ( 0 ) = − s i n ( 0 ) = 0 f'(x_0)=f'(0)=-sin(0)=0 f(x0)=f(0)=sin(0)=0
f ′ ′ ( x 0 ) = f ′ ′ ( 0 ) = − c o s ( 0 ) = − 1 f''(x_0)=f''(0)=-cos(0)=-1 f′′(x0)=f′′(0)=cos(0)=1
所以展开后的公式为
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ∗ x + f ′ ′ ( x 0 ) ∗ x 2 / 2 = 1 − 0.5 ∗ x 2 f(x)≈f(x_0)+f'(x_0)*x+f''(x_0)*x^2/2=1-0.5*x^2 f(x)f(x0)+f(x0)x+f′′(x0)x2/2=10.5x2

从下方运行程序可以看出,离展开点越近的点,拟合程度越高,越远的点,越离谱

2 牛顿法

2.1 x 为一维

现在假设我们有目标函数 f ( x ) f(x) f(x),我们希望求此函数的极小值,牛顿法的基本思想是:随机找到一个点设为当前极值点 x k x_k xk,在这个点对 f ( x ) f(x) f(x) 做二次泰勒展开,进而找到极小点的下一个估计值。在 x k x_k xk 附近的二阶泰勒展开为:

现在想求 φ ( x ) \\varphi(x) φ(x) 的极值点,由极值的必要条件可知, φ ( x ) \\varphi(x) φ(x) 应满足导数为 0,即:
φ ′ ( x ) = 0 \\varphi'(x)=0 φ(x)=0

φ ′ ( x ) = f ′ ( x k ) + f ′ ′ ( x k ) ( x − x k ) = 0 \\varphi'(x)=f'(x_k)+f''(x_k)(x-x_k)=0 φ(x)=f(xk)+f′′(xk)(xxk)=0
这样就可以求得 x 的值
x = x k − f ′ ( x k ) f ′ ′ ( x k ) x=x_k-\\fracf'(x_k)f''(x_k) x=xkf′′(xk)f(xk)
于是给定初始值 x 0 x_0 x0,就可以通过迭代的方式逼近 f ( x ) f(x) f(x)的极值点:
x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_k+1=x_k-\\fracf'(x_k)f''(x_k) xk+1=xkf′′(xk)f(xk)

如下图,首先在 x n x_n xn 处泰勒展开,得到 f ( x ) f(x) f(x) 的近似函数 g n ( x ) g_n(x) gn(x) ,求得 g n ( x ) g_n(x) gn(x) 的极值点 x n + 1 x_n+1 xn+1

随后在 x n + 1 x_n+1 xn+1 出泰勒展开,得到 g n + 1 ( x ) g_n+1(x) gn+1(x) 函数,继续求 g n + 1 ( x ) g_n+1(x) gn+1(x) 的极值点

一直迭代最后就会逼近 f ( x ) f(x) f(x) 的极值点

2.2 x 为多维

上面讨论的是参数 x 为一维的情况,当 x 有多维时,二阶泰勒展开式可以做推广,此时:
φ ( x ) = f ( x k ) + ∇ f ( x k ) ∗ ( x − x k ) + 1 2 ∗ ( x − x k ) T ∗ ∇ 2 f ( x k ) ∗ ( x − x k ) \\varphi(x)=f(x_k)+\\nablaf(x_k)*(x-x_k)+ \\frac12*(x-x_k)^T*\\nabla^2f(x_k)*(x-x_k) φ(x)&#

以上是关于牛顿法、拟牛顿法的主要内容,如果未能解决你的问题,请参考以下文章

优化理论07-----拟牛顿法拟牛顿方程对称秩二更新公式BFGSDFSBroyden族Huang’s Family

常见的几种最优化方法(梯度下降法牛顿法拟牛顿法共轭梯度法等)

第十一章 拟牛顿法

拟牛顿法之BFGS

拟牛顿法的DFP方法

牛顿法与拟牛顿法的区别与联系