Newton Methods

Newton’s Method

牛顿法

  • 前提条件
    • 一阶导和二阶导连续
    • 具有严格正定的Hessian矩阵
  • 原理
    • 对函数进行二阶泰勒展开
    • 导数为0时得到极值点
    • 更新公式
      • 减号后面的内容就是牛顿步长(Newton step),这里需要满足Hessian严格正定,因为沿着梯度的负方向才可以保证函数值下降,牛顿步长是一个负号乘Hessian的逆再乘梯度,Hessian的逆必须要和梯度是同向的(正定)才行,从而Hessian也必须是正定的
    • 特别的,如果目标函数本身就是二次的,那一步就可以迭代到最优解
  • 与梯度下降法对比
    • newton v.s. gd
    • 下降路线更加平直
    • 迭代次数更少
    • 每次迭代计算量更大
  • 缺点
    • 很多时候Hessian矩阵是半正定或者不定的,会导更新方向不是梯度的反方向,函数值增大
    • Hessian indefinite

Damped Newton’s Method

阻尼牛顿法

  • 当初始点距离最优解较远时,Hessian不一定正定,迭代不一定收敛,因此引入步长因子

Modified Newton’s Method

修正牛顿法

  • 背景
    • 提高牛顿方法在一般函数上的鲁棒性
    • 对牛顿法的优化思路
      • Modified Damped Newton's Method
      • 考虑到Hessian不一定正定,尝试用一个正定的拟合Hessian,只要拟合的够接近,也可以近似表示曲率信息
      • 其实没必要求,本质上我们是想求线性方程的解,可以用一些成熟的线性求解器进行求解,比解逆快很多
      • inexact line search不需要求Hessian,梯度也只是在最开始算一次,更新的过程中不需要计算梯度,所以计算量很小
  • 原问题
  • 拟合Hessian
    • 如果是凸函数(Hessian半正定)
      • 严格正定,搜索方向的求解可以用Cholesky factorization快速求解
      • 是个下三角矩阵
    • 如果是非凸函数(Hessian不定)
      • 将Hessian进行Bunch-Kaufman Factorization,原问题转化为
      • 其中,是个下三角矩阵,是个对角线由的矩阵块组成的块对角阵
      • 的标量一定是正数,的矩阵块的特征值是一正一负,我们需要把每个矩阵替换为和其最接近的正定矩阵,最终得到新的(正定),把求解出来
        • 上面矩阵的正定化就是把负的特征值都算出来,然后用一个去代替负特征值得到新的矩阵
  • 缺点
    • 仅仅保证了Hessian的正定,还是要把Hessian求出来,计算量大

Quasi Newton’s Method

拟牛顿法

  • 牛顿法的问题
    • 牛顿法需要函数在任何点的Hessian可逆且正定,条件比较苛刻
    • 牛顿法的计算量太大
    • 距离函数的最优解还比较远的时候,用二次函数进行近似的效果不好,这时候用牛顿法不仅计算量大,收敛还很慢;当距离函数的最优解比较近的时候,二次函数的近似会好一些,收敛会很快。
    • Hessian拟合的函数的条件数可能会变得很大(poorly conditioned)。比如函数是一段直线和一段二次曲线拼接起来的,在直线部分计算Hessian去确定更新步长的话,会得到一个非常大的更新步长(曲率是0,对0取逆是无穷大)
  • 拟牛顿法需要满足的一些特质
    • 原理和修正阻尼牛顿法一样,设计一个去近似
    • 收敛速度应该在牛顿法和最速梯度下降法之间
    • 不需要计算完整的Hessian矩阵(低计算量)
    • 线性方程存在闭式解
    • 不应该是一个稠密的阵,只需要在重要的的方向上对做近似,尽可能稀疏
    • 一定得让函数下降(和梯度方向的夹角小于90度),其实就是必须正定
    • 应该包含曲率信息(收敛要比梯度下降来的快),也就是满足
  • 拟牛顿法的核心思路
    • 通过采样N对来估计
    • 同时,考虑到最终是要求,干脆直接估计,更新方向
    • 估计的时候避免计算Hessian矩阵

凸且光滑函数的BFGS方法

  • 假设我们有了很多的,怎么估计B呢?还是用优化迭代的思路:
    • 初始化为单位阵
    • 迭代求解最优的,迭代的思路如下:
      • 我们希望迭代前后B的差距尽可能小:
      • 其次,需要满足一些约束:
        • ,这是因为Hessian是对称阵,所以Hessian的逆也应该对称
      • 注意,单纯用差的二范数描述的变化并不好,比如的差值的二范数很小,但对于右上和左下角的元素来说变化和其自身的大小相比是巨大的,因此需要进行归一化
      • 归一化后,优化目标变成:为真实的Hessian矩阵,
      • 我们本来就是套估计H,现在这里还要用到H,看起来是个鸡生蛋,蛋生鸡的问题,但实际上这个问题是有解析解的,与无关。四个优化领域的大佬提出了BFGS方法,最终得到的更新公式如下:
      • BFGS
      • 注意:当时,我们可以保证BFGS更新的结果是正定的,从而保证的方向是函数值下降的方向,对凸函数而言,这是绝对成立的(可以回顾强凸性的定义);非凸函数后面讨论
  • 适用于凸且光滑函数的BFGS方法的流程
    • BFGS for convex
    • 是梯度
    • 是更新方向
    • 是line search方法确定的步长
  • 缺点与问题
    • 严格梯度单调性(严格凸函数)的条件过于苛刻,一般函数很难满足
    • 曲率的计算在optimum附近有效,在远处反而是浪费算力
    • 每次迭代的计算复杂度是优化变量的维度的平方,还是不够轻量
    • 在非凸函数上是否能够保证收敛仍未知
    • 在非光滑函数上能否正常使用仍未知

非凸但光滑函数的BFGS方法

  • 在非凸函数上如何保证,从而保证更新方向是函数值的下降方向呢?答案是线搜索的时候满足Wolfe conditions
    • weak wolfe conditions
      • weak wolfe conditions
      • sufficient decrease condition保证了函数值的下降
      • curvature condition保证了这一步跨的足够大,从下山跨到上山
    • strong wolfe conditions
      • strong wolfe conditions
      • strong和weak的区别在于对curvature condition加了个绝对值约束,不让这一步跨的太过头(跑到对面的山坡上),可以抑制震荡
  • 但Wolfe conditions只能保证方向是下降方向,如何保证BFGS的收敛性呢?答案是cautious update(Li and Fukushima 2001) with mild conditions
    • cautious update
    • 只要函数满足如下两个条件,cautious update都可以保证BFGS的收敛性
      • 函数有bounded sub-level sets
      • 函数有lipschitz continuous grad
  • 适用于非凸但光滑函数的BFGS方法的流程
    • BFGS for nonconvex
  • 与牛顿方法的收敛速度对比
    • BFGS vs Newton
    • 速度上慢了一点点,但计算量少很多,综合看更具优势

Limited-memory BFGS(L-BFGS)方法

  • 由于是由迭代计算得到的。所以隐含了的信息。但直觉上来说,已经差的很远了,处的曲率信息对处的曲率信息的推导没有啥有效价值了,因此我们可以设置一个memory buffer,让来决定的取值,从而降低计算量。
  • L-BFGS方法的流程
    • 就是把上面的Cautious-BFGS过程改成下面的更新流程
    • L-BFGS
    • 上图左边方法的复杂度是,因为每个window size内的信息都被重复遍历并计算了。实际上每个循环中,我们只需要将窗口中的头元素去掉,末尾的新元素算进来即可,因此改成右边的计算过程后可以将复杂度简化到,具体推导可以看Liu and Nocedal 1989.
  • 与Newton和BFGS的对比
    • L-BFGS vs BFGS
    • 由于牺牲了部分历史信息,收敛速度相比BFGS更慢一些,但计算量从降低到,当很大的时候,效率提升就非常大了,基本上是光滑非凸函数优化的第一选择

非凸且非光滑函数的L-BFGS方法

  • wolfe conditions方法选择
    • 假设我们把strong wolfe conditions方法直接应用在非凸且非光滑函数上,看看会发生什么
      • strong wolfe on nonconvex
      • 回顾一下,strong wolfe conditions通过绝对值约束,将更新点的梯度压在0附近,但上图右侧的非光滑函数没有任何点的梯度在0附近,导致无法找到满足strong wolfe conditions的点
    • 假设我们把weak wolfe conditions方法直接应用在非凸且非光滑函数上,看看效果
      • weak wolfe on nonconvex
      • weak wolfe conditions方法可以保证能找到满足条件的更新点
    • 结论:使用weak wolfe conditions方法处理nonsmooth函数
  • 如何确定一个步长使得weak wolfe conditions被满足呢?
    • 对smooth函数,用拟合法确定步长
      • 先初始化一个步长
      • 如果该步长满足weak wolfe conditions,直接返回
      • 如果不满足weak wolfe conditions,根据两个点去拟合二次函数,取二次函数的极值点作为新的步长,不断迭代,直到满足weak wolfe conditions
      • 但是当函数nonsmooth(或者条件数很大)的时候,这种二次函数拟合的效果很差,导致求出来的极值点也很不理想,就不再适用了
    • 对nonsmooth函数,用Lewis & Overton line search方法
      • lewis overton 1
      • lewis overton 2
  • 注意点
    • 一定要取在可导的点,不能一上来就落在nonsmooth处
  • 非凸且非光滑函数的L-BFGS方法流程
    • L-BFGS for nonsmooth nonconvex

Search

    欢迎添加我的微信

    闷骚的程序员

    Table of Contents