References
- Lecture Reference: https://www.stat.cmu.edu/~ryantibs/convexopt-F18/
- Readings:
- 刘浩洋, 最优化: 建模、算法与理论, Chapter 6.5
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 近似矩阵 (或 ) 的正定性. 理由有如下几个:
- 本身 Hessian 矩阵 在凸优化问题中是正定的, 因此我们希望近似矩阵 也能保持这一性质, 从而更好地捕捉原函数的曲率信息.
- 保持 的正定性可以确保搜索方向 是一个下降方向, 从而保证算法的收敛性.
- 这是因为, 由 Newton 方法的更新方向: 可知, 为使得 是一个下降方向, 需要 . 这就要求 . 这在 是正定的情况下是天然满足的.
- 保持 的正定性还可以确保近似模型 是一个严格凸函数, 从而保证每次迭代都能找到一个唯一的最优解.
因此, 若综合考虑上述正定性和割线方程的要求, 可以立刻得到如下必要条件(曲率条件). 在 Quasi-Newton 迭代过程中, 我们需要该条件在每次迭代中都得到满足:
事实上, 在步长搜索中, 若使用 Wolfe 条件, 则可以保证上述曲率条件的满足.
- 对 Wolfe 条件的曲率条件 左右两侧同时减去 , 可得 观察 RHS 的符号, 由于 , 因此 . 同时, 由于 是一个下降方向, 因此 . 因此, RHS 的符号是正的. 因此自动得到了曲率条件的满足.
Note: Wolfe 条件
对于一个目标函数 , 给定在 处的搜索方向 , Wolfe 条件要求步长 满足以下两个条件:
- Armijo 条件: , 其中 是一个小的常数.
- 曲率条件: , 其中 是另一个常数.
总的而言, 一个一般的 Quasi-Newton 方法的迭代步骤可以总结如下:
ALGORITHM: Generic Quasi-Newton Method
INPUT: 初始点 , 初始 Hessian 近似 (或 ).
- FOR DO
- COMPUTE 搜索方向 (或 ).
- COMPUTE 步长 通过线搜索确定.
- UPDATE .
- 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 条件:
- Armijo 条件: , 其中 是一个小的常数.
- 曲率条件: , 其中 是另一个常数.
- 算法以满足上述条件的 来更新参数: .
如下定理表明, 在一些合理的假设条件下, 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 . 做如下假设:
- 是凸的.
- 初始矩阵 是对称正定的.
- 存在正常数 和 , 使得对于任意 , 都有 或等价地, 对于任意 , 都有
则通过上述的 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: , 即 的值.
- SET .
- FOR DO
- COMPUTE 并保存 .
- UPDATE .
- SET . 其中 是对 的近似, 可以选取 .
- FOR DO
- COMPUTE .
- UPDATE .
接着, 在给出了搜索方向 之后, 使用 L-BFGS 进行优化迭代的完整算法如下所示.
ALGORITHM: L-BFGS 优化算法
INPUT: 初始点 ;历史曲率信息的记忆长度 .
OUTPUT: 最优解 .
- FOR DO
- SET 近似矩阵 .
- COMPUTE 搜索方向 使用双循环递推算法.
- COMPUTE 步长 使用 Wolfe 条件线搜索.
- UPDATE .
- IF THEN
- UPDATE 历史集合: 丢弃最早的历史曲率信息 .
- COMPUTE 新的历史曲率信息 , 并 UPDATE 历史集合: 将其加入历史曲率信息集合中.
- IF 收敛条件满足 THEN BREAK.