当前位置: 首页 > 科技观察

分布式深度学习新进展:让“分布式”和“深度学习”真正深度融合

时间:2023-03-20 17:09:40 科技观察

分布式深度学习新进展:让“分布式”与“深度学习”真正深度融合,取得了惊人的成果。然而,深度学习的应用范围越来越受到数据量和模型规模的限制。如何高效地进行深度学习模型训练?基于对机器学习的全面理解,微软亚洲研究院机器学习组负责人陈薇及其团队将分布式技术与深度学习紧密结合,探索出一种真正结合机器学习的全新“分布式深度学习”算法。二。随着大数据和高效计算资源的出现,深度学习在人工智能的诸多领域取得了重大突破。然而,面对越来越复杂的任务,无论是数据还是深度学习模型的规模都变得越来越大。例如,用于训练图像分类器的标记图像数据量达数百万,甚至数千万。大规模训练数据的出现为训练大型模型提供了物质基础,因此近年来出现了很多大规模的机器学习模型,例如微软亚洲研究院2015年开发的超过200亿参数的LightLDA主题模型.但是,当训练数据词汇量增加到千万级时,如果不做剪枝,深度学习模型可能有数百亿甚至上千亿的参数。为了提高深度学习模型的训练效率,减少训练时间,我们一般采用分布式技术来执行训练任务——同时使用多个工作节点分布式高效地训练性能优异的神经网络模型。分布式技术是深度学习技术的加速器,可以显着提高深度学习的训练效率,进一步扩大其应用范围。深度学习的目标是从数据中挖掘模式来帮助我们做出预测。深度学习算法的一般框架是使用优化算法迭代地最小化训练数据的经验风险。由于数据的统计特性、优化的收敛特性、学习的泛化特性在多机执行时更加灵活,与其他计算任务相比,深度学习算法实际上并不需要计算节点严格执行单机通过通信版本算法。因此,当“分布式”遇上“深度学习”,不应只局限于串行算法和底层技术的多机实现。我们还应该在对机器学习有完整理解的基础上,将分布式学习和深度学习结合起来。学习紧密结合,结合深度学习的特点,设计出真正将二者合二为一的全新“分布式深度学习”算法。图1分布式深度学习框架分布式深度学习框架包括数据/模型切分、局部单机优化算法训练、通信机制、数据/模型聚合等模块。现有算法一般采用随机置乱进行数据分配,采用局部训练算法进行随机优化算法(如随机梯度法),采用同步或异步通信机制,采用模型聚合进行参数平均。结合深度学习算法的特点,微软亚洲研究院机器学习组重新设计/理解了这些模块。我们在分布式深度学习领域主要做了三个方面的工作:第一项工作针对异步机制中的梯度延迟问题,我们设计了一种用于深度学习的“具有延迟补偿的异步算法”;第二项工作,针对神经网络的非凸性,提出了一种比参数平均更有效的集成聚合方法,设计了一种“集成-压缩”并行深度学习算法;在第三篇工作中,我们首次分析了分布式深度学习算法在随机置乱和分裂下的收敛速度,为算法设计提供了理论指导。DC-ASGD算法:补偿异步通信中梯度的延迟随机梯度下降法(SGD)是深度学习最流行的优化算法之一。更新公式为:公式1其中wt为当前模型,(xt,yt)为随机选择的数据,g(wt;xt,yt)为(xt,yt)对应的经验损失函数相对于当前模型wt,η是步长/学习率。假设系统中有多个工作节点并行使用随机梯度法优化神经网络模型,同步和异步是两种常用的通信同步机制。同步SGD(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-compensatedAsyncSGD)算法。为了研究正确梯度g(wt+τ)和延迟梯度g(wt)之间的关系,我们对g(wt+τ)在wt处进行泰勒展开:其中?g(wt)是梯度的梯度gradient,而是损失函数的Hessian矩阵,H(g(wt))是梯度的Hessian矩阵。显然,延迟梯度实际上是真实梯度的零阶近似,而其余项对延迟有贡献。因此,一个很自然的想法是,如果我们计算所有的高阶项,我们就可以将延迟梯度修正为准确梯度。但是,由于余数有无限项,因此无法精确计算。因此,我们选择使用上式中的一阶项来进行延迟补偿:众所周知,现代深度神经网络模型中,在具有百万甚至更多参数的深度神经网络模型中,计算和存储Hessian矩阵?g(wt)成为一块of几乎不可能做到。因此,找到一个好的Hessian矩阵近似值是能否补偿梯度延迟的关键。根据Fisher信息矩阵的定义,梯度??的外积矩阵是Hessian矩阵的渐近无偏估计,因此我们选择用G(wt)来逼近Hessian矩阵。根据前人的研究,如果在神经网络模型中使用Hessian矩阵的对角线元素来逼近Hessian矩阵,可以在保持算法精度的同时显着降低运算和存储的复杂度,因此我们使用diag(G(wt))作为Hessian矩阵的近似值。为了进一步减小近似的方差,我们使用一个介于(0,1]之间的参数λ来调整偏差和方差。综上所述,我们设计了以下具有延迟补偿的异步随机梯度下降法(DC-ASGD),其中,延迟梯度g(wt)的补偿项只包含一阶梯度信息,几乎不增加计算和存储成本。我们在CIFAR10数据集和ImageNet数据集上评估了DC-ASGD算法。实验结果如下两图所示图4DC-ASGD训练/测试误差_CIFAR-10图5DC-ASGD训练/测试误差_ImageNet可以观察到DC-ASGD算法与AsyncSGD算法同时对比得到的模型准确率有了明显提升,也高于SyncSGD,基本可以达到和SGD一样的模型准确率。Ensemble-Compression算法:平均参数改进非凸模型的聚合方法是现有分布式深度学习算法中非常常见的模型聚合方法。如果损失函数关于模型参数是凸函数,则有如下不等式成立:其中,K为计算节点数,wk为局部模型,为参数平均后的模型,(x,y)为任意样本数据。这个不等式的左端是平均模型对应的损失函数,右端是每个局部模型的损失函数值的平均值。可以看出,凸问题中的平均参数可以保持模型的性能。然而,对于非凸神经网络模型,上述不等式将不再成立,因此不再保证平均模型的性能。这一点也得到了实验验证:如图6所示,对于不同的交互频率(尤其是较低频率的交互),参数平均通常会大大降低训练精度,使训练过程极不稳定。图6.基于参数平均的分布式算法训练曲线(DNN模型)。为了解决这个问题,我们提出使用模型集成代替模型平均,作为分布深度学习中的模型聚合方法。虽然神经网络的损失函数相对于模型参数是非凸的,但是模型的输出一般都是凸的(比如深度学习中常用的交叉熵损失)。此时利用凸性可以得到如下不等式:其中,不等式左边为集成模型损失函数的值。可以看出,对于非凸模型,集成模型可以保持性能。但是,每次集成后,神经网络模型的大小都会翻倍,从而导致模型大小爆炸的问题。那么,有没有办法在不增加模型大小的情况下利用模型集成呢?我们提出了一种基于模型集成和模型压缩的模型聚合方法,即集成压缩方法。在每个集成之后,我们对集成模型执行压缩。该算法具体分为三个步骤:每个计算节点根据局部优化算法和局部数据训练一个局部模型;计算节点相互通信得到一个集成模型,并将集成模型上的(部分)本地数据标记给自己。产值;利用模型压缩技术(如知识蒸馏),结合数据重标记信息,分别对每个工作节点进行模型压缩,得到一个与本地模型大小相同的新模型作为最终的聚合模型。为了进一步节省计算量,可以将蒸馏过程和局部模型训练相结合。这种集成压缩聚合方法不仅可以通过集成获得性能提升,而且可以在学习的迭代过程中保持全局模型的规模。在CIFA-10和ImageNet上的实验结果也很好地验证了集成压缩聚合方法的有效性(见图7和8)。当工作节点之间的通信频率较低时,参数平均方法的性能会很差,但模型集成压缩方法仍然可以达到理想的效果。这是因为集成学习在子模型多样化时效果更好,较低的通信频率会导致每个局部模型更加分散和更强的多样性;同时,较低的通信频率意味着较低的通信成本。因此,模型集成-压缩方法更适用于网络环境较差的场景。图7各种分布式算法在CIFAR数据集上的比较图8各种分布式算法在ImageNet数据集上的比较基于模型集成的分布式算法是一个比较新的研究领域,还有很多未解决的问题。例如,当工作节点很多或者本地模型本身很大时,集成模型的规模会变得很大,会带来很大的网络开销。此外,当集成模型很大时,模型压缩也会成为很大的开销。值得注意的是,在ICLR2018上,Hinton等人提出的Co-distillation方法,虽然与该工作的动机不同,但其算法与该工作非常相似。如何理解这些关联并解决这些局限性将导致新的研究,有兴趣的读者可以思考。随机重排下算法的收敛性分析:改进分布式深度学习理论最后简单介绍一下我们近期在改进分布式深度学习理论方面的工作。分布式深度学习中常用的数据分配策略是随机重排后等分。具体来说,就是将所有的训练数据随机打乱,得到数据的重排,然后将数据集按顺序分成等份,每份存储在计算节点上。数据经过一轮后,如果收集到所有的局部数据,重复上述过程,一般称为“全局重排”,如果只对局部数据进行随机重排,一般称为“局部重排”.现有的分布式深度学习理论大多假设数据是独立同分布的。但是基于Fisher-Yates算法的随机重排实际上相当于无放回抽样,训练数据不再独立同分布。因此,每轮计算的随机梯度不再是精确梯度的无偏估计,因此以往分布式随机优化算法的理论分析方法不再适用,现有的收敛结果不一定仍然成立。我们以TransductiveRademancherComplexity为工具,给出了随机梯度相对于精确梯度的偏差上界,证明了分布式深度学习算法在随机重排下的收敛性分析。假设目标函数是光滑的(不一定是凸函数),系统中有K个计算节点,训练轮数(epoch)为S,总共有n个训练数据,考虑分布式SGD算法。(1)如果采用全局随机重排数据分配策略,则算法的收敛率为,其中非独立同分布引起的附加误差。财产是。因此,当传递数据的轮数远小于训练样本数时(S