【原创】牛顿法和拟牛顿法

数据、特征和数值优化算法是机器学习的核心,而牛顿法及其改良(拟牛顿法)是机器最常用的一类数字优化算法,今天就从牛顿法开始,介绍几个拟牛顿法算法。本博文只介绍算法的思想,具体的数学推导过程不做介绍。

1. 牛顿法

牛顿法的核心思想是”利用函数在当前点的一阶导数,以及二阶导数,寻找搜寻方向“(回想一下更简单的梯度下降法,她只用了当前点一阶导数信息决定搜索方向)。

牛顿法的迭代公式是(稍微有修改,最原始的牛顿法\(\gamma=1\):

\[{{\bf{x}}_{n + 1}} = {{\bf{x}}_n} - \gamma {[Hf({{\bf{x}}_n})]^{ - 1}}\nabla f({{\bf{x}}_n})\]

其中,\({[Hf({{\bf{x}}_n})]^{ - 1}}\nabla f({{\bf{x}}_n})\)是线搜索方向。这个方向的含义是什么呢。有两种物理解释:

  1. 一阶导数\(\nabla f({\bf{x}}){\mkern 1mu} \)当前搜寻点 与 \(\nabla f({\bf{x}}){\mkern 1mu}  = 0\)连线的方向。

  2. 当前点泰勒展开(舍弃二阶以上项)函数中 当前搜寻点 与 泰勒展开函数极小值连线方向。

2. 拟牛顿算法

上述的牛顿法需要计算Hessian矩阵的逆矩阵,运算复杂度太高。在动辄百亿、千亿量级特征的大数据时代,模型训练耗时太久。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。拟牛顿算法的核心思想用一个近似矩阵\(B\)替代逆Hessian矩阵\({H^{ - 1}}\)。不同算法的矩阵\(B\)的计算有差异,但大多算法都是采用迭代更新的思想在tranning的没一轮更新矩阵\(B\)。

下面介绍两种最常用的拟牛顿算法:

  • BFGS

BFGS的算法流程如下:

1. 初始化:初始点\({x_0}\)以及近似逆Hessian矩阵\(B_0^{ - 1}\)。通常,\({B_0} = I\),既为单位矩阵。

2. 计算线搜索方向:\({{\bf{p}}_k} =  - B_k^{ - 1}\nabla f({{\bf{x}}_k})\)

3. 用”Backtracking line search“算法沿搜索方向找到下一个迭代点:\({{\bf{x}}_{k + 1}} = {{\bf{x}}_k} + {\alpha _k}{{\bf{p}}_k}\)

4. 根据Armijo–Goldstein 准则,判断是否停止。

5. 计算\({{\bf{x}}_{k + 1}} = {{\bf{x}}_k} + {\alpha _k}{{\bf{p}}_k}\); 以及 \({{\bf{y}}_k} = \nabla f({{\bf{x}}_{k + 1}}) - \nabla f({{\bf{x}}_k})\)

6. 迭代近似逆Hessian矩阵:

\[B_{k + 1}^{ - 1} = \left( {I - \frac{{{s_k}y_k^T}}{{y_k^T{s_k}}}} \right)B_k^{ - 1}\left( {I - \frac{{{y_k}s_k^T}}{{y_k^T{s_k}}}} \right) + \frac{{{s_k}s_k^T}}{{y_k^T{\mkern 1mu} {s_k}}}\]

上式5中的推到方法比较复杂,有兴趣的可以搜一下相关文献。

  • L-BFGS

BFGS算法需要存储近似逆Hessian矩阵\(B_0^{ - 1}\)。对于很多应用来说(比如百度的CTR预估),千亿量级的feature数需要\({10^{16}}\)p存储。显然,目前的计算机技术还很难满足这样的空间需求。因此,内存受限的BFGS算法(Limited-memory BFGS)就诞生了。

L-BFGS算法不存储近似逆Hessian矩阵\(B_0^{ - 1}\), 而是直接通过迭代算法获取本轮的搜索方向\({{\bf{p}}_k} =  - B_k^{ - 1}\nabla f({{\bf{x}}_k})\)。

虽然L-BFGS算法不需要保存\(B_0^{ - 1}\)矩阵,但要保存每次迭代的中间信息,不过都是一维数组,而迭代次数有不会很多(100次以内),所以存储要求大大降低。

L-BFGS算法的流程如下:

定义:

\[{s_k} = {x_{k + 1}} - {x_k}{\mkern 1mu} \]

\[{y_k} = {g_{k + 1}} - {g_k}{\mkern 1mu} \]

以上两个一维数组需要保存每次迭代的结果。

再定义:

\[{\rho _k} = \frac{1}{{y_k^{\rm{T}}{s_k}}}\]

\[{g_k} \equiv \nabla f({x_k})\]

L-BFGS算法如下:

1. 初始化:初始点\({x_0}\)以及近似逆Hessian矩阵\(B_0^{ - 1}\)。通常,\({B_0} = I\),既为单位矩阵。

2. 用”Backtracking line search“算法沿搜索方向找到下一个迭代点:\({{\bf{x}}_{k + 1}} = {{\bf{x}}_k} + {\alpha _k}{{\bf{p}}_k}\)。

3. 根据Armijo–Goldstein 准则,判断是否停止。

4. 更新搜索方向 \({{\bf{p}}_k}\); 用下面的”two loop recursion"算法。

two loop recursion算法:

\[\begin{array}{l}
q = {g_k}{\mkern 1mu} \\
For(i = k - 1,k - 2, \ldots ,k - m):\\
{\alpha _i} = {\rho _i}s_i^{\rm{T}}q{\mkern 1mu} \\
q = q - {\alpha _i}{y_i}{\mkern 1mu} \\
{H_k} = y_{k - 1}^{\rm{T}}{s_{k - 1}}/y_{k - 1}^{\rm{T}}{y_{k - 1}}\\
z = {H_k}q\\
done\\
For{\rm{(}}i = k - m,k - m + 1, \ldots ,k - 1):\\
{\beta _i} = {\rho _i}y_i^{\rm{T}}z{\mkern 1mu} \\
z = z + {s_i}({\alpha _i} - {\beta _i}){\mkern 1mu} \\
done\\
{{\bf{p}}_k} = B_k^{ - 1}{g_k} = z
\end{array}\]

参考文献:

1. http://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm

2. http://en.wikipedia.org/wiki/Limited-memory_BFGS

3. http://aria42.com/blog/2014/12/understanding-lbfgs/

时间: 2024-10-16 13:07:12

【原创】牛顿法和拟牛顿法的相关文章

A-03 牛顿法和拟牛顿法

目录 牛顿法和拟牛顿法 一.牛顿法详解 1.1 无约束最优化问题 1.2 牛顿法迭代公式 1.3 牛顿法和梯度下降法 二.牛顿法流程 2.1 输入 2.2 输出 2.3 流程 三.拟牛顿法简介 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 牛顿法和拟牛顿法 牛顿法(Newton method)和拟牛顿法(quasi-Newton method)和梯度下降法一样也是求

梯度下降、牛顿法和拉格朗日对偶性

这篇文章主要介绍梯度下降.牛顿法和拉格朗日对偶性的过程和一些原理的证明. 梯度下降: 假设$f(x),x\in R^{n}$,有一阶的连续偏导数,要求解的无约束最优化问题是: $\min \limits_{x\in R^{n}}f(x)$ $x^*$表示目标函数$f(x)$的极小点. 首先解释一下为什么梯度下降可行:对于一个有一阶连续偏导数的凸函数,若存在函数的极小值点,让x不断地往函数值减少的方向移动,最终会到达一个不动点,而这个不动点,就是函数f(x)的极小值点.选择负梯度方向,可以让x更快

最优化问题(牛顿法和梯度下降法)

---恢复内容开始--- http://www.zhihu.com/question/19723347 引自知乎 牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快.如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大.所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部. 根据wiki上的解释,从几何上说,牛顿法就是用一个

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

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优

线性回归原理小结

线性回归可以说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法做一个小结. 1. 线性回归的模型函数和损失函数 线性回归遇到的问题一般是这样的.我们有m个样本,每个样本对应于n维特征和一个结果输出,如下: (x(0)1,x(0)2,...x(0)n,y0),(x(1)1,x(1)2,...x(1)n,y1),...(x(m)1,x(m)2,...x(m)n,yn)(x1(0),x2(0),...xn(0),y0),(x1(1),x2(1),...xn(1),y1),...(x1(m)

线性回归与逻辑回归

本文转自:http://blog.csdn.net/itplus/article/details/10857843 本文详细的介绍了线性回归和逻辑回归是怎么一回事,很好的介绍了线性回归的原理和逻辑回归的原理.针对逻辑回归,最后参数的求解过程中,还可以用到牛顿法和拟牛顿法,具体可以参考:http://www.cnblogs.com/ljy2013/p/5129294.html 从上面可以看出,标准梯度下降法每一次利用所有的训练样本数据来更新一个参数的一个纬度的分量:而随即梯度下降方法是针对每一个训

机器学习常见的最优化算法

1. 梯度下降法(Gradient Descent) 梯度下降法是最早最简单,也是最为常用的最优化方法.梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的.梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“.最速下降法越接近目标值,步长越小,前进越慢. 在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法

机器学习优化算法—L-BFGS

关于优化算法的求解,书上已经介绍了很多的方法,比如有梯度下降法,坐标下降法,牛顿法和拟牛顿法.梯度下降法是基于目标函数梯度的,算法的收敛速度是线性的,并且当问题是病态时或者问题规模较大时,收敛速度尤其慢(几乎不适用):坐标下降法虽然不用计算目标函数的梯度,但是其收敛速度依然很慢,因此它的适用范围也有局限:牛顿法是基于目标函数的二阶导数(海森矩阵)的,其收敛速度较快,迭代次数较少,尤其是在最优值附近时,收敛速度是二次的.但牛顿法的问题在于当海森矩阵稠密时,每次迭代的计算量比较大,因为每次都会计算目

机器学习中常见的最优化算法

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优