落地机器学习前,我们应该思考清楚的几个问题
郭蕾 微信公众号-InfoQ

随着大数据技术的普及和发展,机器学习技术从搜索引擎开始,伴随着互联网、移动互联和共享经济的发展,日益成为改善用户体验、提高产品质量的核心组件。机器学习技术不仅给互联网带来了源源不断的收入(互联网广告),甚至也在改善每一位用户的日常电商购物、交通出行、旅游等方方面面的体验。那如何在已有的系统或者业务中落地机器学习相关实践呢?在开始使用机器学习之前,企业应该有哪些准备?


 问:机器学习现在非常火热,很多企业也逐步开始考虑在业务中实践机器学习,你认为机器学习适合解决什么样的问题?

答:抛开 AI 不谈,机器学习在很多领域已经证明了其具有非常巨大的价值,尤其是在互联网领域,无论是杀手级应用互联网广告、还是电商内容平台推荐、风控欺诈识别以及共享出行,机器学习已经成为互联网变现提高盈利的重要手段。从这些主流应用中可以看出目前的机器学习主要是在解决复杂的预测优化问题,所以对于企业来讲,应当思考业务环节中任何涉及优化策略的业务都可以尝试实践机器学习,比如新产品目标用户推广、销售策略优化、客户流失预警等等。


 问:那在落地机器学习之前,企业应该有哪些准备?什么样的团队适合实践机器学习?

答:我和很多企业聊过,这个问题和第一个问题构成目前企业应用机器学习最大的痛点。对于大部分企业来讲不会像互联网企业一样有强大的数据科学和工程团队,但是我也注意到很多传统企业也是有数据分析和业务开发团队的,这是一个很好的基础,利用这些团队可以组建或培训适应机器学习应用的数据科学团队。然后可以着手先尝试以最小成本构建起端到端的机器学习管道,这包括基础平台的构建、收集数据的渠道、特征工程和模型开发的流程以及最终模型的部署上线,有了这样的管道和平台,就可以持续不断的优化性能进而达到预期的业务目标,然后可以慢慢尝试应用到其它业务场景。


 问:结合你的工作经验以及业界的一些实践,你认为企业落地机器学习的最佳路径是什么?

答:始终以业务优化作为指导,无论是任何一个步骤,都需要思考是否是有利于达到最终的优化目标。最佳路径是在构建整个流程管道和平台的同时,力争快速部署模型到系统中去。当模型部署上去之后,通过反馈结果再持续的迭代和改进机器学习平台和整个管道,此过程中没有必要去追求完美的模型和完美的系统,快速响应业务和持续演进能力是关键。


 问:在落地机器学习的过程中,企业应该注意避开哪些坑?

答:落地机器学习的过程,确实会有很多的坑,比如:

  1. 学习目标应尽可能的简单以及可以量化,如果目标定义模棱两可,很难想像能做出很好性能的模型。

  2. 应当首先从简单线性模型开始,不要上来就盲目迷信复杂的非线性和深度模型,事实上每一个模型都有其适用场景和优缺点,从线性模型出发首先可以提供一个好的基准,其次也能帮助发现数据中存在的问题,比如说剔除一些噪音数据,解释一些复杂的特征数据等等。

  3. 确保训练数据、测试数据和线上数据的分布一致,这个说起来简单,实际上随着业务的复杂性增加,很多情况下训练数据和线上数据并不一致。有可能是业务调整导致线上预测只是之前的一小部分数据集,也有可能训练数据集只是取的业务其中有偏差的一部分数据。

  4. 始终以机器学习平台管道构建为目标,不要局限于短期的性能改善,作为一个优化系统,更多的尝试意味着更大可能的性能提高,有了平台的基础,才能持续稳定的改善机器学习模型的性能,提高业务收益。


 问:在一个相对完整的机器学习平台中,你认为应该包含哪些技术栈?

答:机器学习平台是一个相对复杂的系统,主要包括离线、近线、在线三个方向的技术栈。

  1. 离线系统的技术栈主要是构建在 Hadoop 系统,如日志数据存储(HDFS)、特征数据仓库(Hive,SparkSQL,…)、ETL 计算、MapReduce 特征工程、模型训练和评估,目前一些主流的基于 GPU 的深度学习也可以统一到 YARN、Kubernetes 等系统中进行统一的调度管理。

  2. 近线主要涉及到一些流式的计算,如计算各个产品维度的滚动值、历史值等,涉及到的技术栈包括消息系统如 Kafka、流失计算如 Storm、Flink、Spark Streaming 等。

  3. 在线主要涉及到在线特征管理和计算以及模型执行,在线系统对于系统的可用性有很高的要求,主要涉及的技术栈包括各种 NoSQL 数据库用来管理和快速存取特征,Rest 或微服务架构管理各种模型和所依赖的特征。除模型预测外,在线系统还可能包括策略系统:主要根据模型预测做相应的策略,此系统一般会和业务系统结合也是偏向服务化的技术栈。

除此之外,还会有监控、日志收集、调度等系统辅助整个平台的运行,这些技术栈并不是特别固定,可以根据实际需要选取和研发。


 问:做应用的时候,大家都经常喜欢说架构。机器学习平台有架构之类的说法吗?

答:机器学习平台并没有脱离软件工程,架构在整个平台依然扮演着非常重要的作用。

  1. 和传统应用一致,在线机器学习平台目前主要也是分层的微服务架构,通过微服务可以把数据存取及模型执行以及策略执行做很好的解耦,数据服务通过数据库存取一般是 IO 密集型的,模型和特征计算是 CPU 密集型,各服务和应用可以单独优化和部署,进而提高整个在线系统的性能和可用性。如果在线系统涉及到模型增量运算,对于在线系统还需要做好线上模型更新和隔离,这时分层和服务架构更加重要而且对层次划分也更细致。

  2. 机器学习平台还涉及到很重要的离线数据平台,底层一般是构建在 Hadoop/YARN 之上的资源管理系统,数据和特征存储在上层的 HDFS/Hive 或其它 Hadoop 数据仓库,此外构建基于内存的分布式迭代计算框架,也可以使用 Spark 或者 TensorFlow 等主流框架,再上层构建完整的机器学习特征工程和模型训练的管道。


 问:你认为一个机器学习从业人员和传统的应用工程师(程序员)最大的区别是什么?他们的能力侧重点各是什么?

答:从机器学习的应用来看对于传统的应用工程师也提出了新的挑战,首先机器学习应用是一个融合了离线平台和在线平台的更加复杂的应用,机器学习从业者主要包括数据科学家和机器学习工程师,他们往往是围绕数据和优化目标来设计系统,而为了很好的达到优化目标和业务预期,实际机器学习从业者需要对业务、统计和机器学习以及工程领域都要有很好的理解,而他们的相对弱势是对于系统架构如可用性和服务化等的掌握。传统的应用工程师在这方面较有优势,工程能力是一个很好的基础,也可以帮助他们扩展到面向数据和业务的机器学习应用系统。

CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢