# 优化算法的分类
- 零阶优化:只使用函数 f(x) 本身
- 一阶优化:使用函数 f(x) 和其梯度 ∇f(x)
- 二阶优化:使用函数 f(x)、其梯度 ∇f(x) 和其 Hessian 矩阵 ∇2f(x)
# 牛顿法
二阶泰勒展开如下:
f(xk+dk)=f(xk)+∇f(xk)Tdk+21dT∇2f(xk)dk
# 修正牛顿法
xk+1=xk−αkSk∇f(xk),Sk∈Rn×n.
其中当 Sk=In 时,为梯度下降算法,当 Sk=[∇2f(xk)]−1 时,为拟牛顿法。
# 收敛性分析
ϵ(xk+1)≤(Λk+λkΛk−λk)2ϵ(xk),λk=iminλik,Λk=imaxλik.
Λ−λ 称为条件数 (conditioning number), 条件数越小,算法收敛越快。
怎么保证 ∇2f(x) 正定?
# 近似牛顿法
每次计算 Hession 矩阵都是一个立方复杂度。因此产生了近似牛顿法。
最简单的方式是不更新 Hessian 矩阵,但是会造成误差。
另外,注意到牛顿法的复杂度在于计算 Hessian 的逆矩阵
dk=−[∇2f(xk)]−1∇f(xk),
该计算的时间复杂度为 O(n3), 空间复杂度为 O(n2). 这实际上是求线性方程组:
∇2f(xk)dk=∇f(xk).
线性方程组可以使用优化算法来进行近似的快速计算。嗯,其实就是用梯度下降。
# PCG
此外,还可以用改进条件数的方法进行优化。对线性方程组 \bm{Ax} = \bm
# 拟牛顿法
牛顿法存在两个问题
- Hessian 矩阵不一定正定
- 需要计算 Hessian 的逆,复杂度过高
拟牛顿法的策略为:
- 构造一个 Hessian 矩阵(只需要满足 Hessian 阵的部分性质),保持其正定性
- 通过迭代方式更新 Hessian 矩阵,降低复杂度