大规模机器学习平台的整体架构和实现细节(万字解析,附PPT)

近日,第三届“国际人工智能与大数据高峰论坛”在北京国家会议中心召开,本届峰会聚焦于前沿人工智能技术与产业应用。作为人工智能行业领军人物,第四范式联合创始人、首席架构师胡时伟受邀出席大会,并以“大规模机器学习平台的技术实现”为题,发表了主题演讲。

胡时伟曾主持了百度商业客户运营、凤巢新兴变现、商业“知心”搜索、阿拉丁生态等多个核心系统的架构设计工作;后作为链家网创始团队成员,从0开始完成链家网新主站的架构设计,推动链家系统和研发体系的互联网化转型。现任第四范式首席架构师,带领研发团队打造出国内首款人工智能全流程平台“第四范式·先知”。

以下内容根据胡时伟主题演讲编写,略有删减。

 

大家好!我是来自第四范式的胡时伟,非常荣幸能够与大家分享第四范式在AI技术方面的探索以及全新的尝试。

首先,我们讲到人工智能时,大家会问,它是不是还停留在一个不确定是否成立的时代?尽管它已经可以做一些图像识别的工作,在下围棋或者打游戏等方面甚至战胜了人类。但是人工智能在商业和工业生产领域的实际表现如何呢?我列出了以下几个方向,均是第四范式在服务客户的过程中,真正利用人工智能技术产生效果的领域,比如实时风控、交易反欺诈、个性化推荐等,这些领域都实现了运营效果数倍的提升。

AI的三大优势:精细、智能、高效

AI为何能促进业务提升呢?我们总结了一下,在以下三个方面,AI会和以前的方式有所区别。

首先是精细,人工智能系统对个性化和微观业务场景的分析和预测能力的要求已经超过过去的想象。以反欺诈为例,如今,大部分交易都已经转移到移动支付或者互联网上,欺诈交易的比例和绝对数量变得越来越多。我们过去怎么解决这个问题呢?每当出现一笔欺诈交易时,由案件中心来对交易进行分析,然后整理出一些规则,例如这笔交易的金额大于某个数额,或是一定时间范围内,该笔交易的地点与上一个交易地点之间的距离过大,案件中心会认为它是一笔欺诈的交易。实际上,在影响欺诈的因素当中除了强规则,还有很多长尾因素,例如全国每一个区域发生交易欺诈的规律都是不一样的,所以过去专家整理出的上百条规则只能对全国的交易进行分析,而对于每个具体的省市,甚至是某一个村,这些规则其实是覆盖不了的。

如今,我们利用AI技术,可以实现更加精细的分析和预测。就像上图表示的一样,传统的方式是基于一些规则将人群划分,假设全国有两亿名移动支付用户的话,划分为上百种人群,单一群体就有两千万,丢失了对每个客户的个性化描述。而机器可以把客群分成上千万甚至是上亿份,可以直接定位到个人来总结出统计规律,这样便不易造成误判或者是漏判。

其次是智能。此前,为了产生商业智能我们会利用大数据进行分析,去找规律中的较强的变量。但随着时间的变化,这些变量会发生一定的改变,例如在营销领域,以往的做法是找出一些规则——买苹果手机或者相机可能是高端的消费,对其进行营销比较有效果。但是不同时代的高端消费品是不同的。所以,采用专家规则的话,每隔三个月到半年就要对规则进行更新,人工智能则不然,我们可以基于数据做成一个闭环的系统,它能够用机器代替人,从广泛的数据当中筛选出海量的规则,并且规则以及权重可以随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

最后一点是高效。之前提及的反欺诈、新闻推荐、营销等领域,它们对实时性的要求越来越高,反欺诈系统必须在几十毫秒之内判定交易是否有问题,营销系统需快速判定客户对某个商品的消费意愿。在某种意义上讲,企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

构建商业AI能力的五大要素

那AI究竟是什么呢?在AlphaGo1.0时代,它学习了几千万盘的棋谱数据,并依靠深度学习、迁移学习,强化学习等机器学习算法,成为了围棋界的顶尖高手。我们认为大数据就是大米,机器学习是电饭锅,人工智能就是做出来的米饭。在AI领域,就是利用各个领域的海量数据,依靠机器学习的方式,来输出人工智能的能力。

我们认为构建商业AI的能力有5个要素,分别是有意义的过程数据、反馈数据、算法、计算资源、业务需求。

这里通过一个实际案例来解释这5个要素,假如我是一个市场覆盖率很高的点餐Pad提供商,为了实现AI一键点餐的功能,增加食客满意度,同时提升翻台率,那么我就需要收集食客们历史点菜记录、浏览记录,以及当前餐馆的菜品安排、客流量等等相关数据,也就是上文提到的过程数据。

此外,企业还需要找到可被机器学习优化的业务目标。比如,尽管点餐Pad的最终优化目标是翻台率,但企业需要将它转换为机器能够理解并且优化的指标,即点餐时间、上菜时间,食客进食时间这三个指标,只要能够提升这三项指标,就可以提高翻台率。假设餐厅有25种菜,PAD选择推荐一道菜,即使推荐错,也并不太会影响实际体验。但这个反馈数据可以用于判断某个食客对某道菜品的喜爱程度,将这个概率和厨房做菜时间、菜品平均进食时间等指标,合做成函数后进行排序,再通过Pad实时推荐的方式供给客户选择。这样就完成了实际需求(翻台率)到机器学习问题(某个人喜欢某个菜品的概率)的转换。

除此之外,企业还需要收集数字化、不间断的反馈数据,形成闭环。今天给顾客A推荐了X这个菜,如果他选择了,就反馈1,不选择就反馈0。这些数据在如今很多企业以及场景中是可以收集的,因此我们要把数据的采集及存储过程做好。

如今,有很多行业已经具备了以上三个要素,为什么AI并没有广泛的应用?我们认为还缺少算法和计算资源。如果我想判定A喜不喜欢X,机器会给出一个概率,算法解决的是让这个概率变得更准。像AlphaGo、无人驾驶、人脸识别等运用的机器学习算法,其实都是用大量的计算资源来对数据进行计算,优秀的算法下层还要有很强的计算资源来支持。

商业AI构建的难点

对于企业来说,想要走向AI时代,应该具备什么样的条件呢?首先从如何利用数据的角度上讲,这个数据的维度应该是数千万到数十亿的。我们不仅要进行全国欺诈交易规则的判定,还要精细到每个省、市、村,每个商品、每类人群。如果要把全国十几亿人划分成不同的组,每个组里面可能有几千万人,这就需要非常庞大的AI进行大规模的特征工程探索。

我们今天应该考虑的是以省的成分去区分还是以市的成分去区分,如果以市的成分区分,那这两个市是合并还是区分。如果用人工的方式,我们就需要非常多的技术人员或业务专家通过一些方式去写算法或者规则。假设我们有几千万条数据,将这些数据进行机器学习时,是需要一个非常大规模的算法。如今,在业界最为流行的算法就是神经网络,神经网络最大的特点就是深层,深层的神经网络能够表示的客观现象非常丰富。理论上说,对于训练好的网络,我们把数据输入进去,它会告诉你哪个是猫和狗。但是实际上,这个训练好的网络非常难获得。我们用神经网络去判断一个交易是不是欺诈,还是判别每个食客对这个菜是否产生兴趣时,神经网络的结构和中间的函数,都需要经验丰富的机器学习专家来进行反复的调试。

通常大家会说这个过程是炼丹,通过一个模型的变化,来适应场景,这就导致企业面临需要招聘大量AI人才的困境。且反欺诈的模型,是不复用在点餐PAD上的。这里面存在着一个改进的机会,本身人去探索模型的过程,是不是也可以被机器替代?我们可否用一个人工智能的数据科学家去替代人,并通过特殊工程的方式自动的对场景建模。

另外还有一个点叫做模型除错。建立好的模型在实际的应用过程中,会出现各种各样的问题,其中最常见的就是过拟合。教科书上告诉大家要做交叉验证,但验证过程中,发现你的模型在线下销售特别好,线上却出现大量时间序列的问题,比如我们利用历史数据得到规律去预测未来。但由于数据极为复杂,有时却无法分清哪些是历史和未来,这与系统如何设计信息有关系,理想状况下,专家会利用经验排除过程中的风险。

如何把一个团队的数据工程师变成AI专家呢?我们认为需要对下图这四个方面进行一些改进。首先是特征工程,它是把原始的数据通过一些方式进行衍生,能够把人群能够划分足够精细的这么一种变量衍生的方式。

其次是模型规模。我们原先用统计的方式做模型,通常有十到二十个变量,现在用大数据、分布式的方式可以做到成百上千个变量。由于现在拥有海量的数据,所以足够支撑一个上亿乃至数千亿规模的维度变量,这就需要极高维度、分布式的机器学习系统。

另外在模型算法和除错方面,我们也需要一些成型的产品,让数据科学家、工程师直接调用,产生有效的模型,避免犯错。

敏捷的AI应用构建平台——先知

沿着这个思路,第四范式打造了先知平台,它可以大幅缩减数据工程师在数据处理、模型调参、模型评估以及上线方面的工作量,从而把大量的时间花在如何搜集有意义的数据上。

下图是类似于操作系统的先知界面,如果我们有一个TB级的原始数据,例如某银行历史年交易数据,里面可能覆盖了几千万条,甚至上亿条交易数据,其中包含了交易时所对应的人、卡与交易的信息,我们只要通过拖拽的方式做一个图(如下图),就能轻松实现一个完整的机器学习过程。

先知会在数据拆分、数据清洗、特征工程等方面做一些简化。更进一步讲何为特征工程,比如如何能够生成一条规则,机器可以把人的职业、性别、年龄、工作地点、消费地点、时间、以及消费金额等特征进行组合,就相当于把几千万条交易分成几百万类或者几十万类,让机器从这几百万类当中判定哪些交易具有欺诈风险。

该过程以往要技术人员去写SQL或者Spark脚本的方式产生,如今在先知中,机器可以自动产生脚本、程序,其中有两种特征编码的方式和支持多种高维特征处理方法,像数值处理,日期处理,切词和排序等等。

另外,特征重要性分析防止穿越。比如,我们用过去的交易行为数据来判断该用户是否会在短信营销之后,购买理财产品。因为用户购买理财产品要预测的事情,我们不会把它当做已有的变量,而用户资产会随着买理财的数额发生变化。所以,一旦把用户购买的资产作为一个特征的话,就会发现凡是用户在月底资产上升的都喜欢买理财产品,这就是一个典型的穿越特征。并不是因为该用户资产上升,才喜欢买理财产品,而是因为他买了理财产品之后资产才上升。

实际建模过程中,还会包含一些人很难发现的间接穿越特征,如上图所示,它会表现为一个非常长的条,其中就有可能涉及到穿越的特征,我们要把这些特征删除。

另外还有一个叫做自动特征组合。假设一个人在半小时内发生了两笔交易,地点分别在北京和深圳,这就是一个违背自然规律的事情。

实际上,数据当中还有多少组合,数据科学家不一定能够轻易判断出来。所以先知具备自动特征组合的探索功能,在一个非常广的空间里面,通过本质上是一个暴力搜索的方式进行探索。实际上由于计算代价很高,纯粹的暴力搜索是做不到的。我们通过一些算法,将它降到一个正常情况下可以接受的时间内,且能做到5阶甚至6阶的有效特征,这个其实可以大大减少科学家的工作量,以及对数据理解的时间。

另外,模型调参也是一个比较复杂的过程。通常来讲,调参是一个寻找全局最优的方式。但调参又不是一个凸函数,所以它很容易找到局部最优。先知平台嵌入了自动调参的算法,我们把训练集合和测试集合放进去,系统可以自动告诉你一个相对比较优的参数组合。自动调参功能的实现让普通的业务人员也可以轻松完成过去只有数据科学家才能完成的工作。

先知平台中,还有一些可视化的评估报告,可以让用户很容易的判断一个模型的效果。

除此之外,企业在实际构建人工智能应用的过程当中,如何将已经做好的模型投入到生产中是非常重要的环节。我们刚刚讲到,假设我们已经有了几千万个特征甚至几亿个特征变量,意味着最后可以生成上亿的规则,这些规则如何在系统中应用呢?比如在反欺诈系统中,可能要在20毫秒之内,判定一个交易是不是欺诈。所以对于每个企业来讲,需要一个极强的线上分布式预估系统。目前,只要有足够的底层计算资源,先知平台可以通过一个非常简单的方式,就可以形成一个处理上万并发请求的实时接口。下图就是先知平台的架构,刚刚界面里面是调研的平台,我们可以通过拖拽的方式完成模型训练的过程。另外还有自学习平台和预估服务平台,把源源不断的知识送到模型系统中,从而让它适应新的环境,并且提供实时的在线应用。

先知平台背后的技术积累

前面讲到先知平台可以做什么,后面想跟大家分享一下先知平台实现过程当中的一些技术思考。机器学习最重要的是算法,算法的选择可以参考工业界应用算法的四个象限。

过去,工业界通常会用一些逻辑回归的模型或者决策树,其特点是变量和层数比较少,在数据量小的情况下比较有用。

右上角是一个微观特征和复杂模型的象限,可以认为是一个由多个模型集成的一个非常深度的网络,或者是一个非常复杂的网络结构,同时会使用大量的变量。现阶段工业界还难以做到这一点,因为其需要几千台机器来去解决一个问题,成本过高。

另外两个选择中,一个是宏观特征和复杂模型,也就是深度神经网络今天所走的路,这个网络的输入项可能只有几百个变量,但是网络的深度比较深,我们可以通过人去调试,来最后得到一个好的效果。

另外一条路其实是像谷歌、百度走的方向,是微观特征和简单模型。例如我们依然使用逻辑回归的算法,但是我们把一个变量的数量提升到亿级别甚至几十亿级别,这样通过变量的组合,同样可以用线性模型表达非线性的问题,从而得到比较好的效果。

基于此,第四范式自主研发了大规模分布式并行计算框架GDBT(General Distributed BrilliantTechnology)。我们自主研发机器学习框架的目的,是因为像Tensorflow这类的机器学习框架面向的是“深”,就是我们前面所讲的左上角的象限,它可以接受比较小的数据输入,但要做比较复杂的结构,就需要非常多经验丰富的机器学习专家,针对一个问题要花费三个月甚至是更长时间才能调出一个好的模型。

第四范式的GDBT可以用数据本身的组合去进行一些破解。这样对使用者来说,对数学等概念性的理解要求降低,只需对数据有一定的了解。

GDBT也开发了很多标准的算法优化,其中有一个算法叫做逻辑回归,一般开源的框架里面也有逻辑回归,但是在特征维度、数据兼容性上、样本数据、是否要抽样等方面与我们有本质的区别。

另外在算法当中,有一个树的算法是GBDT,由于底层有一个大规模的分布式框架的支持,所以在先知平台内部,样本数量和特征数量其实是没有限制的,由平台的结点规模而定,这样我们可以多棵树进行迭代。

再向大家介绍一下高性能的特征工程框架。我们原始有一个二维表,比如说做一个新闻推荐,我们就会有用户的相关信息,比如手机型号、浏览器型号。如果把它转为一个高维稀疏的高维矩阵的话,其实就成了用户手机型号、屏幕大小、用户位置及时间、新闻标题等,我们会这些数据转化成一个个特征值,整个矩阵就变成了高维稀疏的模型,这个过程中要对数据的每一行进行大量的组合。

这个过程中,我们需要高性能的特征工程框架。在解决性能问题时,第四范式主要做了以下几点工作。首先我们前面所讲到的人其实可以写一些伪代码,机器自动翻译成脚本,并把它转译成JVM底层的代码,通过一些缓存的方式,来做到整体的过程优化。这个过程的优化,几千万条、数十TB的原始数据,可以在几个小时之内,形成一个25亿维的高维的特征矩阵。

其次还有一个面向机器学习特征的蓄水池,这个主要解决什么问题呢?我们有一个重要的特征,叫做用户前三次、前五次、前七次交易的平均交易金额,通常我们会用Storm做一个预先计算,但是对机器学习的问题来讲,由于这个特征非常多,所以预先计算会变得特别复杂。所以我们不是预先去计算这些变量,而是我们选择一个实时的数据库,可以迅速的获取一千条数据,然后实时的衍生这些特征。这就需要一个高性能的在线实时数据库,先知中便包含了非常高性能的实时特征运算组件。

此外还有线上服务的支撑,我们刚才讲到用Web层去做的先知的流图,其实它在转化成线上的DAG图的时候,通常要做一些数据拼接、特征工程、特征转换等工作。先知有一个模型工厂、模型仓库的概念,从线上到线下JAVA程序的转变是自动完成的。

先知本质上来讲,在Web上做的UI提交的任务,可以通过一个Kubernetes的架构,它会翻译成一个Spark的任务或者GDBT的任务。也就是说,我们在界面上拖拖拽拽的结果中间会转换成图,然后进行一定的优化和执行。所以说先知里面其实是有一个比较高层次的任务执行工作流引擎。

可以说先知整体是一个容器化的部署,既可以部署在像金融机构等注重绝对安全的企业中,也可以在公有云上运行。我们在设计这个平台架构的时候,其实用的是混合云的架构。但是在企业里面由于一些内核或是运维的原因,特别是银行对于这些基础技术的运用比较谨慎,我们实现了一个符合的应用,其实K8s是用docker和network来完成网络和安全的。我们做了一个轻量级容器,能够把network调度到端口层面来运行,这样就可以做到在企业内部,甚至不需要Root权限,也可以做到应用的高可用。

总结上来讲,先知作为一个平台的目标是使计算的生产力易于获取,我们尽量让大家用GUI和简单的脚本形式,表面上看起来和传统用SaaS做一个模型是一样的,背后实际上是一个高维度的机器学习的框架。对于机器学习来讲,计算是第一生产力——调参的过程就意味着将一个机器学习的过程做几十次或者上百次,而先知的GDBT框架比Spark可以快上数百倍,这就意味着在同等时间内、同样的计算资源下,先知能有探索更高维度模型的机会,最终减少对使用者的需求。

此前,我们运用先知平台在金融领域和互联网领域完成了一些成功案例。在实际的运用过程当中,不需要专业的人员不停调整模型的结构,我们采用一种比较统一的高维度的若干组机器学习,或者基于树的逻辑回归算法,同时辅以大量的数据和机器学习的过程来完成这些案例。

最后,我们还是回到前面讲到的点餐的问题。这个问题如果放在先知上应该怎么做呢?首先要准备过程数据(食客的属性、食客点了什么菜、系统给他推荐的菜他是否接受等),整个数据盘算一下,三个月的过程数据大概有几百GB规模,可以引入到先知平台上。接下来我们采用自动特征组合、自动调参等功能,在三种不同的算法当中进行不同的选择,大概要经历三个72小时自动训练的时间,之后就能够得到一个API,这个API可以嵌入到实际的点餐系统中,就可以为食客推荐他最喜欢的菜品,而且每一个用户都能够看到当前餐馆里面厨师已经做好的菜里面他最喜欢哪一个,体验上也更加人性化、个性化。

综上所述,今天的人工智能,当业务问题满足了五大要素,并且有了一个好的机器学习平台,背后有非常强大的计算能力的情况下,已经可以较为通用的解决一些行业的问题。


第四范式
第四范式

工程机器学习分布式计算框架工程
3
暂无评论
暂无评论~