我首先从哪个地方开始呢?我来问您一个问题,如果我们说一个问题是复杂的,中国的词有很多,其实这个“复杂”翻译成英文,它可能有三种含义之一: 第一种复杂complicated,就是讲这个问题本身它有很多细节,或者很难把它中间的数学物理抽象出来。我举个例子,今天你身边有一个女孩子,有什么样的办法可以拿到她的QQ号让她喜欢上你,这个问题可能很复杂,你不一定好解决,但是你没有办法把它变成数学和物理的问题,因为它有复杂的环境和复杂的心理。这类“复杂”不是我今天要考虑的。 第二类“复杂”,翻译成英文叫“Hard”,就是这个问题很难,可能它说的很简单,比如说弥勒猜想、哥德巴赫猜想,它很难,并不是说我说不清楚它,而是即便我说清楚了,你依然不好解决,很多书面的问题是这样。站在计算机科学的角度讲,一个算法问题,如果我说它很难,很Hard的难。什么意思呢?有两种。我们那来一个算法问题,不管是什么算法,我都是要想办法让这个系统某种定义的能量最低,不管怎么样优化。在这种情况下,我就可以得到在整个视能平面上若干个局部的绩效值。我们讲的NP Hard的问题,很难解决的问题,可以把它分成两个大类。一个大类是由于在你所有解析空间的势能上面,你局部的最优值分布很怪异,并且有时候有很深的沟,藏了很好的井。这些我们都把它分类为由于能量造成的困难。大家十多年前刚刚接触到遗传算法,我们经常会想一些非常复杂的自行函数或者目标函数,就是故意去造一些难度。最近几年,可能是五六年,使我们看到算法问题上的另外一个难,这应该是第二个难。这个难什么意思?就是我站在势能空间点上,这应该是非常高维的,我往四面八方看,四周都是非常平坦,我就不知道往哪个方向走,这个时候我可获取的可分辨率很低,这时候我看不到远方是山谷还是山峰?这就是可分辨率,来源于第二个难,这也不是我今天讲的难。所以我们未来处理一些极其困难的问题,我们可以把它通过这两种分类选择合适的算法。 我们今天讲的问题是和大数据有问题的问题,是第三个“难”。
我们知道大数据有很多特征,一个是特征是快速产生快速处理,是时间性,是大数据流流过来。第二个特征是空间大,如果你没有一个P或者Z的数据,没有办法叫大数据,空间很大。第三来源很多,在座有很多用智能手机的,你的微信、微博,你手机上安了很多应用,还经常去电子商务买很多东西,很多文本视频图象的数据,还有很多不同网站上的数据,这是关联复杂。所以我今天给大家聊的,我们是考虑复杂的第三个方面,就是复杂性的方面。我们又分三个层面来理解,怎么样在新的时代,我们讲在大数据的时代,去处理时间复杂性的问题?第二怎么处理空间复杂性的问题?第三怎么处理关联复杂性的问题。为什么我们把所有的科学问题集中这三个点呢?是因为一个科学问题并不是因为我们本身有了解决方案,我今天会尝试着讲一个解决方案,但是并没有完全解决它。而是在于我在这个时间点,我必须要问这个问题,我对这个问题的选择和回答,是一个分水岭。就像刚才我师兄刘明讲了很多“Deep learning”,实际上“Deep learning”它就代表了我们最后要讲的关联复杂性分水岭。有一部分人是慢慢通过“Deep learning”,选出来再做其他的学习这一条路,有些人又走几十年的老路—知识挖掘。 这个时候我们要怎么去处理它,现在我们回到正题,开始一个个讲。 第一个大的问题,我们叫做大数据尤其是流数故数据动态处理中的时间复杂性的度量和简约的问题,以前我们提到时间复杂性的东西,N平方、N立方等等。真的在现代时代,N平方立方4平都不一定能解决得了,因为你要处理很多实时信息。在座很多淘宝和天猫的同事,你们要做实时推荐,这个时候数据的整体规模和你算法规模之间是没有关系的。也就是说我们以前有一个大问题,要看我们算法是不是O(N)平方,现在我们一定要假设这个N是无穷大,也就是说真正的增量算法带来一些全新的算法复杂性度量的理论。这个时候我们要假想,我们有十亿人从你身边慢慢流过来,或者很快流过来。你不能再去考虑,这十亿人和你的算法有什么管关系,而是要说我一定要抓住当前推进这一个人。我的算法的复杂性和处理对空间和时间的需求,一定只是针对你当前流过来的人给出的判断。这个时候我们就要处理很多很烦的问题,举个例子,一个人来了,他本来是个点数据,但是肯定会带来很多关联。比如说是一个网络,他肯定会带来很多联系,他可能跟你前面数据库流过来的100个人有联系,可能他跟10万个人有联系。有的人可能朋友只有五六个,有些人可能有几十万、上千万个粉丝。我们有很多处理办法,有一个功能就是我们实时窗口化。有时候可能对你的影响,你最近一个月的购买行为,对你影响最多。有些人一个月可能会买很多东西,有些人前一个月可能什么都不买。但是你把它按照action来划分,就认为前十个action对你有影响,以前所有的东西我都根据时间的含权把它变成很多可以调的东西,放再一个桶里面,这是一个办法。这时候我们在权衡这些办法的时候,你要想清楚,怎么样在你设计算法和实时推荐的时候,你要能够把握住,由于一个人回来的脉冲,比如说他有特别高的度和特别高的购买,这些细节的东西不讲了,但是你们大概能感觉到。 所以说这个时候,我们在评价一个算法的时候,这个算法最好的话,能够收进来的数目和时间窗口的长度,和我要考虑的action的长度,数目都是可控的。第二,所有的增量算法,我要对它第二点把控,当它增量足够多的时候,不能够重算。当你不停的生成数据去的时候,它的误差会越来越大,迟早有一天要求你完全重算,当我们想象未来数据有无限大,很多时候这种重算是不可能的。这个时候我们要求所有参与的程序员都是帮助你的;第二个要求,我们要求这种算法,它的误差增加,随着你的桶的增加,它能够自动调节,使它越来越小,而不是越来越大。这两个问题,是处理大数据在时间方面这种复杂挑战的最大的问题。具体到里面的一些应用的话,我觉得像LBS的实时推荐,包括在线的,通过一个人来了,我既有它长期的模型又有短期做情景计算,瞬间建立起模型。比如说他到天猫来是逛还是买呢?看一个资讯是看一个八卦还是相关内容,要建立一个快速模型,这都是相关的。这是大家关注的第一个问题。 第二个大家要关注的问题,我觉得是空间的复杂性的度量和简约。为什么我们要关注这个问题呢?因为这实际上是来自于两个趋势。在很早的时候,我们觉得不管怎么样,再大规模的数据,我们要求全体数据。实际上有很多时候,你们在座做企业的都明白,做科研我们经常会做全体数据。你要真正拿全体数据是不太现实的,这个时候要想到一个大的问题,当你拿到一个数据又能了解一个你的目标的时候,这个数据压缩比和实证率目标是什么?它的极限是什么?我举几个实在的例子和应用的方法,还是从简单开始。比如说ICF,这是一个非常典型的算法。我们做一些Case,比如说我们采集了1000多万手机的数据,都是安卓系统的,上面大概有4万多个应用,我们会发现当我算到七八十万人的时候,这四万多个应用,会形成一个数据。用这个数据去做推荐的时候,得到的效果跟我用完1700多万的时候是一致的。这个东西是可以算的,因为你计算误差,我们不能假设它满足某种高度的分布,但是可以推钻。这个时候我大概要多少个连接,才能够把它估计到什么程度?我们会发现,你把结果应用到什么程度。结果我们就发现,你只需要随机去选择一些用户,或者你还有更优化的办法,你只需要百分之几,一般是2%、3%的用户,就可以做得非常好。在北京我们有一个平台,每天就要发布推荐。,我们专门是为了做游戏与游戏的互推荐,我们专门准备了100台服务器的架构,最后我们只用了8台服务器就完成了这个事情,我们最终采源了200万智能手机,就没有用原来的计算。这个点很简单,我压缩的是什么?我压缩的是结点。我们看用户,我把这个用户的数目大幅度压缩了,压缩到原来的2%、3%,我还能达到基本上一样的办法。第二种办法我压缩边,我认为有些压缩连边是可以压缩的。怎么办呢?我们在做UCS的时候,我们有一套办法,在整个大网络中把绝大部分链接都去掉,只剩下一个信息骨架。利用这个信息骨架甚至比原来所有的推荐更好,只需要原来的10%的action,去掉可能的噪音边。这并不是我讲的信息,我想讲我们面对一个大数据的时候,我们可以丢掉它90%以上的部分,还能保证比较好的效果。为了把这个事情做得更好,我们会想一些数据压缩的办法。 在空间上,比如说大家都知道,可能以前做过,叫做重整化群的办法,最近发明的这个诺贝尔奖得者刚刚去世。通用化群最早是为了解决,就是我有一个自旋二分之一的电子或者什么样的例子,它的Spin要么自旋向下,要么自旋向下,如果是两个相邻的Spin,你如果是同自旋或者异方向自旋,一个向下一个向下,它的能量不一样,我怎么找到一个最终的构型?这是一个非常难的问题。在处理这个问题的时候,我们有的时候为了去寻找它的相链点,我们就会把一大块东西,比如说我把4×4 16个Spin,我根据它的自旋方向认为是一个Spin。这样可能原来我就把1000×1000的Spin,我把它压缩成500×500,再变成250×250。回到电子商务的时候讲,很多时候我们实际上是在两样东西中做权衡,一个是粒度。如果你在品类这个层面推荐,很准确。以淘宝为例,比如说淘宝的数据,如果说我只是去参与到用户到下一个时刻到淘宝的哪一个一级品类,猜准的比率在85%左右。如果我要猜你买什么单品,我要猜你要买哪个单品,能猜中有20%、30%就发大了。在品类很容易,猜单品不容易。但是有时候我拿到那个数据以后,我不能够想我有单品数据就很牛,单品数据最好?其实不然,有的时候这种数据能够带来巨大的噪音。举个例子,比如说我们如果要去做一些周期的推荐,什么时候牙膏用完了,给你推荐一个牙膏。如果你在单品里面,比如说中华新推出一个镐白牙膏,300毫升,这时候因为数据量小,所以它的噪音很大,有的人突然买多了买少了,就有很多噪音。如果只是300毫升牙膏的话,就可以去掉很多噪音。所以在很多时候,我们讲重构架构思维的方法,我们怎么样在力度和噪音之间找一个平衡,在最合适的地方把你的数据分成很多个群。 这个时候分法,又有两个的方面。一个基于我们传统的“树”像刘明老师讲的原来我们有很多分类树,在这个分类树上我们可以考虑,哪些叶子品类可以集聚一点,有些可以下放一点,很多时候是基于行为来的说。换句话说,我如果了解了很多用户的需求,这个时候基于这种行为,我们可以更好地了解商品之间怎么分类。这个分类可能没有办法改变淘宝已有的分类或者ebay已有的分类,因为这个分类一改,什么都改了。但是这个算法是背后的分类,这个时候我们就可以尝试怎么样把一系列的商品在某种问题的驱动下聚集起来,给它变成一个大商品。或者我们在一个大网络中,有很多人有很多手机,很多东西,怎么样把一群结点,要把两个人有没有连接,看成两个小群落之间的连接有多么强?换句话说,把一个图象简单的图,通过这种重整化的变成,变成一个很复杂的多特征的含权的图。 在考虑整个空间压缩的时候,减少空间复杂性的时候,还有一些新的方法大家可以考虑。压缩板自反问题的技术,以前我们是知道了一个数据,它后面有一套功能,比如说我在网络中有传播,有一些信息在传播,或者在交通网中有车在开。现在我反过来了,我只知道一些探灯信号。举个例子,我在人大脑上放两百多个探灯,我回过头来收到两百多个信号,我通过这两百多个信号猜你脑子里怎么连接的。比如说在一个大的网络上,可能有几亿人,比如说微博,我放了几万个探灯,我们根据一些特定的敏感信息,在什么时间点流过这个探灯或者流过这个人?让我来重新去推测整个网络的结构以及哪些人之间有连边?以及这些信息是从哪个连点发出来的,未来有哪些结点?在一些大的城市也一样,我们通过大的探灯去检测一些十字路口。我利用这些十字路口的模型,了解整个交通网络的发展情况。 在未来,我们已经开始尝试,在某一些像微博,在微博上布一些人工智能的机器人。这些机器人是完全可控的,但是在模仿真人。它未来可以使党利用起来,成为中共的手段来控制舆情、监控舆情,也可以成为商家的手段。这是我们通过压缩杆、通过探针的方式,重构它们互相的关联结构。 第三点我关心的,也是我希望大家关心的,是整个数据关联的复杂性。这一点其实是很好玩的一个分水岭,我先从一个简单的例子开始讲,正好我今天和一个朋友聊的问题,接下来你们同事讲安全可能讲更多。我先讲我们在和银联做的一个合作项目,我们要把中国上千万的POS里面,我们找到MCC套用。什么叫MCC呢?就是每个POS机都有一个号码,这个号有一个分类号,这个分类号决定了你POS的费率。比如说我如果是歌舞厅,在东莞有很多娱乐场所,我的费率是1.25%,就是你每天刷一次卡,银行收你1.25的钱。如果你是百货商店,你的费率0.78,如果你是加油站,县上一级是0.38,报刊保亭也是0.38。中国就存在很多人,通过一些找关系、找朋友,或者是借用别人的POS,他想办法用低费率,实际上它是歌舞厅,但是它说是加油站或者百货商店。这样的话,我们在找这个的时候,就会分很多个层面来找它。第一个层面,有的你看报刊保亭,每天流水都是10—15万,这些明显是不成,这都是很低级的套用,肯定一查一个准。第二点,比如歌舞厅套用百货商店,每天都有消费,有多有少,但是消费额度分布的时间不一样,比如说百货商店,可能早上七八点钟开始,九点以后就开始了,中午是高峰,下午是最高峰,很晚就没有了,个别便利店是24小时,但是基本可以忽略不计。但是歌舞厅晚上九、十点是高峰,到凌晨这个峰是掉下来了,这样你一比就会有漏洞。还有人更聪明,百货商店去套用加油站,他们分布很将近,别是白天是高峰,凌晨加油也有,但是很少,凌晨以后就掉下来了,有一点点差异,但是统计上不能叫显著。我们了解了一些东西,我们去看看,中国加油站在油价上涨的前一两天,加油的人都会有前几倍的增加,虽然只是省几十块钱,但是人都有这种心理。我回过头来把这个作为一个专家规则进去,我们就会发现所有套用加油站的东西,哪怕分布很接近,哪怕在应有的脉冲点之前,没有脉冲,那肯定是套用,一抓一个准。 我讲这个故事,不难,这是一个中小学层次的分析,你给中小学生讲,他都能听得懂,但是是什么意思呢?这里面我们用到的是什么呢?是知识。如果没有这个知识,真的把海量数据,我是没有办法把这么多的信号从这个弱信号里面挖出来,因为油价可能一两年才有一次上涨,对吧?如果不是人知道这个事,你光靠机器,你可能很难知道这个事情。同样,你们在做交易欺诈的时候,举个例子,我们今天聊这个交易欺诈的问题,聊到很多人,在支付宝里面我要去进行恶意的购买,我控制几千个帐号把它都买了,再在淘宝上加点价卖出去。比如说商家我为了宣传自己,为了表示自己卖的很好,我自己都买了。其中就提到了一点,我原来没有想过,这个机器来开的时候,可能第一次进去通过链接进去的,以后它就把网址拷贝出来,后面的机器就通过网址直接输入进去,直接跳过去。人可能没有这个能力直接记住这个某个单品的具体网址多长。这个是通过我们知道这个知识才能完成的。我讲这些例子就想说明,现在实际上我们站在一个分水岭上,我把这个拿出来,然后再把两两组合的,更多的学习东西组合起来,各种各样学习的东西,放出来再做一套,这是一套办法,目前这基本的表现是最好的。另外一套办法,实际上是回到了几十年前的东西,它是希望通过一些办法,把知识挖掘出来,这些知识对我们产品、对市场,对我们理解问题是有用的。 这场战争为什么打得这么火热呢?就是自然语言处理,就是一般人,以前觉得最好的办法就是统计学。现在又有一般人又开始回到了传统的语言学家,回到了句法规则、语义规则来做事,现在他们还是有点弱势,但是比以前强了一点。所以我们在处理问题的时候也是一样的,现在我们也有办法,我需要去理解,拿到这个结果,如果有时候我就用因果分析,没有时间就用偏相关。把这个东西弄清楚之后,我们要想办法之后,我们要想办法从中间想象出可能的结果。这样的话,我利用这个因果来重新进行算法,这个算法是建立在知识的体系上,它可能用一些比较简单的方法论的办法,但是我们也有要把一些数据重新组合,提高预测精度,但是总体来说,这是一个比较困难的,但是给了我们另外一个困难的选择,就是我们真正把computer从某种意义上来讲说变成为科学服务,而不仅仅是我的算法非常棒。所以我们觉得第三个,我们面对这么复杂的数据,怎么找到其中关联的东西。 稍微总结一下,给大家三个建议,就是我们怎么样去寻找以流数为代表的时间复杂性,通过局部的办法,尽量去寻找一种可以自己调节的自适应,误差不放开的增量算法。第二个就是我们怎么样去寻找一种在空间上进行各种感知和压缩的办法,来寻求空间的解放。第三点我怎么样通过挖掘不同特征之间的关联关系甚至因果关系,来寻求从特征原因到结果之间的一种体系。
最后给大家提一个建议,因为在座很多都是阿里系的,我认识很多阿里系的同事,我听说你们也想像微软一样搞研究院。其实回过头来我们来想,中国从本土活动,你们三家大的,两家最大的腾讯、阿里,还有一家曾经最大现在已经被打压的——百度。这两家半,其实你们都在尝试在做研究,百度也请了很多不错的研究人员,你们也在做研究。从现在看来,腾讯、阿里和百度的研究是彻底失败了,没有什么好的结果值得一提。为什么你们现在这么失败呢?有几个大的原因。你们和ebay、亚马逊,虽然商业上你们成功了,我们说你们从商业上从某种上你们战胜了ebay,但是你们和创新上,你们和它们完全不在一个层面上,你们想和谷歌和亚马逊的创新比,你们的创新就是没有创新。 为什么你们没有把研究院做好呢?这里面有几个大的问题。第一,你们没有一个研究院的考核制度,你们应该去学习一下微软的研究院的考核制度,学习一下IBM研究院的考核制度,他们是怎么做的?研究院一定是以科学家为主,而不是市场和产品为主。第二,研究追求的目的就是创新和发展,没有其他的原因,我就是要专利、论文,就很简单,我一定要产生新的东西。我觉得这点也是你们做研发的人没有的。我经常听到阿力的一些同事说,我把某些算法,这个算法那个算法一起拿出来比,然后在某些业务场景中获得了一个提高,获得了一些成就。你反过来,A算法是你们提出的吗?这其中最大的问题是你们做的吗?没有某一个好的算法,是你们自己阿里人或者在座的阿里的自己粉丝提出来的。 在这种情况下,你们做的就是把别人提出来的算法,拿到一个不算很新的应用场景里面进行比较,最后总结出来,某一个算法经过我巧妙调节参数,花一个月时间做得更好。这里面完全不包含任何创新性和独特性,只能说你解决了一个大数据,你能在上面进行实践。所以我觉得你们未来,每个人都需要花一点点时间,你要去想一想,你现在面临的这个环境,你基于阿里的数据,你能做的大的科学问题是什么?第一个这个大的科学问题真正能够解决中国或者未来世界发展一些重大问题。比如说你能够通过你的数据,去理解我们未来经济的发展,去理解整个中国版图上信息的流动、资金的流动、人的流动,去探索未来整个中国物流交流的布局,探索中国城镇化过程中遇到的新的问题。这是一个门类,有你现有的信息和数据去解决大问题。第二个你用具体的问题,传统的很难的问题,你用你的算法去用创新性的研究,这个问题可能没有人碰到,或者这个方法可能没有人用过,在这个具体的点上进行一些突破。我觉得这也很重要。你一定要想一定事情,很多中国的这帮孩子,都是被容易宠坏的,就是你要面对的问题一定是很难的问题,如果你要做的是很容易的问题,你要做之前就能够想到,我做这件事情通过合并这些算法,你就能够知道结果。这些都是没有什么太大价值的,到你很老的时候,你回忆你写了几千个程序,都不好说。
所以你们现在都很年轻,所以很有机会做一些大的事情。你们一定要想象,阿里是一个土壤,真的有希望让你们去做世界级的算法和创新,谢谢大家!
|