【科技观察】Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性
本文由作者董飞授权转载,欢迎“董老师在硅谷”公众号(donglaoshi-123)
2016年3月7日,谷歌首席科学家,MapReduce、BigTable等系统的创造者,Jeff Dean受邀韩国大学,演讲主题《大规模深度学习》,这里部分来自highscalability的文字和笔者Youtube上的听录。刚好演讲在AlphaGo和李世石比赛之前,观众也问了他的预测,他只是说训练了5个月的机器跟顶尖高手的差距不好说;还有人问道他喜欢的编程语言(C++爱恨交织,喜欢Go的简洁,Sawzall才是真爱);在Google作为首席一天是怎么过的(要吃好早饭,到处闲逛闲聊,找到那些每个领域专家一起攻克难题)。
整合意味着理解
如果你不理解信息中的奥秘,那么你也很难去组织它。
Jeff Dean是Google系统架构组院士,在讲座:“大规模深度学习构建智能计算机系统”中提到这句和Google的使命:整合全球信息,使人人皆可访问并从中受益。早期他们通过收集,清理,存储,索引,汇报,检索数据完成“整合”的工作,当Google完成这个使命,就去迎接下一个挑战。
理解到底是什么含义?
看到这张图,你马上知道是小宝宝抱着泰迪熊睡觉。而看到下张街景,马上意识到纪念品店里面有打折信息。其实直到最近,计算机才可以提取图片中的信息。
如果想从图像去解释物理世界,计算机需要去选择跟那些感兴趣的点,阅读文字并去真正理解。
像下面的文字“car parts for sale(卖汽车配件)”,传统的Google通过关键字匹配来给出结果,但更好的匹配是第二个。这是一个需求深度理解的过程,而不能停留在字面,要去做一个优秀搜索和语言理解产品。
Google的深度神经网络历史
Google跟其他公司的不同是,2011年就开始Google大脑计划,当时想通过使用神经网络来提升技术水准,但并没有把研究做成像大学象牙塔那种,而是结合安卓,Gmail,图片去改进产品解决真正问题。这对其他公司也是很好的借鉴,把研究和员工工作结合起来。
神经网络老早就开始研究,上世纪60年代发明,在80年代和90年代早期也流行过,后来又不火了。两个原因:缺少计算能力去训练数据模型,这样也不能用来做更大规模的问题;2)缺少大量有效的数据集。而Google通过算法的力量,在加上他们强大的基础架构,海量数据集创造了AI的绝佳温床。
深度学习一开始从少数的产品组开始,一段时间后反响很好,能解决之前不能做的,就更多的团队开始采纳。使用深度学习的产品有:安卓,Apps,药品发现,Gmail,图片理解,地图,自然语言,图片,机器人,语音翻译等。
深度学习能应用到很多领域原因是那些通用模块:语音,文字,搜索词,图片,视频,标签,实体,短语,音频特性。输入一类信息,决定你想要的输出,收集训练数据作为你想要计算的潜在函数,然后就放手不管了。
模型很赞的原因是因为灌了很多原始形式的数据。你不需要教工程师很多特征点,模型的力量在于从观察一些例子就能自动识别数据中的有用信息。
深度神经网络是什么?
神经网络就是一些从数据提炼的复杂函数。从一个空间输入在转化为另一个空间的输出。这里的函数不是像平方,而是真正复杂的函数。当你给出一些原始像素,比如猫,而输出就是对象的类别。
深度学习中的“深度”指的是 神经网络中的层数。这个系统的良好性质是一组简单的可以训练的数学函数集合。深度神经网络适用于很多机器学习风格。
比如你给输入一张猫的图片,输出是人工标记的猫图片,这是 监督学习。你把很多这样监督样本给系统,让它去学习近似的函数,如同从监督样本中观察出来的。
还有一种是非监督学习,给出一个图片,你也不知道里面是啥,系统可以学习去寻找在很多图片中出现的模式。这样即使不认识图片,它也能识别所有的图片中都有一只猫。
增强学习也适用,这也是AlphaGo用到的技术。
什么是深度学习?
深度网络模型是类似于大脑行为的原理。但不是具体模拟神经元如何工作。而是一种简单抽象的神经元版本。
神经元有一组输入。真正神经元会有不同的强度的输入。在人工智能网中试图去学习到这些边上的权重,去加强不同输入的联系。真正神经元通过输入和强度的组合去决定要不要生成脉冲。
人工神经元不会产生脉冲,但会生成一个数值。神经元的函数就是通过非线性函数计算输入的加权乘以权重之和。
典型的非线性函数就是整形线性单元(max(0, x)),在90年代很多非线性函数是很平缓的sigmoid()函数或者tanh()函数。但对于神经元来说产生的数值是不是更接近0对优化系统更有利。比如如果神经元有3个输入 X1, X1, X3,权重分别是 -0.21, 0.3, 0.7,计算就是
y = max(0, -.0.21*x1 + 0.3*x2 + 0.7*x3)。
为了决定图片到底是猫还是狗,这个图片要经过很多层。这些神经元根据输入来产生下一步。
最低层的神经元会查看像素的小块。更高层的神经元会看下层神经元的输出再决定是否生产。
这个模型也会错,比如说这里是猫,但事实上是狗。那么做错误决定的信号就会返回到系统中做调整,让剩余的模型在下一次查看图片时候,更可能输出狗。这就是神经网络的目标,通过模型小步调整边的权重让它更可能去得到正确答案。你可以通过所有样本去聚合,这样可以降低错误率。
学习算法其实比较简单如下
选择随机训练样本“(输入,标签)”,比如上面猫图和想要的输出标签,‘猫’
运行神经网络,在输入上去查看它产生的。
调整边的权重让最后输出更接近于“标签”上的。
如何调整边的权重去保障输出更接近于标签呢?
反向传播:积分的链式法则在决定高层神经网络中使用,如果选择是猫而不是狗呢?得想办法去调整高层的权重去让它更可以决定是“狗”。
根据箭头方向和权重去让它更可能说是狗。不要步子迈得太大因为这种表面很复杂,微调一小步让它下次更可能给出狗的结果。通过很多迭代以及查看例子,结果更可能会是狗。通过这个链式法则去理解底层参数改变是如何影响到输出的。说白了就是网络变化回路反馈到输入,使得整个模型更适应去选择“狗”。
权重的微调
真正神经网络通过亿级的参数在亿级的维度做调整,去理解输出网络。Google目前有能力如何快速搭建和训练这些海量数据上的模型,去解决实际问题,在快速去不同广泛的平台去部署生产模型(手机,传感器,云端等)。
神经网络的奇妙特性
就是说神经网络可以用在很多不同问题上。
文本:万亿级别的英文和其他语言资料。从一个语言翻译到另一个,从短语到整句。
虚拟化数据:十亿级别的图谱,视频。
语音:每天都产生万小时的资料。
用户行为: 很多应用产生数据。比如搜索引擎的查询,用户在email中标记垃圾。这些都可以学习并搭建智能系统。
知识图谱:十亿级别的标签化关系元组。
如果吸收更多数据,让模型变大,结果也更好。
如果你输入更多数据,但没有把模型变大,模型的能力就会受限在一些数据集中的明显特征。通过增加模型的规模,让它不仅记住明显的,还有一些也许出现很少的细微特征。
通过更大的模型,更多数据,计算需求也更大。Google很多精力花在如何提升计算量,训练更大的模型。
在Google深度学习有哪些强大应用?
1)语音识别
第一个部署深度神经网络的小组。他们实现的新模型基于神经网络而不是隐马尔可夫模型。这个问题是把从150毫秒的语音去预测中间10毫秒吞掉的声音。比如到底是ba还是ka的声音。你得到一个预测的序列,再通过语言模型去理解用户所说。
一开始的版本就把识别错误率降低了30%,确实非常厉害。后来就研究一些复杂模型去加强网络,进一步降低错误率。现在当你对着电话说话,语音识别比五年前强多了。
2)ImageNet挑战
ImageNet是6年前公布的。里面有100万张图片,算是计算机视觉领域最大的。图片中包含1000种不同分类,每一类有1000张图片。比如里面有上千张不同的豹子,摩托车等,一个麻烦的是不是所有的标签都是对的。
在神经网络使用之前,最好的错误记录是26%,2014年 Google错误率暴降到6.66%取得冠军,然后到了2015年错误率下降到3.46%。这是什么概念,大家注意到Andrej人类的错误率也有5.1%(他还是花了24小时训练后的结果)。
总之这是个又大又深的模型,每个盒子就像神经元的一层去进行卷积操作。
3)图片类别识别
计算机在花卉识别上很强大,这是非常好的模型,能够识别细微差别。
一般的效果,比如在菜品识别。
计算机也有犯错的时候,关于错误敏感性看一看上面的,比如左边鼻涕虫当成蛇,右边也不知道是什么鬼。
4)Google图片搜索
理解图片中像素的能力,Google图片团队开发了不用标签就可以搜索图片的功能。比如你可以去找雕像,素描,水,而不需提前标注。
5)街景图像
在街景中如何识别里面的文字。首先要找到文字部分,模型能够去有效预测像素中热点图,那些含有文字的像素点。训练的数据就是包含文字划分的多边形。
因为训练数据中包括不同的字符集,这样在多语言下也没问题。也要考虑大小字体,远近,不同颜色。训练的模型相对容易,就是卷积神经网络尝试去预测每个像素是否包括文字。
6)Google搜索 RankBrain
2015年启动,在搜索排名(前100位排第三),里面难点是搜索排序需要了解模型,要理解为什么要做某个决定。当系统发生错误为什么做那个。
调试工具准备好,需要足够的理解能力嵌入模型,去避免主观。总体上是不想手工调参数。你需要尝试理解模型中的预测,去理解训练数据是否相关,是否跟问题无关?你需要训练数据并应用到别的上面。通过搜索查询的分布你能得到每天的变化,事件发生后改变也随时发生。你要看分布是否稳定,比如语音识别,一般人不会改变音色。当查询和文档内容频繁变化,你要保证模型是新的。我们要搭建通用工具去理解神经网络里面发生了什么,解释什么导致这个预测。
序列模型
很多问题都可以映射到从一个序列到另一个序列的规律。比如语言翻译,从英语翻译到法语,就是把英语的序列单词转化到法语序列单词。
神经网络在学习复杂函数时特别有用,这个模型学习从英文到法文的句子。句子以单词为单位,以结束符作为信号。训练模型在遇到结束符时开始产生另一个语言的对应句子。而模型函数就是把语言中语句对作为训练数据。
每一步都在词典表中的单词产生概率分布。在推理时候通过一些搜索来实现,如果你最大化每个单词的概率,这样找的不是最可能的句子。直到找到最大可能的句子找到才结束搜索。
这个系统在公开翻译系统中表现出色。大多数其他翻译系统需要手工编码或机器学习的模型只是在一小部分使用,而不是像这种整体的端到端的学习系统。
这些领域都是可以归到序列类的方法
7)智能回复
智能回复是另一个序列类的例子。在手机上你如何更快回复邮件,打字很累。
Gmail组开发了一个系统能够去预测邮件回复。第一步就是训练小量模型去预测如果消息是某一类的,怎么做简短回复。如果是一个更大,计算能力更强的模型将消息作为一个序列,尝试预测序列的响应语。比如对于节日邀约,最可能的三个答复是“算上我们”,“我们会去的”,“对不起,我们有事没法耍”。
8)看图说话
把之前开发的图片模型与序列类模型结合一起。图片模型作为输入。这里就不是阅读英文句子了,而是看图片的像素。
接下来就是训练生成字幕。训练集有5个由不同的人写的不同的字幕。总共100万图片,70万条语句。效果如下
两个模型翻译的都不错:1)一个小孩紧紧的抱住毛绒玩具。2)一个宝宝在泰迪熊旁边睡着了。
上面是一些好玩的出错语句,为啥会错,其实你自己看了也明白。
9)机器视觉和翻译结合
翻译团队写了一个app,使用计算机视觉来识别镜头中文字,再翻译成文本,最后再图片本身覆盖翻译好的文字。模型足够小可以运行在所有设备上。
直接在手机上跑一些模型中的重要方法。智能化将转移到设备端,这样不会依赖远程云端的大脑。
研究上的努力和成果转化
Google 非常在乎研究转化效率。就是要快速训练模型,理解那些做的好的和不好的,再想下一步实验。模型应该再分钟或者小时,而不是几天或者几周。这样让每个人都做研究更高效。
机器学习发展会更好,更快。Jeff说机器学习社区发展得特别快。人们发布了一篇论文,一周内就有很多研究小组跟进,下载阅读,理解实现,再发布他们自己的扩展。这跟以前的计算机期刊投稿完全不同,等6个月才知道是否被接收,然后再过3个月最后发表。而现在把时间从一年压缩到一周,真不得了。
如何快速训练大量模型
模型的并行化
神经网络有很多固有的并行化,所有不同的神经元与其他的也是保持独立,特别本地接纳的,神经元仅仅接受一小部分比它更低的神经元作为输入。
在不同的GPU上和不同机器上可以做并行。只有边界上的数据需要通信。
数据并行化
优化的模型参数集不应该在一台机器上或者一台中心服务器上,应该有多个模型拷贝,这样协作区优化参数。
在训练过程中读取数据的随机部分。每一个拷贝在模型中获取当前的参数集,读取在当前梯度下的一点数据,找到想要的参数调整,在发送调整到中心的参数服务器中。这个参数服务器会对参数做调整。整个过程重复,这个也会在很多拷贝中进行。有些使用500份在500台不同机器上的拷贝,为了快速优化参数并处理大量数据。
一种方式是异步的,每一个都有自己的循环,取得参数,计算梯度,发送它们,不需要任何控制和跟其他的同步,不好的是当梯度返回到参数可能在计算结束后就被移走了。对有些例子可能有50到100份的拷贝。还有一种是同步,一个控制器控制所有的拷贝。
TensorFlow
在过去的几年间,我们已经建立了两代用于训练和部署神经网络的计算机系统,并且将这些系统应用于解决很多在传统上来说对计算机而言很难的问题。我们对许多这些领域的最新技术做了很大的改进。
第一代系统DistBeliet在可扩缩性上表现很好,但在用于研究时灵活性达不到预期。对问题空间的更深理解让我们可以做出一些大幅度的简化。
这也是第二代系统的研发动机,用 TensorFlow 表达高层次的机器学习计算。它是C++语言编写的核心,冗余少。而不同的前端,现有Python和C++前端,添加其他语言的前端也不是难题。
计算可以用一张数据流图来理解。
我们输入数据、权重、误差以及标签,在不同节点进行不同的运算。
TensorFlow名字的意义
Tensor(张量)意味着N维数组。1维时就是向量,2维时就是矩阵;通过图像可以代表更高维的数据流,比如,图像可以用三维张量(行,列,颜色)来表示。
Flow(流)意味着基于数据流图的计算。有许多运算(图中的节点)应用在数据流上。
张量从图象的一端流动到另一端,这就是“TensorFlow”。“边”代表张量(数据),节点代表运算处理。
这是使用张量计算的示意图。
这是使用状态计算的示意图。
这是使用分布式计算的示意图。
它能够在各个平台上自动运行模型:电话上,单个机器上(CPU或GPU),由成百上千的GPU卡组成的的分布式系统。
总结
如果你还没想通过深度学习网络去解决你的数据问题,你还是要赶紧考虑。TensorFlow 让每个人更容易获取深度学习能力。
高度扩展的设计,更快的实验速度加速研究进程
容易分享模型,开发代码应用到可重用的效果
通过同一个系统把研究工作直接用于生产环境
最后说一些quora上大家给Jeff Dean大神编的段子,供君一乐
Jeff Dean当初面试Google时,被问到“如果P=NP能够推导出哪些结论”,Jeff回答说:“P = 0或者N = 1”。而在面试官还没笑完的时候,Jeff检查了一下Google的公钥,然后在黑板上写下了私钥。
编译器从不警告Jeff Dean,只有Jeff警告编译器。
Jeff Dean的编码速度在2000年底提高了约40倍,因为他换了USB2.0的键盘。
Jeff Dean被迫发明了异步API因为有一天他把一个函数优化到在调用前就返回结果了。
Jeff Dean曾经写过一个O(n2)算法,那是为了解决旅行商问题。
Jeff Dean的键盘只有两个键,1和0。
Jeff Dean失眠的时候,就Mapreduce羊。
参考文章
董飞精彩文章回顾
硅谷大数据的过去与未来
问:硅谷最火的高科技创业公司都有哪些?
在硅谷大家非常热情地谈创业谈机会,我也通过自己的一些观察和积累,看到了不少最近几年涌现的热门创业公司。这个是华尔街网站的全世界创业公司融资规模评选。它本来的标题是billion startup club,不到一年的时间,截至到2015年1月17日,现在的排名和规模已经发生了很大的变化。
首先,估值在10 Billlon的达到了7家,而一年前一家都没有。
第二、第一名是中国人家喻户晓的小米。
第三、前20名中,绝大多数(8成在美国,在加州,在硅谷,在旧金山!)比如Uber,Airbnb,Dropbox,Pinterest。
第四、里面也有不少相似的成功模式,比如Flipkart就是印度市场的淘宝,Uber与Airbnb都是共享经济的范畴。
所以大家还是可以在移动(Uber),大数据(Palantir),消费级互联网,通讯(Snapchat),支付(Square),O2O App里面寻找到大机会。这里面很多公司我都亲自面试和感受过他们的环境。
问:有如此之多的高估值公司,是否意味着存在很大的泡沫?
我认为在硅谷这个充满梦想的地方,投资人鼓励创业者大胆去做,同样也助长了泡沫。很多项目在几个月的时间就会估值翻2、3倍,如Uber,Snapchat等等,我也惊讶于他们的巨额融资规模。
下面这张图讲的就是“新兴技术炒作”周期,把各类技术按照技术成熟度和期望值分类,这是硅谷创业孵化器YCombinator的课程How to start a startup提到的。“创新萌芽(Innovation Trigger)”、“期望最顶点(Peak ofInflated Expectation)”、“下调预期至低点(Trough of Disillusion)”、“回归理想(Slope ofEnlightenment)”、“生产率平台(Plateau of Productivity)”。
越往左,技术约新潮,越处于概念阶段;越往右,技术约成熟,越容易进入商业化应用,发挥出提高生产率的效果。纵轴代表预期值,人们对于新技术通常会随着认识的深入,预期不断升温,伴之以媒体炒作而到达顶峰;随之因技术瓶颈或其他原因,预期逐渐冷却至低点;但技术成熟后,期望又重新上升,重新积累用户,然后就到了可持续增长的健康轨道上来。今年和去年的图对比显示,物联网、自动驾驶汽车、消费级3D打印、自然语言问答等概念正在处于炒作的顶峰。而大数据已从顶峰滑落,NFC和云计算接近谷底。
问:你认为未来高科技创业的趋势是什么?
我先提一部最近看过的电影《模仿游戏》(Imitation Game),这部影片讲的是计算机逻辑的奠基者艾伦图灵艰难的一生。他当年为破译德军密码制作了图灵机为二战胜利做出卓越贡献,挽回几千万人的生命,可在那个时代,他因为是同性恋而被判化学阉割,最后自杀结束了短暂的42岁生命。他的伟大贡献之一就是在人工智能方面的开拓,他提出图灵测试(Turing Test),测试某机器是否能表现出与人等价或无法区分的智能。在今天,人工智能已经有了很大进步,从专家系统到基于统计的学习,从支持向量机到神经网络深度学习,每一步都带领机器智能走向下一个阶梯。
Google的资深科学家吴军博士(《数学之美》,《浪潮之巅》作者),他提出当前技术发展三个趋势:第一、云计算和和移动互联网,这是正在进行时;第二、机器智能,现在开始发生,但对社会的影响很多人还没有意识到;第三、大数据和机器智能结合,这是未来时,一定会发生,有公司在做,但还没有太形成规模。他认为未来机器会控制98%的人,而现在我们就要做个选择,怎么成为剩下的2%? 李开复在2015年新年展望也提出未来五年物联网将带来庞大创业机会。
问:为什么大数据和机器智能结合的未来一定会到来?
其实在工业革命(1820年)之前,世界人均GDP在1800年前的两三千年里基本没有变化,而从1820年到2001年的180年里,世界人均GDP从原来的667美元增长到6049美元。由此足见,工业革命带来的收入增长的确是翻天覆地的。但人类的进步并没有停止或者稳步增长,在发明了电力、电脑、互联网、移动互联网之后,全球年GDP增长从万分之5涨到了2%,信息也是在急剧增长。根据计算,最近两年的信息量是之前30年的总和,最近10年的信息量远超人类所有之前累计的信息量之和。在计算机时代,有个著名的摩尔定律,就是说同样成本下,每隔18个月晶体管数量会翻倍,反过来同样数量晶体管成本会减半,这个规律已经很好地对应了最近30年的发展,并且可以衍生到很多类似的领域,比如存储、功耗、带宽、像素等等。
作为20世纪最重要的数学家之一,现代计算机、博弈论和核武器等诸多领域的科学全才之一,冯•诺伊曼提出“技术”将会逼近人类历史上的某种本质的奇点,在那之后,全部人类行为都不可能以我们熟悉的面貌继续存在。这就是著名的奇点理论。目前,信息量正在以越来越快的指数型速度增长,美国未来学家Ray Kurzweil称人类能够在2045年实现数字化永生,他自己也创办了奇点大学。相信随着信息技术、无线网、生物、物理等领域的指数级增长,人类将在2029年实现人工智能,人的寿命也将会在未来15年得到大幅延长。
问:国外值得关注的大数据公司都有哪些?国内又有哪些?
大致可以把大数据公司分成基础架构类和应用类,而底层都是会用到一些通用技术,如Hadoop、Mahout、HBase、Cassandra等等;在分析领域,Cloudera、Hortonworks、MapR是Hadoop的三剑客;在运维领域,MongoDB、CouchBase都是NoSQL的代表;在服务领域,AWS和Google BigQuery剑拔弩张;在传统数据库,Oracle收购了MySQL,DB2是老牌银行专用,而Teradata则做了多年数据仓库。
Apps领域的大数据公司更多,比如社交消费领域的Google、 Amazon、Netflix、Twitter等等, 商业智能领域的SAP、GoodData,还有一些在广告媒体领域,TURN、Rocketfuel,另外还有做智能运维的Sumo Logic等等。去年的新星 Databricks 伴随着Spark的浪潮震撼了Hadoop的生态系统。
对于迅速成长的中国市场,大公司也意味着大数据。BAT三家对大数据的投入都是不惜余力的。我4年前在百度的时候,百度就提出框计算的概念,最近两年成立了百度硅谷研究院,挖来Andrew Ng作为首席科学家,研究项目就是百度大脑,在语音、图片识别技术上大幅提高精确度和召回率,最近还做了个无人自行车,非常有趣。腾讯作为最大的社交应用对大数据也是情有独钟,他们自己研发了C++平台的海量存储系统。淘宝去年双十一主战场,2分钟突破10亿,交易额突破571亿,背后有很多故事,当年在百度做Pyramid(按Google三辆马车打造的金字塔三层分布式系统)的有志之士,继续在OceanBase创造神话。阿里云当年备受争议,马云也被怀疑是不是被王坚忽悠,最后经历了双十一的洗礼证明了OceanBase和阿里云是靠谱的。小米的雷军对大数据也寄托厚望,一方面这么多数据几何级数增长,另一方面存储带宽都是巨大成本,没价值就真破产了。
问:与大数据技术关系最紧密的就是云计算,您曾在Amazon 云计算部门工作过,能简单介绍一下亚马逊的AWS和Redshift框架吗?
AWS总体上成熟度很高,有大量startup都是基于上面开发,比如有名的Netflix,Pinterest,Coursera等。Amazon还在不断创新,每年召开reInvent大会推广新的云产品和分享成功案例。在这里面我随便说几个,S3是简单面向对象的存储,DynamoDB是对关系型数据库的补充,Glacier是对冷数据做归档处理,Elastic MapReduce直接对MapReduce做打包提供计算服务,EC2就是基础的虚拟主机,Data Pipeline 会提供图形化界面直接串联工作任务。
Redshift是一种大规模并行计算(massively parallel computer)架构,是非常方便的数据仓库解决方案,它作为SQL接口跟各个云服务无缝连接。Redshift的最大特点就是快,在TB到PB级别有非常好的性能。我在工作中也是直接使用Redshift,它还支持不同的硬件平台,如果想速度更快,可以使用SSD的,当然支持容量就小些。
问:Hadoop是现今最流行的大数据技术,在它出现的当时,是什么造成了Hadoop的流行?当时Hadoop具有哪些设计上的优势?
要看Hadoop从哪里开始,就不得不提Google的先进性。在10多年前,Google发表了3篇论文论述分布式系统的做法,分别是GFS、MapReduce、BigTable。虽然都是很厉害的系统,但没人见过。在工业界很多人痒痒得就想按其思想去仿作。当时Apache Nutch Lucene的作者Doug Cutting也是其中之一。后来Doug他们被Yahoo收购,专门成立Team来投入研究,这就是Hadoop开始和大规模发展的地方。之后随着Yahoo的衰落,牛人去了Facebook、 Google,也有的成立了Cloudera、Hortonworks等大数据公司,把Hadoop的实践带到各个硅谷公司。而Google还没有停止,又出了新的三辆马车,Pregel、Caffeine、Dremel,后来又有很多人步入后尘,开始了新一轮开源大战。
为啥Hadoop就比较适合做大数据呢?首先扩展性很好,直接通过加节点就可以把系统能力提高。Hadoop有个重要思想就是移动计算而不是移动数据,因为数据的移动会带来很大的成本,需要网络带宽。其次,Hadoop提出的目标就是利用廉价的普通计算机(硬盘),这样虽然可能不稳定(磁盘坏的几率),但通过系统级别上的容错和冗余达到高可靠性。并且非常灵活,可以使用各种数据,二进制、文档型、记录型,也可以使用各种形式,结构化、半结构化、非结构化(所谓的schemaless),在按需计算上也是个技巧。
问:MapReduce模型有什么问题?
第一、需要写很多底层的代码,不够高效。第二、所有的事情必须要转化成两个操作Map或Reduce,这本身就很奇怪,也不能解决所有的情况。
问:Spark从何而来?Spark相比于Hadoop MapReduce设计上有什么样的优势?
其实Spark出现就是为了解决上面的问题。先说一些Spark的起源,它来自 2010年Berkeley AMPLab,发表在HotCloud上的Spark是一个从学术界到工业界的成功典范,也吸引了顶级VC Andreessen Horowitz的注资。在2013年,这些大牛(包括Berkeley系主任,MIT最年轻的助理教授)从Berkeley AMPLab出去成立了Databricks,引无数Hadoop大佬尽折腰。
Spark是用函数式语言Scala编写的,Spark简单说就是内存计算(包含迭代式计算、DAG计算、流式计算 )框架。之前MapReduce因效率低下,经常被大家诟病,而Spark的出现让大家感觉很清新。 Reynod 作为Spark核心开发者,介绍说Spark性能超Hadoop百倍,算法实现仅有其1/10或1/100。在去年的Sort benchmark上,Spark用了23min跑完了100TB的排序,刷新了之前Hadoop保持的世界纪录。
问:Linkedin都采用了哪些大数据开源技术?
在LinkedIn有很多数据产品,比如People you may like、Job you may be interested。你的用户访问来源,甚至你的career path都可以挖掘出来。Linkedin也大量用到了开源技术,我这里就说一个最成功的Kafka。Kafka是一个分布式的消息队列,可以用在tracking、机器内部metrics、数据传输上。数据在前端后端会经过不同的存储或者平台,每个平台都有自己的格式,如果没有一个unified log,会出现灾难型的O(m*n)的数据对接复杂度。如果你设定的格式一旦发生变化,也要修改所有相关的格式。所以这里提出的中间桥梁就是Kafka,大家约定用一个格式作为传输标准,然后在接受端可以任意定制你想要的数据源(topics),最后实现线性的O(m+n)复杂度。对应的设计细节,还是要参考设计文档,这里面主要作者Jay Kreps、Rao Jun成立了Kafka作为独立发展的公司。
Hadoop作为批处理的主力,大量应用在各个产品线上。比如广告组,我们一方面需要去做一些灵活的查询,分析广告主的匹配、广告预测和实际效果,另外在报表生成方面也是用Hadoop作为支持。如果你想去面试LinkedIn 后端组,我建议应该去把Hive、Pig、Azkaban(数据流的管理软件)、Avro 数据定义格式、Kafka、Voldemort 都了解一下。LinkedIn有专门的开源社区,也是在建设自己的技术品牌。
问:能谈一谈Coursera在大数据架构方面和其他硅谷创业公司相比有什么特点?是什么原因和技术取向造成了这些特点?
首先我介绍一下Coursera。作为MOOC(大型开放式网络课程)中的领头羊,Coursera在2012年由Stanford大学的Andrew和Daphne两名教授创立,目前160名员工,原Yale校长担任CEO。Coursera的使命是universal access to world's best education。很多人问我为什么加入,首先我非常认可公司的使命,我相信教育可以改变人生,同样我们也可以改变教育。能不能把技术跟教育结合起来,这是一个很有趣的话题,里面有很多东西可以结合。比如提供高可靠平台支持大规模用户在线并发访问,利用数据挖掘分析学生行为做个性化课程学习并提高课程满意度,通过机器学习识别作业、互相评判,用技术让人们平等便捷的获取教育服务。
Coursera作为创业公司,非常想保持敏捷和高效。从技术上来说,所有的技术都是基于AWS开发的,可以随意启动云端服务并做实验。我们大致分成产品组,架构组和数据分析组。因为公司比较新,所以没有什么历史遗留迁移的问题。大家大胆地使用Scala作为主要编程语言,采用Python作为脚本控制。比如产品组就是提供课程产品,里面大量使用Play Framework,JavaScript的backbone作为控制中枢。而架构组主要是维护底层存储、通用服务、性能和稳定性。
我所在的数据组由10多人构成,一部分是对商业产品,核心增长指标做监控、挖掘和改进。一部分是搭建数据仓库完善跟各个部门的无缝数据流动,这里也用到了很多技术。例如使用Scalding编写Hadoop MapReduce程序,也有人做AB testing框架、 推荐系统,尽可能用最少人力做有影响力的事情。其实除了开源世界,我们也积极使用第三方的产品,比如我们用Sumo Logic做日志错误分析,用Redshift作为大数据分析平台,用Slack做内部通讯。而所有的这些就是想解放生产力,把重心放到用户体验、产品开发和迭代上去。
Coursera是一个有使命驱动的公司,大家不是为了追求技术的极致,而是为了服务好老师、同学,解决他们的痛点,分享他们的成功。这点是跟其他技术公司最大的区别。从某个方面来说,现在我们还是处于早期积累阶段,大规模计算时代还没有来临,我们只有积极学习、适应变化才能保持创业公司的高速成长。
问:如果想从事大数据方面的工作,是否可以推荐一些有效的学习方法?有哪些推荐的书籍?
首先还是打好基础,Hadoop虽然火热,但它的基础原理都是书本上很多年的积累。像算法导论、Unix设计哲学、数据库原理、深入理解计算机原理、Java设计模式,有一些重量级的书可以参考,Hadoop 最经典的The Definitive Guide, 我在知乎上也有分享。
其次是选择目标,如果你想做数据科学家,我可以推荐coursera上的data science课程,通俗易懂。学习Hive,Pig这些基本工具,如果做应用层,主要是要熟悉Hadoop的一些工作流,包括一些基本调优。如果是想做架构,除了要能搭建集群,要对各个基础软件服务很了解,还要理解计算机的瓶颈和负载管理以及Linux的一些性能工具。
最后,还是要多加练习。大数据本身就靠实践,你可以先按API写书上的例子,做到有能力调试成功。再下面就是多积累,当遇到相似的问题时能找到对应的经典模式。然后就是实际问题了,也许周边谁也没遇到过这样的问题,你需要灵感和在网上问问题的技巧,然后根据实际情况作出最佳选择。
董飞,Coursera数据工程师。曾先后在创业公司酷迅,百度基础架构组,Amazon 云计算部门,LinkedIn担任高级工程师,负责垂直搜索,百度云计算平台研发和广告系统的架构。董飞本科毕业于南开大学,硕士毕业于杜克大学计算机系。他在知乎上分享过多个引起强烈反响的问答,其中包括《哪些硅谷创业公司能给拜访者留下深刻印象》、《美国大数据工程师面试攻略》、《Coursera 上有哪些课程值得推荐》等。
关注硅谷趋势,一起学习成长。
投稿邮箱:13355524@qq.com