揭秘机器学习的规模化 - Twitter的机器学习框架

Posted 量化交易员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了揭秘机器学习的规模化 - Twitter的机器学习框架相关的知识,希望对你有一定的参考价值。

编者按:

- 编程已不再是机器学习的高门槛。在硅谷巨头的推动(或者说需求驱动)下,机器学习某种程度上正在成为“基础设施”,机器学习环境未来就像Word、Powerpoint一样成为日常工具,随时可用于处理海量数据。


- 对机器来说,数据是关于娱乐八卦、体育还是金融,并无区别。Twitter对实时数据处理有极高要求,这点和金融数据流类似。程序被要求按照实时反馈,不间断地调整模型参数,而不是“长时间训练生成 - 使用”的模式。


- 数学模型的建立、数据采集和清洗、程序服务的开发和维护已经越来越分工明确,越来越容易规模化。


本文选自2016年ArchSummit全球架构师峰上,Twitter机器学习平台组负责人郭晓江关于《Twitter机器学习平台的设计与搭建》的演讲。


郭晓江,四年前加入Twitter,先后供职于广告组和机器学习平台组。在广告组设计和构建了ads ranking后端平台,之后从无到有领导团队搭建了Twitter的机器学习平台,应用在广告推荐、Timeline Ranking、反欺诈等多个产品中,是每年几十亿美元的营收与内容推荐背后的核心。本科毕业于清华电子工程系,硕士毕业于斯坦福电子工程系。


下面是正文:

从大数据和模型的表现关系来看,在十几年前有两个研究者他们将当时几个机器学习比较常用的算法,在一个具体的机器学习的问题上做了一个实验: 


这张图的横轴是数据量,即训练数据的数据量,它是一个指数的规模(Scale)。最左边的刻度应该是10万个数据点、100万个数据点和1000万个数据点以此类推;纵轴是模型的表现,即训练出来模型的质量。


当数据量很小的时候,例如10万个数据点时这几个算法的质量非常差,当数据量逐渐增大的时候,模型的质量显著地提高,而且任何一个算法在大数据量时的表现都比任何一个算法在小数据级的表现下要好很多。当数据量越过某个点后继续增加,模型质量提高速度会减慢。这个实验表明,如果机器学习的平台架构不够规模化,只能在小数据级上做训练,哪怕你算法做得再好也是徒劳,必须先解决规模化的问题,先在大数据上能够做这样一个训练,然后在算法上再做提高。


在Twitter,机器学习是非常重要的。Tiwitter大概80%的DAU都是直接和机器学习相关产品相关的,90%的营收来源于广告,而广告完全是由机器学习来支持的。我们现在做的机器学习平台支持了Twitter很核心的业务,包括:

- ads ranking(广告排序);

- ads targeting;

- timeline ranking(feed ranking);

- anti-spam;

- recommendation;

- moments ranking;

- trends


Twitter的机器学习框架在需求方面有几个特点:

1、Twitter的机器学习规模极大,拿广告来举例,每天在Twitter大概是有10个trillion的广告预测,每个模型的权重参数(weights)大概是10个million的量级,每个输入(example)大概是有几千到1万个特征features,每一个数据点上有这么多,整个特征空间(Feature Space)大概是百亿的量级,训练的数据也是TB量级。


2、机器学习在Twitter还有个特点是Realtime(实时性),Twitter is all about realtime,like news、events、videos、trends,比如大家去Twitter上更多地是更新自己的状态,或者是看一些新闻去了解一些最新的动态;广告商也会根据产品的特点去投放一些广告,他们往往投放的广告持续的时间都非常短,比如就是一个事件(比如NBA总决赛,三个小时内做一个广告投放),所以要求我们机器学习的模型就必须根据实时的traffic的情况来不断地做调整和变化。否则,我们每天训练一个模型,每天刷新一下这个模型,这样的速度就实在是太慢了,所以我们也是投入非常多精力做了一个规模化的在线学习的东西。你在Twitter上点击任何一个广告,那么在百毫秒的量级,我们的模型就会更新。


机器学习平台面临的挑战其实主要是规模化和速度的挑战。规模化主要是两方面:


一方面是组织架构上的规模化,我们作为机器学习平台的组如何更好地去支持这样7、8个Twitter的核心产品,并且能够让我们的客户服务组能够非常快地创建原型;


另一方面是整个系统的规模化:一方面你的训练如何能更快,在线预测、测试如何能够更快;还有一方面,当我们的用户把整个pipeline搭载起来之后,他们要在上面提高,我们有没有足够的工具支持我们这些用户(我说的用户是Twitter内部的这些团队,这个我们其实是比较像Twitter内部创业的项目,就是to B的公司一样),我们怎么让我们的用户非常快速地进行迭代和实验?


一、组织结构的规模化 

我们采取的合作模式是:

我们去做很多的工具、很多的框架,去定义好feature(特征)的格式、transform模型等等的格式,然后把工具交给我们的用户,让他们从特征提取到离线训练,如果这个模型好再推到在线生产环境当中,以至后面持续不断地提高。在整个过程中我们希望把每一步都做到足够的简便,同时我们还对于一些新的用户提供一些支持;


我们的client team(我们的用户)他们是负责做特征提取的,因为只有他们了解具体的自己的问题,知道什么样的信号可以对他们的问题有更好的影响。


二、系统的规模化 

主要分几个方面:

1.准备数据既然要进行模型训练当然要把数据准备好;


2.离线的训练,会有workflow management;


3.Online Serving(在线服务),比如模型训练好了,要推到市场环境中去,要可以承受这种high QPS、low latency这些requirements,还要做A/B testing,还要在1%的数据上先做一些实验,然后过一段时间,真正它在实际的traffic上更好的话我们就把它launch到100%。与此同时还做很多工具,来帮助我们的用户更好地去理解他们的数据和模型,以及还有一些工具去做一些比如参数的扫描、一些特征的选择等等。


三、准备数据 

我们做了一套DataAPI,其实是一套是对机器学习的数据级以及opeartion在很高的level上做的一些抽象,当你用我们这一套API去描述你想对数据进行操作过程时,这个代码就跟你描述出来你要做什么事情和我们期望达到的效果一样的简单,我们希望这使得我们大部分的machine-learning task在训练过程中的数据准备都能够通过20行或者30行代码就搞定。


它是基于Scala的API,一个fluent的interface,并且在整个过程中去保证我们的数据正确,以及刚才我们说的feature id to feature name mapping的metadata是keep consistence。之后我们简单看一小段代码,举一个例子来让大家感受一下,这是用Scala写的,看这个代码的话,其实从代码上你完全就能明白我要做一件是怎样的事情: 


其实读一下代码你会发现整个代码其实是非常好懂的,在写代码的过程其实就像你在描述。我们的目标就是希望算法工程师在写这个代码的时候就像描述他们想做的事情一样。比如我们会做很多抽象,不管你的数据到底在哪里,比如你的数据可以在hdisk盘上,可以在database上,可以在很多其他地方,但是在这个API里,其实都是来自比如FeatureSource里,用户是不需要操心数据到底存在哪里等等这类事情。


四、训练器Trainer 

我们也提供了很多的trainer,让我们的用户把这些trainer进行一定的组合作为他们的offline training pipeline。首先是large scale logistic regression learner,我们有两个解决方案:

1.Vowpal Wabbit 

是John Langford开源的C++ trainer;


2.Lolly 

是Twitter内部开发的基于JVM的online learning trainer,因为Twitter整个stack都是JVM,比如Java、Scala,所以我们开发了这个learner可能会和Twitter Stack会结合地更好一些。


深度学习方面,我们是基于torch做的,也有一些深度学习的库。


五、预测引擎PredictionEngine 

刚刚提到Twitter这种实时性是非常非常重要的,所以我们做了这样一个引擎,叫PredictionEngine,这是专门为Large scale online SGD learing来做的,我们整个广告包括我们的NewsFeed Ranking都是用的这个PredictionEngine。


六、工具集Tooling 

我们给公司的用户提供很多工具,这些工具是为了帮助我们用户很方便地区对整个模型进行研究或者做一些改进。机器学习的模型尤其包括像深度学习模型都有很多的变量。往往大家弄变量的时候都是拍脑袋,参数的选择随机性很大。


但是我们基于贝叶斯做了自动的超级参数(hyper-parameter)选择,我们会根据之前不同的参数集所跑出来的模型的结果去计算:我下一个parameter选择什么使得在期望意义下我对目标函数的提高会做到最大,充分地利用已经模型跑出来的数据和peformance来选择下一步。


其他的工具,比如:

- workflow management:就是整个offline的训练,你需要对它进行监测,需要可复现,可以互相地分享;


- Insight和Interpretation:我们不希望我们的用户用我们的东西是一个黑盒,所以我们也会搞一些tool帮助他们看数据、看模型、去分析特征的权重和贡献等等;


- 特征选择工具:进行简单地forward/backward 的greedy search。


本文偏IT多一点,但文中提到的问题和解决思路都是机器学习应用中常见问题。

以上是关于揭秘机器学习的规模化 - Twitter的机器学习框架的主要内容,如果未能解决你的问题,请参考以下文章

火山引擎项亮揭秘字节跳动基于 HPC 的大规模机器学习技术|直播分享报名

直播预告 | 端云协同的淘宝机器学习系统

无人驾驶技术揭秘从机器学习角度揭秘学习型避障小车的设计思路

揭秘腾讯云上的机器学习平台TI-ONE

深度揭秘谷歌TPU2机器学习集群:新一代的「谷歌云TensorFlow处理单元」

吴恩达机器学习-12-大规模机器学习和图片文字识别OCR