数据多到无法处理微软大牛用分布式

导读:近年来,作为人工智能发展迅速的领域之一的深度学习在NLP、图像识别、语音识别、机器翻译等方面都取得了惊人的成果。但是,深度学习的应用范围却日益受到数据量和模型规模的限制。如何才能高效地进行深度学习模型训练?

微软亚洲研究院机器学习组主管研究员陈薇和她的团队基于对机器学习的完整理解,将分布式技术和深度学习紧密结合在一起,探索全新的真正合二为一“分布式深度学习”算法。

作者:陈薇

来源:微软研究院AI头条

随着大数据和高效计算资源的出现,深度学习在人工智能的很多领域中都取得了重大突破。然而,面对越来越复杂的任务,数据和深度学习模型的规模都变得日益庞大。例如,用来训练图像分类器的有标签的图像数据量达数百万、甚至上千万张。

大规模训练数据的出现为训练大模型提供了物质基础,因此近年来涌现出了很多大规模的机器学习模型,例如年微软亚洲研究院开发出的拥有超过两百亿个参数的LightLDA主题模型。

然而,当训练数据词表增大到成百上千万时,如果不做任何剪枝处理,深度学习模型可能会拥有上百亿、甚至是几千亿个参数。

为了提高深度学习模型的训练效率,减少训练时间,我们普遍会采用分布式技术来执行训练任务——同时利用多个工作节点,分布式地、高效地训练出性能优良的神经网络模型。分布式技术是深度学习技术的加速器,能够显著提高深度学习的训练效率、进一步增大其应用范围。

深度学习的目标是从数据中挖掘出规律,帮助我们进行预测。深度学习算法的一般框架是,利用优化算法迭代地最小化训练数据上的经验风险。

由于数据的统计性质、优化的收敛性质、以及学习的泛化性质在多机执行时的灵活度更高,相比于其它的计算任务,深度学习算法在并行化执行过程中实际上并不需要计算节点通过通信严格地执行单机版本算法。

因而,当“分布式”遇到“深度学习”,不应只局限在对串行算法进行多机实现以及底层实现方面的技术,我们更应该基于对机器学习的完整理解,将分布式和深度学习紧密结合在一起,结合深度学习的特点,设计全新的真正合二为一的“分布式深度学习”算法。

▲图1分布式深度学习框架

分布式深度学习框架中,包括数据/模型切分、本地单机优化算法训练、通信机制、和数据/模型聚合等模块。现有的算法一般采用随机置乱切分的数据分配方式,随机优化算法(例如随机梯度法)的本地训练算法,同步或者异步通信机制,以及参数平均的模型聚合方式。

结合深度学习算法的特点,微软亚洲研究院机器学习组重新设计/理解了这些模块,我们在分布式深度学习领域主要做了三个方面的工作:

第一个工作,针对异步机制中的梯度延迟问题,我们为深度学习设计了“带有延迟补偿的异步算法”;

第二个工作,注意到神经网络的非凸性质,我们提出了比参数平均更加有效的集成聚合方式,并设计了“集成-压缩”并行深度学习算法;

第三个工作,我们首次分析了随机置乱切分方式下分布式深度学习算法的收敛速率,为算法设计提供了理论指导。

01DC-ASGD算法:补偿异步通信中梯度的延迟

随机梯度下降法(SGD)是目前最流行的深度学习的优化算法之一,更新公式为:

▲公式1

其中,wt为当前模型,(xt,yt)为随机抽取的数据,g(wt;xt,yt)为(xt,yt)所对应的经验损失函数关于当前模型wt的梯度,η为步长/学习率。

假设系统中有多个工作节点并行地利用随机梯度法优化神经网络模型,同步和异步是两种常用的通信同步机制。

同步随机梯度下降法(SynchronousSGD)在优化的每轮迭代中,会等待所有的计算节点完成梯度计算,然后将每个工作节点上计算的随机梯度进行汇总、平均并按照公式1更新模型。之后,工作节点接收更新之后的模型,并进入下一轮迭代。

由于SyncSGD要等待所有的计算节点完成梯度计算,因此好比木桶效应,SyncSGD的计算速度会被运算效率最低的工作节点所拖累。

异步随机梯度下降法(AsynchronousSGD)在每轮迭代中,每个工作节点在计算出随机梯度后直接更新到模型上,不再等待所有的计算节点完成梯度计算。因此,异步随机梯度下降法的迭代速度较快,也被广泛应用到深度神经网络的训练中。

然而,AsyncSGD虽然快,但是用以更新模型的梯度是有延迟的,会对算法的精度带来影响。什么是“延迟梯度”?我们来看下图。

▲图2异步随机梯度下降法

在AsyncSGD运行过程中,某个工作节点Worker(m)在第t次迭代开始时获取到模型的最新参数wt和数据(xt,yt),计算出相应的随机梯度gt,并将其返回并更新到全局模型w上。

由于计算梯度需要一定的时间,当这个工作节点传回随机梯度gt时,模型wt已经被其他工作节点更新了τ轮,变为了wt+τ。也就是说,AsyncSGD的更新公式为:

▲公式2

对比公式1,公式2中对模型wt+τ上更新时所使用的随机梯度是g(wt;xt,yt),相比SGD中应该使用的随机梯度g(wt+τ;xt+τ,yt+τ)产生了τ步的延迟。因而,我们称AsyncSGD中随机梯度为“延迟梯度”。

延迟梯度所带来的最大问题是,由于每次用以更新模型的梯度并非是正确的梯度(请注意g(wt;xt,yt)≠g(wt+τ;xt+τ,yt+τ)),所以导致AsyncSGD会损伤模型的准确率,并且这种现象随着机器数量的增加会越来越严重。如下图所示,随着计算节点数目的增加,AsyncSGD的精度逐渐变差。

▲图3异步随机梯度下降法的性能

那么,如何能让异步随机梯度下降法在保持训练速度的同时,获得更高的精度呢?我们设计了可以补偿梯度延迟的DC-ASGD(Delay-







































北京治疗白癜风的医院哪个好
北京白癜风哪家最好



转载请注明:http://www.92nongye.com/zyjs/204621095.html