References

1. Secant Equation and Quasi-Newton Methods

牛顿法是一个高效的二阶优化方法. 然而在迭代过程中, 计算 Hessian 矩阵 可能非常昂贵. Quasi-Newton 方法通过构建一个近似的 Hessian 矩阵来避免直接计算 Hessian, 从而提高了算法的效率.

回顾牛顿法. 对于一个二阶可微的目标函数 , 其梯度 在 处的泰勒展开为

令 , 并忽略高阶项, 可得

因此, Hessian 矩阵 可以近似为

  • 这样的估计也是非常自然的, 我们通过一阶导数的割线的斜率来近似二阶的曲率.

因此, 若我们能够构建一个满足上述近似关系的矩阵 :

则我们可以使用 来代替 Hessian 矩阵 进行优化, 从而避免直接计算 Hessian. 我们同时也称上述方程为 secant equation (割线方程).

有时更进一步, 由于牛顿法在计算时事实上是在使用 Hessian 的逆 (), 因此有时我们也直接构建一个满足以下关系的 inverse Hessian 的近似矩阵 :

来直接进行更新:

以 inverse Hessian 的近似 Quasi-Newton 方法在实践中往往更为常见, 不过往往基于 的方法在理论分析中更为方便.

Note: 割线方程的另一种解读视角

上述割线方程就是整个 Quasi-Newton 方法的核心. 其还可以从另一个角度完整的推导得到.

回顾牛顿法的核心思想, 我们是在迭代点 展开二阶近似原函数 :

因此, 自然地会要求这个近似的结果在 和 处的梯度与原函数 的梯度相匹配:

求解 的梯度:

因此, 不难发现 是天然满足的. 故而我们只需要保证 即可. 代入上式, 可得

故在 Quasi-Newton 方法中, 用 来近似 , 就自然地得到了割线方程.

另一方面, 除了割线方程之外, 另一个重要的设计原则是保持 Hessian 近似矩阵 (或 ) 的正定性. 理由有如下几个:

  1. 本身 Hessian 矩阵 在凸优化问题中是正定的, 因此我们希望近似矩阵 也能保持这一性质, 从而更好地捕捉原函数的曲率信息.
  2. 保持 的正定性可以确保搜索方向 是一个下降方向, 从而保证算法的收敛性.
    • 这是因为, 由 Newton 方法的更新方向: 可知, 为使得 是一个下降方向, 需要 . 这就要求 . 这在 是正定的情况下是天然满足的.
  3. 保持 的正定性还可以确保近似模型 是一个严格凸函数, 从而保证每次迭代都能找到一个唯一的最优解.

因此, 若综合考虑上述正定性和割线方程的要求, 可以立刻得到如下必要条件(曲率条件). 在 Quasi-Newton 迭代过程中, 我们需要该条件在每次迭代中都得到满足:

事实上, 在步长搜索中, 若使用 Wolfe 条件, 则可以保证上述曲率条件的满足.

  • 对 Wolfe 条件的曲率条件 左右两侧同时减去 , 可得 观察 RHS 的符号, 由于 , 因此 . 同时, 由于 是一个下降方向, 因此 . 因此, RHS 的符号是正的. 因此自动得到了曲率条件的满足.

Note: Wolfe 条件

对于一个目标函数 , 给定在 处的搜索方向 , Wolfe 条件要求步长 满足以下两个条件:

  1. Armijo 条件: , 其中 是一个小的常数.
  2. 曲率条件: , 其中 是另一个常数.

总的而言, 一个一般的 Quasi-Newton 方法的迭代步骤可以总结如下:

ALGORITHM: Generic Quasi-Newton Method

INPUT: 初始点 , 初始 Hessian 近似 (或 ).

  1. FOR DO
    1. COMPUTE 搜索方向 (或 ).
    2. COMPUTE 步长 通过线搜索确定.
    3. UPDATE .
    4. UPDATE Hessian 近似 (或 ) 使其满足 secant equation.

2. Update Formulas: SR1, DFP and BFGS

在 Quasi-Newton 方法中, 关键的一步是如何更新 Hessian 近似矩阵 (或 ) 以满足 secant equation. 常见的更新公式包括 SR1、DFP 和 BFGS 等.

SR1 更新公式

SR1 (Symmetric Rank-One) 更新公式的形式如下. 假设 是第 轮迭代的 Hessian 近似矩阵, 我们假设存在一个 rank-1 的更新方法得到 以满足 secant equation:

其中 是一个标量, 是一个向量. 我们可以通过代入 secant equation () 来通过待定系数法求解 和 :

整理有:

注意到这里 是一个标量, 故 的方向应该与 的方向一致. 故不妨令 . 则对应:

因此, SR1 更新公式可以总结为:

若记 和 , 则 SR1 更新公式可以简化为:

同样的过程, 我们也可以得到 inverse Hessian 的 SR1 更新公式:

SR1 的方法虽然简单, 但是发现其在迭代过程中,并不能保证 Hessian 近似矩阵 的正定性, 因此在实践中并不常用.

BFGS 更新公式

为了保证 Hessian 近似矩阵 的正定性, BFGS (Broyden-Fletcher-Goldfarb-Shanno) 更新公式被提出. BFGS 更新公式采用 rank-2 的更新方式, 其形式如下:

同样代入 secant equation, 整理后可以得到:

用同样的记号可以简化为:

事实上, 在这个方程中, 具体待定系数的求解是欠定的. 一个较为直接的方法就是依序对应元素完全相等, 即:

因此, BFGS 更新公式可以总结为:

根据 Sherman-Morrison-Woodbury 公式, BFGS 的 inverse Hessian 的更新公式可以求出:

  • 为使得 BFGS 曲率条件 得到满足, 在实践中, 当求出 以确定搜索方向 后, 通常会配合 Wolfe 条件来进行线搜索, 从而保证曲率条件的满足.

上述的 的更新公式还可以通过下面的视角进行理解. 事实上, 这样定义的 是如下优化问题的解:

其中 是任意满足割线方程 的矩阵. 通过这样的 W-norm, 相当于对 进行了尺度归一化, 相当于用一个更符合 Hessian 曲率的距离度量来衡量 和 之间的距离. 通过额外地对于对称性, 以及 的割线方程的约束, 我们解出的 就是 BFGS 的更新公式.

DFP 更新公式

BFGS 公式是利用割线方程对 Hessian 近似矩阵 进行 rank-2 更新的. 而 DFP (Davidon-Fletcher-Powell) 更新公式则是直接对 inverse Hessian 近似矩阵 进行 rank-2 更新的. DFP 的更新公式如下:

DFP 公式与 BFGS 分别呈现对偶关系. 但是在实践中, BFGS 的表现往往优于 DFP, 因此 BFGS 更为常用.

3. Convergence of Quasi-Newton Methods

首先重申记号.

  • 设 是第 轮迭代的 Hessian 近似矩阵. 对应的搜索方向为 . 另记 和 . 因此 BFGS 的更新公式为:
  • 在确定更新方向后, 通过线搜索来确定步长 以满足 Wolfe 条件:
    1. Armijo 条件: , 其中 是一个小的常数.
    2. 曲率条件: , 其中 是另一个常数.
  • 算法以满足上述条件的 来更新参数: .

如下定理表明, 在一些合理的假设条件下, BFGS 方法是全局收敛的. 也就是说, 迭代点 不论其初始值如何, 都会收敛到一个全局最优解. 在给出定理之前, 首先需要一个重要的引理. 该引理适用于任意 Wolfe line search 下降方法.

Lemma (Zoutendijk’s Theorem): 设 是一阶连续可微, 有下界, 且梯度 Lipschitz 连续

设 是通过满足 Wolfe 条件的线搜索方法生成的迭代点序列, 考虑负梯度方向和搜索方向之间的夹角 之余弦

则定有:

也称上述级数的收敛为 Zoutendijk’s condition.

  • Zoutendijk’s condition 的直观理解如下. 考虑 , 其相当于负梯度在搜索方向上的投影强度, 相当于沿着该方向的下降率的大小. 根据 Wolfe 条件, 如果该量足够大, 则 Wolfe 条件定会使得该次迭代产生足够的下降. 然而又因为 是有下界的, 因此可行的下降总量是有限的. 因此, Zoutendijk’s condition 就是一个定量化的表达, 说明了沿着搜索方向的下降率的平方和是有限的
  • 不过 Zoutendijk’s condition 本身并不能直接说明 , 因为其可能包含了两种情况: 1. , 这个是我们希望的情况, 其表明算法收敛到了一个 stationary point; 2. , 这是不期望发生的, 其表明搜索方向与梯度夹角接近正交, 发生退化.

Theorem (Global Convergence of BFGS): 给定一个二阶可微的目标函数 , 以及一个 level set . 做如下假设:

  1. 是凸的.
  2. 初始矩阵 是对称正定的.
  3. 存在正常数 和 , 使得对于任意 , 都有 或等价地, 对于任意 , 都有

则通过上述的 BFGS 更新公式和 Wolfe 条件的线搜索, 迭代点 将全局收敛到 的一个最优解.

Proof Sketch:

  • 定理的假设主要想说明, 在算法的活动范围 内, 目标函数曲率有界, 既不会太平坦也不会过于陡峭. 并且由于 Wolfe line search 的设计, 可以保证函数值不断下降, 一直都在 内.
  • 根据 Zoutendijk’s condition, 可知 . 因此, 只要能够保证 不会退化到 0, 就可以得出 , 从而得出 收敛到一个 stationary point.
  • 最后, 由于 是凸的, 因此该 stationary point 就是一个全局最优解.

Theorem (Superlinear Convergence of BFGS): 设 是一个二阶连续可微的函数, 在最优解 的某个邻域内, 其 Hessian 是 Lipschitz 连续的. 设 是通过上述的 BFGS 更新得到的点列, 满足:

则 将以超线性的速度收敛到 , 即

4. Limited-memory BFGS (L-BFGS)

BFGS 方法虽然克服了牛顿法中 Hessian 计算的昂贵问题, 但是其在每次迭代中都需要存储和更新一个 的矩阵 (或 ), 这在高维问题中可能会导致巨大的内存开销. 为了解决这个问题, Limited-memory BFGS (L-BFGS) 方法被提出. L-BFGS 通过迭代展开的方式, 用一个较小的历史信息来近似 Hessian 矩阵, 从而大幅降低了内存需求.

L-BFGS 的完整推导

首先为推导方便, 这里采用 来近似 Hessian 的逆. 并且将迭代公式整理如下:

其中

观察到, 上述的 的计算需要 呈现递归的关系. 因此, 对该公式进行递归展开 次, 可以得到如下的展开式 (可以直接通过迭代展开来验证):

更进一步, 在实际计算中, 我们事实上也并不是直接显式地计算 的矩阵形式, 而是要通过 来计算搜索方向 . 因此, 在上展开式左右两侧再同时乘以 (为方便起见, 进一步简化 ), 可以得到如下的计算搜索方向的公式:

这时便可以观察到较强的规律性了. 上式每一个加法项中, 不妨从右向左进行乘法计算. 此时, 都要依次计算 , 以此类推 (见下划线部分). 并且注意到, 该系列不断左乘 的矩阵乘法一直是 的形式, 形状保持不变. 因此, 若抽象地概括, 令初始值 , 则上述一系列乘法可以通过如下的递归关系来计算:

下面进行具体地代数展开.

  • 首先进行第一轮迭代. 考虑 的计算, 根据定义, , 因此

    • 故实际在第一轮迭代中:
      • 首先计算 .
      • 然后由此更新 .
  • 然后进行第二轮迭代. 考虑 的计算. 同样根据定义展开:

    • 故实际在第二轮迭代中:
      • 首先计算 ,
      • 然后由此更新 .
  • 以此类推, 在第 轮迭代中, 首先计算

    然后更新

因此, 整理 轮迭代的结果, 我们最终得到 . 此时再次列出最开始的递推公式:

  • 回顾, 在迭代中, 我们算出 , . 且本身 . 因此, 将这个迭代展开式代回 中, 则有:
  • 上面的完整递推公式中每一个加法项中的蓝色部分 就是对应 的值.

进而, 在第一轮循环结束后, 我们可以利用 来进一步简化原始的递推公式:

下面开始第二轮循环合并. 观察到, 上式子的各项加法中有大量的公共因子, 因此进行合并.

  • 第一步整理前两项.

    • 展开 transpose, 提取前两项的绿色部分公共因子, 并将 代入第一项中, 可得
    • 为方便, 引入两个变量: 和 . 则上式可以简化为 其中 根据结构的相似性, 又可以递归地定义 , 从而得到
  • 因此第二步又可以进行合并.

    • 所有展开的过程完全相同, 最终的结果为:

      其中

    • 以此类推, 最终可以得到在第 步, 一般的迭代公式为

      其中

    • 最后, 在完成 的迭代后得到的结果为:

      故最后一轮迭代有:

      故定义 , 则最终的结果为

  • 因此, 最后通过迭代得到的 就是 的值, 恰恰就是下一步的搜索方向 (之相反数) .

以上就构成了 L-BFGS 方法中计算搜索方向的核心算法. 其一共需要约 次乘法与 次加法运算. 总的计算复杂度约为 .

实现细节与说明

关于初始值 的估计

上述的迭代过程事实上包含了一个假设: 不论具体双循环的方式如何, 我们本质上依然是在简化处理下列的迭代展开式:

然而这个式子事实上是需要知道 的值的. 该取值本身在第一阶段没有涉及, 但在第二阶段的初始迭代中, 便需要计算:

因此需要对 的取值进行说明. 注意, 这个初始值的选取必须要简单, 否则又会回到 full BFGS 的内存问题.

在实际的实现中, 对于其估计可以通过选取对角阵:

来近似 的值. 这一选择本身也是合理的. 因为, 本身作为 inverse Hessian 的近似, 我们期望其能够满足关系:

而若我们只能拥有对角线阵的形式, 即 , 则上式的近似关系就变成了 , 从而通过求解:

从而得到上述的 的取值.

L-BFGS 的矩阵表达

事实上, 通过紧凑矩阵形式, 我们能够直接给出 L-BFGS 的矩阵表达.

再次首先回到 BFGS. 为讨论方便, 引入记号

这时, 给定 BFGS 的初始对称正定矩阵 , 且设 为历史曲率信息满足 , 则 BFGS 的迭代公式可以通过如下的矩阵表达来表示:

其中

而 为 的上三角矩阵, 其第 行第 列的元素为

且 为 的对角矩阵,

因此, 对应地, 只要将上述的 的定义中的 替换为 , 并且将 替换为 , 就可以得到 L-BFGS 的矩阵表达.

该定理证明比较烦琐. 它的重要意义在于可在给定 的条件下直接计算出 BFGS 迭代矩阵 的值

伪代码

L-BFGS 本身的构造算法如下所示.

ALGORITHM: L-BFGS 双循环递推算法

INPUT: 当前梯度 ;最近 对历史曲率信息 ;标量 ;初始逆 Hessian 近似矩阵 .

OUTPUT: , 即 的值.

  1. SET .
  2. FOR DO
    1. COMPUTE 并保存 .
    2. UPDATE .
  3. SET . 其中 是对 的近似, 可以选取 .
  4. FOR DO
    1. COMPUTE .
    2. UPDATE .

接着, 在给出了搜索方向 之后, 使用 L-BFGS 进行优化迭代的完整算法如下所示.

ALGORITHM: L-BFGS 优化算法

INPUT: 初始点 ;历史曲率信息的记忆长度 .

OUTPUT: 最优解 .

  1. FOR DO
    1. SET 近似矩阵 .
    2. COMPUTE 搜索方向 使用双循环递推算法.
    3. COMPUTE 步长 使用 Wolfe 条件线搜索.
    4. UPDATE .
    5. IF THEN
      1. UPDATE 历史集合: 丢弃最早的历史曲率信息 .
    6. COMPUTE 新的历史曲率信息 , 并 UPDATE 历史集合: 将其加入历史曲率信息集合中.
    7. IF 收敛条件满足 THEN BREAK.