牛顿法的法的目的
牛顿法不仅可以用来求解函数的极值问题,还可以用来求解方程的根,二者在本质上是一个问题,因为求解函数极值的思路是寻找导数为0的点,这就是求解方程。
牛顿法的法的原理
一元函数的情况
根据一元函数的泰勒展开公式,我们对目标函数在
点处做泰勒展开,有:
如果忽略2次以上的项,则有:
现在我们在
点处,要以它为基础,找到导数为0的点,即导数为0。对上面等式两边同时求导,并令导数为0,可以得到下面的方程:
可以解得:
这样我们就得到了下一点的位置,从而走到x1。接下来重复这个过程,直到到达导数为0的点,由此得到牛顿法的迭代公式:
给定初始迭代点
,反复用上面的公式进行迭代,直到达到导数为0的点或者达到最大迭代次数。
多元函数的情况
根据多元函数的泰勒展开公式,我们对目标函数在
点处做泰勒展开,有:
忽略二次及以上的项,并对上式两边同时求梯度,得到函数的导数(梯度向量)为:
其中
即为Hessian矩阵,在后面我们写成H。令函数的梯度为0,则有:
这是一个线性方程组的解。如果将梯度向量简写为g,上面的公式可以简写为:
从初始点
处开始,反复计算函数在处的Hessian矩阵和梯度向量,然后用下述公式进行迭代:
最终会到达函数的驻点处。其中
称为牛顿方向。迭代终止的条件是梯度的模接近于0,或者函数值下降小于指定阈值。
实现细节
总结
与梯度下降法相比,牛顿法的特点:
- 迭代次数少、收敛速度快;
- 得到的最小值点比较准确(至少在我的实验中如此);
- 没有选取步长的麻烦;
- 缺点是需要计算目标函数的二阶梯度,也就是Hessian矩阵,可能计算量较大。