论文部分内容阅读
随机梯度下降(SGD,Stochastic Gradient Descent)是机器学习和深度学习中,用于求解非凸优化问题的标准迭代学习算法。针对SGD的不足,研究者们已经提出了多种改进算法。从优化方式上可以将这些改进算法分为基于动量的方法、方差缩减方法和自适应学习方法这三类。但是目前这些基于SGD的改进算法,都没有考虑算法训练过程中在当前迭代步越过最优解时,引起收敛震荡(oscillaition)的根本原因。传统SGD方法本质上是串行的,这使其在大数据集下变得不再适用。为此,研究者们提出了多种分布式优化算法。基于内存计算的Apache Spark是大数据处理的主流计算平台,Spark MLlib是基于Spark的可扩展机器学习库,是目前最流行的机器学习平台。然而,在MLlib库的SGD实现中,梯度数据在每次迭代中都需要同步一次,这导致收敛速度有时非常慢;当模型维度较高(>109)时,频繁的参数聚合操作又涉及到耗时的shuffle操作,因此效率非常低。此外,Spark的同步迭代通信模式基于Driver和Worker节点间的MapReduce操作,这使Spark成为了使用SGD的机器学习算法的低效平台。本文提出了基于震荡原因分析的分布式自适应随机梯度下降算法,并将其和基于数据并行的同步MLlib SGD算法相融合;针对MLlib SGD在训练模型维度过高时收速度较慢、通信开销较大的问题,本文提出了基于局部搜索的更新迭代优化算法和基于参数服务器的参数存储和通信优化算法,并证明了基于局部搜索的更新迭代优化算法的收敛性质。本文的主要贡献点有:(1)研究提出了基于收敛震荡原因分析的自适应随机梯度下降算法OAA-SGD。和已有同类算法不同,该算法通过检测相邻两轮迭代间梯度的相似性来动态调整学习率和动量项。为验证算法的有效性,本文借助Matlab可视化工具分析了 OAA-SGD算法在单机逻辑回归问题上的收敛过程,实验表明,在单机逻辑回归基准测试集上,OAA-SGD取得了比同类优化算法更快的收敛速度和更好的分类结果。根据实验结果和理论分析可知,所采用策略达到的收敛性与理论相符。(2)针对MLlib SGD算法实现中广播变量利用率低的问题,研究提出了基于局部搜索的更新迭代优化算法LS-SGD,该算法在MLlib SGD算法基础上,在单个全局迭代中重用本地数据分区,并优化了 MLlib SGD实现中效率较低的聚合操作。实验表明,在线性回归问题上LS-SGD算法具有比MLlib SGD更快的全局收敛速度,并且对LS-SGD算法的收敛性进行了证明。(3)针对MLlib SGD算法实现中对动量项和学习率的调节考虑不足的问题,研究提出了基于收敛震荡分析的分布式自适应SGD优化算法OL-SGD。它将LS-SGD算法中的局部搜索与OAA-SGD算法中的自适应优化相结合,在分布式环境下实现了局部迭代轮数的有效控制,以及对动量项和学习率的有效调节。(4)针对MLlib SGD算法实现中的Driver单点问题,研究提出了基于参数服务器的参数存储与通信优化算法OLP-SGD。通过使用基于Spark的参数服务器来分布存储、共享和更新模型的参数,取代了 MLlib SGD实现中低效的基于MapReduce操作的同步迭代通信模式,提升了算法的性能。在线性回归基准数据集上的实验表明,OLP-SGD算法相比MLlib SGD,有3~6倍的加速;在图像分类问题上的实验表明,OLP-SGD算法能取得接近已有优化算法最优解的最终分类结果;同时,OLP-SGD算法也具有良好的节点可扩展性。