[Distributed ML] Yi WANG's talk
王益,分布式机器学习的践行者,他的足迹值得后来者学习。
膜拜策略:
- LinkedIn高级分析师王益:大数据时代的理想主义和现实主义(图灵访谈)【心路历程】
 - 分布式机器学习的故事-王益【历史由来】
 - 分布式机器学习系列讲座(王益)【油管视频】
 
腾讯孔雀系统
一、基本状况
2014年业内现状
并且很多研究员也并不擅长设计适合于自己研发的算法的并行计算架构
业内实际问题
同时也和腾讯的同事们一起为国际数据挖掘大赛出题,比如KDD Cup 2012和ICME Grand Challenge 2014。
业内大牛
互联网行业里有一些学界业界交融好榜样,比如卡内基梅隆大学的Alexander Smola教授。
他在Yahoo!有丰富的业界经验。在成为Principle Scientist之后,去卡内基梅隆任教,传授业界积累的大数据挖掘知识。同时在Google做访问研究,保持研究水平的领先。我相信将来会有更多研究人员像这样两条胳膊都撸起袖子。
伟大经历
Google 让我见识和实践了世界一流的大数据技术,
Tencent 给了我了解互联网业务的机会。
二、并行机器学习系统 - 孔雀
孔雀是一个主题模型的并行训练系统。主题模型是一种机器学习方法,它从文本中归纳“语义”,每个“语义”是一组表达同样意思的词。这个归纳过程通常比较耗费机器和时间;但是一旦归纳结束,得到了主题模型,那么机器就可以在几毫秒之内理解任何一段文本(搜索词、广告、商品描述或者网页内容)表达的语义,从而在语义空间里比较用户意图(搜索词)和广告、商品、网页的相关性。而相关性是现代搜索引擎、推荐系统、广告系统的核心要素之一。主体模型除了用在文本数据上,也可以用在用户行为数据上——此时它就是一个先进的协同过滤推荐系统。
Ref: 分布式机器学习的故事(侧记):论文发表了
"感谢阵容" 极为豪华!
Ref: 让机器搞懂100万种隐含语义,腾讯Peacock大规模主题模型首次全揭秘
此处只是本文的阅读理解,详读还需要未来花时间好好瞧瞧。
/* implement */
三、Google的Rephil系统
2006年开始,Google的Rephil系统就可以从好几个数量级大的文本数据中归纳几十万语义,从而奠定了Google AdSense广告系统的相关性的基石,最终帮助AdSense成为Google收入的半壁江山。
其作者(博士Uri Lerner和工程师Mike Yar)在2002年在湾区举办的几次小规模交流中简要介绍过。
Ref: 分布式机器学习的故事:Rephil和MapReduce
因为概率模型做了太多的 ”指数族分布假设“。
Rephil系统实现的模型是一个神经元网络模型(neural network)。它的设计的主要考虑,就是要能尽量好的描述长尾分布的文本数据和其中蕴含的语义。Rephil模型的具体技术细节因为没有在论文中发表过,所以不便在这里透露。但是Rephil模型描述长尾数据的能力,是下文将要介绍的Peacock系统的原动力,虽然两者在模型上完全不同。
Rephil系统是基于Google MapReduce构建的。如上节所述,MapReduce在用来实现迭代算法的时候,效率是比较低的。这也是Peacock要设计全新框架的原动力——使其比MapReduce高效,但同时像MapReduce一样支持fault recovery。
以下三篇需要再整理:
(1)[Bayes] Concept Search and LSI
(2)[Bayes] Concept Search and PLSA
(3)[Bayes] Concept Search and LDA
四、韭菜所学
长尾需求
可是互联网的精髓在于服务用户的“长尾”需求。
战狼养生
在座的百度的余凯老师表示理解,总结说:“今日中国是极端的理想主义和极端的现实主义的结合”。我甚感共鸣,其实古往今来莫非如此。
他这样在数学、计算机、金融、投资、管理等多个方面努力学习、融会贯通,功底是和扎实的。而为了做到这些,他每天的体能训练也很扎实。并且为了保持精神状态,每天洗冷水澡。
编程理解
其中对我影响最大的是Lisp,是我的同学王垠教我的,让我接触了一点计算的数学本质。
在微软图形学组实习时学了GPU的汇编语言,后来用GPU写并行机器学习算法的时候用过Cg。
我工作中用的语言主要是C++。
从写Peacock开始用Go。
Go语言的开发效率比C++和Java都高很多,让我能在七天假期里尝试新模型和新的并行化方法。
简单的分布式数据处理用bash+ssh+awk代替MapReduce。
职业规划
原来Hulu.com的engineering VP张小沛。她对择业的建议很简练:“最重要的是知道自己要的是什么”。
分布式机器学习的故事
简言之,互联网使得人类第一次有机会收集全人类的行为数据。从而为机器学习这一持续了数十年的研究方向提供了全新的机会——分布式机器学习——从互联网数据中归纳这个人类的知识,从而让机器比任何一个个人都要“聪明”。
一、大数据和分布式机器学习特点
二、并行范式
框架实现
- Message Passing(消息传递)范式的一个框架叫做MPI,其实现叫作:MPICH2
 - MapReduce范式的框架也叫MapReduce,其实现叫作:Apache Hadoop
 - BSP范式,其实现叫作:Google Pregel
 
资源管理和分配
- 在 Google的系统里是分布式操作系统负责的,而Google MapReduce和Pregel都是在分布式操作系统基础上开发的,框架本身的代码量少很多,并且逻辑清晰易于维护。
 - 当然Hadoop已经意识到这个问题,现在有了YARN操作系统。(YARN是一个仿照UC Berkeley AMPLab的Mesos做的系统。关于这个“模仿”,又有另一个故事。)
 
三、pLSA和MPI——大数据的首要目标是“大”而不是“快”
故事缘由
试图并行化
自动错误恢复功能 de 必要性
MPI的尴尬
四、LDA和MapReduce——可扩展的基础是数据并行
pLSA支持EM可并行
LDA支持"多份”并行
BSP范式 Pregel的由来
分布式机器学习系列讲座
八小时无尿点讲座,666~
一、与单机ML之区别
ML重在数学知识。
Distributed ML重在软件工程。
二、四大Framework
Frameworks: MPI, mapReduce, Pregel (类似 Spark), GBR
MapReduce弱点,这也是为什么有了后来的spark
- MapReduce Lite (c++ version)
 - 在哪里启动进程,分布式操作系统去做,但mapReduce自己去“多余”的实现了。
 
三、分布式主题模型
Peacock使用golang实现。
扒数据:内容数据,行为数据。
四、长尾效应
广告“长尾”推荐。
1% 随机点击率,非常小;重视长尾,提高点击概率。
五、分布式操作系统
分布式机器学习的平台基础,也是机制实现的前提条件。
“大”比“快”更重要。
Kubernetes 是Google一个开源的 Docker 容器编排系统,它可以调度计算集群的节点,动态管理上面的作业,保证它们按用户期望的状态运行。通过使用「labels」和「pods」的概念,Kubernetes 将应用按逻辑单元进行分组,方便管理和服务发现。
六、Fault Recovery
进程会挂掉,很可能是因为优先级低,被高优先级的杀掉了,属于正常行为。
大数据用Java,好么?
七、Pitfalls
- De-noise data 描述长尾的方法:非参贝叶斯方法,包括 Dirichlet process, 皮特曼尤尔过程 (Pitman-Yor Processes)
 - Parallelize models in papers and textbooks
 - Use existing frameworks.
 - MPI
 - Mix frameworks with cluster operating systems
 - Less talking about production
 - Use standard measures
 - Java or Python,最大的两个坑。吹一波 Golang。
 
八、大杀器与业务优化
Analysis 由人力覆盖大头,长尾还是比较困难。
九、Full-stack.

End.
[Distributed ML] Yi WANG's talk的更多相关文章
- [Distributed ML] Parameter Server & Ring All-Reduce
		
Resource ParameterServer入门和理解[较为详细,涉及到另一个框架:ps-lite] 一文读懂「Parameter Server」的分布式机器学习训练原理 并行计算与机器学习[很有 ...
 - [Hadoop] Yarn & k8s
		
写在前面 一.大数据全栈 头两节讲完HDFS & MapReduce,这一部分聊一聊它们之间的“人物关系”. 其中也讨论下k8s的学习必要性. Ref: [Distributed ML] Yi ...
 - (转)分布式深度学习系统构建 简介 Distributed Deep Learning
		
HOME ABOUT CONTACT SUBSCRIBE VIA RSS DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...
 - Awesome Torch
		
Awesome Torch This blog from: A curated list of awesome Torch tutorials, projects and communities. T ...
 - ICLR 2016 - Workshop Track International Conference on Learning Representations 论文papers
		
ICLR 2016 - Workshop Track International Conference on Learning Representations May 2 - 4, 2016, Car ...
 - CVPR 2017 Paper list
		
CVPR2017 paper list Machine Learning 1 Spotlight 1-1A Exclusivity-Consistency Regularized Multi-View ...
 - cvpr2015papers
		
@http://www-cs-faculty.stanford.edu/people/karpathy/cvpr2015papers/ CVPR 2015 papers (in nicer forma ...
 - paper 15 :整理的CV代码合集
		
这篇blog,原来是西弗吉利亚大学的Li xin整理的,CV代码相当的全,不知道要经过多长时间的积累才会有这么丰富的资源,在此谢谢LI Xin .我现在分享给大家,希望可以共同进步!还有,我需要说一下 ...
 - Python 的经典入门书籍
		
实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都 ...
 
随机推荐
- Jmeter中间件处理-ActiveMQ
			
消息队列是目前的主流中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况.本文以Activemq的Topic为例,说明如何基于Jmeter实现消息队列数据的发送和 ...
 - HashMap源码分析一
			
HashMap在java编程中,算使用频率top10中的类了.这里是关于HashMap的源码的分析.一个类的源码分析,要看他的来龙去脉,他的历史迭代.一来从以前的版本开始分析,由易到难: ...
 - Java入门第二季——第4章 多态
			
第4章 多态 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作 4-1 Java 中的多态 注意:不能通过父类的引 ...
 - iOS native plugin 的代码sample
			
https://bitbucket.org/Unity-Technologies/iosnativecodesamples/src/stable/ 不在这个stable版本 在2017 dev这个版本
 - hmmlearn 安装笔记
			
hmmlearn是在python上实现隐马可夫模型的一个组件包,原先是在sklearn中的,后来被弃用而单独分离出来. 首先安装sklearn,最好下载setup.py的安装包用命令行安装,因为安装h ...
 - BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
			
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
 - POJ1961 Period && POJ2604 Power Strings 字符串循环节
			
两道题都是求循环节的...但是一道是学哈希时做的,另一道是学$KMP$时做的 POJ2604 用的哈希...枚举长度的因数作为循环节的长度,然后暴力算出所有循环节位置的哈希值,看看是否相等. #inc ...
 - java+上传整个文件夹的所有文件
			
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
 - whoami/who/w/last/lastlog/users/finger
			
whoami 显示当前有效的用户名称,相当于执行id -un命令 who 显示目前登录系统的用户信息 w 显示已经登陆系统的用户列表,并显示用户正在执行的指令 last 显示登入系统的用户 lastl ...
 - chown  与   chgrp  修改权限用户
			
# 改变权限 chmod 777 filepath # 改变所有者 chown test filepath # 改变所属组 chgrp user filepath chown='change own ...