牛顿法

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

$$\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. C# static成员的构造顺序

    熟知的几个原则 1.static字段初始化先于static构造函数 2.static字段按顺序初始化 3.static字段和static构造函数只执行一次 public class Foo { pub ...

  2. Cylinder

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2374 思路:三分枚举. #include &l ...

  3. iOS手写2048--基于Xcode7.1

    闲着没事自己想了下,半天写出来了,没有美化,只是实现了基本的2048,被我改成了A.B.C.D.E: 没有游戏开发经验,完全基于uiview 和 一大堆逻辑计算,如果你有指针.链表的使用经验,应该会很 ...

  4. VBA -excel --遍历行

    Sub filter1()Rem MsgBox ("AAAAA")Rem 1 get selected zoneRem 2 loop rows and check columnRe ...

  5. java 实现多种排序

    public class Sort {        //交换两个数    private void swap(int[] arr, int i,int j){        int temp = a ...

  6. Java Integer类分析

    public static final int   MIN_VALUE = 0x80000000;  -2^31 public static final int   MAX_VALUE = 0x7ff ...

  7. 【转】android颜色对应的xml配置值

    原文网址:http://www.cnblogs.com/etgyd/archive/2011/04/02/2003778.html android颜色对应的xml配置值 <?xml versio ...

  8. Dinic 模板

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> us ...

  9. 编写一个单独的Web Service for Delphi7(步骤)

    1新建一个SOAP Server Application,在提示输入接口时输入MyHello,把所有文件保存在一个叫Ser的目录下,其中一个包含TWebModule1的文件保存为main.pas.在M ...

  10. 开源库CImg 数据格式存储之二(RGB 顺序)

    在上一篇博客中已经初步说明了GDI和CImg数据的存储格式感谢博友 Imageshop 评论说明 CImg的说明文档中已有详细说明(详见上篇博客说明) CImg的数据格式确实是RRRGGGBBB顺序存 ...