来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件

牛顿法是一种二阶优化算法,相对于梯度下降算法收敛速度更快。

首先,我们在函数 f(x)f(x) 上选择一个初始点 x1x_1,并计算相应的 f(x1)f(x_1) 和切线斜率 f(x1)f'(x_1),然后我们计算穿过点 (x1,f(x1))(x_1,f(x_1)) 并且斜率为 f(x1)f'(x_1) 的直线和 X 轴的交点,也就是求如下方程的解:

f(x1)+f(x1)(xx1)=0 f(x_1) + f'(x_1)∗(x−x_1) = 0

我们将新求得的点的坐标命名为 x2x_2,通常 x2x_2 会比 x1x_1 更接近 f(x)=0f(x)=0 的解。因此我们现在可以利用 x2x_2 开始下一轮迭代,迭代公式可化简为如下所示:

xn+1=xnf(xn)f(xn) x_{n+1} = x_n − \frac{f(x_n)}{f'(x_n)}

疑惑:不是二阶导数吗?

牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是切线法。牛顿法的搜索路径(二维情况)如下图所示:

优缺点

  • 优点

    • 相对于梯度下降法,收敛速度更快。
  • 缺点

    • 每次计算都需要计算 Hessian 矩阵的逆,因此计算量较大。
    • 在多变量的情况下,如果目标矩阵的 Hessain 矩阵非正定,牛顿法确定的搜索方向并不一定是目标函数下降的方向。