牛顿法的法的目的

牛顿法不仅可以用来求解函数的极值问题,还可以用来求解方程的根,二者在本质上是一个问题,因为求解函数极值的思路是寻找导数为0的点,这就是求解方程。

牛顿法的法的原理

一元函数的情况

根据一元函数的泰勒展开公式,我们对目标函数在

logistic regression牛顿法_迭代

点处做泰勒展开,有:

logistic regression牛顿法_牛顿法_02

 如果忽略2次以上的项,则有:

logistic regression牛顿法_牛顿法_03

现在我们在

logistic regression牛顿法_迭代

点处,要以它为基础,找到导数为0的点,即导数为0。对上面等式两边同时求导,并令导数为0,可以得到下面的方程: 

logistic regression牛顿法_python_05

可以解得:

 

logistic regression牛顿法_python_06

这样我们就得到了下一点的位置,从而走到x1。接下来重复这个过程,直到到达导数为0的点,由此得到牛顿法的迭代公式:

logistic regression牛顿法_迭代_07

给定初始迭代点

logistic regression牛顿法_迭代

,反复用上面的公式进行迭代,直到达到导数为0的点或者达到最大迭代次数。

 多元函数的情况

根据多元函数的泰勒展开公式,我们对目标函数在

logistic regression牛顿法_迭代

点处做泰勒展开,有:

logistic regression牛顿法_解方程_10

 忽略二次及以上的项,并对上式两边同时求梯度,得到函数的导数(梯度向量)为:

logistic regression牛顿法_牛顿法_11

 其中  

logistic regression牛顿法_python_12

即为Hessian矩阵,在后面我们写成H。令函数的梯度为0,则有: 

logistic regression牛顿法_线性代数_13

这是一个线性方程组的解。如果将梯度向量简写为g,上面的公式可以简写为:

 

logistic regression牛顿法_python_14

 从初始点

logistic regression牛顿法_迭代

处开始,反复计算函数在处的Hessian矩阵和梯度向量,然后用下述公式进行迭代: 

logistic regression牛顿法_牛顿法_16

最终会到达函数的驻点处。其中 

logistic regression牛顿法_迭代_17

称为牛顿方向。迭代终止的条件是梯度的模接近于0,或者函数值下降小于指定阈值。

 实现细节

logistic regression牛顿法_解方程_18

 总结

与梯度下降法相比,牛顿法的特点:

  1. 迭代次数少、收敛速度快;
  2. 得到的最小值点比较准确(至少在我的实验中如此);
  3. 没有选取步长的麻烦;
  4. 缺点是需要计算目标函数的二阶梯度,也就是Hessian矩阵,可能计算量较大。