剑客
关注科技互联网

从算法到项目应用,如何真正落地机器学习

编者按

Cisco发布的总结报告《 泽字节时代:趋势和分析
》中指出:2016年末,全球年度互联网流量将突破ZB大关(1ZB 泽字节:1000EB艾字节),并将于2020年达到2.3ZB;互联网的流量将在未来五年内增长三倍;智能手机终端的流量将于2020年超过PC终端。(注:泽字节为十万亿亿字节)

IT业内很多公司都开始研究怎样能超越传统数据处理模式,实现对大数据的处理以收获前所未有的信息价值。

TalkingData是一家独立的第三方移动数据服务平台公司,其平台上每天新产生14TB的数据,有超过370亿条的消息。在9月12日至9月14日举办的T112016暨TalkingData智能数据峰会上,InfoQ采访了TalkingData首席数据科学家张夏天,下文来自对采访内容整理。

TalkingData的机器学习

TalkingData的日均处理量,现在每天在TalkingData的平台上新产生14TB的数据,有超过370亿条的消息。

机器学习有很多算法,学术上的分类都是公认的。TalkingData内部更多的是看 一个算法或者算法的实现是适合处理大数据还是小数据,会根据这个标准分成两类。

我们既要处理互联网公司的超大规模数据,又要支持很多小规模数据的客户需求,所以我们的情况比较复杂。大规模数据处理的算法栈基于Spark,我们做了大量基于Spark的算法创新和优化;小规模数据的处理主要是一些具体客户项目,比如银行、房地产,对一些乙方数据的挖掘,因为数据处理中遇到的技术问题不是特别大,所以主要使用基于Python、R的算法库。

大规模与小规模数据项目的处理模式

项目很多,可供选择的算法也很多;那在实际中怎么选择使用呢?这个与上面一样,还是要分两类讨论。

大规模机器学习的整个体系还不够成熟,市面上没有特别好用的工具;大互联网公司都是自研平台和系统,实现各自业务的需求。开源那些技术则各有各的问题,像Spark的MLlib,我们进行测试时发现在处理TalkingData规模级别的数据上有些力不从心。形势所迫,我们也是没办法只好自己重新做对应的研发工作。目前看来,大规模机器学习中可用的模型并不多,会考虑一些简单的线性模型,因为数据规模太大,太复杂的模型并不一定好,我们会用到Logistic Regression这样的模型去解决问题。

在处理小规模数据时,其实没有绝对偏好;首先理解清楚具体问题;再去寻找找哪个算法更适合,这其中的过程可能会测试很多算法。对小规模问题我们有一些基准算法,比如Random Forest、Random Decision Tree、Random Decision Hashing。在这些基准算法的基础上,在逐步细化并尝试其他算法,其中有一些问题我们也在用深度学习去解决。换句话说,我们的原则是哪个适用用哪个。 通常,解决小规模问题的逻辑是先用简单的快速的,如果能够解决问题,就用简单的模型;如果问题不能解决,再逐步引入一些更复杂的模型。

什么时候进行数据降维

在实际应用中,我们的最高维度会超过一千万。 在降维的这个处理上,可能比较令大家想象不到的是:大维度的问题,我们反而是不做降维;对维度不太大的小规模问题,会用传统的PCA或者其他方法去做降维。

为什么大规模的问题不做降维?首先是很难去做降维,因为维度太大了,数据空间太大了,如果做一次降维,付出的代价非常大。比如如果用PCA做降维,就需要有很多矩阵操作,矩阵操作现在以MapReduce为核心的计算模型效率非常低,尤其对大矩阵而言,那么为降维付出的代价是不值得的。

小规模的问题与大规模的问题有很大的不同:小规模数据问题主要面向我们的客户,他们会 追求可解释性,需要找到起决定性的稳定因素
;这种情况下希望把不重要的维度摒弃掉。

反观大规模问题,一千万维度的模型,人工解读也非常难。 对于大规模问题我们更多的关注模型的预测能力
,为了预测的更精准;很多情况下我们会放弃对模型的理解,而是看在实际中这个模型能不能起到很好的效果。

大数据团队的内部工作分工

在TalkingData内部,从职位上来看,大数据工作分为两类:大数据工程师、数据科学家。在我们公司内部,大数据工程师主要建设大数据平台,基于大数据平台做一些数据处理工作,涉及算法的工作内容并不太多。TalkingData内部定义跟算法相关的职位是数据科学家。大数据领域更希望有数学和计算机的复合人才,目前复合人才比较稀缺;不过,作为一个团队来说会看重一个团队本身的复合型。

从工作内容上讲,我们大数据团队有不同的分工,可以分成三块。有两三个同学一起在做大规模机器学习、深度学习,他们是在底层打基础,提升系统平台基础能力。中间层的工作是挖掘数据,比如人口属性挖掘,丰富标签体系;从地理位置数据挖掘信息,如识别Wi-Fi的类型是家庭还是公司,把我们数据变得更丰富、价值更大。还有一部分工作在上层,要结合到具体的客户项目,比如给某家银行做推荐系统、互联网金融风控、帮助房地产企业做营销等等。

算法书中的大数据对接业务

TalkingData的有些产品,比如营销云,要面对来自客户的很多需求。我们要帮助客户去筛选人群。怎么筛选?首先,我们提供简单的方法,基于标签的、统计学的去筛选;然后,还有一些基于所谓的人群扩大的方式,这个工作无法通过统计学完成,必须使用机器学习。

虽然我们会使用很成熟的机器学习算法,但是由于一方面候选库是十亿级别以上的样本,另一方面我们的数据维度也是超过千万,所以需要将大规模机器学习的能力嵌入到产品里面。

对某个业务而言,如果仅从纯数学的角度讲,可能这个业务背后并不是一个特别难、特别复杂的算法;从工程角度看,
实际上
较大的难点在于怎样算法做到可用,并且在大规模下可用。
用传统方法也是可以得出结果的,但是那样可能需要跑一个礼拜才能跑出一个结果;对于项目而言,这个结果实际上是过期的,已经完全没有意义了。需要通过很多努力做到十分钟内算出结果,这样才算的上真正的作用。

数据和计算结果的存储

这么多年来我们数据一直都有备份,TalkingData作为大数据公司,所有的数据都是存储在自己的云上面。只有一些边缘的系统会去用现在的一些云服务,核心的系统都是我们自己的系统。这样做有两个原因:第一,公司是在2011年发展起来的,那时候云计算还没有到现在的能力;第二,我们本身是一个大数据公司,我们要对自己的数据负责。

“初始数据和计算结果是否都有保存?”都会有的,原始的log也会做备份。我们有一个理念:数据经过处理以后,不管处理得多好,里面的信息都会有丢失。对信息做任何操作,信息量不可能增加,只可能减少,最多就是不变。为了实现某个目的,中间做了很多处理,那不可避免地在处理中就舍弃了一些信息。所以,TalkingData原始数据都会做备份;不过会做大量的压缩,用更廉价的方式存放起来,中间过程中某些使用频率高的数据也会都存下来。

如何成为一名大数据工作者

这一点分两个方向谈,一个是具有IT背景的职场人怎样转向大数据,另外一个方向是在校生怎样踏入大数据领域。

IT工程师是可以转向大数据的。个人而言,比起工程方面经验,我更看重的是一个人的基本功。不论是大数据基础还是计算机技术,如果你目前的基本功不扎实,想转大数据,一样有很大的困难。如果你有很强的代码能力,其实要转到大数据并不是一个特别难的事情。如果你有比较好的基础,在大数据公司,比如TalkingData;可能半年、一年也就能够成长为一个还不错的大数据工程师。上面提到,大数据工程师负责建设大数据平台,数据科学家从事算法相关功做。

IT背景想成长为数据科学家,我感觉个人如果想做好,可能确实需要补一补数学方面的基础,比如直接看一些相关书籍。团队内部的信任,如果是毕业生,我一般会要求先把大学的概率统计好好复习一遍,这是非常基础的一个学科;然后还有相关如线性代数,如果能够很好掌握,对深入算法非常有帮助。

现在还有一种趋势,在小规模问题上,提供的工具越来越多、越来越好用。有些人认为用这些工具处理一个或者同类的问题就可以了。但我认为只能说会使用算法包,但对算法原理不能有清晰认识,不能举一反三,这样的数据科学家,不管你做多长时间,始终会停留在初级的层面上。会使用一千种算法却没有深入了解,相当于是学了一千种招式但内功没有练好;如果你把内功练好,招式学的很快。

不能盲从,哪个工具好就用哪个。比如,现在深度学习很火,大家都是用深度学习,但是对深度学习的基本原理又不太了解。这种心态的话是走不长远的,因为使用层面上这个基本上没门槛,对于懂编程的人来说,调用人家的库做一个事情可能也就是一天两天的事情。这样做我不认为有什么特别大价值,一定要去深入了解算法背后的原理。即使你自己不去实现算法,这个对你以后遇到什么问题,用什么样的算法,或者自己去定义问题有很大帮助。数据科学里面有很多是定义问题,你对算法、对数学掌握的更深一些,就能够把问题数学化更好,选择更好的工具来解决。

对于学生而言,如果你是一名大学生,学校若是有相关的选修课可以去选修。虽然有一些大学已经开设了大数据专业,但是这还不是普遍性的;因为从高等教育的专业设置跟时代的发展是有一定的滞后性,更多需要自己去关注。网上学习资料很多,包括TalkingData University也有很多的公开课程,如果自己真的有兴趣的话,可以去自学很多东西。想找到这样的学习资料,机会都是比较容易的,就看自己用不用心。如果是中学生还是好好学习,争取在好大学就读计算机、数学的相关专业,不管大数据还是科学方面打下好的基础。如果既有数学的背景又有计算机背景,在数据科学方面有很大的优势。纯数学背景或者纯计算机背景在数据科学方面都会有一些短板。

谈机器学习、人工智能带来的变化

怎么看待机器学习和人工智能给人类带来的影响?这个问题很大。AlphaGo是一个非常大的突破:因为之前认为按照计算量的发展,需要50年或者100年才能够达到超越人的水平;没想到2016年就超过了。这突破式发展让大家现在对人工智能抱有很大热情。

我个人认为现在人工智能确实可以做很多很多的事情。其实在AlphaGo之前,就已经有很多智能的技术就在影响我们的生活,像推荐系统、精准广告,只不过这是个比较平缓的发展,大家没有感觉出来。未来认为还将依旧是平缓的发展,AlphaGo更像一个标志性事件,意味着达到了一个水平,但是这个突破并不是突然,经过多年的不管是数据、技术还是算法的积累,这是一个必然结果。

未来的人工智能应用,目前整个业界更关注的就是智能驾驶,不管是国内的百度、国外的Uber都在做测试。这可能是接下来五年之内人工智能有希望取得比较大的进步方向。其他领域,人工智能可能会比较润物细无声,不会有特别大的变化。

现在一直在发展,像广告会做得越来越智能,越来越符合你的需求。我们看看,原来广告是怎么做的,我们会分析人的兴趣;我们昨天还在跟一个剑桥的教授聊,他们在分析人的性格,根据性格,同一个广告我给你不同的广告素材,这不是一个飞跃性的发展,是逐步渐进式的发展。现在还会看到很火热的聊天机器人,我们目前认为通用性的聊天机器人短期内看不到真正落地的场景,现在更多会垂直化发展。

在垂直领域产生价值,国外有一些公司在做小场景的应用创新,比如有一家公司在做一个简单的事情,国外很多人都会收到贴停车罚单,这家公司做的是一个法庭申诉咨询聊天机器人,他给你建议,怎么到法庭上申诉,成功率可以达到64%。这里的case不是通用性的,是在法律范围内,属于非常固定的场景,但是能够起到很好的效果。聊天机器人我们用了很多的技术,但现在即使是比较成熟的技术,还没有到能够真正理解人的话语里面的逻辑。做成通用的无所不能的聊天机器人,短期内还是难以实现。在限定领域,第一,问题空间变得很小;第二,人对机器的期望会降低,我并不是说真的把你当做一个朋友在聊,你帮我解决特定的问题。人对体验上的要求降低了,问题空间减少了,这样就能够起到比较好的效果,未来就有比较微小的智能会逐步围绕着我们生活出现。

至于人工智能的发展,什么时候量变变成质变。我个人认为,如果从强人工智能的角度看,现在的技术水平离这块比较遥远。举例说明,深度学习的发展,本质上深度学习、神经网络,从数学上看是函数拟合器,现在还不太具备理解世界的能力,更多是去从某种层次上模仿人的决策函数,或者说它并不会理解里面的因果关系。我个人认为在这方面还不能够有特别大的突破,也就是说科幻片里面人工智能还是相对来说比较遥远的。

基于现在的技术,包括未来数据会越来越多,在两者的发展结合下,我认为智能确实会越来越多,但是都是功能性的智能:驾驶领域有驾驶的智能,推荐领域有推荐的智能,语音助手中有语音助手的智能,这些都是未来5-10年内能够看到的。

其他问答

问:“是不是可以理解机器学习都是基于已有的数据进行概率统计学习,选择合适的模型?”

张夏天:
可以这么认为。不过,我更认可的一种观点,不见得尽然对: 机器学习是统计学发展到一定程度,无法解决大数据量的情况下做的一个妥协。
在以往,对于很多问题都能够用概率的模型描述,或者概率密度函数,或者概率函数进行描述;但是发展到后来,我们发现在多维度,尤其高维度的情况下,用统计学不可能精确地求解或估计出这样的函数。机器学习就退而求其次,在分类问题上不要求精确到概率的结果,比如90%是A或者80%是B;机器学习需要的结果就是,要看到在某个空间里面,给出一个分类界面,指出结果是在哪边就OK了。

问:在处理大规模问题时,你们会对算法进行一些优化,并且考虑开源出来?

张夏天:
我们内部是,刚才说到了大规模机器学习的问题,现在市面上没有特别成熟的东西,不像小规模问题,我找一个Python的包就能解决很多问题了。这种情况下很多大的公司,不管是国外的谷歌、脸书,国内的BAT,自己内部有相当大的投入,不管是在系统上还是人员上都构建自己的能力。

这方面做的一些工作我们愿意开源出来,帮助大规模机器学习能够得到更好的应用。

问:对于小规模问题是不是会采那些历史很悠久的统计算法?

张夏天:
是的,但是我们也不拒绝新的算法。

问:那么在您看来,人工智能距离发展成科幻片还差对人脑科学理解?

张夏天:
现在人工智能最好的模型就是人脑,很多科学家正在研究人脑,琢磨怎么模仿人脑来实现智能。我认为大脑确实是一个好的参照对象,但是我们更多的应该是受大脑运行机制的启发,而不是严格的去“山寨”大脑。因为大脑的运行机制是受制于生物体的限制下的机制,是炭基的智能。现在的计算机技术是硅基的,我们并不一定要让硅基的智能来模拟炭基的智能,而是发展更适合现有计算机技术的智能机制。而且,目前对人脑的研究也还谈不上特别深入,想模仿好都不容易。

嘉宾简介

张夏天,TalkingData首席数据科学家,北京邮电大学硕士毕业,长期从事数据挖掘,机器学习相关领域的研究和应用工作。曾在IBM中国研究院,腾讯数据平台部,华为诺亚方舟实验室任职,2013年加入腾云天下任首席数据科学家,全面负责数据挖掘工作,包括移动应用推荐系统、移动广告优化、移动应用受众画像、移动设备用户画像、游戏数据挖掘、位置数据挖掘等工作。同时负责大数据机器学习算法的研究和实现工作。发表学术论文10篇,申请专利9个。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址