分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(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
θ
∈
R
n
f
(
θ
)
\min_{\theta\in R^n}f(\theta)
θ∈Rnminf(θ)
其中
θ
∗
\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−1gk=θ(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−1gk
(6) g k = 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+1 k=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矩阵中元素数目是参数数量的平方,因此,如果参数数目为 k k k(甚至是在非常小的神经网络中 k k k也可能是百万级别),牛顿法需要计算 k × k k\times k k×k矩阵的逆,计算复杂度为 O ( k 3 ) O(k^3) O(k3)。另外,由于参数将每次更新都会改变,每次训练迭代都需要计算Hessian矩阵的逆。其结果是,只有参数很少的网络才能在实际中用牛顿法训练。在本节的剩余部分,我们将讨论一些试图保持牛顿法优点,同时避免计算障碍的替代算法。