机器学习中的数学——共轭梯度法(Conjugate Gradient)

本文探讨了共轭梯度法在机器学习,特别是神经网络优化中的作用。相比于梯度下降和其他优化算法,共轭梯度法通过寻找共轭方向减少迭代次数,尤其适用于二次函数。在非二次目标函数的情况下,非线性共轭梯度算法可能需要重启线搜索。实践中,非线性共轭梯度通常与随机梯度下降结合使用,并且已被证明在小批量训练神经网络时有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(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)


共轭梯度是一种通过迭代下降的共轭方向(Conjugate Directions)以有效避免Hessian矩阵求逆计算的方法。这种方法的灵感来自对最速下降方法弱点的仔细研究,其中线搜索迭代地用于与梯度相关的方向上。下图说明了该方法在二次碗型目标中如何表现的,是一个相当低效的来回往复,锯齿形模式。这是因为每一个由梯度给定的线搜索方向,都保证正交于上一个线搜索方向。
锯齿形模式
假设上一个搜索方向是 d t − 1 d_{t-1} dt1。在极小值处,线搜索终止,方向 d t − 1 d_{t-1} dt1处的方向导数为零: ∇ θ J ( θ ) d t − 1 = 0 \nabla_\theta J(\theta)d_{t-1}=0 θJ(θ)dt1=0。因为该点的梯度定义了当前的搜索方向, d t = ∇ θ d_t=\nabla_\theta dt=θ将不会贡献于方向 d t − 1 d_{t-1} dt1。因此方向 d t d_{t} dt正交于 d t − 1 d_{t-1} dt1。最速下降多次迭代中,方向 d t − 1 d_{t-1} dt1 d t d_{t} dt之间的关系如上图所示。如上图展示的那样,下降正交方向的选择不会保持前一搜索方向上的最小值。这产生了锯齿形的过程。在当前梯度方向下降到极小值,我们必须重新最小化之前梯度方向上的目标。因此,通过遵循每次线搜索结束时的梯度,我们在某种程度上撤销了在之前线搜索的方向上取得的进展。共轭梯度试图解决这个问题。

在共轭梯度法中,我们寻求一个和先前线搜索方向共轭的搜索方向,即它不会撤销该方向上的进展。在训练迭代 t t t时,下一步的搜索方向 d t d_t dt的形式如下:
d t = ∇ θ J ( θ ) + β t d t − 1 d_t=\nabla_\theta J(\theta)+\beta_td_{t-1} dt=θJ(θ)+βtdt1

其中,系数 β t \beta_t βt的大小控制我们应沿方向 d t − 1 d_{t-1} dt1加回多少到当前搜索方向上。

如果 d t T H d t − 1 = 0 d_t^THd_{t-1}=0 dtTHdt1=0,其中 H H H是Hessian矩阵,则两个方向 d t d_t dt d t − 1 d_{t-1} dt1被称为共轭的。适应共轭的直接方法会涉及 H H H特征向量的计算以选择 β t \beta_t βt。这将无法满足我们的开发目标。我们有不进行这些计算而得到共轭方向的的方法,两种用于计算 β t \beta_t βt 的流行方法是:

  • Fletcher-Reeves: β t = ∇ θ J ( θ t ) T ∇ θ J ( θ t ) ∇ θ J ( θ t − 1 ) T ∇ θ J ( θ t − 1 ) \beta_t=\frac{\nabla_\theta J(\theta_t)^T\nabla_\theta J(\theta_t)}{\nabla_\theta J(\theta_{t-1})^T\nabla_\theta J(\theta_{t-1})} βt=θJ(θt1)TθJ(θt1)θJ(θt)TθJ(θt)
  • Polak-Ribi`ere: β t = ( ∇ θ J ( θ t ) − ∇ θ J ( θ t − 1 ) ) T ∇ θ J ( θ t ) ∇ θ J ( θ t − 1 ) T ∇ θ J ( θ t − 1 ) \beta_t=\frac{(\nabla_\theta J(\theta_t)-\nabla_\theta J(\theta_{t-1}))^T\nabla_\theta J(\theta_t)}{\nabla_\theta J(\theta_{t-1})^T\nabla_\theta J(\theta_{t-1})} βt=θJ(θt1)TθJ(θt1)(θJ(θt)θJ(θt1))TθJ(θt)

对于二次曲面而言,共轭方向确保梯度沿着前一方向大小不变。因此,我们在前一方向上仍然是极小值。其结果是,在 k k k维参数空间中,共轭梯度只需要至多 k k k次线搜索就能达到极小值。

共轭梯度法(Conjugate Gradient)
输入:初始参数 θ 0 \theta_0 θ0
输出:神经网络参数 θ k \theta_k θk
(1) 初始化 ρ 0 = 0 , g 0 = 0 , t = 1 \rho_0=0, g_0=0, t=1 ρ0=0,g0=0,t=1
(2) while 停止准则未满足 \quad\text{停止准则未满足} 停止准则未满足
(3) \quad 从训练集中采包含 m m m个样本 { x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) } \{x^{(1)}, x^{(2)}, \cdots, x^{(m)}\} {x(1),x(2),,x(m)}的小批量,其中 x ( i ) x^{(i)} x(i)对应目标为 y ( i ) y^{(i)} y(i)
(4) \quad 计算梯度: g t = 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) g_t = \frac{1}{m}\nabla_\theta\sum_iL(f(x^{(i)}; \theta), y^{(i)}) gt=m1θiL(f(x(i);θ),y(i))
(5) \quad 计算 β t \beta_t βt β t = ( g t − g t − 1 ) T g t g t − 1 T g t − 1 \beta_t=\frac{(g_t-g_{t-1})^Tg_t}{g_{t-1}^Tg_{t-1}} βt=gt1Tgt1(gtgt1)Tgt(Polak-Ribière)
(6) \quad 计算搜索方向: ρ t = − g t + β t ρ t − 1 \rho_t=-g_t+\beta_t\rho_{t-1} ρt=gt+βtρt1
(7) \quad 执行线搜索寻找: ϵ ∗ = arg ⁡ min ⁡ ϵ 1 m ∑ i = 1 m L ( f ( x ( i ) ; θ t + ϵ ρ t ) ) \epsilon^*=\arg\min_\epsilon\frac{1}{m}\sum_{i=1}^mL(f(x^{(i)};\theta_t+\epsilon\rho_t)) ϵ=argminϵm1i=1mL(f(x(i);θt+ϵρt))(对于真正二次的代价函数,存在 ϵ ∗ \epsilon^* ϵ的解析解,而无需显式地搜索)
(8) return θ \theta θ

本文我们主要关注于探索训练神经网络和其他相关深度学习模型的优化方法,其对应的目标函数比二次函数复杂得多。或许令人惊讶,共轭梯度法在这种情况下仍然是适用的,尽管需要做一些修改。没有目标是二次的保证,共轭方向也不再保证在以前方向上的目标仍是极小值。其结果是,非线性共轭梯度算法会包括一些偶尔的重设,共轭梯度法沿未修改的梯度重启线搜索。

在实践中使用非线性共轭梯度算法训练神经网络是合理的,尽管在开始非线性共轭梯度前使用随机梯度下降迭代若干步来初始化效果更好。另外,尽管非线性共轭梯度算法传统上作为批方法,小批量版本已经成功用于训练神经网络。针对神经网路的共轭梯度应用早已被提出,例如缩放的共轭梯度算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

von Neumann

您的赞赏是我创作最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值