牛顿法

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

$$\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. Unity NGUI 3.0.4版本 制作网络版斗地主

    Unity NGUI 3.0.4版本 @by 灰太龙  开发环境 Win7旗舰版 Unity 4.2.1f4 本文就写个开门篇,告诉大家怎么用NGUI,第一步导入NGUI 3.0.4版本! 1.启动U ...

  2. 转:Mysql读写分离实现的三种方式

    1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自 ...

  3. Gvim各种插件配置(windows环境下)

    1.Vundle插件:https://github.com/gmarik/Vundle.vim 用于管理Vim插件,安装此插件需要系统中已安装git,参考链接:Git for Windows安装和基本 ...

  4. Qt入门(17)——组装复杂的控件

    下面是如何把两个窗口部件封装成一个新的组件.首先,我们使用一个自定义的窗口部件作为一个子窗口部件. #include <qapplication.h> #include <qpush ...

  5. cgic: CGI的C函数库

    下载回源码包以后,就3个文件:cgic.c      函数库capture.c   一个很简单的CGI例子,仅仅输出两行提示文字cgictest.c  一个演示读取form表单数据的CGI例子 首先在 ...

  6. 图论(二分图,KM算法):HDU 3488 Tour

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  7. HDOJ 3466 Proud Merchants

    Problem Description Recently, iSea went to an ancient country. For such a long time, it was the most ...

  8. HDOJ 2027 统计元音

    Problem Description 统计每个元音字母在字符串中出现的次数. Input 输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串. Output 对于每个 ...

  9. 课后习题 SPJ

    CREATE TABLE S ( SNO char(2) primary key, SNAME varchar(20), STATUS char(4), CITY char(10) ); create ...

  10. Monad

    Monad英文含义,单体.单分子.单细胞. Monad是一种设计模式,表示将一个运算过程,通过函数拆解成互相连接的多个步骤.你只要提供下一步运算所需的函数,整个运算就会自动进行下去.