京公网安备 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
很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04CDA数据分析师 出品 作者:李诗怡 1. 波士顿矩阵(BCG Matrix) 定义: BCG于1970年提出的业务组合分析工具,以"市场增长率"(纵 ...
2026-09-04 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-09-04数据透视表是Excel与Power BI中最核心的数据分析工具,具备快速汇总、维度拆分、动态筛选的能力,可高效完成数据归类与统计展示 ...
2026-09-03在Power BI数据分析可视化场景中,堆积柱状图+折线图是最常用的复合图表组合。堆积柱状图适合展示各细分维度当期数值、结构占比 ...
2026-09-03 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据的基本处理单位是什么”“数据类型误判会引发哪些分析错误”“ ...
2026-09-03CDA数据分析师 出品 作者:李诗怡 一、8个核心数据清洗函数 1. TRIM:一键清除多余空格(最常用) 作用:仅保留文本中"单词/字 ...
2026-09-02数据分析的核心并非单纯操作工具、整理报表或绘制图表,而是依靠科学的思维逻辑挖掘数据价值、解释业务现象、指导经营决策。在完 ...
2026-09-02在社会经济、产业研究、区域治理与大数据实证分析中,面板数据是最具研究价值的数据类型。面板数据同时包含截面维度与时间维度信 ...
2026-09-02 很多数据分析师能熟练计算均值、标准差,但当被问到“如何用一张图让业务方3秒内看懂核心结论”“面对不同数据类型该怎么选 ...
2026-09-02在数据驱动决策的体系中,数据分析按照分析目的可分为描述性分析、诊断性分析、预测性分析与指导性分析四大类型。其中,诊断性分 ...
2026-09-01网络请求是Python爬虫开发、接口测试、数据拉取的核心基础功能,Python生态中主要依靠 urllib 和 requests 两大库实现HTTP请求操 ...
2026-09-01 很多数据分析师面对业务问题时,常常感到“知道要分析,却不知道用什么方法”。其实,数据分析并非无章可循——从三大基础范 ...
2026-09-01在数据库设计与业务数据维护中,自增ID是数据表最常用的主键字段,用于唯一标识每一条业务数据,正常状态下ID应保持连续递增。但 ...
2026-08-31在数理统计、数据分析、经济测算与日常量化评估中,平均值是刻画数据集中趋势、反映整体水平的基础核心指标。在实际应用中,最常 ...
2026-08-31在数据驱动的时代,数据分析早已不是“凭经验、靠感觉”的零散操作,而是一套具备固定逻辑、标准化流程的系统方法——这就是数据 ...
2026-08-31在大数据时代背景下,海量行业数据亟需通过专业化工具挖掘潜在价值,辅助企业业务决策、优化运营模式、规避经营风险。Python凭借 ...
2026-08-28SQL是数据分析领域最基础、最核心的工具,承担着取数、清洗、统计、分层、归因的全流程工作。不同于单纯的语法练习,实战化SQL数 ...
2026-08-28 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-08-28