牛顿法

考虑如下无约束极小化问题:

$$\min_{x} f(x)$$

其中$x\in R^N$,并且假设$f(x)$为凸函数,二阶可微。当前点记为$x_k$,最优点记为$x^*$。

梯度下降法用的是一阶偏导,牛顿法用二阶偏导。以标量为例,在当前点进行泰勒二阶展开:

$$\varphi(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2}f''(x_k)(x-x_k)^2$$

极小值点满足$\varphi'(x)=0$,求得:

$$x_{k+1}=x_k-\frac{f'(x_k)}{f''(x_k)}$$

右半部第二部分的分式指明下一步的迭代方向。

若扩展到多维,上式变为

$$x_{k+1}=x_k-H^{-1}\cdot g_k$$

其中$g_k=\nabla f(x_k)$为梯度向量,$H_k=\nabla^2f(x_k)$为海森矩阵。

牛顿法是具有二次收敛性的算法,收敛速度比较快。但是其步长固定,因此不能保证稳定的下降。

阻尼牛顿法在牛顿方向上附加了步长因子,每次调整时会在搜索空间,在该方向找到最优步长,然后调整。

拟牛顿法

由于牛顿法的要求比较严格,计算比较复杂,衍生出拟牛顿法。

拟牛顿法对$H_k$或$H_k^{-1}$取近似值,可减少计算量。记$B\approx H$,$D\approx H^{-1}$,$y_k=g_{k+1}-g_k$,$s_k=x_{k+1}-x_k$。、

根据拟牛顿条件,可得近似公式:

$$B_{k+1}=\frac{y_k}{s_k}$$

$$D_{k+1}=\frac{s_k}{y_k}$$

是不是跟二阶导数的定义很相似?$k$阶导数定义为自变量增加1之后,$k-1$阶导数增加的值,然后求极限而已。

下面是几个拟牛顿法。

DFP算法

DFP算法采用的是$D$,但并不直接计算$D$,而是计算每一步$D$的增量$\Delta D$来间接的求出$D$。这也是很多优化算法的做法,因为一般上一步的中间结果对下一步的计算仍有价值,若直接抛弃重新计算耗时耗力耗内存,重新发明了轮子。

$$D_{k+1}=D_k+\Delta D_k$$

$D_0$通常取单位矩阵$I$,关键导出每一步的$\Delta D_{k}$。

通过一系列艰苦而又卓绝的推导计算假设取便,最终的导出结果为:

$$\Delta D_k=\frac{s_k s_k^T}{s_k^T y_k}-\frac{D_k y_k y_k^TD_k}{y_k^T D_k y_k}$$

一般来说,在进行中间增量计算时,都要经过这一步艰苦而又卓绝的推导计算。

BFGS算法

BFGS算法与DFP算法类似,只是采用的$B$来近似$H$。最终的公式为:

$$\Delta B_k=\frac{y_k y_k^T}{y_k^T x_k}-\frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k}$$

跟DFP相比,只是$D \leftrightarrow B$,$s \leftrightarrow y$互调。

L-BFGS算法

L-BFGS算法对BFGS算法进行改进,不再存储矩阵$D_k$,因为$D_k$有时候比较大,计算机的肚子盛不下。但是我们用到$D_k$的时候怎么办呢?答案是根据公式求出来。

从上面的算法推导可知,$D_k$只跟$D_0$和序列$\{s_k\}$和$\{y_k\}$有关。即我们知道了后者,即可以求得前者。进一步近似,我们只需要序列$\{s_k\}$和$\{y_k\}$的最近$m$个值即可。这样说来,我们的计算机内存中只需要存储这两个序列即可,瞬间卸掉了很多东西,正是春风得意马蹄轻。当然,这样cpu的计算量也会相应的增加,这是可以接受的,马,也是可以接受的。

最终的递推关系为

$$D_{k+1}=V^T_kD_kV_k+\rho_k s_ks^T_k$$

其中

$$\rho_k=\frac{1}{y^T_ks_k},V_k=I-\rho_ky_ks^T_k$$

参考文献:http://blog.csdn.net/itplus/article/details/21897715

牛顿法与拟牛顿法,DFP法,BFGS法,L-BFGS法的更多相关文章

  1. 牛顿法与拟牛顿法学习笔记(四)BFGS 算法

    机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题.在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BF ...

  2. 梯度下降法(BGD、SGD)、牛顿法、拟牛顿法(DFP、BFGS)、共轭梯度法

    一.梯度下降法 梯度:如果函数是一维的变量,则梯度就是导数的方向:      如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度 梯度下降法(Gr ...

  3. 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno

    拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno 转载须注明出处:htt ...

  4. 层次分析法、模糊综合评测法实例分析(涵盖各个过程讲解、原创实例示范、MATLAB源码公布)

    目录 一.先定个小目标 二.层次分析法部分 2.1 思路总括 2.2 构造两两比较矩阵 2.3 权重计算方法 2.3.1 算术平均法求权重 2.3.2 几何平均法求权重 2.3.3 特征值法求权重 2 ...

  5. java科学计数法转换成普通计数法

    java科学计数法转换成普通计数法: String sjiachun = "12345E-10"; BigDecimal db = new BigDecimal(sjiachun) ...

  6. 无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)

    简介:最近在看逻辑回归算法,在算法构建模型的过程中需要对参数进行求解,采用的方法有梯度下降法和无约束项优化算法.之前对无约束项优化算法并不是很了解,于是在学习逻辑回归之前,先对无约束项优化算法中经典的 ...

  7. 牛顿法|阻尼牛顿法|拟牛顿法|DFP算法|BFGS算法|L-BFGS算法

    一直记不住这些算法的推导,所以打算详细点写到博客中以后不记得就翻阅自己的笔记. 泰勒展开式 最初的泰勒展开式,若  在包含  的某开区间(a,b)内具有直到n+1阶的导数,则当x∈(a,b)时,有: ...

  8. 牛顿法/拟牛顿法/DFP/BFGS/L-BFGS算法

    在<统计学习方法>这本书中,附录部分介绍了牛顿法在解决无约束优化问题中的应用和发展,强烈推荐一个优秀博客. https://blog.csdn.net/itplus/article/det ...

  9. 最优化算法【牛顿法、拟牛顿法、BFGS算法】

    一.牛顿法 对于优化函数\(f(x)\),在\(x_0\)处泰勒展开, \[f(x)=f(x_0)+f^{'}(x_0)(x-x_0)+o(\Delta x) \] 去其线性部分,忽略高阶无穷小,令\ ...

随机推荐

  1. SQLPLUS使用

    1.CMD命令 2.输入SQLPLUS 3.如果oracle服务器中装有多个数据库实例,则在用户名处输入:用户名/密码@数据库名称.如果数据库服务器不在本机上,还需要加上数据库服务器的地址:用户名/密 ...

  2. Prime Path(poj 3126)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  3. WSS存储服务器(Windows Storage Server) 2012新功能解析

    虽然最近一段时间有关微软的新闻大多数集中在Windows 8以及Surface平板设备身上,但数周之前Windows Server 2012新版本中所包含的Windows Storage Server ...

  4. JPA学习笔记

    一.JPA基础1.1 JPA基础JPA: java persistence api 支持XML.JDK5.0注解俩种元数据的形式,是SUN公司引入的JPA ORM规范 元数据:对象和表之间的映射关系 ...

  5. 从VC到g++遇到的事

    最近做的项目,需要把代码从VC移植到g++下编译,在这个过程中,遇到了几个平台相关的问题--在VC下顺利编译的代码,但在g++中编译报错. 这里贴出来给大家分享一下: 1. 枚举类型 问题代码 enu ...

  6. bzoj1005

    有了bzoj1430的经验解决这题就不是什么难事了首先考虑度数确定的点,令tot=sigma(d[i]-1)首先给这tot个数分配prufer编码的位置有C(tot,n-2)种方案每个方案中是可以进行 ...

  7. 奔跑的xiaodao

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2086 很明显的一个二分题目.因为要 ...

  8. windows下sqlite3静态库和动态库的编译

    1.下载sqlite3源码:http://www.sqlite.org/download.html 主要是sqlite-amalgamation-XXXXXXX.zip.sqlite-dll-win3 ...

  9. SRM 403(1-250pt, 1-500pt)

    DIV1 250pt 题意:称各个数位只含有4和7的数为lucky number,给定a,b,求[a, b]中的lucky number有多少个.a, b <= 10^9 解法:很明显的数位dp ...

  10. angularJS 指令二

    指令详解1.用directive()方法来定义指令.directive('myDirective',function($timeout,userDefinedService){ return {};} ...