分类目录:《机器学习中的数学》总目录 相关文章:
· 梯度下降法(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) · 粒子群算法
· 基础知识· 带惯性权重的粒子群算法· 改进的粒子群算法 · 模拟退火算法(Simulated Annealing,SA)
共轭梯度是一种通过迭代下降的共轭方向(Conjugate Directions)以有效避免Hessian矩阵求逆计算的方法。这种方法的灵感来自对最速下降方法弱点的仔细研究,其中线搜索迭代地用于与梯度相关的方向上。下图说明了该方法在二次碗型目标中如何表现的,是一个相当低效的来回往复,锯齿形模式。这是因为每一个由梯度给定的线搜索方向,都保证正交于上一个线搜索方向。
假设上一个搜索方向是。在极小值处,线搜索终止,方向处的方向导数为零:。因为该点的梯度定义了当前的搜索方向,将不会贡献于方向。因此方向正交于。最速下降多次迭代中,方向和之间的关系如上图所示。如上图展示的那样,下降正交方向的选择不会保持前一搜索方向上的最小值。这产生了锯齿形的过程。在当前梯度方向下降到极小值,我们必须重新最小化之前梯度方向上的目标。因此,通过遵循每次线搜索结束时的梯度,我们在某种程度上撤销了在之前线搜索的方向上取得的进展。共轭梯度试图解决这个问题。
在共轭梯度法中,我们寻求一个和先前线搜索方向共轭的搜索方向,即它不会撤销该方向上的进展。在训练迭代时,下一步的搜索方向的形式如下:
其中,系数的大小控制我们应沿方向加回多少到当前搜索方向上。
如果,其中是Hessian矩阵,则两个方向和被称为共轭的。适应共轭的直接方法会涉及特征向量的计算以选择。这将无法满足我们的开发目标。我们有不进行这些计算而得到共轭方向的的方法,两种用于计算
- Fletcher-Reeves:
- Polak-Ribi`ere:
对于二次曲面而言,共轭方向确保梯度沿着前一方向大小不变。因此,我们在前一方向上仍然是极小值。其结果是,在维参数空间中,共轭梯度只需要至多次线搜索就能达到极小值。
共轭梯度法(Conjugate Gradient)
输入:初始参数;
输出:神经网络参数
(1) 初始化
(2) while
(3) 从训练集中采包含个样本的小批量,其中对应目标为
(4) 计算梯度:
(5) 计算:(Polak-Ribière)
(6) 计算搜索方向:
(7) 执行线搜索寻找:(对于真正二次的代价函数,存在的解析解,而无需显式地搜索)
(8) return
本文我们主要关注于探索训练神经网络和其他相关深度学习模型的优化方法,其对应的目标函数比二次函数复杂得多。或许令人惊讶,共轭梯度法在这种情况下仍然是适用的,尽管需要做一些修改。没有目标是二次的保证,共轭方向也不再保证在以前方向上的目标仍是极小值。其结果是,非线性共轭梯度算法会包括一些偶尔的重设,共轭梯度法沿未修改的梯度重启线搜索。
在实践中使用非线性共轭梯度算法训练神经网络是合理的,尽管在开始非线性共轭梯度前使用随机梯度下降迭代若干步来初始化效果更好。另外,尽管非线性共轭梯度算法传统上作为批方法,小批量版本已经成功用于训练神经网络。针对神经网路的共轭梯度应用早已被提出,例如缩放的共轭梯度算法。