牛顿迭代法(Newton’s Method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson Method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。与一阶方法相比,二阶方法使用二阶导数改进了优化,其中最广泛使用的二阶方法是牛顿法。

考虑无约束最优化问题:

min ⁡ θ ∈ R n f ( θ ) \min_{\theta\in R^n}f(\theta) θ∈Rnmin​f(θ)

其中 θ ∗ \theta^* θ∗为目标函数的极小点,假设 f ( θ ) f(\theta) f(θ)具有二阶连续偏导数,若第 k k k次迭代值为 θ ( k ) \theta^{(k)} θ(k),则可将 f ( θ ) f(\theta) f(θ)在 θ ( k ) \theta^{(k)} θ(k)附近进行二阶泰勒展开:

f ( θ ) = f ( θ ( k ) ) + g k T ( θ − θ ( k ) ) + 1 2 ( θ − θ ( k ) ) T H ( θ ( k ) ) ( θ − θ ( k ) ) f(\theta)=f(\theta^{(k)})+g_k^T(\theta-\theta^{(k)})+\frac{1}{2}(\theta-\theta^{(k)})^TH(\theta^{(k)})(\theta-\theta^{(k)}) f(θ)=f(θ(k))+gkT​(θ−θ(k))+21​(θ−θ(k))TH(θ(k))(θ−θ(k))

这里, g k = g ( θ ( k ) ) = ∇ f ( θ ( k ) ) g_k=g(\theta^{(k)})=\nabla f(\theta^{(k)}) gk​=g(θ(k))=∇f(θ(k))是 f ( θ ) f(\theta) f(θ)的梯度向量在点 θ ( k ) \theta^{(k)} θ(k)的值, H ( θ ( k ) ) H(\theta^{(k)}) H(θ(k))是 f ( θ ) f(\theta) f(θ)的Hessian矩阵:

H ( θ ) = [ ∂ 2 f ∂ θ i ∂ θ j ] m × n H(\theta)=[\frac{\partial^2f}{\partial \theta_i\partial \theta_j}]_{m\times n} H(θ)=[∂θi​∂θj​∂2f​]m×n​

在点 θ ( k ) \theta^{(k)} θ(k)的值。函数 f ( θ ) f(\theta) f(θ)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0,特别是当 H ( θ ) H(\theta) H(θ)是正定矩阵时,函数 f ( θ ) f(\theta) f(θ)的极值为极小值。牛顿法利用极小点的必要条件:

∇ f ( θ ) = 0 \nabla f(\theta)=0 ∇f(θ)=0

每次迭代中从点 θ ( k ) \theta^{(k)} θ(k)开始,求目标函数的极小点,作为第 k + 1 k+1 k+1次迭代值 θ ( k + 1 ) \theta^{(k+1)} θ(k+1)。具体地,假设 θ ( k + 1 ) \theta^{(k+1)} θ(k+1)满足:

∇ f ( θ ( k + 1 ) ) = 0 \nabla f(\theta^{(k+1)})=0 ∇f(θ(k+1))=0

则有:

∇ f ( θ ) = g k + H k ( θ − θ ( k ) ) \nabla f(\theta)=g_k+H_k(\theta-\theta^{(k)}) ∇f(θ)=gk​+Hk​(θ−θ(k))

其中 H k = H ( θ ( k ) ) H_k=H(\theta^{(k)}) Hk​=H(θ(k))。这样,我们可以得:

g k + H k ( θ ( k + 1 ) − θ ( k ) ) = 0 g_k+H_k(\theta^{(k+1)}-\theta^{(k)})=0 gk​+Hk​(θ(k+1)−θ(k))=0

则:

θ ( k + 1 ) = θ ( k ) − H k − 1 g k = θ ( k ) + p k \theta^{(k+1)}=\theta^{(k)}-H_k^{-1}g_k=\theta^{(k)}+p_k θ(k+1)=θ(k)−Hk−1​gk​=θ(k)+pk​

这就是牛顿迭代法。


牛顿迭代法
输入:目标函数 f ( θ ) f(\theta) f(θ);Hessian矩阵 H ( θ ) H(\theta) H(θ);精度要求 ϵ \epsilon ϵ
输出: f ( θ ) f(\theta) f(θ)的极小值点 θ ∗ \theta^* θ∗
(1) 取初始点 θ ( 0 ) \theta^{(0)} θ(0)并置 k = 0 k=0 k=0
(2) 计算 g k = g ( θ ( 0 ) ) = ∇ f ( θ ( 0 ) ) g_k=g(\theta^{(0)})=\nabla f(\theta^{(0)}) gk​=g(θ(0))=∇f(θ(0))
(3) while ∣ ∣ g k ∣ ∣ > ϵ \quad||g_k||>\epsilon ∣∣gk​∣∣>ϵ
(4) H k = H ( θ ( k ) ) \quad H_k=H(\theta^{(k)}) Hk​=H(θ(k))
(5) θ ( k + 1 ) = θ ( k ) − H k − 1 g k \quad \theta^{(k+1)}=\theta^{(k)}-H_k^{-1}g_k θ(k+1)=θ(k)−Hk−1​gk​
(6) k = k + 1 \quad k=k+1 k=k+1
(7) g k = g ( θ ( 0 ) ) = ∇ f ( θ ( 0 ) ) \quad g_k=g(\theta^{(0)})=\nabla f(\theta^{(0)}) gk​=g(θ(0))=∇f(θ(0))
(8) return θ ∗ = θ ( k ) \quad \theta^*=\theta^{(k)} θ∗=θ(k)


迭代过程可参考下图:

机器学习中的数学——优化技术:优化算法-[牛顿迭代法(Newton‘s Method)]_深度学习

在《优化技术:深度学习优化的挑战-[高原、鞍点和其他平坦区域]》我们讨论了牛顿法只适用于Hessian矩阵是正定的情况。在深度学习中,目标函数的表面通常非凸(有很多特征),如鞍点。因此使用牛顿法是有问题的。如果Hessian矩阵的特征值并不都是正的,例如,靠近鞍点处,牛顿法实际上会导致更新朝错误的方向移动。这种情况可以通过正则化Hessian矩阵来避免。常用的正则化策略包括在Hessian矩阵对角线上增加常数 α \alpha α。正则化更新变为:

θ ∗ = θ 0 − [ H ( f ( θ 0 ) ) + α I ] − 1 ∇ θ f ( θ 0 ) \theta^*=\theta_0-[H(f(\theta_0))+\alpha I]^{-1}\nabla_\theta f(\theta_0) θ∗=θ0​−[H(f(θ0​))+αI]−1∇θ​f(θ0​)

这个正则化策略用于牛顿法的近似,例如Levenberg-Marquardt算,只要Hessian矩阵的负特征值仍然相对接近零,效果就会很好。在曲率方向更极端的情况下, α \alpha α的值必须足够大,以抵消负特征值。然而,如果 α \alpha α持续增加,Hessian矩阵会变得由对角矩阵 α I \alpha I αI主导,通过牛顿法所选择的方向会收敛到普通梯度除以 α \alpha α。当很强的负曲率存在时,α可能需要特别大,以至于牛顿法比选择合适学习率的梯度下降的步长更小。

除了目标函数的某些特征带来的挑战,如鞍点,牛顿法用于训练大型神经网络还受限于其显著的计算负担。Hessian矩阵中元素数目是参数数量的平方,因此,如果参数数目为 k k k(甚至是在非常小的神经网络中 k k k也可能是百万级别),牛顿法需要计算 k × k k\times k k×k矩阵的逆,计算复杂度为 O ( k 3 ) O(k^3) O(k3)。另外,由于参数将每次更新都会改变,每次训练迭代都需要计算Hessian矩阵的逆。其结果是,只有参数很少的网络才能在实际中用牛顿法训练。在本节的剩余部分,我们将讨论一些试图保持牛顿法优点,同时避免计算障碍的替代算法。