贾伟中科院合肥 发表于 2015-6-6 12:32:42

分布式云端机器学习

机器学习】分布式云端机器学习译者:wanderlustor 原作者:ML Blog Team



本文作者为Dhruv Mahajan,
Sundararajan Sellamanickam和 Keerthi Selvaraj,他们是微软研究院和微软云信息服务实验室的研究员。所有类型的企业都在积聚着庞大的数据资产,比如与用户行为、系统访问、使用模式等等有关的网络记录。而运用云端服务平台的力量,将使公司受益匪浅。公司不仅能够利用像微软云这样的云端服务平台来储存数据,实行经典的“后视镜”商务智能,更能使用云端预测性分析的强大力量。例如,运用微软云端机器学习这样的现代工具,公司可以获得关于其业务未来发展的切实见解——这将成为它们的竞争优势。收集保存“大数据”已经成为许多应用程序的普遍需求。随着数据量的剧增,分布式储存数据已成为必须。在许多应用中,收集数据本身是一个分散的过程,自然导致了分散的数据储存。这种情况下,建立起以分布式计算处理分布式数据的机器学习(ML)方案就十分必要。这种情况包括,通过在线广告领域的逻辑回归分析来预测点进率,或应用于大量影像语音训练的数据集的深度学习方案,或为探测异常模式而进行的记录分析。因此,在一个集群中对ML方案进行高效的分布式训练,是笔者所属的微软云信息服务实验室(CISL, 发音像“嘶嘶”:-))重点聚焦的区域。在这片文章中,我们在这一主题上钻研了些许,讨论了一些相关问题和我们最新研究。这里展示的一些细节较为技术性,但我们尽可能以简单易懂的方式来解释中心思想。理解了这些思想,任何对大数据分布式ML感兴趣的人都会有所收获,我们也很期待你们的评论和反馈。选择合适的基础设施在最近的一篇文章中,约翰·兰福特(John Langford)介绍了用于快速学习的Vowpal Wabbit系统,他简要谈及了对兆级数据集的分布式学习。因为大多ML的算法本质上是迭代,因此选择合适的分布式框架来运行它们就十分关键。映射归纳(Map Reduce)和它的开源实现Hadoop,是较为流行的分布式数据处理平台。但他们对迭代性的ML算法并不恰当,因为每次迭代都有巨大的额外作业——如作业调度,数据传送和数据解析。更好的选择是加上通讯基础设施,如与Hadoop兼容的全局归纳(All Reduce),(像VW那样),或者采用更新的分布框架,如支持有效的迭代运算的REEF。
统计查询模型目前分布式ML最先进的算法,像VW中所用的那种是基于统计查询模型(SQM)。在SQM中,学习是基于对每个数据点进行计算,然后将对所有数据点的运算结果累加。举例来说,假设线性ML问题的结果是一个特征向量与其权重参数的向量的点积。这包含了逻辑回归,支持向量积(SVMs)
和最小二乘方拟合等重要的预测模型。这种情况下,每次迭代中,训练目标函数的整体梯度由各个数据点的梯度相加而成。每个节点形成与在该节点存在的训练数据相一致的局部梯度,然后用全局归纳运算来获得整体梯度。通讯瓶颈分布式运算常要面临一个关键瓶颈,即运算与通讯宽带之间的巨大比例差。举例来说,通信速度比运算速度慢10倍到50倍都相当常见。以Tcomm和Tcomp分别代表通信的每次迭代时间和运算的每次迭代时间,那么一个迭代性ML算法的总时间花费可用下列算式表示:总时间=(Tcomm + Tcomp)*#迭代次数节点增多时,Tcomp呈现出典型的线性下降,而Tcomm则上升或保持不变(全部归纳良好实施的情况下)。ML方案包括大数据经常有众多权重参数(d),这些参数在每次迭代时都必须在集群中的节点间被交流更新。此外,还有其他步骤,像SQM中的梯度运算也需要 O(d)通讯。这种情况在映射归纳中更为糟糕,这里每次迭代都需要一次独立的映射归纳工作,因此,d 越大,Tcomm越大。SQM并未在这方面的低效率上给予足够的重视。
攻克通讯瓶颈我们最近的研究正是针对这一重点。研究建立在以下的观测之上:假设Tcomm,节点间权重参数的通讯时间,非常大。在每次迭代中,采用SQM这种标准方法会使得Tcomp, 每节点内与运算相关的时间,远小于Tcomm。因此我们提出以下问题,有没有可能修改算法和其迭代,使Tcomp与Tcomm接近,并且在这个过程中,将该算法转变成为迭代次数较少的理想方案?当然,回答这个问题并不简单,因为它要求的是一次根本性的算法改变。更多本质的细节解决近似问题会导致每节点的计算量增多,但不需要任何额外的通讯。结果是Tcomp增加,而因为Tcomm 本身就很高,每次迭代花费的时间并未受到显著影响。但是,由于每个节点现在解决的是近似全局视图的问题,解决问题需要的迭代数量将大大减少。设想在无比庞大的数据中,每节点自身的数据就足以实现良好的学习。设想一下ML学习线性模型的问题。在我们的算法中,节点中权重更新和渐变的方式与SQM方式类似。然而,在每个节点,节点中的渐变梯度(用全局归纳算出)和本地数据经过复杂的方式形成对全局问题的本地近似值。每个节点解决自己的近似问题,形成权重变量的的本地更新。然后所有节点的本地更新结合形成权重变量的全局更新。这种情况下,每节点形成的近似问题就接近于全局问题,这样SQM的算法需要几百次甚至几千次的迭代时,我们的算法只需要一或两次迭代。此外,我们的方法也较为灵活,允许出现一系列的近似值而不只是一个特定值。总体来说,这种算法几乎总是比SQM要快,平均来说,要快两到三倍。也可以考虑将权重向量分散到多个集群节点中,建立分布式数据储存和运算方式,使任何一个权重变量的更新只发生在一个集群节点上。这在一些情况下非常吸引人,比如对线性ML问题中相关权重变量归零有兴趣时,或做分布式深度训练时。这样我们又一次建立了特殊的迭代算法,增加了每节点内的运算但减少了迭代的次数。评估上述重点研究的算法适合通讯拥堵的状况,并不能在实际中解决所有问题。对于一般的情况,最近的学术文献中有很多好的分散式ML算法,但对这些方法还未有细心的估评。最好的办法正在寻找通往云端ML图书馆的道路。根据用户需求自动化分布式ML 故事还有另外重要的一面。在云端上使用分配式ML的用户拥有不同的需求。他们也许对最短时间内产生方案感兴趣,也许对最少花费产生方案感兴趣。在考虑上述变量进行最优选择时,用户可与原意牺牲一点精确度。另一种可能是,他们也许迫切地想知道最确切的结果,而不计时间和花费。考虑到问题描述,用户的不同要求和系统配置的可应用性的细节,拥有一个能够选择合适算法和参数设定的自动程序十分重要。我们目前的研究也集中在这一方面。在我们未来的产品发展和产品扩张中,自动化分布式机器学习方案将会是微软云机器学习重要的一个研究领域。

页: [1]
查看完整版本: 分布式云端机器学习