牛顿法是利用 Hessian 矩阵提供的二阶导数信息来指导搜索的最简单的算法。
牛顿法基于一个二阶泰勒展开来近似 x0 x 0 附近的 f(x) f ( x ) ,
f(x)≈f(x0)+(x−x0)∇xf(x0)+12(x−x0)THf(x0)(x−x0) f ( x ) ≈ f ( x 0 ) + ( x − x 0 ) ∇ x f ( x 0 ) + 1 2 ( x − x 0 ) T H f ( x 0 ) ( x − x 0 )
, 接着通过计算, 我们可以得到这个函数的临界点
x∗=x0−Hf(x0)−1∇xf(x0) x ∗ = x 0 − H f ( x 0 ) − 1 ∇ x f ( x 0 )
- 如果 f f 是一个正定二次函数,牛顿法只要应用一次就能直接跳到函数的最小点。
- 如果 f f 不是一个真正二次但能在局部近似为正定二次,牛顿法需要多次迭代应用式,而且能比梯度下降更快得到达临界点
以上在接近全局极小点时是一个特别有用的性质,但是在鞍点附近是有害的,牛顿法会被鞍点吸引跑偏。只有当附近的临近点是最小点(Hessian 的所有特征值都是正的)时,牛顿法才适用,而梯度下降不会被吸引到鞍点(除非梯度指向鞍点)。
Ref
- Newton’s method – Wikipedia
- 优化算法——牛顿法(Newton Method) : 算法流程介绍+Java实现
- 牛顿迭代法(Newton’s Method): 算法流程+ C++ 代码 + 神奇开方数
- Jacobian矩阵和Hessian矩阵: Hessian 矩阵 与 牛顿法