机器学习中的数学——优化技术:优化算法-[共轭梯度法(Conjugate Gradient)]

共轭梯度是一种通过迭代下降的共轭方向(Conjugate Directions)以有效避免Hessian矩阵求逆计算的方法。这种方法的灵感来自对最速下降方法弱点的仔细研究,其中线搜索迭代地用于与梯度相关的方向上。下图说明了该方法在二次碗型目标中如何表现的,是一个相当低效的来回往复,锯齿形模式。这是因为每一个由梯度给定的线搜索方向,都保证正交于上一个线搜索方向。
锯齿形模式
假设最后一个搜索方向是d_%7Bt-1%7D。至少,线搜索终止,方向d_%7Bt-1%7D的方向导数为零:%5Cnabla_%5Ctheta%20J%28%5Ctheta%29d_%7Bt-1%7D%3D0。因为这个点的梯度定义了当前的搜索方向,所以d_t%3D%5Cnabla_%5Ctheta不会对方向d_%7Bt-1%7D有贡献。所以方向d_%7Bt%7Dd_%7Bt-1%7D正交。在最速下降的多次迭代中,方向d_%7Bt-1%7Dd_%7Bt%7D之间的关系如上图所示。如上图所示,下降正交方向的选择并没有保持之前搜索方向的最小值。这将创建一个之字形过程。在当前梯度方向降到最小值后,我们必须在之前的梯度方向上重新最小化目标。因此,通过在每条线搜索结束时遵循梯度,我们在某种程度上撤销了在前一条线搜索方向上取得的进展。共轭梯度试图解决这个问题。

在共轭梯度法中,我们寻找一个与前一个线搜索方向共轭的搜索方向,即它不会撤销该方向上的进展。在训练迭代t中,下一个搜索方向d_t具有以下形式:
d_t%3D%5Cnabla_%5Ctheta%20J%28%5Ctheta%29%2B%5Cbeta_td_%7Bt-1%7D

其中,系数%5Cbeta_t的大小控制着我们应该沿方向d_%7Bt-1%7D加回当前搜索方向的多少。

如果d_t%5ETHd_%7Bt-1%7D%3D0,其中H是Hessian矩阵,则两个方向d_td_%7Bt-1%7D被称为共轭的。适应共轭的直接方法会涉及H特征向量的计算以选择%5Cbeta_t。这将无法满足我们的开发目标。我们有不进行这些计算而得到共轭方向的的方法,两种用于计算%5Cbeta_t的流行方法是:

  • Fletcher-Reeves:%5Cbeta_t%3D%5Cfrac%7B%5Cnabla_%5Ctheta%20J%28%5Ctheta_t%29%5ET%5Cnabla_%5Ctheta%20J%28%5Ctheta_t%29%7D%7B%5Cnabla_%5Ctheta%20J%28%5Ctheta_%7Bt-1%7D%29%5ET%5Cnabla_%5Ctheta%20J%28%5Ctheta_%7Bt-1%7D%29%7D
  • Polak-Ribi`ere:%5Cbeta_t%3D%5Cfrac%7B%28%5Cnabla_%5Ctheta%20J%28%5Ctheta_t%29-%5Cnabla_%5Ctheta%20J%28%5Ctheta_%7Bt-1%7D%29%29%5ET%5Cnabla_%5Ctheta%20J%28%5Ctheta_t%29%7D%7B%5Cnabla_%5Ctheta%20J%28%5Ctheta_%7Bt-1%7D%29%5ET%5Cnabla_%5Ctheta%20J%28%5Ctheta_%7Bt-1%7D%29%7D

对于二次曲面,共轭方向确保梯度不会沿前一个方向改变大小。因此,我们在之前的方向上仍然是最小值。因此,在k维参数空间中,共轭梯度最多只需要k线搜索即可达到最小值。

共轭梯度法(Conjugate Gradient)
输入:初始参数%5Ctheta_0
输出:神经网络参数%5Ctheta_k
(1) 初始化%5Crho_0%3D0%2C%20g_0%3D0%2C%20t%3D1
(2)while%5Cquad%5Ctext%7B%E5%81%9C%E6%AD%A2%E5%87%86%E5%88%99%E6%9C%AA%E6%BB%A1%E8%B6%B3%7D
(3)%5Cquad从训练集中采包含m个样本%5C%7Bx%5E%7B%281%29%7D%2C%20x%5E%7B%282%29%7D%2C%20%5Ccdots%2C%20x%5E%7B%28m%29%7D%5C%7D的小批量,其中x%5E%7B%28i%29%7D对应目标为y%5E%7B%28i%29%7D
(4)%5Cquad计算梯度:g_t%20%3D%20%5Cfrac%7B1%7D%7Bm%7D%5Cnabla_%5Ctheta%5Csum_iL%28f%28x%5E%7B%28i%29%7D%3B%20%5Ctheta%29%2C%20y%5E%7B%28i%29%7D%29
(5)%5Cquad计算%5Cbeta_t%5Cbeta_t%3D%5Cfrac%7B%28g_t-g_%7Bt-1%7D%29%5ETg_t%7D%7Bg_%7Bt-1%7D%5ETg_%7Bt-1%7D%7D(Polak-Ribière)
(6)%5Cquad计算搜索方向:%5Crho_t%3D-g_t%2B%5Cbeta_t%5Crho_%7Bt-1%7D
(7)%5Cquad执行线搜索寻找:%5Cepsilon%5E%2A%3D%5Carg%5Cmin_%5Cepsilon%5Cfrac%7B1%7D%7Bm%7D%5Csum_%7Bi%3D1%7D%5EmL%28f%28x%5E%7B%28i%29%7D%3B%5Ctheta_t%2B%5Cepsilon%5Crho_t%29%29(对于真正二次的代价函数,存在%5Cepsilon%5E%2A的解析解,而无需显式地搜索)
(8)return%5Ctheta

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

在实践中,用非线性共轭梯度算法训练神经网络是合理的,尽管在开始非线性共轭梯度之前,最好用随机梯度下降迭代几个步骤来初始化它。此外,虽然非线性共轭梯度算法传统上用作批处理方法,但小批量版本已成功用于训练神经网络。神经网络的共轭梯度应用早已被提出,例如缩放共轭梯度算法。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月15日 下午7:32
下一篇 2022年3月15日 下午7:55

相关推荐