京公网安备 11010802034615号
经营许可证编号:京B2-20210330
波士顿的 数据科学团队正在利用尖端工具和算法来优化商业活动,且这些商业活动是基于对用户数据中的深刻透析。数据科学大量使用机器算法,可以帮助我们在数据中识别和利用模式。从互联网大规模数据中获取透析是一项具有挑战性的任务,因此,能大规模运行算法是一个至关重要的需求。伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的环境下运行。在通用的分布式计算环境中运行机器学习算法具有一系列的挑战。
这里,我们探讨一下如何在一个Hadoop集群中实现和部署深度学习(一个尖端机器学习框架)。对于算法是如何适应运行在一个分布式环境中,我们提供了具体的细节。我们也给出了算法在标准数据集上的运行结果。
深度信任网络
深度信任网络(Deep Belief Networks, DBN)是在贪婪和无监督的条件下通过迭代和训练受限的玻耳兹曼机(Boltzmann Machines, RMB)而得到的图形模型。通过对如下可被观察的维度x和隐藏层hk之间相互连接的分布式进行建模,DBN被训练来提取训练数据的深层透析。
表达式1:DBN分布式
在下图中,输入层和隐藏层的关系是可以被观察到的。从高层次来看,第一层被作为RBM来训练,为原始输入x进行建模。输入的数据是个稀疏二进制维度,表明数据将会被分类,比如,一个二进制的数字图像。后续层把前面的层传递过来的数据(样本或activations)当作训练示例使用。层数可以通过经验来决定,以此来获得更好的模型性能,DBN支持任意多的层数。
图1:DBN层次
下面的代码片段表明了进入RBM的训练。在提供给RBM的输入数据中,有多个预定义的时间点。输入数据被分成小批量数据,为各个层计算weights、activations和deltas。
在所有的层都被训练以后,深度网络的参数调整使用受监督的训练标准。受监督的训练标准,比如,可以作为一个分类问题来设计,允许使用深度网络来解决分类问题。更复杂的受监督的标准可以用来提供如情景解读之类的有趣的结果,比如解释图片里展示的东西是什么。
基础构造
深度学习受到了广泛的关注,不仅仅是因为它可以得出比其他一些学习算法更优异的结果,也因为它可以在分布式设备上运行,允许处理大规模的数据集。深度网络可以在两个级别进行并行、层级别和数据级别[6]。对于层级别的并行,许多实现使用GPU数组来并行计算层级别activations和频繁同步它们。然而,这种方法不适合那种数据驻留在通过网络连接的多个机器的集群,因为有着较高的网络开销。对于数据层的并行,训练是在数据集上进行并行的,更适合分布式设备。Paypal的大部分数据存储在Hadoop集群上,因此能够运行那些集群上的算法是我们的首要任务。专用集群的维护和支持也是一个我们需要考虑的重要因素。然而,由于深度学习本质上是迭代的,像MapReduce这样的范式不适合运行这些算法。但是随着Hadoop2.0和基于YARN的资源管理的问世,我们可以编写迭代程序,同时可以精细地控制程序使用的资源。我们使用了IterativeReduce [7] , Hadoop YARN里面的一个用户编写迭代算法的程序,我们可以将它部署在一个运行Hadoop 2.4.1的Paypal集群中。
方法
我们实现了Hinton的核心算法,在[2]中引用的。由于我们的需求是分散运行在多个机器的集群中的算法,我们在这样的环境下使用了他们的算法。对于在多个机器上分散这个算法,我们参照了Grazia所提出的指南[6]。下面是对我们的实现做的详细总结:
► Master节点初始化RBM的weights。
► Master节点向Worker节点推送weights和splits。
► Worker节点在一个数据集时间点训练一个RBM层,换句话说,在一个Worker节点完全通过所有的split后,向Master发送更新后的weights。
► 在一个给定的时间点里,Master节点对来自所有Worker节点的weights求平均值。
► 在预定义的时间集(我们的例子中是50)中,重复3-5步操作。
► 第6步完成以后,有一个层就被训练了。后续的RBM层也重复这些步骤。
► 当所有的层都被训练以后,深度网络就会通过使用错误反向广播机制准确地调整好。
下图描述了在运行深度学习算法时的一个单个数据集时间点(步骤3-5)。我们注意到,这个范式可以被利用来实现一个主机可迭代的机器学习算法。
图2:用于训练的单个数据集时间点
下面的代码片段表明了在训练单个机器的DBN中所涉及的步骤。数据集首先被拆分成多个批次,然后多个RBM层会被顺序地初始化和训练。在RBM都被训练以后,它们会通过一个准确调整的错误反向广播相位。
我们使用了IterativeReduce[7]的实现很大程度是为了YARN管道。我们对实现做出了重大改革,可以将它利用到我们的深度学习算法实现。IterativeReduce的实现是为Cloudera Hadoop分布式而编写,它被我们重置了平台,以此来适应标准的Apache Hadoop分布式。我们还重写了实现,以此来使用[8]中描述的标准编程模型。特别是,我们需要YARN客户端API在ResourceManager和客户端程序之间进行通信。我们也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之间进行通信。
我们首先使用YARN API提交应用程序到YARN资源管理器:
在应用被提交以后,YARN资源管理器启动应用程序Master。如果必要的话,应用程序Master负责分配和释放Worker容器。程序Master使用AMRMClient来与资源管理器进行通信。
应用程序Master使用NMClient API在容器(主节点传递过来的)中运行命令。
一旦应用Master启动了它需要的Worker容器,它设置一个端口来和应用Master进行通信。对于我们深度学习实现来说,我们新增了一些方法,它们需要为原始的IterativeReduce接口提供参数初始化、逐层训练和精确调整信号。IterativeReduce使用Apache Avro IPC来实现Master和Worker之间的通信。
下面的代码片段表明了一系列涉及Master-Worker节点的分布式训练,Master向worker发送初始参数,然后Worker在部分数据上训练它的RBM。在Worker完成训练之后,它将结果发送至Master,Master将会综合这些结果。迭代完成以后,Master通过启动反向广播精确调整相位来完成流程。
结果
我们评估了使用MNIST手写数字识别[3]来实现的深度学习的性能。数据集包含手工标记的0-9的数字。训练集由60000张图片组成,测试集包含了10000张图片。
为了测量性能,DBN首先被预训练,然后在60000张照片中被精确调整,通过以上的步骤,DBN会在10000张测试图片上进行评估。在训练或者评估期间,没有对图片进行预处理。出错率是由为分类的图片总数与测试集中的图片总数的比率而得到。
当在每个RBM使用500-500-2000的隐藏单元,同时使用十个节点的分布式设备的时候,我们能达到最佳的分类错误率1.66%。错误率可堪比原始算法的作者所报告的1.2%(使用500-500-2000的隐藏单元)[2],和类似设置下的一些结果[3]。我们注意到原始实现是在单个机器上的,而我们的实现是在分布式机器上的。参数平均的这一步导致性能略微降低,然而将算法分布在多台机器上是利大于弊的。下面的表格总结出了在十个节点的集群上运行的每个层的隐藏单元数对应的错误率的变化。
表1:MNIST性能评估
深入思考
我们成功地部署了一个深度学习系统,我们相信它在解决一些机器学习问题过程中很有用处。此外,迭代降低抽象可以被利用来分布任何其它合适的机器学习算法,能够利用通用的Hadoop集群将会被证明非常有利于在大数据集上运行大型机器学习算法。我们注意到,我们的当前框架需要一些改进,主要围绕减少网络延迟和更先进的资源管理。另外,我们需要优化DBN框架,这样可以减少内部节点之间的通信。随着对集群资源的精确调整控制,Hadoop YARN框架给我们提供了更多的灵活性。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
人力资源专员是HR体系的执行入口。招聘信息发布、简历初筛、面试安排、考勤汇总、入离职手续、劳动合同与档案管理,大多由这个岗 ...
2026-10-22人力资源经理问“必学技巧”,真正要解决的不是知识清单不够长,而是时间有限、业务催得紧,学完却用不上。更有效的路径是:先用 ...
2026-10-22内容营销岗位的核心任务,不是“把文案写得更漂亮”,而是围绕目标受众,用持续的内容供给影响认知、推动转化并沉淀复购。它至少 ...
2026-10-22理财经理培训课程很多,难的是判断“先学什么、后学什么、学完能做什么”。与其按课程名称罗列,不如先看岗位任务:客户分层与维 ...
2026-10-22理财经理的知识结构,可以先用一句话概括:合规与产品知识决定“不出错”,客户经营与资产配置决定“够不够专业”,市场研判与数 ...
2026-10-22经济学背景做数据分析,优势不在工具,而在问题意识:供需如何相互作用、成本与收益如何权衡、变量之间是相关还是因果。真正的缺 ...
2026-10-22需要,但要把“需要”理解准确。经济学本身就在处理数据:GDP、物价、就业、企业营收、问卷调研,都是经济分析的原料。真正的区 ...
2026-10-22经济学分析能力不是单一技能,它至少由三层构成:把现实问题转成可检验假设的理论框架能力、用数据与统计方法验证假设的工具能力 ...
2026-10-22金融分析师的知识提升,先补的不是更多模型,而是让结论可复核的底层能力。按任务顺序,大致是四层:财务与业务理解、指标口径管 ...
2026-10-22金融分析师的“通用技能”,指换到不同机构、不同行业组仍用得上的底层能力,而非某家公司内部系统的操作经验。按任务拆,日常要 ...
2026-10-22先给结论:数据分析证书不是金融分析师的准入条件,招聘方也不会因为一张证书就直接判断你能做分析。要不要考,取决于你当前任务 ...
2026-10-22金融分析师的核心技能,不是“会看K线”或“会讲宏观”,而是能把一家公司、一个行业或一类资产,转化为可核查的数据判断与书面 ...
2026-10-22产品经理的知识提升,不是把需求文档、原型、SQL、数据分析、项目管理都学一遍,而是先对准目标岗位的真实任务,找出自己最缺的 ...
2026-10-22产品专员提升工作知识,最有效的方式不是先囤课程,而是围绕日常交付的四件事来补:需求调研与优先级判断、原型与PRD表达、竞品 ...
2026-10-22产品运营专员提升个人能力,常见误区是先把Excel、SQL、Python列成一张学习清单,然后从第一个工具开始学。更有效的做法是先回答 ...
2026-10-22产品运营的能力提升,最怕从“课程目录”出发:今天学增长模型,明天背SQL语法,学完却说不清自己负责的功能为什么激活率低。更 ...
2026-10-22产品经理的技能和影响力不是两条分开的赛道。技能决定你能不能把问题分析清楚、把方案设计对;影响力决定你的判断能否被团队接受 ...
2026-10-22产品经理要学的数据分析能力,不是“会写SQL”或“会用BI工具”这么简单。更准确地说,是围绕需求评估、功能迭代、指标监控、实 ...
2026-10-22产品经理的业务能力,不是“会用多少工具”,而是能否把业务目标翻译成可执行的指标、用数据验证判断、再推动方案落地并复盘。全 ...
2026-10-22产品经理快速提升职场技能,关键不在多报几门课,而在于先找出当前岗位上最影响产出的一两项能力缺口,围绕“业务理解—需求与指 ...
2026-10-22