机器学习中的数学——牛顿迭代法(Newton‘s Method)
分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(Gradient Descent)
· 随机梯度下降(Stochastic Gradient Descent, SGD)
· 牛顿迭代法(Newton‘s Method)
· 拟牛顿法(Quasi-Newton Methods)
· Momentum(Gradient Descent with Momentum, GDM)
· Nesterov Momentum
· AdaGrad
· RMSProp
· Adam(Adaptive Moments)
· 共轭梯度法(Conjugate Gradient)
· 遗传算法(Genetic Algorithm)
· 粒子群算法
\qquad· 基础知识
\qquad· 带惯性权重的粒子群算法
\qquad· 改进的粒子群算法
· 模拟退火算法(Simulated Annealing,SA)
牛顿迭代法(Newton’s Method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson Method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。与一阶方法相比,二阶方法使用二阶导数改进了优化,其中最广泛使用的二阶方法是牛顿法。
考虑无约束最优化问题:
minθ∈Rnf(θ)\min_{\theta\in R^n}f(\theta)θ∈Rnminf(θ)
其中θ∗\theta^*θ∗为目标函数的极小点,假设f(θ)f(\theta)f(θ)具有二阶连续偏导数,若第kkk次迭代值为θ(k)\theta^{(k)}θ(k),则可将f(θ)f(\theta)f(θ)在θ(k)\theta^{(k)}θ(k)附近进行二阶泰勒展开:
f(θ)=f(θ(k))+gkT(θ−θ(k))+12(θ−θ(k))TH(θ(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))
这里,gk=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(θ)=[∂2f∂θi∂θj]m×nH(\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+1k+1k+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(θ)=gk+Hk(θ−θ(k))\nabla f(\theta)=g_k+H_k(\theta-\theta^{(k)})∇f(θ)=gk+Hk(θ−θ(k))
其中Hk=H(θ(k))H_k=H(\theta^{(k)})Hk=H(θ(k))。这样,我们可以得:
gk+Hk(θ(k+1)−θ(k))=0g_k+H_k(\theta^{(k+1)}-\theta^{(k)})=0gk+Hk(θ(k+1)−θ(k))=0
则:
θ(k+1)=θ(k)−Hk−1gk=θ(k)+pk\theta^{(k+1)}=\theta^{(k)}-H_k^{-1}g_k=\theta^{(k)}+p_kθ(k+1)=θ(k)−Hk−1gk=θ(k)+pk
这就是牛顿迭代法。
牛顿迭代法
输入:目标函数f(θ)f(\theta)f(θ);Hessian矩阵H(θ)H(\theta)H(θ);精度要求ϵ\epsilonϵ
输出:f(θ)f(\theta)f(θ)的极小值点θ∗\theta^*θ∗
(1) 取初始点θ(0)\theta^{(0)}θ(0)并置k=0k=0k=0
(2) 计算gk=g(θ(0))=∇f(θ(0))g_k=g(\theta^{(0)})=\nabla f(\theta^{(0)})gk=g(θ(0))=∇f(θ(0))
(3) while∣∣gk∣∣>ϵ\quad||g_k||>\epsilon∣∣gk∣∣>ϵ
(4) Hk=H(θ(k))\quad H_k=H(\theta^{(k)})Hk=H(θ(k))
(5) θ(k+1)=θ(k)−Hk−1gk\quad \theta^{(k+1)}=\theta^{(k)}-H_k^{-1}g_kθ(k+1)=θ(k)−Hk−1gk
(6) gk=g(θ(0))=∇f(θ(0))\quad g_k=g(\theta^{(0)})=\nabla f(\theta^{(0)})gk=g(θ(0))=∇f(θ(0))
(7) k=k+1\quad k=k+1k=k+1
(8) returnθ∗=θ(k)\quad \theta^*=\theta^{(k)}θ∗=θ(k)
迭代过程可参考下图:
在《优化技术:深度学习优化的挑战-[高原、鞍点和其他平坦区域]》我们讨论了牛顿法只适用于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矩阵中元素数目是参数数量的平方,因此,如果参数数目为kkk(甚至是在非常小的神经网络中kkk也可能是百万级别),牛顿法需要计算k×kk\times kk×k矩阵的逆,计算复杂度为O(k3)O(k^3)O(k3)。另外,由于参数将每次更新都会改变,每次训练迭代都需要计算Hessian矩阵的逆。其结果是,只有参数很少的网络才能在实际中用牛顿法训练。在本节的剩余部分,我们将讨论一些试图保持牛顿法优点,同时避免计算障碍的替代算法。
总结
以上是生活随笔为你收集整理的机器学习中的数学——牛顿迭代法(Newton‘s Method)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C语言——指针(进阶版)
- 下一篇: 【经典智力题】1024! 末尾有多少个0