牛顿法(Newton method)和拟牛顿法(quasi Newton method)是求解无约束最优化问题的常用方法,有收敛速度快的优点。牛顿法是迭代算法,每一步都需求解目标函数的海塞矩阵(Hessian Matrix),计算比较复杂。拟牛顿法通过正定矩阵近似海塞矩阵的逆矩阵或海塞矩阵,简化了这一计算过程。
牛顿法的原理是使用函数 f(x) f ( x ) 的泰勒级数的前面几项来寻找方程 f(y)=0 f ( y ) = 0 的根。
将函数 f(x) f ( x ) 在 x0 x 0 处展开成泰勒级数:
对于无约束最优化问题 minx∈Rnf(x) min x ∈ R n f ( x ) ,可根据极小点的必要条件 ∇f(x)=0 ∇ f ( x ) = 0 采用牛顿法求解:
输入:目标函数 f(x) f ( x ) ,梯度 g(x)=∇f(x) g ( x ) = ∇ f ( x ) ,海塞矩阵 H(x) H ( x ) ,精度要求 ϵ ϵ ;
输出: f(x) f ( x ) 的极小点 x∗ x ∗ 。
(1)取初始点 x0 x 0 ,置 k=0 k = 0
(2)计算 gk g k ,若 ||gk||<ϵ | | g k | | < ϵ ,则 x∗=xk x ∗ = x k ,停止计算;否则转(3)
(3)计算 Hk H k ,令 xk+1=xk−H−1kgk x k + 1 = x k − H k − 1 g k
(4)置 k=k+1 k = k + 1 ,转(2)
注:第(3)步中,涉及到 H−1k H k − 1 的计算,实际应用中,通常并不直接对 Hk H k 进行求逆,而是将其转化为求解线性代数方程组 Hkdk=−gk H k d k = − g k ,此时可根据系数矩阵 Hk H k 的性态来选择合适的迭代法,如预条件共轭梯度法(PCG)、代数多重网格法(AMG)等。
当目标函数是二次函数时,海塞矩阵退化成一个常数矩阵,从任一初始点出发,牛顿法可一步到达,因此它是一种具有二次收敛性的算法。对于非二次函数,若函数的二次性态较强,或迭代点已进入极小点的邻域,则其收敛速度也是很快的,这是牛顿法的主要优点。
牛顿法的迭代公式中由于没有步长因子,是定步长迭代,对于非二次型目标函数,有时会使函数值上升,即出现 f(xk+1)>f(xk) f ( x k + 1 ) > f ( x k ) 的情况,更甚者,可能出现迭代点列 {xk} { x k } 发散而导致计算失败的情况。为解决这个问题,出现了“阻尼牛顿法”,增加一个步长因子 λk λ k ,将算法流程(3)中的计算公式修改为:
如上节所说,牛顿法虽然收敛速度快,但是需要计算海塞矩阵的逆矩阵 H−1 H − 1 ,而且有时目标函数的海塞矩阵无法保持正定,从而使得牛顿法失效。为了克服这两个问题,人们提出了拟牛顿法。这个方法的基本思想是:不用二阶偏导数而构造出可以近似海塞矩阵(或海塞矩阵的逆)的正定对称阵。不同的构造方法就产生了不同的拟牛顿法。
下面我们先推导一下拟牛顿条件,它给“对海塞矩阵(或海塞矩阵的逆)做近似”提供了理论指导,指出了用来近似的矩阵应该满足的条件。
对 ∇f(x) ∇ f ( x ) 做泰勒展开我们得到了以下近似:
DFP算法用 Gk G k 作为 H−1k H k − 1 的近似,这里我们直接给出计算公式:
BFGS算法用 Bk B k 作为 Hk H k 的近似,与DFP相比,BFGS性能更佳。这里我们直接给出计算公式:
在BFGS中,需要用到一个N阶矩阵 Gk G k ,当N很大时,存储这个矩阵将消耗大量计算机资源。为了解决这个问题,减少BFGS迭代过程中所需的内存开销,就有了L-BFGS。
L-BFGS(Limited-memory BFGS或Limited-storage BFGS)对BFGS进行了近似,其基本思想是:不再存储完整的矩阵 Gk G k ,而是存储计算过程中的向量序列 {δk}{yk} { δ k } { y k } ,需要矩阵 Gk G k 时,利用向量序列 {δk}{yk} { δ k } { y k } 的计算来代替。而且,向量序列 {δk}{yk} { δ k } { y k } 也不是所有的都存储,而是保留最新的m个,每次计算 Gk G k 时,只利用最新的m个向量序列 {δk}{yk} { δ k } { y k } 。这样一来,存储空间由 O(N2) O ( N 2 ) 降至 O(mN) O ( m N ) 。
具体推导和计算细节,这里不赘述,读者可自行了解。
二者都是求解无约束最优化问题的常用方法,牛顿法是二阶收敛,梯度下降法是一阶收敛,所以牛顿法更快,下图形象化地显示了这一点:
深度学习中,往往采用梯度下降法作为优化算子,而很少采用牛顿法,主要原因有以下几点:
[1] https://www.cnblogs.com/ljy2013/p/5129294.html
[2] https://blog.csdn.net/VictoriaW/article/details/71710280
[3] https://zh.wikipedia.org/wiki/%E7%89%9B%E9%A1%BF%E6%B3%95
[4] https://www.jiqizhixin.com/articles/2017-03-11-2
[5] https://www.zhihu.com/question/46441403?sort=created
[6] https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E6%B3%95/1384129?fr=aladdin
[7] https://www.zhihu.com/question/19723347
[8] https://liuxiaofei.com.cn/blog/lbfgs%E6%96%B9%E6%B3%95%E6%8E%A8%E5%AF%BC/
[9] https://www.cnblogs.com/jiahenhe2/p/8086857.html
[10] https://baike.baidu.com/item/%E6%B3%B0%E5%8B%92%E7%BA%A7%E6%95%B0/7289427?fr=aladdin
以上为本文的全部参考文献,对原作者表示感谢。