延迟补偿的异步随机梯度下降(ASGD with DC)

摘要

随着深度学习快速发展,目前普遍使用大数据训练庞大神经网络。因为效率高,ASGD广泛使用,但是有梯度延迟的缺陷。这是因为当一个本地worker将梯度push到全局模型中时,可能这个全局模型已经被其他worker将梯度更新过了,这样本地worker push的梯度就是延迟的。因此本文提出补偿延迟的一个新技术,为了使ASGD更接近于SGD的优化效果。这是利用梯度函数的泰勒展开来有效逼近损耗函数的Hessian矩阵来实现的。通过在cifar和imagenet数据集上验证,实验结果显示,DC-ASGD性能优于同步SGD和异步SGD,几乎接近序列SGD的性能。

算法引入

本章节介绍dnn和其对应的通过ASGD进行并行训练。
给定一个多分类问题,X是输入空间,Y是输出空间,P是X,Y的联合分布。d代表X输入空间的维度,K指代输出空间的类别数。
根据分布P采样得到训练集{(x1,y1),…(xs,ys)},目标是通过训练集学习神经网络的参数w。具体来说,神经网络模型具有分层结构,其中每个节点在下层的连接节点上进行线性组合和非线性激活。参数是两层网络之间边上的权重。最后通过最小化经验损失函数得到参数。
当一个本地worker将梯度push到全局模型中时,可能这个全局模型已经被其他worker将梯度更新过了,这样本地worker push的梯度就是延迟的。如下图:

延迟补偿的异步随机梯度下降(ASGD with DC)_第1张图片
worker m pull到的梯度是wt,对应的pserver的全局模型是时刻t,计算梯度得到g(wt)后,push到全局模型中。但在这段计算的过程中可能会有其他worker tao,已经将本地计算好的梯度更新到了pserver中,即wt已经更新成w(t+tao),ASGD遇到这种情况时只会简单的将g(wt)更新到模型参上w(t+tao)上,即:
这里写图片描述
因此这样的更新规则是有问题的,而且与顺序SGD不等同,相当于给全局模型加了一个延迟梯度。许多实际观察表明ASGD比顺序SGD花费更多迭代次数才能收敛,并且收敛的模型也达不到顺序sgd的准确率,尤其是worker数目很多的时候。

算法原理

延迟补偿的异步随机梯度下降(ASGD with DC)_第2张图片
假设在parameter server架构中使用DC-ASGD算法。

算法1中,worker m从参数服务器中pull最新的模型参数w,然后计算梯度得到gm后push到参数服务器中。
算法2中,当参数服务器接收到worker的pull请求参数时,将备份模型参数w_bak。当在t时刻收到worker m(m是worker编号)计算的延迟梯度gm时,参数服务器使用如下公式进行参数更新:
这里写图片描述

比较ASGD和ASGD-DC来看,ASGD-DC在worker上没有附加的通信消耗和计算需求,在pserver上引入了轻量级的计算开销。在存储需求上,对于每一个worker,pserver需要额外的存储每一个模型参数w_bak,因为参数服务器通常是分布式实现的,所以这不是一个严重问题。因此ASGD-DC与ASGD开销是相似的。

总结

本文是学习自shuxin Zheng的 Asynchronous Stochastic Gradient Descent with Delay Compensation论文。论文中给出了SGD异步并行导致出现的梯度延迟问题的理论分析,并提出ASGD-DC解决问题。并从实现角度证明算法优于ASGD和SSGD(并行),且接近SGD(单机)。

你可能感兴趣的:(ML)