牛顿法是微积分学中, 通过迭代以求解可微函数的零点的一种算法 (即求使得). 而在优化中, 牛顿法通常被运用于求解一个二次可微函数的一阶导数的零点 (即求使得), 同时也是的驻点. 因此从另一个角度而言,应用于优化的牛顿法是搜索函数的最小值或最大值的一种算法。
一维问题的牛顿法主要步骤如下:
取一个点为初值, 依如下公式迭代:
直至满足一定条件 (如或, 其中为一个给定的足够小的常量) 后, 算法终止。
在一维问题中, 牛顿法将构造一个以为首项, 收敛到的数列, 其中使得成立.
在处的二阶泰勒展开式为:
我们希望找到使为的一个驻点。则将上式对进行求导:
上述方程的解满足
收敛于的驻点.
牛顿法的几何意义为: 在每一次迭代中,均以一个二次函数去逼近. 具体而言:
在一维问题中,已知, , 及, 设二次函数表逹式为, 依下列方程求解未知数
然后二次函数的极值点即为下一个迭代点,
而在高维问题中, 上述的极值点也可以是鞍点. 值得一提的是, 如果恰为一个二次函数, 则其极值点只需一次迭代中即可找到.
上述的一维问题的迭代法可以被推广至多维问题. 只需将导数替换为梯度 (), 并将二阶导数的倒数替换为Hessian矩阵的逆矩阵 (), 即:
通常, 使用牛顿法时会加入一个步长变量作微调以使每一步迭代都满足Wolfe条件, 即,
这个方法被称为无约束牛顿法, 通常用于第一步之后的迭代.
只要牛顿法适用, 其收敛于最小值或最大值的速度均颇快于最速下降法. 事实上, 对于每一个极小值, 都存在一个邻域使得, 只要Hessian矩阵是可逆的且是一个关于的Lipschitz连续函数, 以为初值, 步长的牛顿法是二次收敛的.
求一个高维问题的Hessian矩阵的逆矩阵是一件颇费工夫的事情. 在实际应用中, 通常会用向量作为线性方程组
的解. 这个求解过程中, 透过使用各种矩阵分解方法同近似求解方法, 求解速度可以大大提升. 然而, 这些矩阵分解方法或近似求解方法的使用需要满足一定条件; 例如, Cholesky分解同共轭梯度法只有在是正定矩阵时才适用. 这看似是一个限制, 但有时也能充当检验答案的工具; 例如, 在一个最小化问题 () 中, 求出一个使得但不是正定矩阵, 那么只是的一个鞍点而非极小值点.
另一方面, 一个有约束的问题的求解过程可能会遇到当前解陷入一个鞍点的情况, 这时的Hessian矩阵是对称不定的; 此时则要使用其他方法, 例如Cholesky分解的变形或共轭梯度法等的方法, 来迭代得出.
此外, 为规避求Hessian矩阵的繁琐, 也存在多种拟牛顿法, 通过调整梯度以求出Hessian矩阵的近似.
如果Hessian矩阵接近一个奇异矩阵, 则其逆矩阵会变得数值不稳定且迭代不会收敛. 此种情形下, 前人探索出了很多成功的方法来解决问题. 目标之一是通过引入修正矩阵使得是对称正定的. 其中一种方法是将对角化, 选择使有相同的特征向量, 但每一个的负特征值都被替换成
一个应用于莱文贝格-马夸特方法 (其中用到了近似的Hessian矩阵) 的方法是引入一个带系数的单位矩阵, 系数在每一步迭代中调整. 对于较大的及较小的Hessian矩阵, 迭代将变得与以为步长的最速下降法相似, 这将使得迭代收敛变慢, 但在Hessian矩阵不定或半定的情况下, 收敛更稳定.