其他分享
首页 > 其他分享> > 牛顿法进阶

牛顿法进阶

作者:互联网

 

 

 

 

专栏目录

  1. 初识优化
  2. 线搜索与信赖域
  3. 线搜索(一):步长的选取
  4. 线搜索(二):收敛性和收敛速度
  5. 信赖域(一):Cauchy Point与Dogleg
  6. 信赖域(二):确切方法
  7. 共轭梯度法(一):线性共轭梯度
  8. 共轭梯度法(二):非线性共轭梯度
  9. 牛顿法进阶
  10. 数值求导和自动求导
  11. 拟牛顿法进阶
  12. 如何处理大规模问题?
  13. 非线性最小二乘

广告时间

欢迎关注《阅读经典》系列的其它专题:

编辑于 04-10 数学 最优化 数值最优化(书籍)
   

牛顿法进阶

王金戈 王金戈 一切很好,不缺烦恼。 杨晓萌 等 

在之前的文章线搜索与信赖域中,我们介绍过,牛顿法是线搜索的一种,目标函数二阶近似的极值,就是每次迭代牛顿法的方向,用公式表示为

[公式]

其中, [公式] 是待求的牛顿方向, [公式] 是目标函数的二阶导,即海森矩阵, [公式] 是目标函数的一阶导,即梯度。

牛顿法的显著问题在于,海森矩阵一旦不正定,求出的牛顿方向很可能无法使得目标函数下降。通过一些简单的推导可以得出这一结论。

[公式]

若海森矩阵正定,那么它的逆也正定,上式第二行小于 [公式] , [公式] 与 [公式] 的夹角大于90°,牛顿方向是目标函数下降方向。否则,一旦海森矩阵不正定,牛顿方向就可能是目标函数上升方向,这是我们绝不愿意看到的。

--> 有没有可能,某次上升,全局下降??

本文将介绍一些解决该问题的方法。

牛顿-共轭梯度法

前两篇文章刚刚介绍过的共轭梯度法就要展示出它的强大实力了,与牛顿法结合,可谓双剑合璧。

既然直接求解牛顿方向可能得到目标函数上升的方向,那还不如用迭代的方式,借助线性共轭梯度法求解式(6.1)。在共轭梯度法(一):线性共轭梯度中介绍过,当海森矩阵正定时,共轭梯度的每次迭代都会在某个方向上达到极小值,但当海森矩阵不正定时,可能在某个迭代出现负曲率方向,即 [公式] ,沿着这一方向是无法找到极小值的,因为此时目标函数的二阶近似单调递减。所以牛顿-共轭梯度法的策略是,一旦遇到负曲率方向就提前终止。我们知道,共轭梯度的第一次迭代是梯度下降方向,所以这种策略最差的结果是在第二次迭代时就终止,牛顿-共轭梯度法退化为最速下降法。虽然收敛速度慢了点,但至少可以保证全局收敛。况且大部分情况下应该都不会那么早终止。

思路很简单,但我们需要思考另一个问题。牛顿-共轭梯度法是否具有与牛顿法相同的二阶收敛速度?

答案是肯定的,在正常情况下,即不存在提前终止的情况下,线性共轭梯度法会在N次迭代后严格收敛到线性方程的解,得到与牛顿法完全相同的结果。不过,在共轭梯度法(一):线性共轭梯度中,我们提到,事实上不需要N次迭代就可以得到比较精确的解,所以如果每次都跑完N个迭代,会比较浪费时间。在整个牛顿-共轭梯度法的框架下,我们需要一种更方便地控制迭代次数和收敛性的方法。

考虑 [公式] 带来的残差,即式(6.1)左右项相减

[公式]

[公式] 越小,表明共轭梯度法的结果越接近线性方程的解,也就越接近二次收敛。但 [公式] 与问题本身的规模有关,而且随着 [公式] 的增加, [公式] 本来就会越来越小。所以我们应当考察比值 [公式] ,令

[公式]

选择不同的序列 [公式] ,其中 [公式] ,就相当于限制了不同的收敛速度。具体而言,我们可以从式(6.3)推导出 [公式] 与收敛性的关系,过程省略,结果如下

[公式]

式(6.5)表明,若 [公式] 是常数,那么 [公式] 线性收敛。若 [公式] ,那么 [公式] 超线性收敛。若 [公式] ,那么 [公式] 二次收敛。

这样一来,我们就可以通过设置 [公式] 来保证牛顿-共轭梯度法的收敛性。而且我们不一定非要让它二次收敛,通常,我们只需要令 [公式] ,保证其具有超线性收敛性就够了。具体操作的时候,牛顿-共轭梯度法的每次内部迭代都先判断是否满足式(6.3),满足则提前终止,否则继续迭代。

海森校正

另一种解决海森矩阵不正定问题的方法称为海森校正(Hessian Modification)。思路是让海森矩阵加上一个微小的量,使其正定,相当于用 [公式] 替代 [公式] 。其中, [公式] 需要尽可能小,以避免修改后的 [公式] 与牛顿方向 [公式] 相差太远。

信赖域(一):Cauchy Point与Dogleg一文中,我们提到过令 [公式] ,当 [公式] 时, [公式] 正定。其中 [公式] 是 [公式] 最小的特征值。因此可以得到 [公式] ,其中 [公式] ,[公式] 是一个略大于零的常数。

但根据 [公式] 计算 [公式] 的方法不止一种,对于任意对称矩阵 [公式] ,可以将其分解为 [公式] ,其中 [公式] 是由 [公式] 的特征值组成的对角矩阵。如果我们令 [公式] ,其中 [公式] 由 [公式] 确定,并满足 [公式] 。这意味着直接修改 [公式] 的特征值,将所有小于 [公式] 的特征值调整到 [公式] ,从而保证 [公式] 的正定性。该方法相当于令 [公式] 。

这两种方法都是根据特征值确定 [公式] ,哪种更好呢?

其实说不上哪个更好,本质上,他们是在不同范数约束下的最优结果。前面提到,我们希望 [公式] 越小越好,因此可以用矩阵范数来衡量 [公式] 的大小。第一种方案其实是在欧氏范数下的最小改动,因为 [公式] ,不存在使 [公式] 更小的其它 [公式] 。第二种方案则是在Frobenius范数下的最小改动。Frobenius范数定义为

[公式]

即所有矩阵元素的平方和再开根号,该范数刻画了矩阵所有元素值的大小。在该定义下, [公式]

第二行去掉了矩阵 [公式] 和 [公式] ,因为实对称矩阵的特征向量构成的矩阵 [公式] 是正交矩阵,而正交矩阵相当于旋转,不改变Frobenius范数。容易验证,第一种方案的Frobenius范数为 [公式] ,做个简单的放缩就能发现 [公式] ,所以第二种方案是Frobenius范数下的最小改动。

了解上面两种方法,其实并不能在实际中帮上忙。因为海森矩阵的特征值我们根本无从得知,那是一个需要花大代价才能知道的数字。在实际中,我们一般采取 [公式] 这种方案,但不通过特征向量确定 [公式] ,而是以迭代的方式把可行的 [公式] 试出来。

具体怎么做呢?我们可以先从一个稍小的数开始尝试,比如令 [公式] ,在每次迭代中对校正后的海森矩阵进行Cholesky分解,

[公式]

如果分解成功,那么分解的结果 [公式] 就可以用来快速求解式(6.1)。如果分解失败,那么将 [公式] 扩大一倍,进入下一次尝试,直到分解成功。

Modified Cholesky分解

本文到目前为止已经介绍了两类方案,一是用迭代的方式求解式(6.1),二是对海森矩阵进行校正,即叠加一个小矩阵,使其正定。但这些方法似乎都不够完美,迭代方法依赖于线性共轭梯度,也就带来了共轭梯度本身的一些缺陷,比如需要预处理、受计算机数值精度影响。海森校正苦于无法得知特征值的大小,只能多试几次,试的次数越多,浪费的时间就越多。

但问题难不倒聪明的研究者,有人提出了一种新的海森校正方法,称为modified Cholesky分解,可以在做Cholesky分解的过程中调整原矩阵的值,不需要迭代,不需要试错,分解完毕后直接得到新的正定海森矩阵。让我们看看这种方法是如何实现的。

对于任意一个正定对称矩阵,一定可以分解为如下形式

[公式]

其中, [公式] 是对角线元素全为1的下三角矩阵, [公式] 是对角矩阵。为了直观地解释分解的过程,我们以3×3矩阵为例,式(6.15)展开后得到

[公式]

令等号左右第一列相等,可以得到

[公式]

再令第二列、第三列相等,可以得到

[公式]

如果矩阵 [公式] 不正定,那么计算出的 [公式] 很可能是负的,同时导致 [公式] 矩阵的元素值不稳定,很可能过大。也就是说,分解成 [公式] 形式后再修改 [公式] 的值已经来不及了,我们需要在分解的过程中随时修改 [公式] 。以上面的例子为例,如果 [公式] 和 [公式] 都是正数,而 [公式] 是个负数,那么我们就直接把 [公式] 替换为一个正数。由于 [公式] 是最后一步算出来的,所以它的改变不影响其它分解结果。但假设另一种情况, [公式] 是正数, [公式] 就已经是负数了,这时我们仍然直接把 [公式] 替换为正数,不过这会影响下一步 [公式] 的计算,所以这种情况下 [公式] 矩阵会随之改变。

为什么要这样做呢?回到我们最初的目标,如果 [公式] 不正定,我们想要找到一个正定矩阵 [公式] 来替代 [公式] ,这样一来,虽然 [公式] 可能不存在,但我们可以找到使 [公式] 成立的 [公式] 。上面的分解步骤相当于找到了一个 [公式] ,其中 [公式] 。

到这里还没完,这一方法有一个神奇的性质, [公式] 恒成立,即 [公式] 。我们在 [公式] 的对角线元素上的改动竟然直接相当于修改 [公式] 的对角线元素,同时保持非对角线元素不变。这个性质非常完美,可以最大限度地保留 [公式] 本身的值,只对某些对角线元素做微小的修改。与上一节介绍的两种方案相比,它的改动最小,也最高效。至于为什么会存在这样的性质,观察上面的推导,可以发现 [公式] 的非对角线元素都包含 [公式] 项,而这一项在整个推导过程中其实是不变的。

由于篇幅有限,modified Cholesky的实际操作上的细节我们就不展开讲了,感兴趣的读者可以参考原书。

除了modified Cholesky方法以外,书中还介绍了其它一些在线修改海森矩阵的方法(所谓在线,是指在分解的过程中修改),我们也不再赘述。

信赖域牛顿法

前面介绍的各种方法都是线搜索牛顿法的变形,而且我们关注的是线搜索中如何确定方向,步长则仍然用线搜索(一):步长的选取中的方法来确定。

既然有线搜索牛顿法,自然也有信赖域牛顿法。其实所谓牛顿法,无非就是取 [公式] 而已,在线搜索中如此,在信赖域中也如此。曾经介绍过的Dogleg、二维子空间最小化、CG-Steihaug、确切方法等信赖域方法都可以把牛顿法套进去。所以我们不必一一介绍这些方法,只谈谈这些方法需要注意的地方。

对于Dogleg和二维子空间最小化这两种方法来说,它们的近似程度很依赖于无约束极小值点的位置。如果海森矩阵正定,显然不会出问题。但如果海森矩阵不正定,如果用前面介绍的海森校正方法将其变为正定,再计算无约束极小值点,就可能产生较大的偏差。所以这两种方法只适用于海森矩阵正定的情况。

CG-Steihaug方法结合牛顿法后称为信赖域牛顿共轭梯度法,它与本文第一部分介绍的牛顿-共轭梯度法相比,只是多了个信赖域半径。但恰恰就是这个信赖域,会使得该方法优于牛顿-共轭梯度法。回顾前面提到的内容,牛顿-共轭梯度法为了解决海森矩阵不正定的问题,采取提前结束的策略,一旦发现负曲率方向,就结束共轭梯度的迭代,进入下一次线搜索的迭代。这并非什么好策略,顶多算是个不得已而为之的办法。但在信赖域中,我们有更好的方案。由于信赖域半径的存在,即使遇到了负曲率方向,我们可以在终止迭代的同时,沿该方向前进到信赖域边沿,因为我们认为信赖域半径内的区域都是可信区域,而目标函数沿着该负曲率方向又是单调下降的。这种方案在实践中明显优于牛顿-共轭梯度法。

不过需要注意的是,只要使用共轭梯度法,就一定需要预处理,否则收敛性会受到严重影响。

总结

本文介绍了牛顿法应用在线搜索和信赖域中时遇到的实际问题和解决方案。我们越来越发现,各种方法交织在一起,它们可能只有细微的差别,这需要大家对前面介绍的信赖域、线搜索、共轭梯度的基础知识足够熟悉,才能理清这些层出不穷的新方法。

 

上一篇:共轭梯度法(二):非线性共轭梯度
下一篇:数值求导和自动求导

 

编辑于 04-11

标签:进阶,迭代,牛顿,矩阵,海森,梯度,共轭
来源: https://www.cnblogs.com/cx2016/p/13781901.html