使用导数的最优化算法中,拟牛顿法是目前为止最为行之有效的一种算法,具有收敛速度快、算法稳定性强、编写程序容易等优点。在现今的大型计算程序中有着广泛的应用。本文试图介绍拟牛顿法的基础理论和若干进展。

牛顿法 (Newton Method)

牛顿法的基本思想是在极小点附近通过对目标函数做二阶Taylor展开,进而找到的极小点的估计值[1]。一维情况下,也即令函数

则其导数满足

因此

       (1)

作为极小点的一个进一步的估计值。重复上述过程,可以产生一系列的极小点估值集合。一定条件下,这个极小点序列收敛于的极值点。

将上述讨论扩展到维空间,类似的,对于维函数

其中分别是目标函数的的一阶和二阶导数,表现为维向量和  矩阵,而后者又称为目标函数处的Hesse矩阵。 设可逆,则可得与方程(1)类似的迭代公式:

     (2)

这就是原始牛顿法的迭代公式。

原始牛顿法虽然具有二次终止性(即用于二次凸函数时,经有限次迭代必达极小点),但是要求初始点需要尽量靠近极小点,否则有可能不收敛。因此人们又提出了阻尼牛顿法[1]。这种方法在算法形式上等同于所有流行的优化方法,即确定搜索方向,再沿此方向进行一维搜索,找出该方向上的极小点,然后在该点处重新确定搜索方向,重复上述过程,直至函数梯度小于预设判据。具体步骤列为算法1

算法1:

(1)  给定初始点,设定收敛判据.

(2)  计算.

(3)  若 < ,则停止迭代,否则确定搜索方向.

(4)  从出发,沿做一维搜索,

.

(5)  设,转步骤(2).

在一定程度上,阻尼牛顿法具有更强的稳定性。

拟牛顿法 (Quasi-Newton Method)

如同上一节指出,牛顿法虽然收敛速度快,但是计算过程中需要计算目标函数的二阶偏导数,难度较大。更为复杂的是目标函数的Hesse矩阵无法保持正定,从而令牛顿法失效。为了解决这两个问题,人们提出了拟牛顿法。这个方法的基本思想是不用二阶偏导数而构造出可以近似Hesse矩阵的逆的正定对称阵, 从而在"拟牛顿"的条件下优化目标函数。构造方法的不同决定了不同的拟牛顿法。

首先分析如何构造矩阵可以近似Hesse矩阵的逆:

设第k次迭代之后得到点,将目标函数处展成Taylor级数,取二阶近似,得到

因此

,则

      (3)

同时设Hesse矩阵可逆,则方程(3)可以表示为

      (4)

因此,只需计算目标函数的一阶导数,就可以依据方程(4)估计该处的Hesse矩阵的逆。也即,为了用不包含二阶导数的矩阵近似牛顿法中的Hesse矩阵的逆矩 阵,必须满足

      (5)

方程(5)也称为拟牛顿条件。不加证明的,下面给出两个最常用的构造公式

DFP公式

设初始的矩阵为单位矩阵,然后通过修正给出,即

DFP算法中定义校正矩阵为

因此

      (6)

可以验证,这样产生的对于二次凸函数而言可以保证正定,且满足拟牛顿条件。

BFGS公式

BFGS公式有时也称为DFP公式的对偶公式。这是因为其推导过程与方程(6)完全一样,只需要用矩阵取 代,同时将和 互换,最后可以得到

       (7)

这个公式要优于DFP公式,因此目前得到了最为广泛的应用。

利用方程(6)或(7)的拟牛顿法计算步骤列为算法2

算法2:

(1)  给定初始点,设定收敛判据.

(2)  设,计算出目标函数处的梯度.

(3)  确定搜索方向

.

(4)  从出发,沿做一维搜索,满足

.

(5)  若,则停止迭代,得到最优解,否则进行步骤(6).

(6)  若,则令,回到步骤(2),否则进行步骤(7).

(7)  令,利用方程(6)或(7)计算,设,回到步骤(3)。

限域拟牛顿法(Limited Storage Quasi-Newton Method)

        算法2的步骤(3)中,为了确定第次搜索方向,需要知道对称正定矩阵,因此 对于维的问题,存储空间至少是,对于大型计算而言,这显然是一个极大的缺点。作为比较,共轭梯度法只需要存储3个维向量。为了解决这个问题,Nocedal首次提出了基于BFGS公式的限域拟牛顿法(L-BFGS)[2]。

L-BFGS的基本思想是存储有限次数(如次)的更新矩阵,如果 > 的话就舍弃次以前的,也即L-BFGS的记忆只有次。如果,则L- BFGS等价于标准的BFGS公式。

首先将方程(7)写为乘法形式:

      (8)

其中  的矩阵。乘法形式下"舍弃"等价于置。容易得出,给 定后,BFGS的矩阵更新可以写为

,则


         
         
         
         
                   (9)

 > ,则


         
         
         
                  (10)

方程(9)和(10)称为狭义BFGS矩阵(special BFGS matrices)。仔细分析这两个方程以及的定义,可以发现L-BFGS方法中构造只需要保留维向量:以及(对角阵)。

快速计算

L-BFGS算法中确定搜索方向需要计算,下列算法可以高效地完成计算任务:

算法3:

IF  Then

 = 0;  = 

ELSE

 =  = 

ENDIF

;

DO  = (-1),0,-1

;

;

储存;

;

ENDDO

;

DO  = 0, (-1)

;

;

;

ENDDO

完整的程序包可从下列网址下载:

http://www.ece.northwestern.edu/~nocedal/software.html

针对二次非凸函数的若干变形

对于二次凸函数,BFGS算法具有良好的全局收敛性。但是对于二次非凸函数,也即目标函数Hesse矩阵非正定的情况,无法保证按照BFGS算法构造的拟牛顿方向必为下降方向。为了推广BFGS公式的应用范围,很多工作提出了对BFGS公式稍作修改或变形的办法。下面举两个例子。

Li-Fukushima方法[3]

Li和Fukushima提出新的构造矩阵的方法:

          (11)

其中


的定义见算法2中步骤(7),而

除此之外,算法2中步骤(3)的一维搜索采用如下方式:

给定两个参数,找出最小的非负整数j,满足

,步长

Xiao-Wei-Wang方法[4]

Xiao、Wei和Wang提出了计入目标函数值的另一种的构造方法:

,其中

的构造方法与方程(7)和(11)形式相同:

        (12)
相应的
        而一维搜索则采用弱Wolfe-Powell准则:

给定两个参数,找出步长,满足

          (13)

       (14)

如果 = 满足方程(13)、(14),则取 = 

可以看出,这两种方法只是改变了的定义方式,其他则与标准的BFGS方法完全一样。因此将二者推广到限域形式是非常直接的,这里不再给出算法。对于二次非凸函数的拟牛顿方法还在进一步发展当中,上述的两个例子并不一定是最佳算法。

一维搜索

使用导数的优化算法都涉及到沿优化方向的一维搜索。事实上一维搜索算法本身就一个非常重要的课题,分为精确一维搜索以及非精确一维搜索。标准的拟牛顿法或L-BFGS均采用精确一维搜索。与前者相比,非精确一维搜索虽然牺牲了部分精度,但是效率更高,调用函数的次数更少。因此 Li-Fukushima方法和Xiao-Wei-Wang方法中均采用了这类算法。不加证明的,本节分别给出两类范畴中各自的一个应用最为广泛的例子, 分别是二点三次插值方法Wolfe-Powell准则

二点三次插值方法

在精确一维搜索各种算法中,这种方法得到的评价最高。其基本思想是选取两个初始点,满足 <  <  > 。这样的初始条件保证了在区间中存在极小点。利用这两点处的函数值(记为)和导数值(记为)构造一个三次多项式,使 得处与目标函数有相同的函数值和导数值,则设,那么通过4个边界条件可以完全确定4个参数。之后找 出的零点,作为极小点的一个进一步的估计。可以证明,由出发,最佳估计值的计算公式为

          (15)

为了避免每次都要求解4维线性方程组的麻烦,整个搜索过程可以采用算法4

算法4:

(1)  给定初始点,满足 < ,计算函数值和导数值,并且 <  > ,给定允许误差

(2)  计算如下方程,得到最佳估计值

        (16)

        (17)

(3)  若,则停止计算,得到点;否则进行步骤(4)。

(4)  计算。若,则停止计算,得到点,

 < ,则令,转步骤(2);

 > ,则令,转步骤(2)。

利用三次函数插值,方程(16)、(17)并不是唯一的方法,也可以利用下式计算三个参数:


         (18)

然后利用(15)式寻找最佳点[5]。此外,即使 < ,一般而言也可以用(15)式外推寻找(参见[5])。

Wolfe-Powell准则

不等式(13)、(14)给出了这种非精确一维搜索算法。如果我们将不等式(14)用下式替换:

     (19)

也即

则不等式(13)、(19)称为强Wolfe-Powell准则。其重要性在于当时,该方法过渡为精确一维搜索算法[6]。算法如下[5]

算法5:

(1)  给定两个参数为初始点(相应于),为猜想点(可设为1)。计算两点处的函数值和导数值。给定最大循环次 数,设

(2) 若违反不等式(13)或者不等式(19)的右半段,则缩小搜索范围的上限,否则转步骤(5);

(3)  若 > ,利用二次插值方法寻找最佳点

,计算;设,若转步骤(2),否则转步骤(5);

,转步骤(4);

(4)  利用式(16)、(17)(或者式(15)、(18))寻找最佳点。令,计算;设 = ,若,转步骤(2),否则转步骤(5);

(5)  若满足不等式(19)的左半段,则停止计算,得到最佳点;否则转步骤(6);

(6)  利用式(16)、(17)(或者式(15)、(18))寻找最佳点,并计算以及;设,若转步骤(2),否则转步骤(7);

(7)  停止计算得到目前最佳估计值

需要补充说明的是步骤(4)可以有不同的估算方法,例如

      (20)

此外,点处的导数值,因为在一维搜索中,相当于待求步长。在大多数情况下, = 以及 = 可以取得很好的效果。Wolfe-Powell准则的几何意义可以参考文献[5][6]。

参考文献

【1】  陈宝林  《最优化理论与算法(第二版)》 (清华大学出版社 2005) 第9-10章.
【2】  J. Nocedal, Math. Comput. 35, 773 (1980).
【3】  D.H. Li and M. Fukushima, J. Comput. Appl. Math. 129, 15 (2001).
【4】  Y. Xiao, Z. Wei and Z. Wang, Comput. Math. Appl. 56, 1001 (2008).
【5】  www.cs.toronto.edu/~delve/methods/mlp-ese-1/minimize.ps.gz
【6】  W. Sun and Y.X. Yuan, Optimization theory and methods (Springer 2006), p. 104.

拟牛顿法及其相关解法相关推荐

  1. 蓝桥杯真题跑步锻炼(Excel快速准确解法)

    文章目录 前言 题目描述 Excel相关函数简介 求解过程 代码验证 前言 在蓝桥杯中有一些题目可以借助Excel这个强大的工具来快速准确的求解,这篇文章就以2020年第十一届蓝桥杯省赛C/C++大学 ...

  2. 【超详细】一文学会链表解题

    本文是最近写的两篇链表的整合版,为方便大家查阅,所以整合了一下,也对原有文章中逻辑上的一些错误作了修正,虽说只是整合,也做了不少排版上的工作,如有帮助,欢迎转发+在看^_^. 前言 如果说数据结构是算 ...

  3. 都是套路:盘点 Java 面试中链表的几大解题模板方法!

    来自:码海 前言 如果说数据结构是算法的基础,那么数组和链表就是数据结构的基础.因为像堆,栈,对,图等比较复杂的数组结基本上都可以由数组和链表来表示,所以掌握数组和链表的基本操作十分重要. 今天就来看 ...

  4. 业界丨涨薪20%!听听这位资深机器学习面试官的内心独白

    在营长的众多死党微信群,营长发现,大家很爱谈论机器学习面试,也是,毕竟面试表现越好,银子也能谈得越高,能把自己卖个好价钱,当然关心了. 对于这个话题最为关注的,莫过于研究生毕业的孩纸,和有两.三年工作 ...

  5. 【超详细】一文学会链表解题(建议收藏!)

    简介: 如果说数据结构是算法的基础,那么数组和链表就是数据结构的基础. 因为像堆,栈,对,图等比较复杂的数组结基本上都可以由数组和链表来表示,所以掌握数组和链表的基本操作十分重要.本文将为大家讲解链表 ...

  6. 【LeetCode】拓扑排序

    [207] Course Schedule 排课问题,n门课排课,有的课程必须在另外一些课程之前上,问能不能排出来顺序. 题解:裸的拓扑排序.参考代码见算法竞赛入门指南这本书. 1 class Sol ...

  7. .net 遍历数组找重复值写入一个新数组_第二轮 Python 刷题笔记一:数组

    经过四十多天缓慢的刷题,现在进度大概是刷了八十多道 LeetCode 题,最近也在吸取过来人的经验,仍然需要对刷题计划进行调整. 首先明确一下目标,我是有些 Python 基础,想通过刷题掌握更多算法 ...

  8. c++求解自行车慢速比赛问题_隐马尔可夫模型(模型推断五大问题)

    1.隐马尔科夫模型Learning问题是求解未知参数λ 2.隐马尔科夫模型Inference问题有五个:Decoding.Evaluation.Filtering.Smoothing.Predicti ...

  9. matlab偏微分方程工具箱求解

    Matlab的偏微分方程工具箱求解方法 这一节我们主要用matlab自带的偏微分方程的工具箱函数求解 一.偏微分方程组的matlab求解语句 ​ 该命令用以求解以下的PDEPDEPDE方程式: c(x ...

最新文章

  1. 美多商城之用户中心(用户基本信息)
  2. sqlserver 安装共享功能什么意思_网络多功能电力仪表安装要注意什么
  3. 【多进程并行版本】爬取链家二手房前100页标签,进行统计
  4. 2010考研全程学习规划简案【推荐】
  5. 2016 博客导读总结 amp; 个人感悟
  6. ResNet超强变体CoTNet!一种新的Transformer计算机视觉模块!
  7. asp.net core 系列 20 EF基于数据模型创建数据库
  8. MATLAB里sortrows是什么意思,Matlab中sortrows函数解析
  9. 第五周-第13章节-Python3.5-内置模块详解之Hashlib、模块
  10. win10cmd输入java_win10肿么输入cmd 输入java
  11. “test.txt“ E212: 无法打开并写入文件 解决方法
  12. 三大协议NetBEUI和 IPX/SPX TCP/IP
  13. 广东工业大学化学工程考研情况
  14. 学计算机的用双核CPU够吗,电脑cpu核数越多越好吗
  15. 单片机c语言拟合二次曲线y=a0+a1x+a2x^2
  16. [译] Python 自动处理 Excel 报表
  17. Formal Verification (一) 形式验证的分类、发展、适用场景
  18. 按阶段划分软件测试:单元测试 , 集成测试 , 系统测试 , 验收测试
  19. 年龄计算机在线计算适合你的对象,抖音年龄计算器恋爱对象生日,年龄计算器适合你的恋爱对象...
  20. vue 点击遮罩层功能区以外的地方关闭遮罩层

热门文章

  1. 程序员真实现状 很幸福 口活一流 头发掉光 | 程序员的6个职场忠告
  2. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...
  3. 微服务实践(二):使用API Gateway
  4. DC-DC升压转换器如何选择电感值?
  5. 事前运维,轻松掌控全局
  6. 2023最新稳定的礼品单号代发网系统源码,一键自动发货、api、无线分站、数据统计、自建仓、云仓全部包含
  7. Python元类编程
  8. html时间选择器时分秒,原生js日历日期控件带时分秒日期选择器
  9. BizWorks 助力企业应用的高效开发与复用
  10. 点积和叉积的几何意义