分布式梯度下降法实现文献综述

 2022-11-30 15:59:30
  1. 研究背景

数据正以前所未有的规模生成。大规模互联网公司每天都会生成数以TB计的数据,这些数据都需要得到有效的分析以提取出有意义的见解。深度学习是一种适用于这个任务的强大工具。不幸的是,这些算法需要大量数据才能有效地完成训练,而这又会耗费大量时间。无监督的特征学习和深度学习已经证明,通过海量的数据来训练大型的模型可以大大提高模型的性能。但是,考虑需要训练的深度网络模型有数百万甚至数十亿个参数需要训练,这其实是一个非常复杂的问题。我们怎样可以很快完成复杂模型的训练,而不用等待几天甚至几个星期的时间呢?

现在存在以横向方式延展深度学习训练的内在需求,同时还要保证能够维持单 GPU 模型那样的准确度。理想情况下,这种训练的速度应该随机器数量的增加而线性增大,同时还要能容错以及能在高延迟网络条件下收敛。Dean et al.[1]等人提出了一个可行的训练方式,使我们能够在多台物理机器上训练和serving一个模型。作者提出了两种新的方法来完成这个任务,即模型并行和数据并行。

数据并行化的目标是将数据集均等的分配到系统的n个节点上,其中每个节点都有一个该神经网络的模型的副本及本地的权重。每个节点都会处理该数据集的一个不同子集并更新其本地权重集。这些本地权重会在整个集群中共享,从而通过一个累计算法计算出一个新的全局权重集。这些全局权重又会被分配至所有节点,然后节点会在此基础上处理下一批数据。

模型并行化中,单个的模型分布在多个机器上。将深度神经网络放在多台机器上并行训练所能获得的性能提升效果主要取决于模型的结构。具有大量参数的模型通常可以获得更多CPU内核和内存,因此,并行化大型模型会显著提高性能,从而缩短训练时间。

二、研究现状

一个常用于分布式设定中的训练的常用算法是随机梯度下降(SGD),该算法将是我们进一步讨论中的核心点。需要指出一个重点,针对 SGD 提及的原则可以轻松地移植给其它常用的优化算法,比如 Adam 、RMSProp等等。分布式 SGD 可以大致分成两类变体:异步 SGD 和同步 SGD。

同步 SGD 是一种分布式梯度下降算法,这是当前用于分布式训练的最常用优化方法之一。在同步数据并行中,所有worker根据相同的中心参数(central variable)计算其梯度。这就意味着,每当一个worker完成当前批处理的梯度计算时,它就会提交参数到参数服务器。但是,再讲这些信息纳入中心参数之前,参数服务器将存储所有信息,知道所有worker都完成模型计算,提交参数梯度。之后,参数服务器将应用特定的更新机制,将提交的梯度合并到参数服务器中。从本质上讲,可以看到同步数据并行化适用于小批量并行计算。

异步 SGD 是一种分布式梯度下降算法,允许在不同节点上使用不同的数据子集来并行地训练多个模型副本。每个模型副本都会向参数服务器请求全局权重,处理一个 mini-batch 来计算梯度并将它们发回参数服务器,然后参数服务器会据此更新全局权重。因为每个节点都独立计算梯度且无需彼此之间的交互,所以它们可以按自己的步调工作,也对机器故障更为稳健,即如果一个节点故障,其它节点还能继续处理,因此能消除由同步 SGD 引入的同步屏障(synchronization barrier)问题。

Yahoo!Lab中的 Martin A. Zinkevich等人合作的论文Parallelized Stochastic Gradient Descent[2]中给出了一种适合于MapReduce的并行随机梯度下降法,并给出了相应的收敛性分析。文中试图将[3]中提出的单一平均策略的好处与在线学习的渐近分析[4]结合起来。我们提出的算法非常简单:用ci(w)表示由i和参数w索引的损失函数。然后,每个处理器对ci(w)的集合执行随机梯度下降,对于T步骤具有固定的学习速率eta;,如算法1中所述。

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。