转载

【SDCC 2015】今日头条技术副总裁杨震原:大数据的挑战,开发者如何应对

【CSDN现场报道】2015年11月19-21日,由CSDN重磅打造的“ 2015 中国软件开发者大会 ”(以下简称SDCC 2015)在北京朗丽兹西山花园酒店隆重召开。今年是第七届,大会为期三天,除了阵容强大的全体大会外,主办方还精心筹备了九大技术专场论坛,包括:架构实践论坛、前端开发论坛、数据库实战论坛、研发管理论坛、安全技术论坛、算法实战论坛、编程语言论坛、产品与设计论坛、微信开发论坛。此外,还有五场特色活动及展览展示。

今日头条技术副总裁杨震原在主题为《大数据的挑战,开发者如何应对》中介绍了开发者在大数据时代,应如何拥抱变革、改变思路。他通过一系列的例子和方法论,诠释了他们以及大家都是如何根据各种收到的数据进行调整产品的。他还就在数据越来越多、硬件进步速度减慢、应用越来越多的情况下如何应对,给出了他的看法——让更多开发者应该变成全栈的研发。

以下是杨震原发表的主题演讲:

【SDCC 2015】今日头条技术副总裁杨震原:大数据的挑战,开发者如何应对

今日头条技术副总裁 杨震原

先给大家讲一个段子,是Facebook 传的,他把大数据比作什么呢?高中生的除夜!我想要问一下大家,有谁的初夜是在高中的呢?有很多的人都举手这些都是做大数据很有潜力的人,在座的各位每一个人都在讨论大数据,就像高中生每个人都在讨论,你是做过?没有人做过,每个人都以为自己做过,每个人都声称自己做成,这是一个很有意思的事情,用这个来比喻大数据非常的恰当。当时为什么呢?其实从一点就可以完全可以看到大数据可以来到,我们每个人都在使用手机,手机上的传感器是越来越多,进步越来越快,我们以前只是你可以录音、拍照,现在我们随着互联网医疗的传感器都来了,可以知道你的心跳、地理位置全部都会被记录下来,从这一点我们就可以很明确的来说,大数据的时代会到来。

今天是开发者大会,我要给大家来讲一下,怎么样来做出改革?先说两个方面,我们要把以前没有办法记录的数据都要记录下来,第二我们来聊一下,以前无法分析的数据我们都要去进行分析。比如说记录,记录有很多简单的信息,在座的各位都应该会被记录下来,是有意思的,点击行为,大家的点击行为是不是记录了,所有的交互行为,所有行为的时长,这个可能大家不是都会记录下来。

再给大家举一个例子,这张图是什么呢?是一个按钮平均估摸的时间分布,他平均估摸的时间是在112毫秒,差不多是在44毫秒,一个按钮触摸的时间是不一样的,大家觉得这个信息有用吗?没有什么用,但是有一个研究机构表明,从一个用户接触的时间和面积时间的分布,我们可以预测用户按这个按钮时的情况,这件事情是可做的。就这个事情而言,对用户不是很准,如果说我有很多的按钮,这个事情可以做得非常的准,如果说一个文章我发明了一个按钮,下一篇通过这个按钮的行为我就知道有多少人是在愤怒的按,有多少人好像是不错的,像这样的记录很多人是之前没有想过的。再举一个例子,和这个是什么呢?这个是美国的一家研究机构发布的实验,通过手指来按压摄像头,就是把手机拿过来去做在线的课程,手机的背后都有LED灯,把灯打开之后用手指遮挡住摄像头和灯可以记录你的心跳的跳动,和血液,我们可以通过监管血液颜色的变化就可以发出你的心跳图。就可以知道学生是否在看这个图,再看一下你的心是不是在跳,当中就有很多有趣的东西。

我们再讲一下今日头条,我们来看一下阅读行为,我们以前会记录一篇文章在头条阅读的时间,我们换一种记录方法我们去看某一页停了多少秒,进而又停留了多少秒,我们会把这个序列记录下来,我们可以知道这个用户是否很懂这个文章,所以这些行为的记录都是非常有价值的。所以在新的时代大家要去了解以前不能够记的东西,没有用的东西,这些都可以记录下来,这些都是很有用的。其实有这样的信息是因为下面要讲到的,我们的分析的方法发生了变化,有很多的要去分析了。接下来再举一个例子,首先说一下,分析方法为什么会有这样的方法,有两个方面的因素,第一产品的应用越来越广泛了,有场景能够去用到这些数据,第二就是说我们分析数据的方法也越来越多。我举两个例子,第一个例子举的是搜索的展示与点击的数据这个数据是千亿量级的,在早期大家怎么样来用?就是要点击调权,如果说一个问题点击的次数很高就往前排,当分析方法没有那么进步的时候我们就用这种方法来做,这个方法有很多的泛化性,对于这一块有效,但是对于频次低的就没有效了。现在随着emdedding和神经网络的算法的,系统可以直接的去训练100亿、甚至1000亿的用户浏览、点击行为数据,去自动的学习到用户query与文章题目的内在关联,我们取得的收益是什么呢?这个是我摘自kaitua wsdm2015的下载,改进是在2014年,这个的效果是什么呢?整个的团队有34%的收益来自与这个项目,2014年有1/4的效益来自与这个项目,我们想象一下这是非常重大的改进,而这样的改进就是通过了计算的方法和变化,使得我们能够去分析这么大规模的数据。

我接下来再举一个头条的例子,这个图大家可以看一下,这个是今日头条阅读时长变化的数据,这个图是在波动,但是始终是在上角。我们为什么可以改进阅读时长呢?我们通过数据的分析,我们把用户的行为数据全部都记录下来了,我们知道用户点了什么内容?点没有点?点了之后怎么样去分析?所以我们就把这个数据进行分析,这个数据是包括用户的行为和行为特征的组合,我们仅30天的数据就达到了1.5PB,这样的数据对今日头条来说需要有很多的数据的资源才能够做到的,在后面中我会提一些细节来和大家交流。

就是通过充分的对数据的使用提高了用户的使用时长,更多的数据、更多的分析方法和应用的领域,这些就构成了大数据时代。

我们把大数据放下我们来看一下系统的硬件做了什么变化?这个是2005年到2015年CPU整数计算性能的提升区域,从2010年开始性能提升的曲线没有那么的高了。

同时大家关注数码的同学都了解,intel14nm的产品也是在不断的产品,我这里就单讲cpu能耗比的提升速度是在显著的减慢的,所以我在这里讲,摩尔定律已经宣告失效了,开发者依靠硬件红利的时代已经结束了。

数据越来越多,应用越来越多,硬件进步的趋势减慢,这就构成了大数据时代开发者面临的挑战。我相信大家听到这里很有兴趣听,我下面来讲如何的应对。我的应对思路是说,开发者更多的变成一个全栈的研发,这是什么意思呢?更加广泛的学习,成为全栈的研发是未来的解决之道。当局部可以大幅度的改进时,更细的分工才会线路出优势,否则只有全栈才能够综合的考不考虑并找到突破点。在最开始的时候,大家就是做CPU,有的人去做UI的改进,大家的分工非常的细,比如说像手机,一个人从硬件,芯片都是SOC的,交互整个的套都要去关注,当时就是很细的分工,很细的分工为什么能够大幅的改进?因为每一块都在大幅的改进,你作为开发者你就知道这个东西怎么样用?因为CPU再过一年你的机器已经换了,现在不是这样的时代了我们更细的分工不能够带来大量级,所以这就要求开发者必须要进行学习才能够带来突破。

要学什么?从cpu指令集到操作系统,从hadoop到统计原理,从机器学习到产品的应用,只有通过学习才能够找到突破点。

接下来讲3个例子,这些例子都是在头条之中找到的结合的改进点。主办方说要讲干货,所以我就先大概的讲一个思路,然后集中到细节点给大家做一个参考。第一讲系统工程和细节的交叉点,我们先说背景,今日内容推荐很重要的一部分就是针对一个你可能感兴趣的候选集进行惊喜的排序,这部分的一个核心就是进行了建模,把永辉的各种组合偏好记录下来。比如说uid—keyword就表达了某个用户的特点。我这里先不讨论各种模型的利弊,我们再往下来看如何解决特征爆炸的问题。机器学习的领域来讲,通常这样的问题解决的思路有很多种,比如说通过sample数据,比如说可以L1正则,稀疏化特征,第三特征过滤,第四hashtrick,第516bit的压缩。这里的方法特别多,我们再白讲一下特征的过滤怎么样来做,这个问题就变得非常明确的问题,我们有3T的uniqkey,我们现在的任务非常的明确我们需要去统计并过滤掉频次在8次以下的Key,我相信这个问题很多人都有自己的解决方法。很直观的方法就是使用hadoop你要去干掉低频的,因为大量的都是低频的,你偶尔看到一个词,大量的都是低频的,而且有一个劣势就是无法流式计算,我们把这个做完,就超过了模型的时间。在座的各位可能有一些优化的方法,但是总体来讲还是不大行的。

我们来看第二个方案,内存的hash表,我们去过一遍数据,来维护一个内容的表。每次去查一下,如果说出来6次了,我现在第7次了,我们把超过了7次的全部都统计下来,其他的都扔掉,这里有一个问题就是规模的问题,一个hash 的结构,一个key要占用40bytes,40bytes会有指针的消耗和对企的问题。如果我们有200台机器,单机需要600G的内存,现在很多的机器都不支持这个内存,那么怎么样来做?方案3是谷歌在写的一个方法,这个方法是这样的我们使用的是bloomcounter,我们不要求完全精准过滤。多bit的bloomfilter,我们又叫做countingfilters。频次是小于等于7,需要3bit,冲突率约1.5%的情况下,需要6次探测,单bitbloomfiter约8.66bit。我非常的不喜欢bloomcounter 这个结构,因为它对cpu非常的不友好,大范围随机的访存,你计算的时间都可以忽略掉。所以我很不喜欢这个数据结构,有没有更好的做法呢?我们用了很简单的方法,效果非常好,这样来做。开地址的hash ,我们是用开地址的hash ,而不是冲突了之后放下一个,再冲突了再放下一个,我们最大的填充率按50%记,但key16bit,单机30g内存,冲突率和bloomcounter接近。大家可以想象,就是说这里需要注意一下,就是说sign5bit的数据和其他的不同,我去查一个东西的时候,就是一个表的指,之后我用第二个函数来算出去如果说找到冲突之后,以前是1,1就加到2,2就加到3,我们就用到一个hash 用到非常小的一个结果而言,所以我们就要知道,这个hash 的函数不同,所以它是一个有损的hash ,这个有多大的好处呢?它是bloomcounter性能的6倍,因为它只需要一次访存,所以我们的性能就提升了6倍,这个事情就使得我们对模型训练的时间,提高到了原来的2倍,所以我们在万兆的网络连接上,20个小时都可以传完,是用到fiter的方法,我就希望用到很细节的方法来表达,这些都可以和工程相结合起来,找到结合点的时候就要把规矩和规模进行提升,这些提升所带来的效果是很大的。

再来讲第二个例子就是理论的研究和实践的结合。我们来看这一张图,这一张图是什么意思呢?对于一个LR model来讲,使用不同的学习率、不同正则项,收敛的效果是不同的。这当中是自带了效果,但是初始的学习率还是会带来很大的影响。除了weiglt的参数之外,我们还有学习率、L1等的超参数。手工调参是非常困难的问题。

由于头条的训练样本很大,不同特征之间的频次相差非常大,有多大的?会相差7个数量级,我们的频次可能是几千万次,有的出现频次只有20、30次。所以针对不同类型的特征我们针对不同的超参数。特征的类型我们是按照特定的规则来分有上百个,每个特征的类型都有正则率和特征的参数,这样我们就几百个参数,这个是没有办法调整的,所有这个事情是是不能够训练的,这是一个很痛苦的问题,有什么解决的方法呢?头条在这一块是有创新的,当然这些工作都是我们团队来做的。

所以大家想一下,超参的本质是什么?就是要去寻找过拟合和训练不足之间的最佳的平衡点,我训练是在一个训练集之中去做优化,我上线是在上线的集合之中来做,这两个数据集的分布是不同的,超参数就是去调这个东西,我训练不充分不好,我就是要做到在上线的情况下最优的超参数。我们把数据分为训练集验证集和测试集,我们在训练集之中去优化参数,我们可以做的事情是在验证集之中去优化超参数,目标是降低验证集的loss,这是更加的接近线上的分布,这是一个本质的方法我们可以找到最优点,同时这个方法是服务做好的。后面会稍微的说一下流程,大家可以看到,如此来在验证集上去优化参数,在ftrl下,超参是可以导的,这是最有意思的事情。这个l1正则项梯度,这个是可以求出来的,对l2的正则项也是可以求出来的,所以我们就有自动调参的流程,来算出更新,然后在验证集中去验证,就用到这些相应的方法,如何去把验证集去进行训练,这是有讲究的,如果验证集太近和太远都是不好的,这些都是细节的问题。也有新的问题,学习中的验证怎么样调?做这一块的人,最头痛的事情就是调参,但是我可以把几百个参数变成只有几个——参数可以调了,这个事情我们已经把它实现了并且在头条上全面的上线了,取得了什么效果呢?就是我们的离线评估UAC的面积,有2.2个绝对百分点的收益,在线的CTR有7.5个相对百分点的收益,这是非常重大的改进。

这个项目不仅仅有一个很好的实际效果,在算法的领域上也有一定的突破,我们之后也打算把这个整理一下,在期刊上去发一个内容来试一下,我们是第一次这么做的。给大家讲了,大家可以去试。好,我再来讲第三个例子,算法和产品,UI的结合。

头条不仅仅有文章还有视频,视频的低质内容的控制是很重要的,我们有很多的办法去改进这个问题,有一些账号去评级,通过账号订阅的比例,效果都不好,之后我们用了一个办法,效果会大幅度的提升,说出来大家会觉得很简单,点赞。我们在视频播放的列表页放出了顶踩按钮,这样的使用就会大幅的提升,所以通过简单的加入顶踩的数据的统计,会对低质的打击效果明显提高。这就是一个很简单的,就是和产品结合,大家很多时候会举很多的例子,比如说以前肥皂盒的例子,技术的方案就是要解决问题你有简单的方法去解决问题这才是更有意义的创新。我要讲的例子就是这3个。

在大数据的领域还有哪些技术可以进一步的交叉呢?比如说硬件的交叉,在新的硬件领域其实还有非常多有利的创新的点。比如说现在的传感器的技术,比如说神经网络很多的做法都是嵌入到芯片之中去的,比如说有的公司,比如说余凯的创业公司和IBM都在做这方面的研究,分布式架构和机器学习算法的交叉同级BI分析与新算法的交叉,这是一种用语言来画图做引擎,这和我们做一些编译和新的语言都有关系,都是一些交叉。

同级的BI的分析和新算法的交叉,很多的行业我们都在做BI的分析,这当中是不是能够在业务之中接触到新的东西,这些交叉是诞生新想法非常重要的一部分,等等还有很多。最重要的一个交叉就是什么呢?把技术和人们的需求的痛点相结合,进而产生更多的产品,所以每个创业者是更加棒的创业家,所以在大数据的时代下,有太多的需要学习的,大家觉得为什么我们这么的惨,以前的时代多好我们去做就好了,这就说明了开发者的不可替代性和行业的繁荣,我觉得这就是开发者的时代也是在座每一个人的机会,谢谢,我要讲的就是这些。

更多精彩内容,请关注新浪微博:@CSDN、图文直播专题: 2015中国软件开发者大会 。

正文到此结束
Loading...