第四范式陈雨强:机器学习在工业应用中的思考(上)

第四范式陈雨强:机器学习在工业应用中的思考(上)

【编者按】人工智能大多数的文章都透露着专业性,但是缺乏可读性。然而,这篇文章结合实际例子用通俗易懂的话术表达了人工智能的专业性。以下谈到了人工智能成功的五个必要条件、工业界与人工智能的结合以及机器学习的四个象限、机器学习系统需要VC维,以及如何沿着模式和特征优化做了详细的解读。

陈雨强,第四范式联合创始人,世界级深度学习、迁移学习专家。2016年12月23日,在亿欧智库2016中国人工智能创业公司TOP50榜单当中,第四范式入围榜单。

本文来自机器之心,作者陈雨强;由亿欧编辑整理,供业内人士参考。

如何做一个追求极致的人工智能系统?如何在一个公司内让更多的产品使用人工智能?如何让更多的行业使用人工智能?在人工智能在公司内与行业间爆发的现在,这个是我想分享给大家的。

▌人工智能成功必要的五个必要条件

为什么人工智能在最近的一段时间非常火?为什么人工智能在20年前、10年前没有这么火?为什么 AlphaGo能在今年打败李世石而不是更早? 我们直观的会认为是因为算法创新。但是算法创新只是其中一点,国内外很多专家分析总结出了人工智能成功的五个必要条件,这里跟大家分享一下:

第一,边界清晰。问题需要定义得非常清晰,比如AlphaGo做的是围棋,围棋是在19×19的棋盘上,黑白两方轮流下子的问题,有吃有打劫。如果变成一个开放的问题,变成20×20的棋盘,变成黑白灰三方下棋,或者把打劫规则变一下,都会导致人工智能的失败。

第二,外部反馈。算法要不断地有外部输入,知道我们在什么样的情况、算法做出什么样的行为下,外部给出的反馈是什么,这样才能促进提高,比方说需要AlphaGo不断地进行对弈,并且告诉它对弈的输赢。

第三,计算资源。近些年算法虽然有很大的进步,但计算资源也是产生智能的关键。最近业界在分布式计算上的成功,让我们相对于几十年前有了飞跃的基础。举个非常有趣的例子,Google在描述AlphaGo不同版本的时候,为了简洁明了,直接使用计算能力来分类,而不是使用算法来分类。简版的AlphaGo被称作「单机训练的AlphaGo」,复杂、更高智能的AlphaGo 称为「多机、并行训练的AlphaGo」,从这里也可以看出,计算资源起着至关重要的作用。

第四,顶尖的数据科学家和人工智能科学家。增强学习、深度学习最近重新被提出,需要很多科学家大量的工作,才能让这些算法真正的推行,除了围棋、视觉、语音之外,还有非常多的领域等待被探索。

第五,大数据。AlphaGo的成功,关键的一点是KGS棋社的流行,KGS上有数十万盘高手对战的棋谱,没有这些数据AlphaGo绝对不可能这么短的时间内打败人类。

这些要素总结起来只有三点:一方面是技术,计算资源和大数据方面的支持;一方面是业务,边界要清晰,业务有反馈;另一方面是人,包括科学家,包括应用到场景需要和人打交道。所以如果一个 AI 要成功的话总结起来三点,要关注技术、要关注业务、要关注人。

▌工业界需要可扩展的机器学习系统

人工智能的兴起是计算能力、机器学习以及分布式计算发展的结果。在实际的工业界之中,我们需要一个可扩展的机器学习系统(Scalable Machine Learning System),而不仅仅是一个可扩展系统(Scalable System),那什么是可扩展的机器学习系统?

第一点,数据处理的能力随机器的增加而增加,这是传统的可扩展。第二点,智能水平和体验壁垒要随着业务、数据量的增加而同时增加。这个角度的Scalable是很少被提到的,但这个层面上的可扩展性才是人工智能被推崇的核心原因。

举个例子,过去建立竞争壁垒主要通过业务创新快、行业内跑马圈地,或是通过借助新的渠道(比方说互联网)提升效率。在这样的方式中,由于产品本身相对容易被抄袭,那么资本投入、运营与渠道是关键。但随着数据的增加与AI的普及,现在有了一种新的方式,就是用时间与数据创造壁垒。

举个简单的例子,如果现在去做一个搜索引擎, 即使有百度现成的技术现在也很难做得过百度,因为百度积累了长时间的数据,用同样的算法也很难跑出一个比百度更好的搜索结果。这样如果拥有能用好数据的人工智能,就会获得更好的体验,反过来更好的体验又会带来更多的用户,进一步丰富数据,促进人工智能的提高。可以看出,由人工智能产生的竞争壁垒是不断循环迭代提升、更容易拉开差距的高墙。

▌可扩展的机器学习系统需要高VC维

那么,我们怎么能获得一个既拥有高智能水平又能Scalable的学习系统呢?

60 年代Vapnik和Chervonenkis提出了 VC维理论,形式化的描述了机器学习算法对复杂函数拟合的能力。对VC维的理解,可以举个简单的例子就类似于人大脑内的神经元,神经元数量越多,这个人可能就越聪明。当然,这个不是绝对的,智商高的人不一定做出来的成就是最高的,这里关键的一点是个人的经历也要多,之后经历过很多事情、并且有思考的能力,才能悟出道理。在机器学习中,VC维度讲的也是这个道理。

教科书上的 VC维都是上面这样的一张图。因为过去的数据不大,训练损失函数在不断下降,测试损失函数在不断的上升,要避免过拟合,VC维就不能太高。 比如你是个很聪明的孩子,但是在很小的时候不能让你过多的思考瞎琢磨,否则很有可能走火入魔。过去对我们教导是在你经历不多、数据不多时干脆傻一点,就没有那么多精力去思考乱七八糟的事情。这是当时大家觉得比较好的解法,控制VC维,让训练数据的Test Loss、Training Loss 同时下降。

但随着时代的不断发展,数据也是在不断增多的,我们的观点有了新的变化。在数据量比较小的时候,高VC维的模型比低VC维的模型效果要差,产生了over-fitting,这只是故事的一部分;有了更多数据以后,我们发现低VC维模型效果再也涨不上去了,但高的VC维模型还在不断上升。这就是刚才说的智能Scalable的概念,在我们有越来越多数据的时候,要关心的是under-fitting而不是 over-fitting,要关心的是怎样提高VC维让模型更加聪明,悟出大数据中的道理。

总结成一句话,如果要成功在工业界使用人工智能,VC维是非常重要的问题。

工业界怎么提升VC维呢?我们知道 「机器学习=数据+特征+模型」,如果已经有很多数据 ,提升 VC 维的方法有两条:一种是从特征提升,一种是从模型提升。我们把特征分为两类:一类特征叫 宏观特征,比如描述类特征如年龄、统计类特征如整体的点击率、或整体的统计信息;另一类为 微观特征,最典型的是ID类的特征,每个人都有特征,每个物品也有特征,人和物品组合也有特征。相应的模型也分为两类,一部分是简单模型如线性模型,另一类是复杂模型如深度学习模型。这里,我们可以引出工业界机器学习四个象限的概念。

▌模型X特征,工业界机器学习的四个象限

工业界具体怎么做的?

第一象限是简单模型加上宏观特征,在现在的工业界比较难以走通,很难得到极致化的优化效果。这个象限内,有七八十年代专家系统,还有一些统计模型。大家比较熟悉的UCI Data 就是支持这个时代研究的典型数据,每个数据集有1000个左右的训练数据,分的类数也不多,特征也不多。对于这样的数据统计模型比较盛行,要解决的问题是怎样找出特征之间的关系与各自的统计特性。

第二象限是简单模型、复杂特征,最成功的典型案例是Google AdWords。Google在很多技术上都是开山鼻祖,包括整个计算广告学。Google AdWords有上千亿的特征,每个人、每个广告、每个Query的组合都在其中。这种模型非常成功,给Google带来了非常大的收益。Google AdWords占Google70%以上的收入,Google的展示广告也是用的这样的技术,占了 Google大概剩下的20%左右的收入。

第三象限是复杂模型、宏观特征典型的应用,比如Bing ads。2013年他们提出BPR(Bayesian Probit Regression)来Model每个特征的置信度。雅虎也是第三象限忠实的传道士之一,大家所熟知的COEC(Click Over Expected Click)这个算法就是雅虎提出的,在上面做了很多模型。其次他们还设计了很多模型解决增强学习问题,比如多臂老虎机等等算法。很多雅虎出去创业的同事最常使用的机器学习技术就是统计特征加GBDT(Gradient Boosting Decision Tree),通常能获得非常好的效果。

第四象限,复杂模型和微观特征,现在还是热门研究的领域,它最难的一点是模型的规模实在太大。比如广告有上千亿的特征,如果做深度学习模型一个隐层有 1000 个特征,可能会有万万亿级别的参数。虽然数据很多,但万万亿的数据还是难以获得的。所以怎么解决这个角度的模型复杂问题、正则化问题,目前研究还是一个热点的研究方向。

▌如何沿着模型优化?

沿着模型优化主要由学术界主导,新的模型主要来自于ICML、NIPS、ICLR这样的会议。他们主要的研究是非线性的,总结起来有「三把宝剑」:Kernel、Boosting、Neural Network。Boosting、Neural Network现在非常流行,Boosting最成功的是GBDT,而 Neural Network也在很多行业产生了颠覆性的变化。

大约十年前,Kernel也是很流行的。借助Kernel,SVM有了异常强大的非线性能力,让SVM 风靡了10-15年。优化模型的科学家们为了实验的方便,对工程实现的能力要求并不是特别高,大部分模型是可以单机加载的。 要解决的实际问题主要是数据分布式,降低数据分布式带来的通讯overhead等问题。

对于工业界中的具体问题,基于思考或观察得到新的假设,加入新的模型、结构,以获得更多的参数,这是工业界优化这一项限的步骤。

以时序动态的协同过滤为例,我们这里引用的是 Koren, Yehuda在 2009年在KDD上发表的论文Collaborative filtering with temporal dynamics,这是时序动态协同过滤被应用最多的一篇经典论文。在这篇论文里,首先协同过滤的问题有一个低秩假设,作者认为由User,Item组成的稀疏矩阵是由两个低秩矩阵相乘得到预估评分。

第二,通过观察数据,作者观察到IMDB对某些电影的打分是随着时间的加长,分数不断上升(对那些经典的电影)。根据这样线性的关系,设计「现在的时间」减去「首次被打分时间」作为偏置,拟合斜率就是一个好的模型。考虑到更复杂的情况下,打分随时间的变化并不是单纯的线性,作者进一步提出将线分成很多小段,每个小段做分段线性。

总结一下,通过机器学习优化的套路是什么? 首先,观察数据;第二,找到规律;第三,根据规律做模型的假设;第四,对模型假设中的参数用数据进行拟合;第五,把拟合的结果用到线上,看看效果怎么样。这是模型这条路在工业界上优化的方法。

▌如何沿特征优化?

特征优化主要是工业界主导的,成果主要发表在 KDD、ADKDD或者WWW 上,这些模型相对简单粗暴。主要是LR,比较简单,粗暴是说它的特征会特别多。就像刚才提到的,Google 使用了上千亿的特征,百度也使用了上千亿的特征,这些特征都是从最细的角度描述数据。

沿模型优化这条路的主要特点是什么?模型一定是分布式的,同时工程挑战是非常大的。上千亿的特征是什么概念?即使一个参数用一个 Float 存储,也需要上百 G 到上 T 的内存,是单机很难存储下来的。

这还只是模型所占的内容空间,训练起来还有其他中间参数与变量、数据也还要占内存,所以这些算法一定是模型分布式的。针对这些难点,学术界中KDD和WWW等会议上都在研究如何高效并行,以及如何保证高效并行的时候快速收敛。ASP、BSP等模型和同步、异步的算法,都是为了保证高效分布式的同时能快速收敛。

应为线性模型理论较为成熟,工业界对模型本身的优化相对没有那么多,其更主要的工作是针对具体的应用提取特征。为什么会有那么多特征?因为我们对所有观察到的微观变量都进行建模。以搜索广告为例,每个User ID、每个Query、 每个广告都有特征。同时为了个性化,User+Query、User+广告 ID、Query+广告 ID,甚至 User+Query+广告ID都能产生特征。 通过组合,特征会发生爆炸,原来可能上亿的特征会变成上千亿特征。

初听这样的思路会觉得有点奇怪,把用户历史上搜过关键词或者看过广告ID作为特征,如果这个用户从来没有搜索过这个关键词或者没有看过这个广告,那是不是就不能获取特征了呢?这个问题正是LR+大规模特征这条路最常被攻击的一点,即如何进行模型泛化。

在大规模离散特征机器学习系统里,解决泛化的方法是设计加入层次化特征,保证在细粒度特征无法命中的时候,层次化的上位更粗粒度特征可以生效。比方说如果一个用户是一个新用户的话,我们没有UserID特征,但是我们有更高层次的性别、地域、手机型号等特征生效,在预估中起作用。回到说之前的例子中,我们设计「Query+UserID」特征,到「Query」与「UserID」特征,再到更高级的性别属性「男/女」、使用的设备「安卓/ iOS」,可以组成一个完成的特征体系,无论缺失什么都可以用更高级的特征帮助预估进行弥补。

以之前提到的时序动态的协同过滤为例,我们看看如果走特征这条路,该怎么解决协同过滤的问题。首先我们不再做低秩假设,我们把所有的二阶项可以展平成组合特征。其次,我们会发现发现不是所有的数据都是呈线性的,特别有时候会产生一些突变,甚至都不能通过分段线性描述。

还是在 Collaborative filtering with temporal dynamics的论文中,由于作者也不知道什么原因造成了突变,他的方法是把不同维度的数据与时间进行组合,对时间维度的非线性进行建模。加入 Item 把时间分成比较细的桶,做分段线性的拟合。同样把User按时间进行分桶,保证对突变也能有比较好的拟合。

所以,当你不能给出比较好的数据假设时,不知道为什么产生突变时,可以更多的依赖数据,用潜在参数建模可能性,通过数据学到该学的知识。

相关领域
人物