• 要实现高效的大数据机器学习,需要构建一个能同时支持机器学习算法设计和大规模数据处理的一体化大数据机器学习系统。研究设计高效、可扩展且易于使用的大数据机器学习系统面临诸多技术挑战。近年来,大数据浪潮的...

    要实现高效的大数据机器学习,需要构建一个能同时支持机器学习算法设计和大规模数据处理的一体化大数据机器学习系统。研究设计高效、可扩展且易于使用的大数据机器学习系统面临诸多技术挑战。近年来,大数据浪潮的兴起,推动了大数据机器学习的迅猛发展,使大数据机器学习系统成为大数据领域的一个热点研究问题。介绍了国内外大数据机器学习系统的基本概念、基本研究问题、技术特征、系统分类以及典型系统;在此基础上,进一步介绍了本实验室研究设计的一个跨平台统一大数据机器学习系统——Octopus(大章鱼)。


    关键词:大数据;机器学习;分布并行计算;大数据处理平台


    1 大数据机器学习系统研究背景


    近年来,大数据技术在全球发展迅猛,掀起了巨大的研究热潮,引起全球业界、学术界和各国政府的高度关注。随着计算机和信息技术的迅猛发展和普及应用,行业应用数据呈爆炸性增长。动辄达到数百TB甚至数PB规模的行业/企业大数据已经远远超出了传统计算技术和信息系统的处理能力。与此同时,大数据往往隐含着很多在小数据量时不具备的深度知识和价值,大数据智能化分析挖掘将为行业/企业带来巨大的商业价值,实现多种高附加值的增值服务,从而提升行业/企业生产管理决策水平和经济效益。


    大数据分析挖掘处理主要分为简单分析和智能化复杂分析两大类。简单分析主要采用类似于传统数据库OLAP的处理技术和方法,用SQL完成各种常规的查询统计分析;而大数据的深度价值仅通过简单分析是难以发现的,通常需要使用基于机器学习和数据挖掘的智能化复杂分析才能实现。


    机器学习和数据分析是将大数据转换成有用知识的关键技术,并且有研究表明,在很多情况下,处理的数据规模越大,机器学习模型的效果会越好[1~3]。目前,国内外业界和学术界专家普遍认同的观点是,越来越多的海量数据资源加上越来越强大的计算能力,已经成为推动大数据时代人工智能技术和应用发展的动力,将基于大数据的机器学习和人工智能推上了新一轮发展浪潮,让大数据机器学习(bigdata machine learning)成为全球业界和学术界高度关注的热点研究领域。随着大数据时代的来临,Google、Facebook、微软、百度、腾讯等国内外著名企业均纷纷成立专门的基于大数据的机器学习与人工智能研发机构,深入系统地研究基于大数据的机器学习和智能化计算技术。


    由于大数据机器学习和数据挖掘等智能计算技术在大数据智能化分析处理应用中具有极其重要的作用,在2014年12月中国计算机学会(CCF)大数据专家委员会上百位大数据相关领域学者和技术专家投票推选出的“2015年大数据十大热点技术与发展趋势”中,结合机器学习等智能计算技术的大数据分析技术被推选为大数据领域第一大研究热点和发展趋势[4]。


    由于大数据机器学习在具体实现时通常需要使用分布式和并行化大数据处理技术方法,也有人将大数据机器学习称为“分布式机器学习”(distributedmachine learning)或“大规模机器学习”(large-scale machine learning)。


    大数据机器学习,不仅是机器学习和算法设计问题,还是一个大规模系统问题。它既不是单纯的机器学习,也不是单纯的大数据处理技术所能解决的问题,而是一个同时涉及机器学习和大数据处理两个主要方面的交叉性研究课题。一方面,它仍然需要继续关注机器学习的方法和算法本身,即需要继续研究新的或改进的学习模型和学习方法,以不断提升分析预测结果的准确性;与此同时,由于数据规模巨大,大数据机器学习会使几乎所有的传统串行化机器学习算法难以在可接受的时间内完成计算,从而使得算法在实际应用场景中失效。因此,大数据机器学习在关注机器学习方法和算法研究的同时,还要关注如何结合分布式和并行化的大数据处理技术,以便在可接受的时间内完成计算。为了能有效完成大数据机器学习过程,需要研究并构建兼具机器学习和大规模分布并行计算处理能力的一体化系统。


    因此,领域内出现了“大数据机器学习系统”或者“分布式学习系统”的概念,并进行了诸多大数据机器学习系统的研究与开发工作。


    2 大数据机器学习系统的技术特征


    参考文献[5,6]专门介绍了大数据机器学习系统的技术特征。


    如图1所示,一个大数据机器学习系统会同时涉及机器学习和大数据处理两方面的诸多复杂技术问题,包括机器学习方面的模型、训练、精度问题以及大数据处理方面的分布式存储、并行化计算、网络通信、局部性计算、任务调度、容错等诸多因素。这些因素互相影响,交织在一起,大大增加了系统设计的复杂性。因此,大数据机器学习已经不仅仅是一个算法研究问题,而是需要针对大数据集,考虑从底层的大数据分布存储到中层的大数据并行化计算,再到上层的机器学习算法,设计一种一体化的支撑系统,形成易于为数据分析程序员和机器学习研究者使用的、完整的大数据机器学习系统。


    图1 大数据机器学习系统所涉及的复杂因素[5]


    一个理想的大数据机器学习系统通常需要具备以下几个方面的技术要素和特征[5~7]。


    • 应当从整个学习的生命周期/流水线来考虑,包括训练数据和特征的提取、并行学习算法的设计、训练模型和参数的查询管理、分布式训练计算过程,都应在一个一体化的学习系统平台上完成。


    • 应提供多种并行训练模式,支持不同的机器学习模型和算法。


    • 需要提供对底层系统的抽象,以实现对底层通用大数据处理引擎的支持,并提供数据科学中常用的编程语言接口(API)。


    • 应该拥有开放和丰富的生态、广泛的应用和快速的进化能力。


    在上述技术特征中,一个非常重要的思路是,要通过系统抽象来降低系统设计的复杂性。如图2所示,一个设计良好的大数据机器学习系统,应当通过定义特定的机器学习编程计算和系统抽象接口,将上层机器学习和底层分布式系统解耦开来,将机器学习实现在现有的大数据计算平台之上,而不需要考虑底层系统层面的因素,以此实现底层大数据处理平台对上层用户的透明化,让上层用户从诸多底层的分布和并行化大数据编程计算细节中解放出来,以便他们致力于上层的机器学习模型和算法的设计实现。通过编程计算和系统抽象层API,向上提供各种机器学习编程计算接口以及学习模型和训练数据的表示,向下由底层分布式系统负责处理并提供高效的分布和并行化计算实现。


    图2 大数据机器学习系统抽象


    3 大数据机器学习系统的主要研究问题


    知名的Apache Flink大数据分析系统研究者在2014年VLDB会议主题报告和论文中[8],从数据分析的复杂程度和数据规模的维度,考察了现有的相关研究工作和系统,如图3所示。现有的系统要么主要用于小规模复杂分析,要么主要用于大规模的简单统计分析,缺少既具有复杂数据分析能力又具有强大的大数据处理能力的大数据分析系统;文章作者甚至认为,对于行业大数据分析人员而言,现有的工具还处于“石器时代”[8]。


    图3 研究者Apache Flink提出的分析维度和研究现状[8]


    与此同时,著名的UC Berkeley AMPLab在研究基于Spark的机器学习库MLBase[9]时,从计算性能和系统易用性两个重要维度,考察了现有的大数据机器学习研究工作和系统,如图4所示。面向机器学习和数据分析时,目前已有的工作和系统,绝大多数都未能同时具备大规模分析处理能力和良好的系统易用性。


    图4 Spark系统研究者提出的分析维度和研究现状[9]


    因此,大数据机器学习除了需要继续关注和研究传统意义上的学习方法和算法问题,以不断提高学习精度外,还需要重点关注和研究解决大数据场景下所特有的两大技术问题:


    • 一是大数据复杂分析时的计算性能问题;

    • 二是大数据机器学习系统的可编程性和易用性问题。


    (1)大数据复杂分析时的计算性能问题


    在计算性能方面,大规模数据集给很多传统串行的机器学习和数据分析挖掘算法带来很大的挑战,需要研究解决面向大数据机器学习和数据分析的高效计算方法和系统。在数据集较小时,很多复杂度在O(n log n)、O(n2)甚至O(n3)的传统串行化机器学习算法都可以有效工作;但当数据规模增长到极大尺度时,现有的串行化算法将花费难以接受的时间开销,使得算法在实际应用场景中失效,这给业界大量实际的大数据复杂分析应用带来很多新的挑战和问题[10]。正如微软全球副总裁陆奇博士在2012年指出的,“大数据使得现有的大多数机器学习算法失效,面向大数据处理时这些算法都需要重写”。


    在大型互联网企业,大规模机器学习算法经常用于处理十亿至千亿级别的样本以及一亿至数十亿数据特征的大规模数据集。例如,Google著名的Seti太空搜索项目需要进行高达千亿样本、十亿特征数据的大规模机器学习,腾讯Peacock主题模型分析系统需要进行高达十亿文档、百万词汇、百万主题的主题模型训练,而仅一个百万词汇乘以百万主题的矩阵,其数据存储量即高达3TB,如果再考虑十亿文档乘以百万主题的矩阵,其数据量更是高达3 PB[3]。如此大量的训练样本,加上机器学习算法本身的复杂性,导致难以在传统的串行化计算平台上、在可接受的时间内完成如此巨大的复杂分析计算任务,因而带来了十分突出的计算性能问题。因此,大数据机器学习算法和系统需要研究解决大规模场景下高效的分布式和并行化算法设计以及计算问题,以保证算法和系统可以在可接受的时间内完成大规模数据的学习和训练。


    (2)大数据机器学习系统的可编程性和易用性问题


    为了满足急剧增长的大数据处理需求,过去几年来,全球推出了Hadoop[11]和Spark[12]等多种主流大数据处理技术和系统平台。这些主流技术和平台的出现为大数据的处理提供了良好的技术手段和方法。Hadoop的出现使得大数据处理技术和平台从无到有,而基于内存计算的Spark系统的出现使得大数据分析计算从慢到快。然而,现有的大数据处理技术和系统平台都存在很大的易用性问题,难以为普通的程序员掌握和使用,尤其是面向复杂的大规模机器学习和数据分析时,这个问题更为突出。


    大数据机器学习和数据分析的并行化程序设计,比传统的串行化算法设计复杂很多、对程序员的技术要求更高。对于普通的数据分析程序员或机器学习研究者来说,在特定的大数据编程模型和平台下进行并行化机器学习和数据分析算法设计,需要掌握很多分布式系统背景知识和并行程序设计技巧,这对他们来说难度较大,经常要把实际工作的大部分时间花费在底层复杂的并行化和分布式编程和调试上,给上层数据分析和算法设计工作带来很大的不便和困难,导致普通程序员与现有的各种大数据处理平台之间存在一个难以逾越的鸿沟[8,9,13~15]。


    另一方面,即使对于诸如Google、百度等具有强大技术力量的互联网企业程序员来说,随着多种大数据处理与编程平台的出现以及各种分析应用问题需求的不同,他们也常常需要针对不同平台,重复编写和测试各种并行化机器学习和数据分析算法,这种在多个大数据平台上重复编写和尝试数以百计的机器学习算法的工作负担也很重。正如阿里巴巴集团副总裁、高级研究员章文嵩博士在中国计算机学会第一届大数据学术会议上所指出的,“淘宝内部需要使用的并行化机器学习算法很多,随着新型的并行化计算框架的逐步出现,需要将其逐个实现到MPI、MapReduce、Spark等并行计算框架上;如果后面出现更先进的框架,又面临着将这些算法重新实现一遍的负担”。


    针对大数据的机器学习和数据分析,现有的大数据处理技术和平台存在很大的可编程性和易用性问题,导致普通程序员和常规的程序设计方法与现有的大数据分析处理编程技术之间存在着一个很大的鸿沟。正如CCF大数据专家委员会《2015年大数据发展趋势预测报告》指出的那样,“由于现有的大数据平台易用性差,而垂直应用行业的数据分析又涉及领域专家知识和领域建模,目前在大数据行业分析应用与通用的大数据技术之间存在很大的鸿沟,缺少相互的交叉融合”[4]。


    因此,大数据机器学习系统要解决的一个重要问题是,让不易使用的大数据处理技术和平台变得易于使用,要填平普通程序员和常规程序设计方法与现有的大数据处理技术之间的鸿沟,尽可能让普通程序员用常规程序设计方法便能有效完成大数据的复杂分析处理。


    根据Google Seti项目研究人员在开发实际的大型机器学习系统上的经验,在面向大数据时,考虑到用户开发效率问题,系统易用性与提高机器学习精度几乎同等重要,有时甚至比精度问题更为重要,“也许过去学术界很少关心设计一个精度稍差、但有更好易用性和系统可靠性的学习算法,但在实际应用中,这会体现出非常重要的价值”。


    4 大数据机器学习系统的分类


    近几年来,随着大数据的来临,基于大数据的机器学习方法和系统成为业界和学术界普遍关注的研究热点。为了提供有效的大数据机器学习和数据分析手段,业界和学术界在尝试多种途径和方法,在不同的并行计算模型和平台下,在实际的数据分析挖掘中得到应用。


    较早出现以及现有的一些大数据机器学习算法和系统大多采用较为低层的紧耦合、定制化方法构建。这些算法和系统大都针对特定的应用,选择特定的平台和模型,针对特定的机器学习模型和特定的计算模式,从串行算法和原型到分布并行化算法和原型,自底层向上进行紧耦合和定制化的开发和优化。尽管这可以最大化利用系统资源以达到最佳的性能,但这种低层的紧耦合定制化实现方法,将学习和系统混杂在一起,实现难度大,算法和系统也难以调试和维护[5,6]。


    从前述的大数据机器学习系统特征来看,一个设计良好的大数据机器学习系统应当考虑高层的系统层抽象,向上为程序员提供易于使用的高层机器学习算法编程接口,向下基于现有的通用化大数据处理平台提供大规模数据的分布和并行化计算能力。为此,近年来已经开始出现基于各种高层编程计算和系统抽象设计大数据机器学习系统的研究工作。


    在高层编程计算和系统抽象上,目前的大数据机器学习系统大致可分为3种主要的编程计算和系统抽象方法,分别是基于矩阵模型的抽象、基于图模型的抽象以及基于参数模型的抽象。


    (1)基于矩阵模型的抽象


    基于矩阵模型的抽象基于这样一个事实:大多数机器学习和数据分析算法都可以表示为矩阵或向量代数计算,因此可以构建一个基于矩阵计算模型的机器学习系统,允许程序员直接基于矩阵计算快速构建机器学习和数据分析算法。最典型的基于矩阵模型的大数据机器学习系统尚不多见,UCBerkeley AMP Lab推出的Spark MLlib是一个试图基于矩阵计算模型构建上层各种机器学习算法的系统;最近Spark系统提出了一个DataFrame的数据抽象机制,允许基于矩阵和表等数据结构,设计各种机器学习和数据分析算法。此外,国内由南京大学PASA大数据实验室研究开发的“Octopus(大章鱼)”系统是一个以大规模矩阵模型为中心的跨平台大数据机器学习系统。


    (2)基于图模型的抽象


    虽然矩阵可以表示大多数机器学习和数据分析算法,但对于一些基于图模型的社会网络分析问题,基于矩阵模型进行计算并非最有效的方法(虽然图和矩阵表示具有理论上的等价性)。矩阵模型对于图数据的表达不如图模型,且通常会面临稀疏性的问题。因此,一些社会网络分析类的实际应用需要基于更为高效的图模型的学习和分析方法,为此出现了相应的基于图模型的大数据机器学习系统。最典型的基于图模型的系统是美国卡耐基梅隆大学(CMU)推出的GraphLab系统[16]以及基于Spark构建的GraphX系统。


    (3)基于参数模型的抽象


    基于矩阵模型和图模型的系统主要是从数据表示模型的角度来构建系统,这两种方法的特点是更接近于实际学习问题中自然化的数据表示和计算模型,因此对于数据分析人员方便快速地构建机器学习和数据分析算法比较自然和直观。但是,大数据机器学习常常还需要涉及大规模模型,例如,近几年发展迅猛的深度神经网络算法,常常需要通过对大量模型参数的调优来提高学习精度,在这种情况下,上述两种方法会缺少灵活性,难以让算法设计者通过控制模型参数进行算法优化。为此,有研究者提出了一种基于模型参数的抽象方法,即把所有机器学习算法抽象为对学习过程中一组模型参数的管理和控制,并提供对大规模场景下大量模型参数的有效管理和访问。目前参数模型最典型的方法是最初由美国卡耐基梅隆大学的LiMu等人提出的、后在很多系统中得到进一步应用的Parameter Server[17,18]。


    实际的系统也可能会是一种兼有上述多种类型的混合系统。此外,也有不少系统从并行模式角度来区分,分为数据并行和模型并行两种方式,且一些系统只提供数据并行方式,另一些系统会同时提供数据并行和模型并行两种方式。


    5 典型大数据学习方法和系统介绍


    5.1 基于特定平台的定制式并行化机器学习算法与算法库


    随着Hadoop MapReduce[11]和Spark[12]大数据并行计算与编程平台的出现和成熟应用,Hadoop和Spark已经成为目前大数据分析处理的主流平台。为了解决大规模机器学习问题,有大量的研究工作致力于基于HadoopMapReduce和Spark以及传统的MPI并行计算框架,完成各种并行化机器学习和数据挖掘算法的设计。在诸如TPDS、JPDC、IPDPS、ICPP、ICPADS、IEEEBigData等大数据和分布并行计算领域的知名期刊和国际会议上,这些并行化算法研究工作不胜枚举。由于需要同时顾及上层机器学习算法设计和底层分布并行化大数据处理系统层细节,总体而言,基于上述不同的并行化编程方法和平台进行并行化机器学习算法设计,仍属于一种专业性较强、技术要求较高、过程较为繁琐的工作,难以为缺少分布式和并行计算知识背景的普通程序员使用。


    为了让普通数据分析程序员能够直接使用并行化机器学习算法,目前普遍的一种做法是,在不同的并行化计算平台上,由专业的机器学习算法设计者实现并行化机器学习算法,提供一个机器学习和数据挖掘工具包以供一般的数据分析和应用开发程序员直接使用,如Hadoop下的Mahout以及Spark环境下的MLlib。


    Mahout的主要任务是设计并提供一些基于MapReduce的可扩展的机器学习领域经典算法库,包括聚类、分类、推荐过滤、频繁项集挖掘等。这些并行化算法都是基于HadoopMapReduce平台完成的,用户可直接调用Mahout算法库实现好的算法。然而,Mahout提供的并行化机器学习算法数量有限,而且作为标准的软件包,其所提供的算法几乎都是标准的,在算法精度和性能上不一定能满足用户的需要。进一步,MapReduce的设计目标是解决数据密集但计算逻辑相对简单的批处理问题。然而,大多数机器学习算法的计算流程都比较复杂,模型的训练过程往往需要多次迭代计算(如梯度下降算法)、有中间数据集需要共享等。MapReduce模型处理这类问题时,额外的调度和初始化开销导致其处理性能偏低。


    为了克服MapReduce在计算性能上的缺陷,不断地有新的并行化计算模型和框架出现,UCBerkeley AMP实验室推出的、目前已成为Apache开源项目的Spark[12]系统是目前最有影响力的大数据处理平台之一。Spark使用基于内存计算的并行化计算模型RDD(resilientdistributed dataset)[12],提供了一个强大的分布式内存并行计算引擎,实现了优异的计算性能,同时还保持与Hadoop平台在底层分布式数据存储上的兼容性。在Spark执行引擎上,AMP实验室实现了很多机器学习算法,并逐步整理成Spark下的一个机器学习算法库项目MLlib。MLlib目前也包含一些矩阵操作,并希望基于矩阵的表示设计开发一些统计包和机器学习算法库。为了加速上层计算,MLlib底层通过Breeze使用了BLAS(basiclinear algebra subprogram)单机的矩阵函数库。BLAS是很多更高层的数学函数库和数学编程语言(如LAPACK和MATLAB等)的基本构成单元。BLAS和LAPACK是当下普遍使用的线性代数函数库,主要定义了一些线性代数中常用的运算操作和方程求解、矩阵分解的函数。此外,基于MLlib的工作基础,UCBerkeley还计划研发MLBase[9]项目,该项目增加了机器学习模型自动选择和参数自动优化等功能,提供了以目标为导向的高层机器学习方法接口。


    提供机器学习算法库在一定程度上减轻了程序员进行机器学习算法设计的负担。但即使如此,程序员编写程序时仍然需要熟悉具体的并行编程计算模型和平台,而且由于实际数据分析应用的需求不同,很多时候工具包所提供的通用算法在学习精度和计算性能上可能不能满足需求,需要程序员定制和改进某个并行化机器学习算法或者开发新的算法,这对普通数据分析程序员仍然是很大的挑战。


    5.2 结合传统数据分析平台的大数据机器学习系统


    虽然有了基于大数据处理平台的机器学习算法设计方法,能够较好地解决一体化的大数据存储、计算以及并行化算法设计问题,但仅有机器学习系统仍然不能很好地解决各个平台对终端用户存在的可编程性和易用性不够的问题。为此,还需要进一步研究解决这些问题。


    从可编程性和易用性角度来说,对于行业数据分析师,最熟悉使用的分析语言和环境通常是R、Python、MATLAB等系统。R是目前在数据分析应用领域最广为使用的数据分析、统计计算及制图的开源软件系统,提供了大量的专业模块和实用工具。为了尽可能缩小R语言环境与现有大数据平台间的鸿沟,工业界和研究界已经尝试在R中利用分布式并行计算引擎来处理大数据。最早的工作和系统RHadoop,是由RevolutionAnalytics发起的一个开源项目,其目标是将统计语言R与Hadoop结合起来,目前该项目包括3个R package(包),分别为支持用R语言编写MapReduce应用的rmr、用于R语言访问HDFS的rhdfs以及用于R语言访问HBase的rhbase。其中,Hadoop主要用来存储和处理底层的海量数据,用R语言替代Java语言完成MapReduce算法的设计实现。


    类似地,UC Berkeley AMP实验室在2014年1月也推出了一个称为SparkR的项目。SparkR也是作为一个R的扩展包,为R用户提供一个轻量级的、在R环境里使用SparkRDD API编写程序的接口。它允许用户在R的shell环境里交互式地向Spark集群提交运行作业。


    然而,目前的RHadoop和SparkR都还存在一个同样的问题:仍要求用户熟悉MapReduce或SparkRDD的编程框架和程序结构,然后将自己的MapReduce或Spark程序实现到基于R的编程接口上,这和在Hadoop或Spark上写应用程序没有太大的区别,只是编程接口用R语言封装了一下。此外,这些工作都是基于单一平台,无法解决跨平台统一大数据机器学习算法设计的问题。


    5.3 基于特定平台的大数据机器学习系统


    为了克服前述做法的缺陷,近年来,学术界和业界开始尝试总结机器学习算法设计的共同特性,结合大规模学习时所需要考虑的底层分布式数据存储和并行化计算等系统问题,专门研究能同时兼顾并支持大数据机器学习和大数据分布并行处理的一体化大数据机器学习系统。


    在国内外的机器学习和大数据技术方面的会议中,已经频繁出现大数据机器学习系统相关的研究工作,如SparkMLlib、IBM的SystemML、Apache Flink、GraphLab、Parameter Server、Petuum等;此外,腾讯、百度等国内著名互联网企业也推出了不同的面向大数据的分布式机器学习系统,如腾讯的Peacock和Mariana大规模机器学习系统、百度的ELF和百度机器学习云平台BML。


    (1)Spark MLlib


    MLLib与Spark环境整合后可完整解决大数据的分布式存储、并行化计算以及上层的机器学习算法设计和使用问题,因此,可将其视为一个基本的机器学习系统。目前其已经向上层提供多种优化方法、分类算法、回归算法、推荐算法、聚类算法。但其算法数目和接口有限,难以完全满足用户各种各样的需求,且作为一个算法库,用户难以对内部算法进行深层定制优化。因此,其在灵活性方面仍然存在不足。


    (2)SystemML


    SystemML[14,15]是由IBMWaston Research Center 和IBM Almaden Research Center联合研发的一款大数据学习系统。对用户提供了一个类似于R语言的高层声明式语言,基于这种语言编写的程序可以被自动编译转化为MapReduce作业在Hadoop集群上运行。这种高层语言提供了大量的监督和非监督的机器学习算法所需要的线性代数操作算子,包括高层算子HOP(high-leveloperator)和底层算子LOP(low-level operator)。SystemML最大的优势是其具有较好的可编程性和易用性,用户不需要具备任何分布式系统的概念或编程经验,即可利用其写出可扩展的机器学习算法;其最大的缺点在于底层计算平台单一,只采用了MapReduce作为底层分布式执行平台,而底层的MapReduce作业本身执行性能并不高,近年来涌现出的高效分布式计算框架如Spark、Flink等,在众多性能指标上远远高于MapReduce。


    (3)Apache Flink


    Apache Flink[19]是由欧洲的多名研究者和多家资助单位(如EIT1ICT Labs、DFG2、IBM、Oracle、HP等)联合研发的一款开源的并行化数据分析软件栈,项目早期的名称是Stratosphere。经过一段时间的发展,目前已经成为Apache开源项目。Flink同样意识到,数据分析人员在分布式系统上编写大数据分析算法时,需要有大量的精力耗费在分布式程序调试以及底层调优上。为了使数据分析人员能够在无需顾及各种并行化优化问题的情况下就可以进行深度数据分析,Flink提供了一款数据分析栈式软件。它向用户提供了一种专用的脚本式语言MeteorScript,并且会自动将基于该语言开发的程序转换到底层的分布式计算平台Nephele上[20]。由于其专用性语言不够普及,目前系统对语言接口又做了更多的扩充,支持Java、Scala等语言。Flink项目的优势在于其从上到下提供了一整套完整的栈式解决方案,试图为用户提供易于使用的数据分析系统,同时通过一些编译优化手段尽可能地提升程序执行的性能;其缺点在于其底层是专用的单一化计算平台,与目前普遍使用的主流大数据平台Hadoop和Spark尚未能集成使用,且上层的语言接口层也没有包含现在数据分析师广为使用的R、Python等语言接口。


    (4)GraphLab


    GraphLab[16]是CMU开发的一个以顶点为计算单元的大规模图处理系统,是一个基于图模型抽象的机器学习系统。设计初衷主要是解决具有以下特点的机器学习问题:有局部依赖的稀疏数据集、迭代可收敛、异步执行。为了实现这个目标,GraphLab把数据之间的依赖关系抽象成Graph结构,以顶点为计算单元,将算法的执行过程抽象成每个顶点上的GAS(gather、apply、scatter)过程,其并行的核心思想是多个顶点同时执行。GraphLab的优点是能够高效地处理大规模图算法问题或者可归结为图问题的机器学习和数据挖掘算法问题;其缺点在于提供的接口细节比较复杂,对于普通的数据分析程序员而言,有较大的使用难度。


    (5)ParameterServer与Petuum


    很多机器学习算法常常要解决学习训练过程中模型参数的高效存储与更新问题。为了有效应对和满足大数据场景下这类机器学习算法的需要,研究者提出了一种称为ParameterServer的框架[17],提供了一个分布式全局模型参数存储和访问接口,模型参数存储在多台服务器(server)中,工作节点(worker)可以通过网络访问API方便地读取全局参数。


    Li Mu等人开发了一套基于ParameterServer框架的分布式机器学习系统[17],该系统由一个服务器组(server group)和多个工作组(worker group)构成。其中,服务器组中包括一个服务器管理(servermanager)节点和多个服务器节点。每个服务器节点存储部分全局共享参数;服务器管理节点用来存储服务器节点的元信息,并通过心跳机制管理所有服务器。在该系统中,每个工作组包含一个任务调度器(taskscheduler)和多个工作节点,工作节点只与服务器节点通信获取全局参数以及推送局部更新,不同的工作组可以同时运行不同的应用。ParameterServer的优点是为大规模机器学习提供了非常灵活的模型参数调优和控制机制;缺点是缺少对大规模机器学习时的数据及编程计算模型的高层抽象,使用较为繁琐,通常比较适合于机器学习算法研究者或者需要通过调整参数深度优化机器学习算法的数据分析程序员使用。


    国际著名的机器学习专家、美国卡耐基梅隆大学机器学习系EricXing教授是大数据机器学习系统的倡导者。他认为,传统的机器学习研究过于简化机器学习算法本身的问题以及大规模数据机器学习存在的系统问题[21]。由于大规模机器学习存在很多新的挑战,近几年来主要致力于大数据机器学习系统的研究,并领导其SAILING实验室研究实现了大数据学习系统Petuum[18,21]。Petuum也是一个基于Parameter Server框架的系统,关键组件包括ParameterServer和调度器。Petuum的Parameter Server中使用SSP(stale synchronous parallel)一致性模型,允许计算速度慢的节点从本机缓存中读取陈旧的参数值,以此大大节省网络开销和网络等待时间,使得慢机器的大部分时间用在计算而不是等待上。Petuum在使用上需要算法设计者对分布式系统概念和系统有一定了解,其易用性仍有一定的限制,且其底层数据存储和并行计算框架与上层的学习算法层以紧耦合的方式全部自己实现,系统实现复杂性和代价较大。


    (6)腾讯Peacock与Mariana深度学习平台


    Peacock[3]是腾讯公司研发的一个大规模LDA主题模型训练系统。该系统通过并行计算可对10亿×1亿级别的大规模矩阵进行分解,从而从海量文档样本数据中学习10万~100万量级的隐含语义。为了完成大规模处理,Peacock基于吉布斯采样的LDA训练算法进行了并行化设计,并设计实现了一个完整的具有大规模样本数据处理能力的训练系统。Peacock已广泛应用在腾讯的文本语义理解、QQ群推荐、用户商业兴趣挖掘、相似用户扩展、广告点击率转化率预估等多个业务数据中,是一个专为LDA并行化计算而定制的大规模训练系统,不是一个通用化的大数据机器学习系统。


    为了提供更为广泛的大规模并行化机器学习处理能力,腾讯研究构建了一个称为Mariana的深度学习平台[22],该平台由3套大规模深度学习系统构成,包括基于多GPU的深度神经网络并行计算系统MarianaDNN、基于多GPU的深度卷积神经网络并行计算系统Mariana CNN以及基于CPU集群的深度神经网络并行计算系统Mariana Cluster。Mariana可提供数据并行和模型并行计算,基于GPU和CPU集群提升模型规模,加速训练性能。其中,MarianaDNN在腾讯内部用于微信语音识别声学模型训练,可训练超过1万小时的语音数据、超过40亿的数据样本以及超过5 000万的参数,相对于单GPU而言,6GPU可实现4.6倍的加速比;而MarianaCNN用于微信图像识别,可训练2 000个以上的分类、300万以上的数据样本以及超过6 000万的参数,相对于单GPU而言,4GPU可实现2.5倍的加速比,在图文类效果广告点击率提升方面也取得初步应用;MarianaCluster实现了一个基于Parameter Server模型的大规模通用化机器学习和训练系统,主要用于进行大规模广告并行化训练,完成广告点击率预估模型训练和广告点击性能优化。


    (7)百度ELF与百度机器学习云平台BML


    百度公司研发了一个大规模分布式机器学习框架和系统ELF(essential learningframework)[23]。ELF是一个基于Parameter Server模型的通用化大规模机器学习系统,可允许用户方便快速地设计实现大数据机器学习算法,在系统设计上吸收了Hadoop、Spark和MPI等大数据平台的优点,用类似于Spark的全内存DAG计算引擎,可基于数据流的编程模式,通过高度抽象的编程接口,让用户方便地完成各种机器学习算法的并行化设计和快速计算。


    在ELF的基础上,百度进一步开发了一个机器学习云平台BML(Baidumachine learning),该平台支持丰富的机器学习算法,可支持20多种大规模并行机器学习算法,提供包括数据预处理算法、分类算法、聚类算法、主题模型、推荐算法、深度学习、序列模型、在线学习在内的各种机器学习算法支持,并通过分布和并行化计算实现优异的计算性能。BML在百度内部的业务系统中经历了线上大规模使用部署考验,承载公司内各种重要的在线业务线应用,包括凤巢广告CTR预估、搜索LTR排名等。


    6 跨平台统一大数据机器学习系统Octopus的研究设计


    6.1 Octopus的基本设计思想


    上述绝大多数大数据机器学习方法和系统都是基于特定平台构建的,难以集成和兼容现有和未来出现的多种大数据处理引擎和平台。现实世界中的各种大数据分析处理应用通常会有不同的分析处理需求和特征,例如,有些可能是极大规模数据的离线分析处理,有些可能是要求高实时性响应的联机分析处理,这些不同的分析需求要求底层有不同特性的大数据处理平台支持;此外,随着大数据处理技术和平台的不断发展,目前和未来不断有新的大数据编程方法和处理平台出现。因此,企业内需要将其原有平台上已经开发好的机器学习和数据分析算法,改写和移植到新的平台上,这将给企业带来很大的重复性劳动和开发负担。


    为此,一个理想的大数据机器学习系统还需要拥有能够支持现有和未来出现的不同大数据处理平台的能力,实现跨平台大数据机器学习和数据分析算法的设计能力,达到“WriteOnce,Run Anywhere”的跨平台算法设计和运行目标。


    针对大数据机器学习系统需要重点研究解决的计算性能以及可编程性与易用性问题,并考虑上述的跨平台需求特性,南京大学PASA大数据实验室正在研究设计一个跨平台大数据机器学习的统一编程模型和系统平台。该系统基于矩阵编程计算模型,结合R编程语言和编程方法,设计提供一个跨平台的统一编程计算框架,最终研究实现一个跨平台大数据机器学习系统Octopus(大章鱼)。


    分析发现,机器学习和数据挖掘算法中的主体计算大多可表示为矩阵或向量运算,这通常也是算法中最耗时的部分。矩阵操作也是机器学习研究者用来描述问题和算法最为自然和常用的方式,基于矩阵可以表示和刻画大多数实际应用中涉及的机器学习和数据分析算法问题。基于这样的事实,为了给大数据机器学习和数据分析提供一种自然和统一的编程计算模型和编程方法,类似于MapReduce中基于数据记录列表的抽象编程计算模型,将研究建立一种基于矩阵模型的抽象编程计算模型,以此作为大数据机器学习和数据分析算法设计的统一编程计算模型和接口。


    Octopus是一个高层的大数据机器学习和数据分析统一编程模型和系统平台,允许数据分析和大数据应用开发程序员轻松地设计和开发各种大数据机器学习和数据分析算法与应用程序。通过提供基于矩阵的统一编程计算模型,使用基于R语言的数据分析程序设计语言和程序设计方法,允许用户方便地编写和运行常规的R语言程序,而无需了解底层大数据平台的分布和并行化编程计算知识,使底层的分布并行计算框架和大数据平台对用户完全透明;底层平台上,通过良好的系统层抽象,可以快速集成Hadoop和Spark等通用大数据并行计算框架和系统平台,而且程序仅需编写一次,不需要有任何修改即可根据需要选择并平滑运行于任何一个平台,从而实现“WriteOnce,Run Anywhere”的跨平台特性。


    6.2 基于矩阵模型的统一编程和计算模型


    分析发现,一方面,大数据机器学习算法中的主体计算很多可表示为矩阵或向量运算(向量可视为退化为1维的特殊矩阵),通常这也是算法中最耗时的部分;另一方面,矩阵操作通常也是机器学习研究者用来描述问题和算法最为自然和常用的方式。例如,训练样本特征值的归一化往往是通过对矩阵行或列求和后再除以该求和的值;KNN算法(最近邻算法)的核心操作是矩阵相减和矩阵元素求平方操作;PCA(主成分分析)算法可以通过矩阵相乘或矩阵的SVD分解进行求解;最小二乘法的解析法涉及矩阵的相乘和求逆操作;互联网企业推荐系统中,相似性分析的核心是高达数亿用户乘以数亿物品的矩阵分解计算问题;而腾讯Peacock主题模型训练系统则涉及数十亿文档乘以数百万词汇的巨大矩阵计算问题;在信息检索领域,著名的PageRank算法也可以表示成矩阵的迭代相乘;社会网络中可以通过计算朋友关系矩阵的幂,从而进行基于共同好友的推荐;电子商务中可以通过对用户对商品的购买记录进行矩阵分解,得到商品和用户的聚类并分析其潜在语义主题模型。很多其他的数据分析和大数据科学计算问题也常常要基于矩阵模型完成问题的描述和分析计算过程。因此,基于矩阵可以表示和刻画大多数实际应用中涉及的机器学习和数据分析算法问题。


    基于这样的事实,为了给大数据机器学习提供一种统一的编程计算模型以及编程方法,类似于MapReduce采用了基于数据记录列表的抽象编程计算模型,研究建立了一种基于矩阵模型的抽象编程计算模型,以此作为大数据机器学习算法设计的统一编程计算模型和接口。


    这种抽象矩阵编程计算模型将成为统一机器学习算法设计和编程计算的核心,它具有如下3个重要作用。


    • 基于机器学习和数据挖掘算法中主体计算大多可表示为矩阵或向量运算的事实,为数据分析用户提供一种自然和统一化的大数据机器学习和数据分析算法建模和表示方法。


    • 作为一个隔离和解耦上层数据分析算法与下层各种大数据平台的中间接口,实现底层平台对上层程序员及其程序的透明性,以此提高统一平台对上层程序员的易用性。


    • 为实现统一大数据机器学习系统开放式集成框架提供一种接口标准。针对任意一个拟集成使用的底层大数据平台,只要遵照所建立的统一矩阵编程接口,实现一个完成该接口程序计算任务的适配器或插件,即可以博采众长和兼容并蓄的开放式框架,连接和集成使用各种主流的大数据平台,使得上层的机器学习算法具有处理大规模数据的能力。


    6.3 Octopus软件框架和系统设计


    如图5所示,Octopus是一种基于良好的系统抽象的层次化系统。其最底层是分布式文件系统,如HDFS和分布式内存文件系统Tachyon,它们被用来存储和索引大规模的矩阵数据。在存储层之上,Octopus可以用多种大数据计算引擎和单机R引擎来执行不同规模的矩阵操作。Octopus提供给用户的编程API是基于R语言的高层矩阵计算接口,基于该接口,用户不需要了解分布和并行计算系统知识,就可以很容易地设计实现大数据机器学习和数据分析算法或应用。


    图5 Octopus(大章鱼)软件系统框架


    6.4 Octopus系统的技术特征


    Octopus具有以下技术特征。


    (1)易于使用的高层编程API


    Octopus提供给用户一组基于R语言的大规模矩阵运算API,称为OctMatrix。这些API提供各种大规模分布式矩阵计算操作,其形式上与标准R语言中的单机矩阵/向量操作API很相似。程序员可基于这些矩阵运算接口,用R语言快速编写各种机器学习和数据分析算法。除了最常用的大规模矩阵乘法,Octopus也提供了其他各种矩阵操作,如矩阵与矩阵的加法和减法、矩阵元素级别的乘法和除法、子矩阵运算等。这些API定义了高层矩阵操作符(operator)和操作(operation),因此熟悉R编程语言和编程方法的用户可以很容易地用其编程实现大数据机器学习和数据分析算法,且不需要了解底层大数据处理平台及其并行化编程方法。


    (2)一次编写,随处运行


    用Octopus编写完成的算法和程序,可以运行在不同的底层大数据计算引擎和平台上。用OctMatrixAPI实现的机器学习和数据分析算法,用户可以在单机R上用小数据进行测试,不需要修改代码就可以用大数据在底层的大数据计算引擎和平台上执行,只需要简单切换底层的大数据计算引擎如Spark、HadoopMapReduce或MPI即可。此外,Octopus通过提供通用接口可实现对底层不同文件系统的集成,并实现基于不同文件系统的大规模矩阵数据存储访问接口,包括HDFS、Tachyon以及基于单机本地的文件系统。


    (3)无缝融合R生态系统


    Octopus可运行于标准的R环境下,实现与R环境的无缝融合,因此可以利用R生态系统中的丰富资源,比如第三方R包。除了传统的矩阵/向量函数,Octopus也在OctMatrix中提供apply函数,传入apply函数的参数可以是任意的R函数,包括UDF(userdefined


    function)。当OctMatrix运行在分布式环境中时,函数参数可以在集群中被应用于OctMatrix的每个元素、每行或每列,函数参数在集群的每个节点并行执行。


    6.5 Octopus中分布式矩阵计算优化


    大规模数据通常会导致整个数据分析计算时间过长,难以在可接受的时间内完成分析任务,为此需要借助于分布式和并行化计算技术实现大规模数据分析计算时的加速和性能提升,以提高数据分析的响应时间。由于采用大规模矩阵作为大数据机器学习和数据分析的编程计算接口,在底层大数据平台上的大规模矩阵运算的性能将直接关系到上层算法执行的性能。为此,大规模矩阵计算性能优化是需要重点研究解决的关键技术问题之一。


    在所有矩阵计算中,矩阵乘法是使用最多且最为耗时的计算,许多矩阵的因子分解操作也都可以由矩阵乘法近似实现。因此,矩阵乘法的优化是整个矩阵计算优化中最为重要的问题。两个大规模矩阵进行分布和并行化相乘运算时,一个重要问题是如何合理划分矩阵数据,以便利用多个计算节点分布和并行化地完成计算。不同大小和形状的矩阵,其划分方法可能会造成计算性能上的差异,例如,方形矩阵与长条形矩阵需要考虑不同的划分方法,而一个大矩阵与一个小矩阵相乘时,当小矩阵可存放在单节点的内存中时,对小矩阵可不进行划分,而改用广播方式将小矩阵发送到每个计算节点上,以此完成两个矩阵的运算,这样可以避免大量的网络数据传输。因此,需要根据矩阵的大小和形状,合理划分矩阵,以便以最小的计算代价完成乘法运算。


    除了不同形状和大小的矩阵划分策略优化外,被划分后落到每个计算节点上分布处理的子矩阵计算也需要进行优化。矩阵乘法是典型的计算密集型任务并且存在许多单机的高性能的线性代数库,如BLAS、Lapack和MKL。由于在JVM中执行线性代数计算性能较低,Octopus将计算密集的矩阵计算从JVM中通过JNILoader装载到本地线性代数库(如BLAS、Lapack)中执行,这样可显著加速子矩阵的计算性能。


    6.6 Octopus系统的编程使用


    图6显示了Octopus系统的使用方式。Octopus使用标准的R编程和开发环境,允许用户使用R语言,并基于大规模矩阵计算模型编写各种机器学习和数据分析算法。系统可实现与Spark、HadoopMapReduce和MPI的集成,底层可无缝切换运行于不同的大数据平台上。基于Octopus所设计实现的算法或程序代码,无需修改即可平滑切换并运行于上述任意一个底层大数据计算引擎和平台上,只要简单地修改程序代码中的计算引擎类型选择参数即可。


    图6 基于R语言和Octopus的跨平台统一大数据机器学习系统


    基于R语言和初步研究设计的Octopus,设计实现了多个典型的机器学习算法,包括LR、SVM、聚类、深度学习等,以验证研究设计的原型系统的有效性。


    图7是基于常规R语言所实现的LinearRegression算法与基于Octopus所实现的Linear Regression算法的示例代码。由代码比较可见,两者在形式上非常接近,仅在有关矩阵运算调用的API上有微小差异。


    图7 基于Octopus和常规R语言的Linear Regresssion算法代码比较


    由图7可见,在R语言中基于矩阵进行机器学习的算法设计较为简洁和方便,LinearRegression代码仅仅需要20行左右即可实现完整的算法。


    7 结束语


    近几年来,大数据技术的发展推动了大数据机器学习和智能计算技术的发展热潮。大数据机器学习不仅是一个单纯的机器学习问题,更是一个大规模的复杂系统问题;是一个同时涉及机器学习和大数据处理两个领域的交叉研究课题。要实现有效的大数据机器学习处理,需要构建一个能同时支持机器学习算法设计和大规模数据处理的一体化大数据机器学习系统。


    本文介绍了国内外大数据机器学习系统的基本概念、基本研究问题、技术特征、系统分类以及典型系统。在此基础上,进一步介绍了研究设计的跨平台统一大数据机器学习原型系统Octopus。基于大多数机器学习和数据分析算法可表示为矩阵运算的事实,Octopus采用矩阵模型作为大数据机器学习和数据分析抽象编程计算模型,提供了一个基于矩阵的高层编程模型和接口,并基于R语言和开发环境向用户提供了一个矩阵运算R扩展包,为用户提供可扩展性好且易于使用的矩阵运算操作,允许用户基于所提供的大规模矩阵运算操作,快速设计实现各种机器学习和数据分析算法。Octopus能在底层无缝地集成和使用不同的大数据计算引擎和平台,完成大数据机器学习算法的分布和并行化执行,并支持单节点R环境以及Spark、HadoopMapReduce和MPI等多种大数据计算引擎和平台,并能实现这些平台间的无缝切换,实现“WriteOnce,Run Anywhere”的跨平台特征。就我们所知,Octopus是目前世界上第一个具有跨平台特性,同时还能实现底层大数据平台对上层程序员透明化的大数据机器学习系统研究工作。


    正如CCF大数据专家委员会发布的2014年《中国大数据技术与产业发展白皮书》中所说,目前大数据机器学习系统尚处在一个初期的探索和研究阶段,尽管国内外已经有不少研究开发工作,但研究设计高效、可扩展且易于使用的大数据机器学习系统仍面临诸多的技术挑战。因此,大数据机器学习系统将是目前和未来几年的热点研究领域,工业界和学术界都将持续地投入相当多的资源进行深入的研究开发工作。


    同样,虽然初步研究设计了跨平台大数据机器学习系统Octopus,但其中仍然有大量需要进一步深入研究解决和完善的技术问题,例如大规模矩阵运算的深度优化、稀疏矩阵的存储管理和计算优化、异构大数据处理平台环境下不同矩阵计算时的平台自动选择、基于矩阵计算表达式和计算流图的计算优化等。此外,仅有矩阵计算模型还不能满足所有的大数据机器学习计算需求,还需要考虑其他计算模型,如图模型和参数模型(parameterserver)的混合使用,形成一个能满足各种大数据机器学习算法设计需求的综合系统。


    致谢


    本文工作受到江苏省科技支撑计划基金项目(No.BE2014131)和江苏省软件技术产业协同创新中心的资助。






    该PPT为电子科技大学大数据研究中心计算机科学与工程学院 徐增林老师所写。PPT概述:

    大数据改变未来战争

    • 美国大数据研究和发展计划、欧盟Horizon 2020计划都把大数据提到了国家安全战略层面
    • 数字主权是继海、陆、空、天四空间之后另一个大国博弈的空间
    • 基于海量数据分析决策的“近传感器计算”将成为未来战争的典型形态

    大数据摧毁暴力恐怖

    • 阿富汗反恐战争中针对每股恐怖分子的全方位情报侦监系统每天产生数据量平均达到53T
    • 美国国家安全局局长亚历山大在众议院特设情报委员会听证会时指出,通过“棱镜”等监视项目所获得的情报数据及相应分析,美国政府至少防止和挫败了50起恐怖袭击事件

    大数据维护公共安全

    • 通过大数据采集分析,监测异常行为,发现和制止不法行为
    • 通过大数据分析,提高犯罪行为实施前的预防能力和实施后的出警效率
    • 通过大数据分析,提高刑侦队伍的破案率大数

    大数据改善民生

    大数据辅助健康管理

    • 个人基因测序数据可以对已患疾病进行针对性治疗,对可能疾患进行提前预防
    • 非干预穿戴设备通过实时采集脉搏、血压、体表导电率、压力等等指标对预警突发疾病、实时监控个体健康情况,为残疾人、老年人、婴幼儿和特定疾病患者提供实时的个性化服务
    • 通过对诊疗过程数据的分析,可以为初级医院疑难病例的治疗提供智能决策辅助、发现患者骗保行为、监测医院、诊室甚至个别医生不正常的过度医疗和用药行为

    大数据实现个性教育

    • 加拿大Student Success Systems 基于学生个体数据分析给出发展状况评估、学业成长预测和个性化引导方案
    • 美国DreamboxLearning 和MyLab根据不同学生在线学习的情况,设计个性化自适应的学习方案
    • 大数据最终帮助形成在定量化基础上的教学引导和教学管理

    大数据分析面临的挑战

    1、数据量大且复杂,而分类数据太少,如何充分利用对未分类数据的质量分析来提高分类算法性能?

    2、源异构数据语义丰富,如何构建融合多源数据的泛化模型? 或发现多源数据间的关联关系?

    3、复杂数据对象存在多个方面,如何通过数据分析来刻画多个方面之间的相互关系?

    大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据 大数据


    展开全文
  • 1 大数据机器学习系统研究背景 近年来,大数据技术在全球发展迅猛,掀起了巨大的研究热潮,引起全球业界、学术界和各国政府的高度关注。随着计算机和信息技术的迅猛发展和普及应用,行业应用数据呈爆炸性增长。...

     

     

    1 大数据机器学习系统研究背景

     

    近年来,大数据技术在全球发展迅猛,掀起了巨大的研究热潮,引起全球业界、学术界和各国政府的高度关注。随着计算机和信息技术的迅猛发展和普及应用,行业应用数据呈爆炸性增长。动辄达到数百TB甚至数PB规模的行业/企业大数据已经远远超出了传统计算技术和信息系统的处理能力。与此同时,大数据往往隐含着很多在小数据量时不具备的深度知识和价值,大数据智能化分析挖掘将为行业/企业带来巨大的商业价值,实现多种高附加值的增值服务,从而提升行业/企业生产管理决策水平和经济效益。

     

    大数据分析挖掘处理主要分为简单分析和智能化复杂分析两大类。简单分析主要采用类似于传统数据库OLAP的处理技术和方法,用SQL完成各种常规的查询统计分析;而大数据的深度价值仅通过简单分析是难以发现的,通常需要使用基于机器学习和数据挖掘的智能化复杂分析才能实现。

     

    机器学习和数据分析是将大数据转换成有用知识的关键技术,并且有研究表明,在很多情况下,处理的数据规模越大,机器学习模型的效果会越好[1~3]。目前,国内外业界和学术界专家普遍认同的观点是,越来越多的海量数据资源加上越来越强大的计算能力,已经成为推动大数据时代人工智能技术和应用发展的动力,将基于大数据的机器学习和人工智能推上了新一轮发展浪潮,让大数据机器学习(bigdata machine learning)成为全球业界和学术界高度关注的热点研究领域。随着大数据时代的来临,Google、Facebook、微软、百度、腾讯等国内外著名企业均纷纷成立专门的基于大数据的机器学习与人工智能研发机构,深入系统地研究基于大数据的机器学习和智能化计算技术。

     

    由于大数据机器学习和数据挖掘等智能计算技术在大数据智能化分析处理应用中具有极其重要的作用,在2014年12月中国计算机学会(CCF)大数据专家委员会上百位大数据相关领域学者和技术专家投票推选出的“2015年大数据十大热点技术与发展趋势”中,结合机器学习等智能计算技术的大数据分析技术被推选为大数据领域第一大研究热点和发展趋势[4]。

     

    由于大数据机器学习在具体实现时通常需要使用分布式和并行化大数据处理技术方法,也有人将大数据机器学习称为“分布式机器学习”(distributedmachine learning)或“大规模机器学习”(large-scale machine learning)。

     

    大数据机器学习,不仅是机器学习和算法设计问题,还是一个大规模系统问题。它既不是单纯的机器学习,也不是单纯的大数据处理技术所能解决的问题,而是一个同时涉及机器学习和大数据处理两个主要方面的交叉性研究课题。一方面,它仍然需要继续关注机器学习的方法和算法本身,即需要继续研究新的或改进的学习模型和学习方法,以不断提升分析预测结果的准确性;与此同时,由于数据规模巨大,大数据机器学习会使几乎所有的传统串行化机器学习算法难以在可接受的时间内完成计算,从而使得算法在实际应用场景中失效。因此,大数据机器学习在关注机器学习方法和算法研究的同时,还要关注如何结合分布式和并行化的大数据处理技术,以便在可接受的时间内完成计算。为了能有效完成大数据机器学习过程,需要研究并构建兼具机器学习和大规模分布并行计算处理能力的一体化系统。

     

    因此,领域内出现了“大数据机器学习系统”或者“分布式学习系统”的概念,并进行了诸多大数据机器学习系统的研究与开发工作。

     

    2 大数据机器学习系统的技术特征

     

    参考文献[5,6]专门介绍了大数据机器学习系统的技术特征。

     

    如图1所示,一个大数据机器学习系统会同时涉及机器学习和大数据处理两方面的诸多复杂技术问题,包括机器学习方面的模型、训练、精度问题以及大数据处理方面的分布式存储、并行化计算、网络通信、局部性计算、任务调度、容错等诸多因素。这些因素互相影响,交织在一起,大大增加了系统设计的复杂性。因此,大数据机器学习已经不仅仅是一个算法研究问题,而是需要针对大数据集,考虑从底层的大数据分布存储到中层的大数据并行化计算,再到上层的机器学习算法,设计一种一体化的支撑系统,形成易于为数据分析程序员和机器学习研究者使用的、完整的大数据机器学习系统。

     

    图1 大数据机器学习系统所涉及的复杂因素[5]

     

    一个理想的大数据机器学习系统通常需要具备以下几个方面的技术要素和特征[5~7]。

     

    应当从整个学习的生命周期/流水线来考虑,包括训练数据和特征的提取、并行学习算法的设计、训练模型和参数的查询管理、分布式训练计算过程,都应在一个一体化的学习系统平台上完成。

     

    应提供多种并行训练模式,支持不同的机器学习模型和算法。

     

    需要提供对底层系统的抽象,以实现对底层通用大数据处理引擎的支持,并提供数据科学中常用的编程语言接口(API)。

     

    应该拥有开放和丰富的生态、广泛的应用和快速的进化能力。

     

    在上述技术特征中,一个非常重要的思路是,要通过系统抽象来降低系统设计的复杂性。如图2所示,一个设计良好的大数据机器学习系统,应当通过定义特定的机器学习编程计算和系统抽象接口,将上层机器学习和底层分布式系统解耦开来,将机器学习实现在现有的大数据计算平台之上,而不需要考虑底层系统层面的因素,以此实现底层大数据处理平台对上层用户的透明化,让上层用户从诸多底层的分布和并行化大数据编程计算细节中解放出来,以便他们致力于上层的机器学习模型和算法的设计实现。通过编程计算和系统抽象层API,向上提供各种机器学习编程计算接口以及学习模型和训练数据的表示,向下由底层分布式系统负责处理并提供高效的分布和并行化计算实现。

     

    图2 大数据机器学习系统抽象

     

    3 大数据机器学习系统的主要研究问题

     

    知名的Apache Flink大数据分析系统研究者在2014年VLDB会议主题报告和论文中[8],从数据分析的复杂程度和数据规模的维度,考察了现有的相关研究工作和系统,如图3所示。现有的系统要么主要用于小规模复杂分析,要么主要用于大规模的简单统计分析,缺少既具有复杂数据分析能力又具有强大的大数据处理能力的大数据分析系统;文章作者甚至认为,对于行业大数据分析人员而言,现有的工具还处于“石器时代”[8]。

     

    图3 研究者Apache Flink提出的分析维度和研究现状[8]

     

    与此同时,著名的UC Berkeley AMPLab在研究基于Spark的机器学习库MLBase[9]时,从计算性能和系统易用性两个重要维度,考察了现有的大数据机器学习研究工作和系统,如图4所示。面向机器学习和数据分析时,目前已有的工作和系统,绝大多数都未能同时具备大规模分析处理能力和良好的系统易用性。

     

    图4 Spark系统研究者提出的分析维度和研究现状[9]

     

    因此,大数据机器学习除了需要继续关注和研究传统意义上的学习方法和算法问题,以不断提高学习精度外,还需要重点关注和研究解决大数据场景下所特有的两大技术问题:

     

    一是大数据复杂分析时的计算性能问题;

    二是大数据机器学习系统的可编程性和易用性问题。

     

    (1)大数据复杂分析时的计算性能问题

     

    在计算性能方面,大规模数据集给很多传统串行的机器学习和数据分析挖掘算法带来很大的挑战,需要研究解决面向大数据机器学习和数据分析的高效计算方法和系统。在数据集较小时,很多复杂度在O(n log n)、O(n2)甚至O(n3)的传统串行化机器学习算法都可以有效工作;但当数据规模增长到极大尺度时,现有的串行化算法将花费难以接受的时间开销,使得算法在实际应用场景中失效,这给业界大量实际的大数据复杂分析应用带来很多新的挑战和问题[10]。正如微软全球副总裁陆奇博士在2012年指出的,“大数据使得现有的大多数机器学习算法失效,面向大数据处理时这些算法都需要重写”。

     

    在大型互联网企业,大规模机器学习算法经常用于处理十亿至千亿级别的样本以及一亿至数十亿数据特征的大规模数据集。例如,Google著名的Seti太空搜索项目需要进行高达千亿样本、十亿特征数据的大规模机器学习,腾讯Peacock主题模型分析系统需要进行高达十亿文档、百万词汇、百万主题的主题模型训练,而仅一个百万词汇乘以百万主题的矩阵,其数据存储量即高达3TB,如果再考虑十亿文档乘以百万主题的矩阵,其数据量更是高达3 PB[3]。如此大量的训练样本,加上机器学习算法本身的复杂性,导致难以在传统的串行化计算平台上、在可接受的时间内完成如此巨大的复杂分析计算任务,因而带来了十分突出的计算性能问题。因此,大数据机器学习算法和系统需要研究解决大规模场景下高效的分布式和并行化算法设计以及计算问题,以保证算法和系统可以在可接受的时间内完成大规模数据的学习和训练。

     

    (2)大数据机器学习系统的可编程性和易用性问题

     

    为了满足急剧增长的大数据处理需求,过去几年来,全球推出了Hadoop[11]和Spark[12]等多种主流大数据处理技术和系统平台。这些主流技术和平台的出现为大数据的处理提供了良好的技术手段和方法。Hadoop的出现使得大数据处理技术和平台从无到有,而基于内存计算的Spark系统的出现使得大数据分析计算从慢到快。然而,现有的大数据处理技术和系统平台都存在很大的易用性问题,难以为普通的程序员掌握和使用,尤其是面向复杂的大规模机器学习和数据分析时,这个问题更为突出。

     

    大数据机器学习和数据分析的并行化程序设计,比传统的串行化算法设计复杂很多、对程序员的技术要求更高。对于普通的数据分析程序员或机器学习研究者来说,在特定的大数据编程模型和平台下进行并行化机器学习和数据分析算法设计,需要掌握很多分布式系统背景知识和并行程序设计技巧,这对他们来说难度较大,经常要把实际工作的大部分时间花费在底层复杂的并行化和分布式编程和调试上,给上层数据分析和算法设计工作带来很大的不便和困难,导致普通程序员与现有的各种大数据处理平台之间存在一个难以逾越的鸿沟[8,9,13~15]。

     

    另一方面,即使对于诸如Google、百度等具有强大技术力量的互联网企业程序员来说,随着多种大数据处理与编程平台的出现以及各种分析应用问题需求的不同,他们也常常需要针对不同平台,重复编写和测试各种并行化机器学习和数据分析算法,这种在多个大数据平台上重复编写和尝试数以百计的机器学习算法的工作负担也很重。正如阿里巴巴集团副总裁、高级研究员章文嵩博士在中国计算机学会第一届大数据学术会议上所指出的,“淘宝内部需要使用的并行化机器学习算法很多,随着新型的并行化计算框架的逐步出现,需要将其逐个实现到MPI、MapReduce、Spark等并行计算框架上;如果后面出现更先进的框架,又面临着将这些算法重新实现一遍的负担”。

     

    针对大数据的机器学习和数据分析,现有的大数据处理技术和平台存在很大的可编程性和易用性问题,导致普通程序员和常规的程序设计方法与现有的大数据分析处理编程技术之间存在着一个很大的鸿沟。正如CCF大数据专家委员会《2015年大数据发展趋势预测报告》指出的那样,“由于现有的大数据平台易用性差,而垂直应用行业的数据分析又涉及领域专家知识和领域建模,目前在大数据行业分析应用与通用的大数据技术之间存在很大的鸿沟,缺少相互的交叉融合”[4]。

     

    因此,大数据机器学习系统要解决的一个重要问题是,让不易使用的大数据处理技术和平台变得易于使用,要填平普通程序员和常规程序设计方法与现有的大数据处理技术之间的鸿沟,尽可能让普通程序员用常规程序设计方法便能有效完成大数据的复杂分析处理。

     

    根据Google Seti项目研究人员在开发实际的大型机器学习系统上的经验,在面向大数据时,考虑到用户开发效率问题,系统易用性与提高机器学习精度几乎同等重要,有时甚至比精度问题更为重要,“也许过去学术界很少关心设计一个精度稍差、但有更好易用性和系统可靠性的学习算法,但在实际应用中,这会体现出非常重要的价值”。

     

    4 大数据机器学习系统的分类

     

     

    近几年来,随着大数据的来临,基于大数据的机器学习方法和系统成为业界和学术界普遍关注的研究热点。为了提供有效的大数据机器学习和数据分析手段,业界和学术界在尝试多种途径和方法,在不同的并行计算模型和平台下,在实际的数据分析挖掘中得到应用。

     

    较早出现以及现有的一些大数据机器学习算法和系统大多采用较为低层的紧耦合、定制化方法构建。这些算法和系统大都针对特定的应用,选择特定的平台和模型,针对特定的机器学习模型和特定的计算模式,从串行算法和原型到分布并行化算法和原型,自底层向上进行紧耦合和定制化的开发和优化。尽管这可以最大化利用系统资源以达到最佳的性能,但这种低层的紧耦合定制化实现方法,将学习和系统混杂在一起,实现难度大,算法和系统也难以调试和维护[5,6]。

     

    从前述的大数据机器学习系统特征来看,一个设计良好的大数据机器学习系统应当考虑高层的系统层抽象,向上为程序员提供易于使用的高层机器学习算法编程接口,向下基于现有的通用化大数据处理平台提供大规模数据的分布和并行化计算能力。为此,近年来已经开始出现基于各种高层编程计算和系统抽象设计大数据机器学习系统的研究工作。

     

    在高层编程计算和系统抽象上,目前的大数据机器学习系统大致可分为3种主要的编程计算和系统抽象方法,分别是基于矩阵模型的抽象、基于图模型的抽象以及基于参数模型的抽象。

     

    (1)基于矩阵模型的抽象

     

    基于矩阵模型的抽象基于这样一个事实:大多数机器学习和数据分析算法都可以表示为矩阵或向量代数计算,因此可以构建一个基于矩阵计算模型的机器学习系统,允许程序员直接基于矩阵计算快速构建机器学习和数据分析算法。最典型的基于矩阵模型的大数据机器学习系统尚不多见,UCBerkeley AMP Lab推出的Spark MLlib是一个试图基于矩阵计算模型构建上层各种机器学习算法的系统;最近Spark系统提出了一个DataFrame的数据抽象机制,允许基于矩阵和表等数据结构,设计各种机器学习和数据分析算法。此外,国内由南京大学PASA大数据实验室研究开发的“Octopus(大章鱼)”系统是一个以大规模矩阵模型为中心的跨平台大数据机器学习系统。

     

    (2)基于图模型的抽象

     

    虽然矩阵可以表示大多数机器学习和数据分析算法,但对于一些基于图模型的社会网络分析问题,基于矩阵模型进行计算并非最有效的方法(虽然图和矩阵表示具有理论上的等价性)。矩阵模型对于图数据的表达不如图模型,且通常会面临稀疏性的问题。因此,一些社会网络分析类的实际应用需要基于更为高效的图模型的学习和分析方法,为此出现了相应的基于图模型的大数据机器学习系统。最典型的基于图模型的系统是美国卡耐基梅隆大学(CMU)推出的GraphLab系统[16]以及基于Spark构建的GraphX系统。

     

    (3)基于参数模型的抽象

     

    基于矩阵模型和图模型的系统主要是从数据表示模型的角度来构建系统,这两种方法的特点是更接近于实际学习问题中自然化的数据表示和计算模型,因此对于数据分析人员方便快速地构建机器学习和数据分析算法比较自然和直观。但是,大数据机器学习常常还需要涉及大规模模型,例如,近几年发展迅猛的深度神经网络算法,常常需要通过对大量模型参数的调优来提高学习精度,在这种情况下,上述两种方法会缺少灵活性,难以让算法设计者通过控制模型参数进行算法优化。为此,有研究者提出了一种基于模型参数的抽象方法,即把所有机器学习算法抽象为对学习过程中一组模型参数的管理和控制,并提供对大规模场景下大量模型参数的有效管理和访问。目前参数模型最典型的方法是最初由美国卡耐基梅隆大学的LiMu等人提出的、后在很多系统中得到进一步应用的Parameter Server[17,18]。

     

    实际的系统也可能会是一种兼有上述多种类型的混合系统。此外,也有不少系统从并行模式角度来区分,分为数据并行和模型并行两种方式,且一些系统只提供数据并行方式,另一些系统会同时提供数据并行和模型并行两种方式。

     

    5 典型大数据学习方法和系统介绍

     

    5.1 基于特定平台的定制式并行化机器学习算法与算法库

     

    随着Hadoop MapReduce[11]和Spark[12]大数据并行计算与编程平台的出现和成熟应用,Hadoop和Spark已经成为目前大数据分析处理的主流平台。为了解决大规模机器学习问题,有大量的研究工作致力于基于HadoopMapReduce和Spark以及传统的MPI并行计算框架,完成各种并行化机器学习和数据挖掘算法的设计。在诸如TPDS、JPDC、IPDPS、ICPP、ICPADS、IEEEBigData等大数据和分布并行计算领域的知名期刊和国际会议上,这些并行化算法研究工作不胜枚举。由于需要同时顾及上层机器学习算法设计和底层分布并行化大数据处理系统层细节,总体而言,基于上述不同的并行化编程方法和平台进行并行化机器学习算法设计,仍属于一种专业性较强、技术要求较高、过程较为繁琐的工作,难以为缺少分布式和并行计算知识背景的普通程序员使用。

     

    为了让普通数据分析程序员能够直接使用并行化机器学习算法,目前普遍的一种做法是,在不同的并行化计算平台上,由专业的机器学习算法设计者实现并行化机器学习算法,提供一个机器学习和数据挖掘工具包以供一般的数据分析和应用开发程序员直接使用,如Hadoop下的Mahout以及Spark环境下的MLlib。

     

    Mahout的主要任务是设计并提供一些基于MapReduce的可扩展的机器学习领域经典算法库,包括聚类、分类、推荐过滤、频繁项集挖掘等。这些并行化算法都是基于HadoopMapReduce平台完成的,用户可直接调用Mahout算法库实现好的算法。然而,Mahout提供的并行化机器学习算法数量有限,而且作为标准的软件包,其所提供的算法几乎都是标准的,在算法精度和性能上不一定能满足用户的需要。进一步,MapReduce的设计目标是解决数据密集但计算逻辑相对简单的批处理问题。然而,大多数机器学习算法的计算流程都比较复杂,模型的训练过程往往需要多次迭代计算(如梯度下降算法)、有中间数据集需要共享等。MapReduce模型处理这类问题时,额外的调度和初始化开销导致其处理性能偏低。

     

    为了克服MapReduce在计算性能上的缺陷,不断地有新的并行化计算模型和框架出现,UCBerkeley AMP实验室推出的、目前已成为Apache开源项目的Spark[12]系统是目前最有影响力的大数据处理平台之一。Spark使用基于内存计算的并行化计算模型RDD(resilientdistributed dataset)[12],提供了一个强大的分布式内存并行计算引擎,实现了优异的计算性能,同时还保持与Hadoop平台在底层分布式数据存储上的兼容性。在Spark执行引擎上,AMP实验室实现了很多机器学习算法,并逐步整理成Spark下的一个机器学习算法库项目MLlib。MLlib目前也包含一些矩阵操作,并希望基于矩阵的表示设计开发一些统计包和机器学习算法库。为了加速上层计算,MLlib底层通过Breeze使用了BLAS(basiclinear algebra subprogram)单机的矩阵函数库。BLAS是很多更高层的数学函数库和数学编程语言(如LAPACK和MATLAB等)的基本构成单元。BLAS和LAPACK是当下普遍使用的线性代数函数库,主要定义了一些线性代数中常用的运算操作和方程求解、矩阵分解的函数。此外,基于MLlib的工作基础,UCBerkeley还计划研发MLBase[9]项目,该项目增加了机器学习模型自动选择和参数自动优化等功能,提供了以目标为导向的高层机器学习方法接口。

     

    提供机器学习算法库在一定程度上减轻了程序员进行机器学习算法设计的负担。但即使如此,程序员编写程序时仍然需要熟悉具体的并行编程计算模型和平台,而且由于实际数据分析应用的需求不同,很多时候工具包所提供的通用算法在学习精度和计算性能上可能不能满足需求,需要程序员定制和改进某个并行化机器学习算法或者开发新的算法,这对普通数据分析程序员仍然是很大的挑战。

     

    5.2 结合传统数据分析平台的大数据机器学习系统

     

    虽然有了基于大数据处理平台的机器学习算法设计方法,能够较好地解决一体化的大数据存储、计算以及并行化算法设计问题,但仅有机器学习系统仍然不能很好地解决各个平台对终端用户存在的可编程性和易用性不够的问题。为此,还需要进一步研究解决这些问题。

     

    从可编程性和易用性角度来说,对于行业数据分析师,最熟悉使用的分析语言和环境通常是R、Python、MATLAB等系统。R是目前在数据分析应用领域最广为使用的数据分析、统计计算及制图的开源软件系统,提供了大量的专业模块和实用工具。为了尽可能缩小R语言环境与现有大数据平台间的鸿沟,工业界和研究界已经尝试在R中利用分布式并行计算引擎来处理大数据。最早的工作和系统RHadoop,是由RevolutionAnalytics发起的一个开源项目,其目标是将统计语言R与Hadoop结合起来,目前该项目包括3个R package(包),分别为支持用R语言编写MapReduce应用的rmr、用于R语言访问HDFS的rhdfs以及用于R语言访问HBase的rhbase。其中,Hadoop主要用来存储和处理底层的海量数据,用R语言替代Java语言完成MapReduce算法的设计实现。

     

    类似地,UC Berkeley AMP实验室在2014年1月也推出了一个称为SparkR的项目。SparkR也是作为一个R的扩展包,为R用户提供一个轻量级的、在R环境里使用SparkRDD API编写程序的接口。它允许用户在R的shell环境里交互式地向Spark集群提交运行作业。

     

    然而,目前的RHadoop和SparkR都还存在一个同样的问题:仍要求用户熟悉MapReduce或SparkRDD的编程框架和程序结构,然后将自己的MapReduce或Spark程序实现到基于R的编程接口上,这和在Hadoop或Spark上写应用程序没有太大的区别,只是编程接口用R语言封装了一下。此外,这些工作都是基于单一平台,无法解决跨平台统一大数据机器学习算法设计的问题。

     

    5.3 基于特定平台的大数据机器学习系统

     

    为了克服前述做法的缺陷,近年来,学术界和业界开始尝试总结机器学习算法设计的共同特性,结合大规模学习时所需要考虑的底层分布式数据存储和并行化计算等系统问题,专门研究能同时兼顾并支持大数据机器学习和大数据分布并行处理的一体化大数据机器学习系统。

     

    在国内外的机器学习和大数据技术方面的会议中,已经频繁出现大数据机器学习系统相关的研究工作,如SparkMLlib、IBM的SystemML、Apache Flink、GraphLab、Parameter Server、Petuum等;此外,腾讯、百度等国内著名互联网企业也推出了不同的面向大数据的分布式机器学习系统,如腾讯的Peacock和Mariana大规模机器学习系统、百度的ELF和百度机器学习云平台BML。

     

    (1)Spark MLlib

     

    MLLib与Spark环境整合后可完整解决大数据的分布式存储、并行化计算以及上层的机器学习算法设计和使用问题,因此,可将其视为一个基本的机器学习系统。目前其已经向上层提供多种优化方法、分类算法、回归算法、推荐算法、聚类算法。但其算法数目和接口有限,难以完全满足用户各种各样的需求,且作为一个算法库,用户难以对内部算法进行深层定制优化。因此,其在灵活性方面仍然存在不足。

     

    (2)SystemML

     

    SystemML[14,15]是由IBMWaston Research Center 和IBM Almaden Research Center联合研发的一款大数据学习系统。对用户提供了一个类似于R语言的高层声明式语言,基于这种语言编写的程序可以被自动编译转化为MapReduce作业在Hadoop集群上运行。这种高层语言提供了大量的监督和非监督的机器学习算法所需要的线性代数操作算子,包括高层算子HOP(high-leveloperator)和底层算子LOP(low-level operator)。SystemML最大的优势是其具有较好的可编程性和易用性,用户不需要具备任何分布式系统的概念或编程经验,即可利用其写出可扩展的机器学习算法;其最大的缺点在于底层计算平台单一,只采用了MapReduce作为底层分布式执行平台,而底层的MapReduce作业本身执行性能并不高,近年来涌现出的高效分布式计算框架如Spark、Flink等,在众多性能指标上远远高于MapReduce。

     

    (3)Apache Flink

     

    Apache Flink[19]是由欧洲的多名研究者和多家资助单位(如EIT1ICT Labs、DFG2、IBM、Oracle、HP等)联合研发的一款开源的并行化数据分析软件栈,项目早期的名称是Stratosphere。经过一段时间的发展,目前已经成为Apache开源项目。Flink同样意识到,数据分析人员在分布式系统上编写大数据分析算法时,需要有大量的精力耗费在分布式程序调试以及底层调优上。为了使数据分析人员能够在无需顾及各种并行化优化问题的情况下就可以进行深度数据分析,Flink提供了一款数据分析栈式软件。它向用户提供了一种专用的脚本式语言MeteorScript,并且会自动将基于该语言开发的程序转换到底层的分布式计算平台Nephele上[20]。由于其专用性语言不够普及,目前系统对语言接口又做了更多的扩充,支持Java、Scala等语言。Flink项目的优势在于其从上到下提供了一整套完整的栈式解决方案,试图为用户提供易于使用的数据分析系统,同时通过一些编译优化手段尽可能地提升程序执行的性能;其缺点在于其底层是专用的单一化计算平台,与目前普遍使用的主流大数据平台Hadoop和Spark尚未能集成使用,且上层的语言接口层也没有包含现在数据分析师广为使用的R、Python等语言接口。

     

    (4)GraphLab

     

    GraphLab[16]是CMU开发的一个以顶点为计算单元的大规模图处理系统,是一个基于图模型抽象的机器学习系统。设计初衷主要是解决具有以下特点的机器学习问题:有局部依赖的稀疏数据集、迭代可收敛、异步执行。为了实现这个目标,GraphLab把数据之间的依赖关系抽象成Graph结构,以顶点为计算单元,将算法的执行过程抽象成每个顶点上的GAS(gather、apply、scatter)过程,其并行的核心思想是多个顶点同时执行。GraphLab的优点是能够高效地处理大规模图算法问题或者可归结为图问题的机器学习和数据挖掘算法问题;其缺点在于提供的接口细节比较复杂,对于普通的数据分析程序员而言,有较大的使用难度。

     

    (5)ParameterServer与Petuum

     

    很多机器学习算法常常要解决学习训练过程中模型参数的高效存储与更新问题。为了有效应对和满足大数据场景下这类机器学习算法的需要,研究者提出了一种称为ParameterServer的框架[17],提供了一个分布式全局模型参数存储和访问接口,模型参数存储在多台服务器(server)中,工作节点(worker)可以通过网络访问API方便地读取全局参数。

     

    Li Mu等人开发了一套基于ParameterServer框架的分布式机器学习系统[17],该系统由一个服务器组(server group)和多个工作组(worker group)构成。其中,服务器组中包括一个服务器管理(servermanager)节点和多个服务器节点。每个服务器节点存储部分全局共享参数;服务器管理节点用来存储服务器节点的元信息,并通过心跳机制管理所有服务器。在该系统中,每个工作组包含一个任务调度器(taskscheduler)和多个工作节点,工作节点只与服务器节点通信获取全局参数以及推送局部更新,不同的工作组可以同时运行不同的应用。ParameterServer的优点是为大规模机器学习提供了非常灵活的模型参数调优和控制机制;缺点是缺少对大规模机器学习时的数据及编程计算模型的高层抽象,使用较为繁琐,通常比较适合于机器学习算法研究者或者需要通过调整参数深度优化机器学习算法的数据分析程序员使用。

     

    国际著名的机器学习专家、美国卡耐基梅隆大学机器学习系EricXing教授是大数据机器学习系统的倡导者。他认为,传统的机器学习研究过于简化机器学习算法本身的问题以及大规模数据机器学习存在的系统问题[21]。由于大规模机器学习存在很多新的挑战,近几年来主要致力于大数据机器学习系统的研究,并领导其SAILING实验室研究实现了大数据学习系统Petuum[18,21]。Petuum也是一个基于Parameter Server框架的系统,关键组件包括ParameterServer和调度器。Petuum的Parameter Server中使用SSP(stale synchronous parallel)一致性模型,允许计算速度慢的节点从本机缓存中读取陈旧的参数值,以此大大节省网络开销和网络等待时间,使得慢机器的大部分时间用在计算而不是等待上。Petuum在使用上需要算法设计者对分布式系统概念和系统有一定了解,其易用性仍有一定的限制,且其底层数据存储和并行计算框架与上层的学习算法层以紧耦合的方式全部自己实现,系统实现复杂性和代价较大。

     

    (6)腾讯Peacock与Mariana深度学习平台

     

    Peacock[3]是腾讯公司研发的一个大规模LDA主题模型训练系统。该系统通过并行计算可对10亿×1亿级别的大规模矩阵进行分解,从而从海量文档样本数据中学习10万~100万量级的隐含语义。为了完成大规模处理,Peacock基于吉布斯采样的LDA训练算法进行了并行化设计,并设计实现了一个完整的具有大规模样本数据处理能力的训练系统。Peacock已广泛应用在腾讯的文本语义理解、QQ群推荐、用户商业兴趣挖掘、相似用户扩展、广告点击率转化率预估等多个业务数据中,是一个专为LDA并行化计算而定制的大规模训练系统,不是一个通用化的大数据机器学习系统。

     

    为了提供更为广泛的大规模并行化机器学习处理能力,腾讯研究构建了一个称为Mariana的深度学习平台[22],该平台由3套大规模深度学习系统构成,包括基于多GPU的深度神经网络并行计算系统MarianaDNN、基于多GPU的深度卷积神经网络并行计算系统Mariana CNN以及基于CPU集群的深度神经网络并行计算系统Mariana Cluster。Mariana可提供数据并行和模型并行计算,基于GPU和CPU集群提升模型规模,加速训练性能。其中,MarianaDNN在腾讯内部用于微信语音识别声学模型训练,可训练超过1万小时的语音数据、超过40亿的数据样本以及超过5 000万的参数,相对于单GPU而言,6GPU可实现4.6倍的加速比;而MarianaCNN用于微信图像识别,可训练2 000个以上的分类、300万以上的数据样本以及超过6 000万的参数,相对于单GPU而言,4GPU可实现2.5倍的加速比,在图文类效果广告点击率提升方面也取得初步应用;MarianaCluster实现了一个基于Parameter Server模型的大规模通用化机器学习和训练系统,主要用于进行大规模广告并行化训练,完成广告点击率预估模型训练和广告点击性能优化。

     

    (7)百度ELF与百度机器学习云平台BML

     

    百度公司研发了一个大规模分布式机器学习框架和系统ELF(essential learningframework)[23]。ELF是一个基于Parameter Server模型的通用化大规模机器学习系统,可允许用户方便快速地设计实现大数据机器学习算法,在系统设计上吸收了Hadoop、Spark和MPI等大数据平台的优点,用类似于Spark的全内存DAG计算引擎,可基于数据流的编程模式,通过高度抽象的编程接口,让用户方便地完成各种机器学习算法的并行化设计和快速计算。

     

    在ELF的基础上,百度进一步开发了一个机器学习云平台BML(Baidumachine learning),该平台支持丰富的机器学习算法,可支持20多种大规模并行机器学习算法,提供包括数据预处理算法、分类算法、聚类算法、主题模型、推荐算法、深度学习、序列模型、在线学习在内的各种机器学习算法支持,并通过分布和并行化计算实现优异的计算性能。BML在百度内部的业务系统中经历了线上大规模使用部署考验,承载公司内各种重要的在线业务线应用,包括凤巢广告CTR预估、搜索LTR排名等。

     

    6 跨平台统一大数据机器学习系统Octopus的研究设计

     

    6.1 Octopus的基本设计思想

     

    上述绝大多数大数据机器学习方法和系统都是基于特定平台构建的,难以集成和兼容现有和未来出现的多种大数据处理引擎和平台。现实世界中的各种大数据分析处理应用通常会有不同的分析处理需求和特征,例如,有些可能是极大规模数据的离线分析处理,有些可能是要求高实时性响应的联机分析处理,这些不同的分析需求要求底层有不同特性的大数据处理平台支持;此外,随着大数据处理技术和平台的不断发展,目前和未来不断有新的大数据编程方法和处理平台出现。因此,企业内需要将其原有平台上已经开发好的机器学习和数据分析算法,改写和移植到新的平台上,这将给企业带来很大的重复性劳动和开发负担。

     

    为此,一个理想的大数据机器学习系统还需要拥有能够支持现有和未来出现的不同大数据处理平台的能力,实现跨平台大数据机器学习和数据分析算法的设计能力,达到“WriteOnce,Run Anywhere”的跨平台算法设计和运行目标。

     

    针对大数据机器学习系统需要重点研究解决的计算性能以及可编程性与易用性问题,并考虑上述的跨平台需求特性,南京大学PASA大数据实验室正在研究设计一个跨平台大数据机器学习的统一编程模型和系统平台。该系统基于矩阵编程计算模型,结合R编程语言和编程方法,设计提供一个跨平台的统一编程计算框架,最终研究实现一个跨平台大数据机器学习系统Octopus(大章鱼)。

     

    分析发现,机器学习和数据挖掘算法中的主体计算大多可表示为矩阵或向量运算,这通常也是算法中最耗时的部分。矩阵操作也是机器学习研究者用来描述问题和算法最为自然和常用的方式,基于矩阵可以表示和刻画大多数实际应用中涉及的机器学习和数据分析算法问题。基于这样的事实,为了给大数据机器学习和数据分析提供一种自然和统一的编程计算模型和编程方法,类似于MapReduce中基于数据记录列表的抽象编程计算模型,将研究建立一种基于矩阵模型的抽象编程计算模型,以此作为大数据机器学习和数据分析算法设计的统一编程计算模型和接口。

     

    Octopus是一个高层的大数据机器学习和数据分析统一编程模型和系统平台,允许数据分析和大数据应用开发程序员轻松地设计和开发各种大数据机器学习和数据分析算法与应用程序。通过提供基于矩阵的统一编程计算模型,使用基于R语言的数据分析程序设计语言和程序设计方法,允许用户方便地编写和运行常规的R语言程序,而无需了解底层大数据平台的分布和并行化编程计算知识,使底层的分布并行计算框架和大数据平台对用户完全透明;底层平台上,通过良好的系统层抽象,可以快速集成Hadoop和Spark等通用大数据并行计算框架和系统平台,而且程序仅需编写一次,不需要有任何修改即可根据需要选择并平滑运行于任何一个平台,从而实现“WriteOnce,Run Anywhere”的跨平台特性。

     

    6.2 基于矩阵模型的统一编程和计算模型

     

    分析发现,一方面,大数据机器学习算法中的主体计算很多可表示为矩阵或向量运算(向量可视为退化为1维的特殊矩阵),通常这也是算法中最耗时的部分;另一方面,矩阵操作通常也是机器学习研究者用来描述问题和算法最为自然和常用的方式。例如,训练样本特征值的归一化往往是通过对矩阵行或列求和后再除以该求和的值;KNN算法(最近邻算法)的核心操作是矩阵相减和矩阵元素求平方操作;PCA(主成分分析)算法可以通过矩阵相乘或矩阵的SVD分解进行求解;最小二乘法的解析法涉及矩阵的相乘和求逆操作;互联网企业推荐系统中,相似性分析的核心是高达数亿用户乘以数亿物品的矩阵分解计算问题;而腾讯Peacock主题模型训练系统则涉及数十亿文档乘以数百万词汇的巨大矩阵计算问题;在信息检索领域,著名的PageRank算法也可以表示成矩阵的迭代相乘;社会网络中可以通过计算朋友关系矩阵的幂,从而进行基于共同好友的推荐;电子商务中可以通过对用户对商品的购买记录进行矩阵分解,得到商品和用户的聚类并分析其潜在语义主题模型。很多其他的数据分析和大数据科学计算问题也常常要基于矩阵模型完成问题的描述和分析计算过程。因此,基于矩阵可以表示和刻画大多数实际应用中涉及的机器学习和数据分析算法问题。

     

    基于这样的事实,为了给大数据机器学习提供一种统一的编程计算模型以及编程方法,类似于MapReduce采用了基于数据记录列表的抽象编程计算模型,研究建立了一种基于矩阵模型的抽象编程计算模型,以此作为大数据机器学习算法设计的统一编程计算模型和接口。

     

    这种抽象矩阵编程计算模型将成为统一机器学习算法设计和编程计算的核心,它具有如下3个重要作用。

     

    基于机器学习和数据挖掘算法中主体计算大多可表示为矩阵或向量运算的事实,为数据分析用户提供一种自然和统一化的大数据机器学习和数据分析算法建模和表示方法。

     

    作为一个隔离和解耦上层数据分析算法与下层各种大数据平台的中间接口,实现底层平台对上层程序员及其程序的透明性,以此提高统一平台对上层程序员的易用性。

     

    为实现统一大数据机器学习系统开放式集成框架提供一种接口标准。针对任意一个拟集成使用的底层大数据平台,只要遵照所建立的统一矩阵编程接口,实现一个完成该接口程序计算任务的适配器或插件,即可以博采众长和兼容并蓄的开放式框架,连接和集成使用各种主流的大数据平台,使得上层的机器学习算法具有处理大规模数据的能力。

     

    6.3 Octopus软件框架和系统设计

     

    如图5所示,Octopus是一种基于良好的系统抽象的层次化系统。其最底层是分布式文件系统,如HDFS和分布式内存文件系统Tachyon,它们被用来存储和索引大规模的矩阵数据。在存储层之上,Octopus可以用多种大数据计算引擎和单机R引擎来执行不同规模的矩阵操作。Octopus提供给用户的编程API是基于R语言的高层矩阵计算接口,基于该接口,用户不需要了解分布和并行计算系统知识,就可以很容易地设计实现大数据机器学习和数据分析算法或应用。

     

    图5 Octopus(大章鱼)软件系统框架

     

    6.4 Octopus系统的技术特征

     

    Octopus具有以下技术特征。

     

    (1)易于使用的高层编程API

     

    Octopus提供给用户一组基于R语言的大规模矩阵运算API,称为OctMatrix。这些API提供各种大规模分布式矩阵计算操作,其形式上与标准R语言中的单机矩阵/向量操作API很相似。程序员可基于这些矩阵运算接口,用R语言快速编写各种机器学习和数据分析算法。除了最常用的大规模矩阵乘法,Octopus也提供了其他各种矩阵操作,如矩阵与矩阵的加法和减法、矩阵元素级别的乘法和除法、子矩阵运算等。这些API定义了高层矩阵操作符(operator)和操作(operation),因此熟悉R编程语言和编程方法的用户可以很容易地用其编程实现大数据机器学习和数据分析算法,且不需要了解底层大数据处理平台及其并行化编程方法。

     

    (2)一次编写,随处运行

     

    用Octopus编写完成的算法和程序,可以运行在不同的底层大数据计算引擎和平台上。用OctMatrixAPI实现的机器学习和数据分析算法,用户可以在单机R上用小数据进行测试,不需要修改代码就可以用大数据在底层的大数据计算引擎和平台上执行,只需要简单切换底层的大数据计算引擎如Spark、HadoopMapReduce或MPI即可。此外,Octopus通过提供通用接口可实现对底层不同文件系统的集成,并实现基于不同文件系统的大规模矩阵数据存储访问接口,包括HDFS、Tachyon以及基于单机本地的文件系统。

     

    (3)无缝融合R生态系统

     

    Octopus可运行于标准的R环境下,实现与R环境的无缝融合,因此可以利用R生态系统中的丰富资源,比如第三方R包。除了传统的矩阵/向量函数,Octopus也在OctMatrix中提供apply函数,传入apply函数的参数可以是任意的R函数,包括UDF(userdefined

     

    function)。当OctMatrix运行在分布式环境中时,函数参数可以在集群中被应用于OctMatrix的每个元素、每行或每列,函数参数在集群的每个节点并行执行。

     

    6.5 Octopus中分布式矩阵计算优化

     

    大规模数据通常会导致整个数据分析计算时间过长,难以在可接受的时间内完成分析任务,为此需要借助于分布式和并行化计算技术实现大规模数据分析计算时的加速和性能提升,以提高数据分析的响应时间。由于采用大规模矩阵作为大数据机器学习和数据分析的编程计算接口,在底层大数据平台上的大规模矩阵运算的性能将直接关系到上层算法执行的性能。为此,大规模矩阵计算性能优化是需要重点研究解决的关键技术问题之一。

     

    在所有矩阵计算中,矩阵乘法是使用最多且最为耗时的计算,许多矩阵的因子分解操作也都可以由矩阵乘法近似实现。因此,矩阵乘法的优化是整个矩阵计算优化中最为重要的问题。两个大规模矩阵进行分布和并行化相乘运算时,一个重要问题是如何合理划分矩阵数据,以便利用多个计算节点分布和并行化地完成计算。不同大小和形状的矩阵,其划分方法可能会造成计算性能上的差异,例如,方形矩阵与长条形矩阵需要考虑不同的划分方法,而一个大矩阵与一个小矩阵相乘时,当小矩阵可存放在单节点的内存中时,对小矩阵可不进行划分,而改用广播方式将小矩阵发送到每个计算节点上,以此完成两个矩阵的运算,这样可以避免大量的网络数据传输。因此,需要根据矩阵的大小和形状,合理划分矩阵,以便以最小的计算代价完成乘法运算。

     

    除了不同形状和大小的矩阵划分策略优化外,被划分后落到每个计算节点上分布处理的子矩阵计算也需要进行优化。矩阵乘法是典型的计算密集型任务并且存在许多单机的高性能的线性代数库,如BLAS、Lapack和MKL。由于在JVM中执行线性代数计算性能较低,Octopus将计算密集的矩阵计算从JVM中通过JNILoader装载到本地线性代数库(如BLAS、Lapack)中执行,这样可显著加速子矩阵的计算性能。

     

    6.6 Octopus系统的编程使用

     

    图6显示了Octopus系统的使用方式。Octopus使用标准的R编程和开发环境,允许用户使用R语言,并基于大规模矩阵计算模型编写各种机器学习和数据分析算法。系统可实现与Spark、HadoopMapReduce和MPI的集成,底层可无缝切换运行于不同的大数据平台上。基于Octopus所设计实现的算法或程序代码,无需修改即可平滑切换并运行于上述任意一个底层大数据计算引擎和平台上,只要简单地修改程序代码中的计算引擎类型选择参数即可。

     

    图6 基于R语言和Octopus的跨平台统一大数据机器学习系统

     

    基于R语言和初步研究设计的Octopus,设计实现了多个典型的机器学习算法,包括LR、SVM、聚类、深度学习等,以验证研究设计的原型系统的有效性。

     

    图7是基于常规R语言所实现的LinearRegression算法与基于Octopus所实现的Linear Regression算法的示例代码。由代码比较可见,两者在形式上非常接近,仅在有关矩阵运算调用的API上有微小差异。

     

    图7 基于Octopus和常规R语言的Linear Regresssion算法代码比较

     

    由图7可见,在R语言中基于矩阵进行机器学习的算法设计较为简洁和方便,LinearRegression代码仅仅需要20行左右即可实现完整的算法。

     

    7 结束语

     

    近几年来,大数据技术的发展推动了大数据机器学习和智能计算技术的发展热潮。大数据机器学习不仅是一个单纯的机器学习问题,更是一个大规模的复杂系统问题;是一个同时涉及机器学习和大数据处理两个领域的交叉研究课题。要实现有效的大数据机器学习处理,需要构建一个能同时支持机器学习算法设计和大规模数据处理的一体化大数据机器学习系统。

     

    本文介绍了国内外大数据机器学习系统的基本概念、基本研究问题、技术特征、系统分类以及典型系统。在此基础上,进一步介绍了研究设计的跨平台统一大数据机器学习原型系统Octopus。基于大多数机器学习和数据分析算法可表示为矩阵运算的事实,Octopus采用矩阵模型作为大数据机器学习和数据分析抽象编程计算模型,提供了一个基于矩阵的高层编程模型和接口,并基于R语言和开发环境向用户提供了一个矩阵运算R扩展包,为用户提供可扩展性好且易于使用的矩阵运算操作,允许用户基于所提供的大规模矩阵运算操作,快速设计实现各种机器学习和数据分析算法。Octopus能在底层无缝地集成和使用不同的大数据计算引擎和平台,完成大数据机器学习算法的分布和并行化执行,并支持单节点R环境以及Spark、HadoopMapReduce和MPI等多种大数据计算引擎和平台,并能实现这些平台间的无缝切换,实现“Write

     

    Once,Run Anywhere”的跨平台特征。就我们所知,Octopus是目前世界上第一个具有跨平台特性,同时还能实现底层大数据平台对上层程序员透明化的大数据机器学习系统研究工作。

     

    正如CCF大数据专家委员会发布的2014年《中国大数据技术与产业发展白皮书》中所说,目前大数据机器学习系统尚处在一个初期的探索和研究阶段,尽管国内外已经有不少研究开发工作,但研究设计高效、可扩展且易于使用的大数据机器学习系统仍面临诸多的技术挑战。因此,大数据机器学习系统将是目前和未来几年的热点研究领域,工业界和学术界都将持续地投入相当多的资源进行深入的研究开发工作。

     

    同样,虽然初步研究设计了跨平台大数据机器学习系统Octopus,但其中仍然有大量需要进一步深入研究解决和完善的技术问题,例如大规模矩阵运算的深度优化、稀疏矩阵的存储管理和计算优化、异构大数据处理平台环境下不同矩阵计算时的平台自动选择、基于矩阵计算表达式和计算流图的计算优化等。此外,仅有矩阵计算模型还不能满足所有的大数据机器学习计算需求,还需要考虑其他计算模型,如图模型和参数模型(parameterserver)的混合使用,形成一个能满足各种大数据机器学习算法设计需求的综合系统。

    END

    碧茂课堂精彩课程推荐:

    1.Cloudera数据分析课;

    2.Spark和Hadoop开发员培训;

    3.大数据机器学习之推荐系统;

    4.Python数据分析与机器学习实战;

    详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

    现在注册互动得海量学币,大量精品课程免费送!

    展开全文
  • 1.大数据机器学习的关系: 大数据领域我们做的是数据的存储和简单的统计计算,机器学习大数据的应用是为了发现数据的规律或模型,用机器学习算法对数据进行计算的到的模型,从而决定我们的预测与决定的因素...

    1.大数据与机器学习的关系:

    大数据领域我们做的是数据的存储和简单的统计计算,机器学习在大数据的应用是为了发现数据的规律或模型,用机器学习算法对数据进行计算的到的模型,从而决定我们的预测与决定的因素(比如在大数据用户画像项目里,生成的特殊用户字段)。

    2.大数据在机器学习的应用

    目前市场实际开发模式中,应该在大数据哪一个阶段层次应用到机器学习的相关技术呢,我们接下来来说明,首先目前大数据的架构模式列举如下几个

        2.1数据采集(ftp、socket)---数据存储(hdfs)---数据清洗(MapReduce)----数据分析(hive)---sqoop导入-----存储(mysql、oracle)---web显示

        2.2数据采集(ftp、socket)---数据存储(hdfs)---数据清洗(MapReduce)---列式数据库存储(hbase)-----thrift(协处理器)---web显示

        2.3数据采集(ftp、socket)---数据存储(hdfs)---数据清洗(MapReduce)----数据分析(hive)----impala(实时数据分析)---jdbc-----web显示

        2.4数据采集(ftp、socket)---数据存储(hdfs)---spark计算-----存储(mysql、oracle)---web显示

    整体在开发完成后用分布式任务调度系统(azkaban、oozie)对以上架构进行周期运行计算。

    而机器学习在大数据的应用阶段为:数据分析(hive)--- 机器学习----sqoop导入、列式数据库存储(hbase)---- 机器学习------thrift(协处理器)

    总结在大数据架构中,机器学习处于上层阶段,在大数据进行计算之后向最终储存或者直接web展现的时候需要机器学习来产生一个决策与预测的模型。

    3.机器学习

        3.1机器学习的理论在1950年就已经提出,但是因为数据量的存储机制落后,算法结合度低下,以及我们对于数据处理速度的低下导致一直不能把技术落地,而在科技高速发展的今天,因为以上技术困境的解除,导致机器学习向阳而生,从而被广泛应用,改变了人们的生活,

        3.2 机器学习是多领域交叉学科,涉及概率论、统计学、逼近学、凸分学、算法复杂度理论等多门学科,专门计算机器怎样模拟实现人类的学习行为,获取行的知识和技能,然后重新改变已经有的知识结构来提高完善自身的性能。

        3.3 机器学习(ML)与人工智能(AI)的关系:它是人工智能的核心,是使计算机拥有智能的根本途径,它的应用遍布人工智能的各个领域,它主要使用归纳、总和而不是演绎。

        3.3 机器学习的学习动作:针对经验E(experience)和一系列任务T(tasks)和一定表现的衡量P,如果经验E的积累,针对定义好的任务T可以提高表现P,就说明有学习能力。

        3.4 机器学习的应用:语音识别、自动驾驶、语言翻译、推荐系统、无人机等等

        3.5 机器学习与深度学习的关系:深度学习是实现机器学习的一种技术深度学习使得许多机器学习应用得以实现,并拓展了人工智能的整个领域。深度学习一一实现了各种任务,并使得所有的机器辅助变成可能。无人驾驶汽车、电影推荐等,都触手可及或即将成为现实。人工智能就在现在,也在未来。有了深度学习,人工智能可能甚至达到像我们畅想的科幻小说一样效果。

    ( 更简单理解)人工智能是祖辈,机器学习是父辈,深度学习是儿子辈!

        3.6 机器学习的运行方式:我们知道程序处理是由CPU(中央处理器)来计算运行的,但是目前我们开发应用中机器学习的计算大部分(深度学习)是通过GPU(图形处理器)来计算运行的

        3.7 机器学习的概念:

        3.7.1 基本概念:训练集,测试集,特征值,监督学习,非监督学习,半监督学习,分类,回归

        3.7.2 概念学习:人类学习概念(如婴儿):鸟,狗;车,房子;黑匣子和计算机 (怎么认识和区分?)定义:概念学习是指从有关某个布尔函数(是或否)的输入输出训练样例中推断出该布尔函数

        3.7.3 数据集:真实数据集

        3.7.4 行:样本数据

        3.7.5 列:特征或者数据数据

        3.7.6 特征向量:每一个样本中的数据组成的向量

        3.7.7 属性空间:属性章程的空间

        3.7.8 训练集:用于模型训练的数据集

        3.7.9 测试集:用于校验模型的优劣程度

        3.7.10 训练过程:(学习过程)使用训练数据集+机器学习算法==》模型

        3.8 监督学习:

    监督(supervised)是指训练数据集中的每个样本均有一个已知的输出项(类标label)

    输出变量为连续变量的预测问题称为 回归( regression )问题

    回归算法:

    • 简单线性回归

    • 多元线性回归

    • Lasso回归

    • Ridge回归

    • ElasticNet

    输出变量为有限个离散变量的预测问题称为 分类问题

    分类算法:

    • 简单线性回归

    • 多元线性回归

    • Lasso回归

    • Ridge回归

    • ElasticNet

        3.9 非监督学习:

    人们给机器一大堆没有分类标记的数据,让机器可以对数据分类、检测异常等。

    聚类(KMeans)

    降维(PCA,LDA)

        3.10 半监督学习:

    半监督学习就是提供了一条利用“廉价”的未标记样本的途径

        3.11 强化学习:

    是机器学习的一个重要分支,主要用来解决连续决策的问题。

    围棋可以归纳为一个强化学习问题,需要学习在各种局势下如何走出最好的招法。

        3.12 迁移学习:

    应用场景:

    小数据的问题。比方说新开一个网店,卖一种新的糕点,没有任何的数据,就无法建立模型对用户进行推荐。但用户买一个东西会反映到用户可能还会买另外一个东西,所以如果知道用户在另外一个领域,比方说卖饮料,已经有了很多很多的数据,利用这些数据建一个模型,结合用户买饮料的习惯和买糕点的习惯的关联,就可以把饮料的推荐模型给成功地迁移到糕点的领域,这样,在数据不多的情况下可以成功推荐一些用户可能喜欢的糕点。这个例子就说明,有两个领域,一个领域已经有很多的数据,能成功地建一个模型,有一个领域数据不多,但是和前面那个领域是关联的,就可以把那个模型给迁移过来。

    个性化的问题。比如每个人都希望自己的手机能够记住一些习惯,这样不用每次都去设定它,怎么才能让手机记住这一点呢?其实可以通过迁移学习把一个通用的用户使用手机的模型迁移到个性化的数据上面。

    4.学习机器学习应该具备哪些知识

        4.1对概率要有基本了解,

        4.2了解微积分和线性代数的基本知识,

        4.3 掌握Python编程或者R语言编程(在公司企业开发常用Python来完成机器学习数据挖掘、在学术界用R语言来完成机器学习数据挖掘)

    在企业中要求我们要达成的目标是:掌握机器学习算法和应用框架通过分类及回归来解决实际问题。

    机器学习对应的职位:数据挖掘(用户画像方向)、NLP(自然语言处理)、推荐系统(推荐算法、排序算法)、计算广告(CTR预估)、计算机视觉(深度学习)、语音识别(HMM,深度学习)注意:这些职位的前提是要有大数据开发相关经验。

    5.常用的十个机器学习的算法

        5.1机器学习算法通常可以被分为三大类 —— 监督式学习,非监督式学习和强化学习。监督式学习主要用于一部分数据集(训练数据)有某些可以获取的熟悉(标签),但剩余的样本缺失并且需要预测的场景。非监督式学习主要用于从未标注数据集中挖掘相互之间的隐含关系。强化学习介于两者之间 —— 每一步预测或者行为都或多或少有一些反馈信息,但是却没有准确的标签或者错误提示。

        5.2决策树:决策树是一种决策支持工具,它使用树状图或者树状模型来表示决策过程以及后续得到的结果,包括概率事件结果等。请观察下图来理解决策树的结构。

     

    从商业决策的角度来看,决策树就是通过尽可能少的是非判断问题来预测决策正确的概率。这种方法可以帮你用一种结构性的、系统性的方法来得出合理的结论。

        5.3 朴素贝叶斯分类器朴素贝叶斯分类器是一类基于贝叶斯理论的简单的概率分类器,它假设特征之前是相互独立的。下图所示的就是公式 —— P(A|B)表示后验概率,P(B|A)是似然值,P(A)是类别的先验概率,P(B)代表预测器的先验概率

    现实场景中的一些例子包括:

    • 检测垃圾电子邮件
    • 将新闻分为科技、政治、体育等类别
    • 判断一段文字表达积极的情绪还是消极的情绪
    • 用于人脸检测软件

        5.4 随机森林

    在源数据中随机选取数据,组成几个子集

    S 矩阵是源数据,有 1-N 条数据,A B C 是feature,最后一列C是类别

    由 S 随机生成 M 个子矩阵

    这 M 个子集得到 M 个决策树
    将新数据投入到这 M 个树中,得到 M 个分类结果,计数看预测成哪一类的数目最多,就将此类别作为最后的预测结果

        5.5 逻辑递归

    当预测目标是概率这样的,值域需要满足大于等于0,小于等于1的,这个时候单纯的线性模型是做不到的,因为在定义域不在某个范围之内时,值域也超出了规定区间。

    所以此时需要这样的形状的模型会比较好

    那么怎么得到这样的模型呢?

    这个模型需要满足两个条件 大于等于0,小于等于1
    大于等于0 的模型可以选择 绝对值,平方值,这里用 指数函数,一定大于0
    小于等于1 用除法,分子是自己,分母是自身加上1,那一定是小于1的了

    再做一下变形,就得到了 logistic regression 模型

    通过源数据计算可以得到相应的系数了

    最后得到 logistic 的图形

        5.6 SVM

    support vector machine

    要将两类分开,想要得到一个超平面,最优的超平面是到两类的 margin 达到最大,margin就是超平面与离它最近一点的距离,如下图,Z2>Z1,所以绿色的超平面比较好

    将这个超平面表示成一个线性方程,在线上方的一类,都大于等于1,另一类小于等于-1

    点到面的距离根据图中的公式计算

    所以得到 total margin 的表达式如下,目标是最大化这个 margin,就需要最小化分母,于是变成了一个优化问题

    举个栗子,三个点,找到最优的超平面,定义了 weight vector=(2,3)-(1,1)

    得到 weight vector 为(a,2a),将两个点代入方程,代入(2,3)另其值=1,代入(1,1)另其值=-1,求解出 a 和 截矩 w0 的值,进而得到超平面的表达式。

    a 求出来后,代入(a,2a)得到的就是 support vector

    a 和 w0 代入超平面的方程就是 support vector machine

        5.7 K最邻近

    k nearest neighbours

    给一个新的数据时,离它最近的 k 个点中,哪个类别多,这个数据就属于哪一类

    栗子:要区分 猫 和 狗,通过 claws 和 sound 两个feature来判断的话,圆形和三角形是已知分类的了,那么这个 star 代表的是哪一类呢

    k=3时,这三条线链接的点就是最近的三个点,那么圆形多一些,所以这个star就是属于猫

        5.8 K均值

    想要将一组数据,分为三类,粉色数值大,黄色数值小
    最开心先初始化,这里面选了最简单的 3,2,1 作为各类的初始值
    剩下的数据里,每个都与三个初始值计算距离,然后归类到离它最近的初始值所在类别

    分好类后,计算每一类的平均值,作为新一轮的中心点

    几轮之后,分组不再变化了,就可以停止了

        5.9 Adaboost

    adaboost 是 bosting 的方法之一

    bosting就是把若干个分类效果并不好的分类器综合起来考虑,会得到一个效果比较好的分类器。

    下图,左右两个决策树,单个看是效果不怎么好的,但是把同样的数据投入进去,把两个结果加起来考虑,就会增加可信度

    adaboost 的栗子,手写识别中,在画板上可以抓取到很多 features,例如 始点的方向,始点和终点的距离等等

    training 的时候,会得到每个 feature 的 weight,例如 2 和 3 的开头部分很像,这个 feature 对分类起到的作用很小,它的权重也就会较小

    而这个 alpha 角 就具有很强的识别性,这个 feature 的权重就会较大,最后的预测结果是综合考虑这些 feature 的结果

        5.10 神经网络

    Neural Networks 适合一个input可能落入至少两个类别里

    NN 由若干层神经元,和它们之间的联系组成 第一层是 input 层,最后一层是 output 层

    在 hidden 层 和 output 层都有自己的 classifier

    input 输入到网络中,被激活,计算的分数被传递到下一层,激活后面的神经层,最后output 层的节点上的分数代表属于各类的分数,下图例子得到分类结果为 class 1

    同样的 input 被传输到不同的节点上,之所以会得到不同的结果是因为各自节点有不同的weights 和 bias

    这也就是 forward propagation

        5.11 马尔可夫

    Markov Chains 由 state 和 transitions 组成

    栗子,根据这一句话 ‘the quick brown fox jumps over the lazy dog’,要得到 markov chain

    步骤,先给每一个单词设定成一个状态,然后计算状态间转换的概率

    这是一句话计算出来的概率,当你用大量文本去做统计的时候,会得到更大的状态转移矩阵,例如 the 后面可以连接的单词,及相应的概率

    生活中,键盘输入法的备选结果也是一样的原理,模型会更高级

     

    6.人工智能(AI)

    6.1经过预测分析,按照目前的人工智能发展速度,在未来十年内我们会有40%的人会被人工智能所取代,有一些行业被取代的比例是很高的,比如:翻译、记者、助理、保安、司机、销售行业、客服、交易员、会计、保姆等等,站在技术角度不考虑社会政策的前提下,那些平时工作性质是简单重复的岗位(这里的简单重复已经不是指工作操作层面而是指工作逻辑层面),是必然会被取代的,甚至医生也在被取代的范围内。

    6.2三次浪潮:在1956年就已经提出,是符号主义流派,专家系统占据主导地位。

    1980年左右又开始流行,是统计主义流派,用统计模型解决问题

    2010年以后,以神经网络、深度学习、大数据的流派开始流行。

    6.3 在人工智能的前两次的阶段都是兴起之后又没落了,一些关键技术没有实际的落地,而如今的第三次浪潮已经深深的与我们生活结合了,比如我们打开手机,现在的任何一款APP都几乎涉及了人工智能技术,

    7. 数据分析、数据挖掘和机器学习的关系

    数据分析是从数据到信息的整理、筛选和加工的过程,数据挖掘是对信息进行价值化的分析。用机器学习的方法进行数据挖掘。机器学习是一种方法;数据挖掘是一件事情;还有一个相似的概念就是模式识别,这也是一件事情。而现在流行的深度学习技术只是机器学习的一种;机器学习和模式识别都是达到人工智能目标的手段之一,对数据挖掘而言,数据库提供数据管理技术,机器学习和统计学提供数据分析技术。

    展开全文
  • 大数据的定义:大数据(big data),指无法在一定时间范围内用...大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越...

    大数据的定义:大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据是一个笼统的概念暂未发现和准确的定义。

    大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越 可能提升模型的精确性,同时,复杂的机器学习算法的计算时间也迫切需要分布式计算与内存计算这样的关键技术。因此,机器学习的兴盛也离不开大数据的帮助。 大数据与机器学习两者是互相促进,相依相存的关系。

    机器学习与大数据紧密联系。但是,必须清醒的认识到,大数据并不等同于机器学习,同理,机器学习也不等同于大数据。大数据中包含有分布式计算,内存数据库,多维分析等等多种技术。单从分析方法来看,大数据也包含以下四种分析方法:

    一、.大数据,小分析:即数据仓库领域的OLAP分析思路,也就是多维分析思想。

    二、大数据,大分析:这个代表的就是数据挖掘与机器学习分析法。

    三、流式分析:这个主要指的是事件驱动架构。

    四、查询分析:经典代表是NoSQL数据库。

    也就是说,机器学习仅仅是大数据分析中的一种而已。尽管机器学习的一些结果具有很大的魔力,在某种场合下是大数据价值最好的说明。但这并不代表机器学习是大数据下的唯一的分析方法。

    机器学习的定义

    从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

    首先,我们需要在计算机中存储历史的数据。接着,我们将这些 数据通过机器学习算法进行处理,这个过程在机器学习中叫做“训练”,处理的结果可以被我们用来对新的数据进行预测,这个结果一般称之为“模型”。对新数据 的预测过程在机器学习中叫做“预测”。“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导 “预测”。

    人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类使用这些“规律”,对未知问题与未来进行“推测”,从而指导自己的生活和工作。

    机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“推测”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。在此我向大家推荐一个大数据技术交流圈: 658558542  突破技术瓶颈,提升思维能力 。

    这也可以联想到人类为什么要学习历史,历史实际上是人类过往经验的总结。有句话说得很好,“历史往往不一样,但历史总是惊人的相似”。通过学习历史,我们从历史中归纳出人生与国家的规律,从而指导我们的下一步工作,这是具有莫大价值的。当代一些人忽视了历史的本来价值,而是把其作为一种宣扬功绩的手段,这其实是对历史真实价值的一种误用。

    机器学习的范围

    机器学习跟模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系。

    从范围上来说,机器学习跟模式识别,统计学习,数据挖掘是类似的,同时,机器学习与其他领域的处理技术的结合,形成了计算机视觉、语音识别、自然语言处理等交叉学科。因此,一般说数据挖掘时,可以等同于说机器学习。同时,我们平常所说的机器学习应用,应该是通用的,不仅仅局限在结构化数据,还有图像,音频等应用。

    模式识别

    模式识别=机器学习。两者的主要区别在于前者是从工业界发展起来的概念,后者则主要源自计算机学科。在著名的《Pattern Recognition And Machine Learning》这本书中,Christopher M. Bishop在开头是这样说的“模式识别源自工业界,而机器学习来自于计算机学科。不过,它们中的活动可以被视为同一个领域的两个方面,同时在过去的10年间,它们都有了长足的发展”。

    数据挖掘

    数据挖掘=机器学习+数据库。这几年数据挖掘的概念实在是太耳熟能详。几乎等同于炒作。但凡说数据挖掘都会吹嘘数据挖掘如何如何,例如从数据中挖出金子,以及将废弃的数据转化为价值等等。但是,我尽管可能会挖出金子,但我也可能挖的是“石头”啊。这个说法的意思是,数据挖掘仅仅是一种思考方式,告诉我们应该尝试从数据中挖掘出知识,但不是每个数据都能挖掘出金子的,所以不要神话它。一个系统绝对不会因为上了一个数据挖掘模块就变得无所不能(这是IBM最喜欢吹嘘的),恰恰相反,一个拥有数据挖掘思维的人员才是关键,而且他还必须对数据有深刻的认识,这样才可能从数据中导出模式指引业务的改善。大部分数据挖掘中的算法是机器学习的算法在数据库中的优化。

    统计学习

    统计学习近似等于机器学习。统计学习是个与机器学习高度重叠的学科。因为机器学习中的大多数方法来自统计学,甚至可以认为,统计学的发展促进机器学习的繁荣昌盛。例如著名的支持向量机算法,就是源自统计学科。但是在某种程度上两者是有分别的,这个分别在于:统计学习者重点关注的是统计模型的发展与优化,偏数学,而机器学习者更关注的是能够解决问题,偏实践,因此机器学习研究者会重点研究学习算法在计算机上执行的效率与准确性的提升。

    计算机视觉

    计算机视觉=图像处理+机器学习。图像处理技术用于将图像处理为适合进入机器学习模型中的输入,机器学习则负责从图像中识别出相关的模式。计算机视觉相关的应用非常的多,例如百度识图、手写字符识别、车牌识别等等应用。这个领域是应用前景非常火热的,同时也是研究的热门方向。随着机器学习的新领域深度学习的发展,大大促进了计算机图像识别的效果,因此未来计算机视觉界的发展前景不可估量。

    语音识别

    语音识别=语音处理+机器学习。语音识别就是音频处理技术与机器学习的结合。语音识别技术一般不会单独使用,一般会结合自然语言处理的相关技术。目前的相关应用有苹果的语音助手siri等。

    自然语言处理

    自然语言处理=文本处理+机器学习。自然语言处理技术主要是让机器理解人类的语言的一门领域。在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外,在理解这个层面,则使用了语义理解,机器学习等技术。作为唯一由人类自身创造的符号,自然语言处理一直是机器学习界不断研究的方向。按照百度机器学习专家余凯的说法“听与看,说白了就是阿猫和阿狗都会的,而只有语言才是人类独有的”。如何利用机器学习技术进行自然语言的的深度理解,一直是工业和学术界关注的焦点。

    机器学习的方法

    1、回归算法

    在大部分机器学习课程中,回归算法都是介绍的第一个算法。原因有两个:一.回归算法比较简单,介绍它可以让人平滑地从统计学迁移到机器学习中。二.回归算法是后面若干强大算法的基石,如果不理解回归算法,无法学习那些强大的算法。回归算法有两个重要的子类:即线性回归和逻辑回归。

    线性回归就是我们常见的直线函数。如何拟合出一条直线最佳匹配我所有的数据?一般使用“最小二乘法”来求解。“最小二乘法”的思想是这样的,假设我们拟合出的直线代表数据的真实值,而观测到的数据代表拥有误差的值。为了尽可能减小误差的影响,需要求解一条直线使所有误差的平方和最小。最小二乘法将最优问题转化为求函数极值问题。函数极值在数学上我们一般会采用求导数为0的方法。但这种做法并不适合计算机,可能求解不出来,也可能计算量太大。在此我向大家推荐一个大数据技术交流圈: 658558542  突破技术瓶颈,提升思维能力 。

    计算机科学界专门有一个学科叫“数值计算”,专门用来提升计算机进行各类计算时的准确性和效率问题。例如,著名的“梯度下降”以及“牛顿法”就是数值计算中的经典算法,也非常适合来处理求解函数极值的问题。梯度下降法是解决回归模型中最简单且有效的方法之一。从严格意义上来说,由于后文中的神经网络和推荐算法中都有线性回归的因子,因此梯度下降法在后面的算法实现中也有应用。

    逻辑回归是一种与线性回归非常类似的算法,但是,从本质上讲,线型回归处理的问题类型与逻辑回归不一致。线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价。而逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类,例如判断这封邮件是否是垃圾邮件,以及用户是否会点击此广告等等。

    实现方面的话,逻辑回归只是对对线性回归的计算结果加上了一个Sigmoid函数,将数值结果转化为了0到1之间的概率(Sigmoid函数的图像一般来说并不直观,你只需要理解对数值越大,函数越逼近1,数值越小,函数越逼近0),接着我们根据这个概率可以做预测,例如概率大于0.5,则这封邮件就是垃圾邮件,或者肿瘤是否是恶性的等等。从直观上来说,逻辑回归是画出了一条分类线。

    逻辑回归算法划出的分类线基本都是线性的(也有划出非线性分类线的逻辑回归,不过那样的模型在处理数据量较大的时候效率会很低),这意味着当两类之间的界线不是线性时,逻辑回归的表达能力就不足。下面的两个算法是机器学习界最强大且重要的算法,都可以拟合出非线性的分类线。

    2、神经网络

    神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在,携着“深度学习”之势,神经网络重装归来,重新成为最强大的机器学习算法之一。

    神经网络的诞生起源于对大脑工作机理的研究。早期生物界学者们使用神经网络来模拟大脑。机器学习的学者们使用神经网络进行机器学习的实验,发现在视觉与语音的识别上效果都相当好。在BP算法(加速神经网络训练过程的数值算法)诞生以后,神经网络的发展进入了一个热潮。BP算法的发明人之一是前面介绍的机器学习大牛Geoffrey Hinton。

    具体说来,神经网络的学习机理是什么?简单来说,就是分解与整合。在著名的Hubel-Wiesel试验中,学者们研究猫的视觉分析机理是这样的。

    比方说,一个正方形,分解为四个折线进入视觉处理的下一层中。四个神经元分别处理一个折线。每个折线再继续被分解为两条直线,每条直线再被分解为黑白两个面。于是,一个复杂的图像变成了大量的细节进入神经元,神经元处理以后再进行整合,最后得出了看到的是正方形的结论。这就是大脑视觉识别的机理,也是神经网络工作的机理。

    让我们看一个简单的神经网络的逻辑架构。在这个网络中,分成输入层,隐藏层,和输出层。输入层负责接收信号,隐藏层负责对数据的分解与处理,最后的结果被整合到输出层。每层中的一个圆代表一个处理单元,可以认为是模拟了一个神经元,若干个处理单元组成了一个层,若干个层再组成了一个网络,也就是"神经网络"。

    在神经网络中,每个处理单元事实上就是一个逻辑回归模型,逻辑回归模型接收上层的输入,把模型的预测结果作为输出传输到下一个层次。通过这样的过程,神经网络可以完成非常复杂的非线性分类。

    进入90年代,神经网络的发展进入了一个瓶颈期。其主要原因是尽管有BP算法的加速,神经网络的训练过程仍然很困难。因此90年代后期支持向量机(SVM)算法取代了神经网络的地位。

    3、SVM(支持向量机)

    支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法。

    支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。但是如果没有某类函数技术,则支持向量机算法最多算是一种更好的线性分类技术。

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。“核”事实上就是一种特殊的函数,最典型的特征就是可以将低维的空间映射到高维的空间。

    我们如何在二维平面划分出一个圆形的分类界线?在二维平面可能会很困难,但是通过“核”可以将二维空间映射到三维空间,然后使用一个线性平面就可以达成类似效果。也就是说,二维平面划分出的非线性分类界线可以等价于三维平面的线性分类界线。于是,我们可以通过在三维空间中进行简单的线性划分就可以达到在二维平面中的非线性划分效果。

    支持向量机是一种数学成分很浓的机器学习算法(相对的,神经网络则有生物科学成分)。在算法的核心步骤中,有一步证明,即将数据从低维映射到高维不会带来最后计算复杂性的提升。于是,通过支持向量机算法,既可以保持计算效率,又可以获得非常好的分类效果。因此支持向量机在90年代后期一直占据着机器学习中最核心的地位,基本取代了神经网络算法。直到现在神经网络借着深度学习重新兴起,两者之间才又发生了微妙的平衡转变。

    4、聚类算法

    前面的算法中的一个显著特征就是我的训练数据中包含了标签,训练出的模型可以对其他未知数据预测标签。在下面的算法中,训练数据都是不含标签的,而算法的目的则是通过训练,推测出这些数据的标签。这类算法有一个统称,即无监督算法(前面有标签的数据的算法则是有监督算法)。无监督算法中最典型的代表就是聚类算法。在此我向大家推荐一个大数据技术交流圈: 658558542  突破技术瓶颈,提升思维能力 。

    让我们还是拿一个二维的数据来说,某一个数据包含两个特征。我希望通过聚类算法,给他们中不同的种类打上标签,我该怎么做呢?简单来说,聚类算法就是计算种群中的距离,根据距离的远近将数据划分为多个族群。

    聚类算法中最典型的代表就是K-Means算法。

    5、降维算法

    降维算法也是一种无监督学习算法,其主要特征是将数据从高维降低到低维层次。在这里,维度其实表示的是数据的特征量的大小,例如,房价包含房子的长、宽、面积与房间数量四个特征,也就是维度为4维的数据。可以看出来,长与宽事实上与面积表示的信息重叠了,例如面积=长 × 宽。通过降维算法我们就可以去除冗余信息,将特征减少为面积与房间数量两个特征,即从4维的数据压缩到2维。于是我们将数据从高维降低到低维,不仅利于表示,同时在计算上也能带来加速。

    刚才说的降维过程中减少的维度属于肉眼可视的层次,同时压缩也不会带来信息的损失(因为信息冗余了)。如果肉眼不可视,或者没有冗余的特征,降维算法也能工作,不过这样会带来一些信息的损失。但是,降维算法可以从数学上证明,从高维压缩到的低维中最大程度地保留了数据的信息。因此,使用降维算法仍然有很多的好处。

    降维算法的主要作用是压缩数据与提升机器学习其他算法的效率。通过降维算法,可以将具有几千个特征的数据压缩至若干个特征。另外,降维算法的另一个好处是数据的可视化,例如将5维的数据压缩至2维,然后可以用二维平面来可视。降维算法的主要代表是PCA算法(即主成分分析算法)。

    6、推荐算法

    推荐算法是目前业界非常火的一种算法,在电商界,如亚马逊,天猫,京东等得到了广泛的运用。推荐算法的主要特征就是可以自动向用户推荐他们最感兴趣的东西,从而增加购买率,提升效益。推荐算法有两个主要的类别:

    一类是基于物品内容的推荐,是将与用户购买的内容近似的物品推荐给用户,这样的前提是每个物品都得有若干个标签,因此才可以找出与用户购买物品类似的物品,这样推荐的好处是关联程度较大,但是由于每个物品都需要贴标签,因此工作量较大。

    另一类是基于用户相似度的推荐,则是将与目标用户兴趣相同的其他用户购买的东西推荐给目标用户,例如小A历史上买了物品B和C,经过算法分析,发现另一个与小A近似的用户小D购买了物品E,于是将物品E推荐给小A。

    两类推荐都有各自的优缺点,在一般的电商应用中,一般是两类混合使用。推荐算法中最有名的算法就是协同过滤算法。

    7、梯度下降法

    梯度下降法 是一个最优化算法,通常也称为最速下降法。最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。好比将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;当然解决问题的方法有很多,梯度下降只是其中一个,还有一种方法叫Normal Equation

    8、牛顿法

    牛顿法是一种非线性最小二乘最优化方法。其利用了目标函数的泰勒展开式把非线性函数的最小二乘化问题化为每次迭代的线性函数的最小二乘化问题。牛顿法的缺点在于:若初始点距离极小值点过远,迭代步长过大会导致迭代下一代的函数值不一定小于上一代的函数值。牛顿法在二阶导数的作用下,从函数的凸性出发,直接搜索怎样到达极值点,也就是说在选择方向时,不仅考虑当前坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。

    从收敛速度来看,梯度下降是线性收敛,牛顿法是超线性的,至少二阶收敛~,当目标函数是凸函数时,梯度下降法的解释全局最优解。一般情况下,其解不保证是全局最优解。当目标函数不是凸函数时,可以将目标函数近似转化成凸函数。或者用一些智能优化算法例如模拟退火,以一定的概率跳出局部极值,但是这些算法都不保证能找到最小值。

    9、BP算法

    BP算法是学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。

    10、SMO算法

    SMO算法是针对求解SVM问题的Lagrange对偶问题,一个二次规划式,开发的高效算法。传统的二次规划算法的计算开销正比于训练集的规模,而SMO基于问题本身的特性(KKT条件约束)对这个特殊的二次规划问题的求解过程进行优化。对偶问题中我们最后求解的变量只有Lagrange乘子

    向量,这个算法的基本思想就是每次都只选取一对

    向量其他维度的元素的值,然后进行优化,直至收敛。

    除了以上算法之外,机器学习界还有其他的如高斯判别,朴素贝叶斯,决策树等等算法。但是上面列的10个算法是使用最多,影响最广,种类最全的典型。机器学习界的一个特色就是算法众多,发展百花齐放。

    下面做一个总结,按照训练的数据有无标签,可以将上面算法分为监督学习算法和无监督学习算法,但推荐算法较为特殊,既不属于监督学习,也不属于非监督学习,是单独的一类。

    监督学习算法:

    线性回归,逻辑回归,神经网络,SVM

    无监督学习算法:

    聚类算法,降维算法

    特殊算法:

    推荐算法

    除了这些算法以外,有一些算法的名字在机器学习领域中也经常出现。但他们本身并不算是一个机器学习算法,而是为了解决某个子问题而诞生的。你可以理解他们为以上算法的子算法,用于大幅度提高训练过程。其中的代表有:梯度下降法,主要运用在线型回归,逻辑回归,神经网络,推荐算法中;牛顿法,主要运用在线型回归中;BP算法,主要运用在神经网络中;SMO算法,主要运用在SVM中。

    机器学习与大数据的结合产生了巨大的价值。基于机器学习技术的发展,数据能够“预测”。对人类而言,积累的经验越丰富,阅历也广泛,对未来的判断越准确。例如常说的“经验丰富”的人比“初出茅庐”的小伙子更有工作上的优势,就在于经验丰富的人获得的规律比他人更准确。而在机器学习领域,根据著名的一个实验,有效的证实了机器学习界一个理论:即机器学习模型的数据越多,机器学习的预测的效率就越好。

    成功的机器学习应用不是拥有最好的算法,而是拥有最多的数据!

    在大数据的时代,有好多优势促使机器学习能够应用更广泛。例如随着物联网和移动设备的发展,我们拥有的数据越来越多,种类也包括图片、文本、视频等非结构化数据,这使得机器学习模型可以获得越来越多的数据。同时大数据技术中的分布式计算Map-Reduce使得机器学习的速度越来越快,可以更方便的使用。种种优势使得在大数据时代,机器学习的优势可以得到最佳的发挥。

    感谢您的观看,如有不足之处,欢迎批评指正。

    在此我向大家推荐一个大数据开发交流圈:

    658558542    (☛点击即可加入群聊

    里面整理了一大份学习资料,全都是些干货,包括大数据技术入门,大数据离线处理、数据实时处理、Hadoop 、Spark、Flink、推荐系统算法以及源码解析等,送给每一位大数据小伙伴,让自学更轻松。这里不止是小白聚集地,还有大牛在线解答!欢迎初学和进阶中的小伙伴一起进群学习交流,共同进步!

    最后祝福所有遇到瓶颈的大数据程序员们突破自己,祝福大家在往后的工作与面试中一切顺利。

    展开全文
  • H2O能够让Hadoop做数学,H2O是基于大数据的 统计分析 机器学习和数学库包,让用户基于核心的数学积木搭建应用块代码,采取类似R语言 Excel或JSON等熟悉接口,使的BigData爱好者和专家可以利用一系列简单的先进算法对...
    H2O是开源基于大数据的机器学习库包
    H2O能够让Hadoop做数学,H2O是基于大数据的 统计分析 机器学习和数学库包,让用户基于核心的数学积木搭建应用块代码,采取类似R语言 Excel或JSON等熟悉接口,使的BigData爱好者和专家可以利用一系列简单的先进算法对数据集进行探索,建模和评估。数据收集是很容易,但是决 策是很难的。 H2O使得能用更快更好的预测模型源实现快速和方便地数据的挖掘。 H2O愿意将在线评分和建模融合在一个单一平台上。
    H2O提供了机器学习的培训手册供学习:H2O训练,介绍使用H2O实现分类和回归等算法。包括随机森林 Generalized线性和Gradient Boosted 等。

     

    展开全文
  • 在网上查了一些资料,整理了一下大数据,数据挖掘,机器学习,深度学习和云计算这些概念的区别和联系,希望能对数据科学的初学者有所帮助
  • 大数据的定义大数据(big data),指无法在一定时间范围...大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越 可能提...
  • 从字面意思,我们可以把“机器学习”初步理解为让机器学习。所谓的机器,大部分情况下是你所写的一个程序。而你就是这个“机器”的老师,你需要找很多资料,供“机器”学习使用。例如,在你需要让你写的一个程序能够...
  • 张长水:大数据时代的机器学习 VS 传统机器学习机器学习角度看,“大数据”指的是数据量大,数据本身不够精确,数据混杂,数据自然产生。机器学习大数据的处理的两个挑战: 数据量大导致计算困难 分布在不同...
  • 今天,大数据、数据科学、机器学习分析不再只是热词,已经真实地渗透于生活方方面面。根据福布斯,到2025年,全球每年将会有 175 泽字节的数据产生。Kyligence的诞生为企业带来了极速的大数据分析体验 。当企业要对...
  • 大数据是目前一个非常活跃的研究领域。由于大数据的海量、复杂多样、变化快的特性,对于大数据环境下的应用问题,传统的在小数据上的机器学习...本文主要介绍和总结当前大数据机器学习和模式识别算法的分析与应用。
  • 大数据的定义 大数据(bigdata),指无法在定时间...大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的。相反,对于机器学习而言,越多的数据会越可能提升模型...
  • 但是,从2010年以后,随着大数据概念的兴起,机器学习大量的应用都与大数据高度耦合,几乎可以认为大数据机器学习应用的最佳场景。譬如,但凡你能找到的介绍大数据魔力的文章,都会说大数据如何准确准确预测到了...
  • 主要分析和总结当前用于处理大数据的机器学习算法的研究现状,此外,并行是处理大数据的主流方法,因此介绍一些并行算法,并引出大数据环境下机器学习研究所面临的问题,最后指出大数据机器学习的研究趋势
  • 白话大数据机器学习-高扬在线阅读百度网盘下载(equ6)书名:白话大数据机器学习作者:高扬格式:EPUB, HTMLZ, PDF路径:点击打开出版:机械工业出版社排序作者:高扬排序书名:白话大数据机器学习日期:09 12月 2018...
  • 接下来,我们将分析数据科学的趋势,找出如何在未来的人工智能领域的大数据机器学习中获得好的工作。如何在未来的大数据机器学习领域找到一份好工作?1,我们需要牢牢把握概率和统计,学习和掌握一些算法,如...
  • 文章目录目录1.分配更多的内存2.使用较小的样本3.将数据提交至服务器上4.更改数据格式5....因此,如何解决大数据的读入问题是解决大数据机器学习的第一步。 1.分配更多的内存 如果硬件可以支持分配更多...
  • 大数据、人工智能是目前大家...大数据是人工智能的基础,而使大数据转变为知识或生产力,离不开机器学习(Machine Learning),可以说机器学习是人工智能的核心,是使机器具有类似人的智能的根本途径。 本文主要...
  • 日前,O'Reilly 公司在伦敦Strata举办了一个为期数天的数据会议,与会者为此更好地了解大数据机器学习(ML)和人工智能的发展方向。这些新兴技术在过去5年中发展迅速,而新技术、流程和应用程序改变了组织管理数据的...
1 2 3 4 5 ... 20
收藏数 85,495
精华内容 34,198