实用的机器学习框架“避坑”方案
Posted 金石易服
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实用的机器学习框架“避坑”方案相关的知识,希望对你有一定的参考价值。
什么是机器学习,长期以来却众说纷纭。社会学家、逻辑学家和心理学家都各有其不同的看法。
比如,Langley(1996) 定义的机器学习是“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。Tom Mitchell的机器学习(1997)对信息论中的一些概念有详细的解释,其中定义机器学习时提到,“机器学习是对能通过经验自动改进的计算机算法的研究”。Alpaydin(2004)同时提出自己对机器学习的定义,“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。”
尽管如此,为了便于进行讨论和估计学科的进展,有必要对机器学习给出定义,即使这种定义是不完全的和不充分的。顾名思义,机器学习是研究如何使用机器来模拟人类学习活动的一门学科。稍为严格的提法是:机器学习是一门研究机器获取新知识和新技能,并识别现有知识的学问。这里所说的“机器”,指的就是计算机,电子计算机,中子计算机、光子计算机或神经计算机等等。
机器学习是人工智能的核心,是学习研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。在机器学习框架设计上,没有普世的最好框架,只有最适合自身应用场景的框架。设计一个实用高效的机器学习框架,要考虑哪些具体因素?目前那些总价值超过8000万美元的开源框架,能否满足企业需求?要回答这些问题,可以先从人工智能专家的过往“踩坑”经验谈起。
从机器学习系统到“成熟商用”有7道门槛。
门槛1: 有效数据量快速增长
随着越来越多的数据被记录下来,大数据背景下的机器学习,计算效率成为核心问题之一。机器学习系统必须具备可扩展性,才能有效应对数据增长。
门槛2: 机器学习算法-No Free Lunch
No Free Lunch是监督学习领域著名的定理,指的是没有可以解决所有问题的完美机器学习模型。不同目标场景要采用不同的机器学习算法。所以机器学习框架还需具备算法开发的友好性。
门槛3: 数据科学家的稀缺性
人工智能需要对算法和业务问题都很精通的数据科学家,但好的数据科学家是稀缺的,因此机器学习解决方案要尽可能的“智能化”,降低对数据科学家对依赖。
门槛4: 机器学习计算和传统ETL计算的差异性
1. 计算
对比于ETL相对“简单”的运算,机器学习算法对数据的运算更复杂,比如一些非线性模型需要密集的计算。所以实际中,不仅要考虑到不同计算资源的特性,同时还要调整计算模式,降低因分布式计算给通讯、同步、灾备等带来的overhead。
2. 通讯
很多机器学习算法在计算过程中会频繁使用到全局或者其他节点的信息,对网络吞吐和通讯延迟的要求要远高于ETL任务。同时,很多机器学习任务对于一致性的要求要低于ETL任务,所以在系统的设计上可以使用放松的一致性要求。
3. 存储
ETL处理的是各种来源不同的数据,其中反复迭代运算较少。而机器学习算法反复迭代运算很多,有大量不断擦写的中间数据产生,对存储的使用效率、访问效率有着更高的需求。
4. 灾备和效率的权衡
与ETL计算任务不同,机器学习计算任务流程相对复杂,中间状态较多,在较细的粒度上进行容灾,会增加执行过程中的额外开销。因此在容灾策略和容灾粒度上,机器学习计算任务和ETL计算任务之间的权衡点不一样。
门槛5: 资源差异性
相同的机器学习算法可能会在不同的资源、不同的环境下被使用,因此机器学习算法系统本身要能够做更好的抽象和设计,屏蔽底层资源的差异性,使开发部署更为方便。
门槛6: 系统的开放性
机器学习系统要能够便于集成部署在实际业务系统中。同时,因为多种多样的ETL平台会产生机器学习所需要的数据,所以机器学习系统要能够开放地对接已有的业务ETL、决策系统。
门槛7: 大规模分布式机器学习系统的复杂性
大规模分布式机器学习系统涉及的环节很多,计算逻辑复杂,因此整个系统架构设计的清晰度、执行过程的可理解性、执行的可追踪性、实际系统的可运维性都是非常重要的。同时,要在不同的数据规模下,权衡分布式 overhead和收益。
当今巨头科技公司纷纷推出开源机器学习框架,很大程度上降低了人工智能的研究门槛。但目前这些备受追捧的开源框架真能满足企业完成实际复杂业务的挑战吗?答案可能并不乐观。从根本上来说,目前最为流行的计算框架如Hadoop、Spark,其重点任务大多是ETL类计算。前文提到过机器学习的计算任务相比于ETL计算有很多不同之处。此外,一些算法框架比如tensorflow等,比较注重研究上的易用性,算法上偏重于深度神经网络一类算法,从而在效率上有所舍弃。而另外一些注重生产应用的算法框架,特别是分布式框架,在算法二次开发上又捉襟见拙。
除此之外,机器学习还会遇到很多瓶颈。从本质原理来说,目前的机器学习方法和人脑机制差异还是巨大的,更多的是通过大量数据来训练一个可以尽量逼近训练数据分布的模型,这种本质差异决定了机器学习离人脑思考方式还很遥远。最近深度学习和神经网络很火,最常用的卷积神经网络CNN的发明者都不乐意称呼卷积神经网络这个名字,更乐意称呼深度卷积网络模型等名字,因为他觉得自己在搞的模型和人脑差异太大,不应该用神经网络的名称。从科研角度来说,一般每隔若干年就会有一次技术的质变的突破,然后紧接着一些修补完善。之前火过的SVM、AdaBoost、SIFT等,经过几年的优化后,性能基本达到极限,已经发展不动。这两年火了深度学习,目前还处于各种优化提高阶段,但应该也会到一定瓶颈后发展不动,然后需要更多的质变的突破。从工业应用来说,机器学习的方法应用会越来越多,目前应用的瓶颈主要体现在下面一些地方:1. 经验。机器学习的方法对于一般的工程师并不友好,如果没有了解原理和做过一些实验,这就是一个参数很多的黑盒,弄不好效果就会很差。2. 数据量。效果好的方法大都是有监督训练的,这就需要很多标注数据,数据的质量、归一化方法、分布等,对模型的效果都影响很大。3. 计算能力。很多模型,特别是深度学习模型,训练时间和资源消耗很大,如果需要多次训练调整策略和参数,周期很长。实际部署运行速度也受模型大小和种类影响,速度和效果会有一个权衡。4. 工程实现能力。好的算法要有好的工程实现,才能发挥正常的作用,代码能力不行,再好的模型也不行。5. 算法搭配。实际问题往往不是一个单一的算法可以搞定的,需要多个相关算法合理的搭配组合,具体问题具体分析解决。6. 技术高度。机器学习还比较前沿,效果和应用场景都有天花板,期望未来几年会有更多技术突破。
如何见招拆招,设计出实用的机器学习系统?
那么设计一个实用的机器学习系统究竟要怎么做呢?
我们以第四范式的大规模分布式机器学习框架GDBT为例。它的设计目标可以概括为高效、智能、易开发、易部署、易运维、易扩展、覆盖场景广泛。
1.高效
计算
根据计算硬件的不同特性,GDBT采用不同版本的本地计算,尽可能利用好加速指令。同时考虑到不适所有任务都需要分布式执行,所以同时对分布式、单机运行都尽可能做到最优。
存储
不同的存储设备的价格、速度和容量不一样,GDBT要能适应不同的存储配置、最优化存储访问速度、和存储使用效率。
网络
通过合理设计计算模式,调配网络通讯,GDBT最优化网络通讯延迟、网络使用效率。
高效灾备
因为机器学习算法中间状态很多,为避免overhead问题,GDBT的灾备更加偏重于机器学习算法的核心参数。同时基于不同计算规模,制定不同灾备策略。
2.智能
算法智能
机器学习中特征工程和模型调参需要数据科学家对机器学习算法和实际业务有较深理解。因此,先进的机器学习系统需要提供自动或半自动特征工程,例如GDBT就提供包括自动特征生成、自动特征选择、特征自动组合在内的自动特征工程,以及自动模型调参。
运行智能
根据不同应用场景,GDBT可以自动适配运行方式,获得更高的运行效率。
3.易开发
GDBT提供工业级的开发者易用性,尽量对算法开发者屏蔽底层细节,提供对机器学习组件的良好包装,能够方便实现机器学习所需的各种分布式模式。在GDBT上,只需要数百行代码,就可以实现逻辑回归、矩阵分解等算法的分布式版本。
4.部署&维护
GDBT支持多种平台,例如Yarn,Hadoop MR、MPI等,并方便跨平台迁移。它能够实时监控运行状态和进度、方便调试与错误跟踪。
5.覆盖广泛应用场景
通过重新设计、深度整合现有模型和算法,合理设计计算模式和流程,GDBT能够提供更加高效的符合实际应用场景的算法,比如GDBT上的算法能够兼顾离散特征和连续特征,最优化I/O和计算资源的使用效率。
以上是关于实用的机器学习框架“避坑”方案的主要内容,如果未能解决你的问题,请参考以下文章
学术科研无从下手?27 条机器学习避坑指南,让你的论文发表少走弯路
实用小技巧MATLAB从入门到精通:MATLAB十个常见问题及解决方案