萌生撰写大规模机器学习这个主题文章的念头有一段时间了,最一开始是想对自己这几年的技术积累作一个总结性质的回顾。08年我曾经供职过的飘石科技公司的创始人张东晓博士说过这样一句话“一件事情你说不清楚,十有八九就做不好”,对这句话我实在是深以为然,也就会经常期望通过阶段性的回顾总结的形式来验证自己对一个阶段的工作是不是真正掌握得足够通透深入了。
及至真正利用空暇时间开始动笔的时候,就发现这个领域的主题广度和深度比自己原本预期的程度还是要超出了不少,试图只通过一篇总结性质的文章想把大规模机器学习这个主题的内容梳理回顾清楚现在看来是一个有些奢侈的愿望。更具可操作性的是,对这个主题进行线索梳理,产出一个系列性质的文章,这样似乎更有可能把这个主题梳理清楚。

于是自己开始试图梳理打算撰写的文章内容的结构纲要,一边梳理一边回顾自己在进入这个领域学习的过程中的一些体悟,同时衍生出另外一个念头——除了用于自我总结和梳理回顾,是不是可以更进一步,把这一系列的内容写得更为深入浅出一些,让对大规模机器学习这个领域感兴趣的工程师们用作一份入门导引性质的材料呢?因为在我进入这个领域工作学习的过程中,会有这样一种感觉,即便是在互联网资讯如此发达的时代,大规模机器学习领域的资料文章不少,但是大体还是比较零散的,有探讨平台研发的[1],有讨论某类算法主题的[2][3],但是适合给一个对该领域并不了解,但因为个人兴趣或工作需要又试图切入这个领域的工程师用作导引性质的资料还是很匮乏的。从我个人的学习工作历程来说,这种导引性的文章应该具备如下一些特质:
Survey、汇总性质。能够把这个领域里主要的技术点都cover住,让读者们可以通过这个系列的文章了解到这个领域的全貌。
不应该只是一堆技术材料的堆砌,而是要能提炼出这个领域背后的主线,将相关的技术材料串成一个有机的实体,这样才能真正有助于对这个领域技术要点的把握。
这个系列的文章要能够有比较强烈的工业化背景,真正充分考虑到生产环境里使用的约束,而不是research角度的原型式想法,这样对于试图将大规模机器学习技术应用在实际工作场景中的工程师们才有最大化的指导意义和价值。
总结一下,我期望读完这个导引性文章的工程师们,对于如何搭建一个大规模机器学习平台用于解决自己的业务问题能够”知道自己知道什么,也清晰地知道自己不知道什么”,能够step by step,结合自己的实际业务需要,去完成系统平台的搭建实施,也知道应该去哪里去寻找自己所需的资料和帮助。
这样一看,似乎在我的视野内并没有看到满足这些要求的文章,于是看起来基于这些原则来撰写系列文章,既能满足自己的回顾总结的需要,也可能为对这个领域感兴趣的工程师们提供一些可能的力所能及的指引性帮助。
从个人的技术背景来看,自己真正在机器学习,特别是大规模机器学习这个领域里沉浸的时间其实并不是很长,满打满算,从2013年10月份正式将自己的工作重心转换到机器学习dominating的算法领域,也就只有两年的时间,作为一个跨行业跨领域,转型到算法方向的同学,自己深深知道在这个领域还有着大量的知识需要自己去学习积累,不过大规模机器学习这个领域在自己来看,属于算法领域比较特殊的一个范畴,处于系统与算法交接处的交叉领域,对这个领域知识的梳理不仅仅需要良好的算法嗅觉,更需要一种全面的系统感和架构感,而这正是自己在转换到算法领域之前所比较擅长的。在自己的技术生涯里,从事过底层的BIOS/Driver/硬件模拟器的开发,也做过基于FPGA的硬件语言Compiler,还做过广告服务系统以及用户画像、推荐系统相关的策略工作,及至到现在从事大规模算法的研发工作,涉猎的深度不敢说,面上倒还算是有一定的广度,这种广度背景正好可以让自己从软硬件协同,系统算法相结合,平台业务相呼应的视角来观察思考大规模机器学习领域的技术知识。自己会发现这种diversity背景使得自己在切入到这个领域的时候,能够比纯系统/算法/业务/平台的同学看到一些不一样的视角,而这种视角也许对于初入这个领域的同学会有一些借鉴和帮助。
基于上述的指导原则,自己决定启动文章的撰写,具体操作上,限于个人的才力有限,自己还是咨询了身边的朋友一起探讨怎样操作可以写出比较高质量的系列主题文章,真正能够为对这个领域感兴趣的同学提供一些有意义的帮助,最不济,总不能乱弹琴,误导初入这个领域的同学吧。
目前的想法,我们想把这个系列文章的撰写过程设计成一个开放式的过程,有些类似于软件开发的Open-Source和众包的思想,我们会打算把整个撰写过程对互联网读者开放出来,让大家对整个撰写过程提供反馈意见,我们好根据大家提供的反馈来调配写作的内容和组织表达的样式。
最后特别想声明一下的是,大规模机器学习这个领域的知识,自己先后在两家服务过的互联网公司里都有过接触,也不讳言的确是在这两家公司里接触到的技术资料和代码,以及所从事的具体开发工作帮助自己快速地完成了这个领域的知识体系的积累,不过自己在撰写这个系列文章的过程中,并不允许也不会引用公司(包括现役公司和前雇主公司)的任何代码以及内部文档,而是会结合自己在从业过程中的一些感悟,进行自我提炼和总结,分享给大家。强调这一点并不仅仅是因为职业素养的要求,还是因为我个人一直觉得,没有能力把自己接触过的技术事物以独特的形态融入到自己的知识体系里,那只能说明自己的懒惰。所以,如果有朋友想通过这个系列文章深入了解我的两家雇主公司里实际运行的大规模机器学习系统的样子,那恐怕会失望了。不过,我个人以为,当我们把最fundamental的那个内核吃透了以后,推陈出新,其实并不会是一件困难的事情,这当然比看到现成的代码资料照本宣科要难得多,但却会是最为扎实牢靠的掌握。

整个系列文章的撰写目前计划会由我的朋友王超和我共同完成,王超同学数学专业出身,在算法领域是个精益求精,有着高度技术洁癖的工程师,找到他作为我的partner一起来撰写这个系列的文章,不但可以在我相对薄弱的算法基础领域提供重要的背书,还可以保证整体的行文质量,让我会踏实很多。但是整个撰写过程中我们会将待写的内容的目录纲要,以及打算撰写这些内容的形式都会share给大家,让大家不但可以看到我们现在在写的东西,还能了解到我们打算写的东西以及计划如何来写这些东西。如果有同学对我们要写的内容有任何建议,都欢迎提出(我的个人邮箱:yangjunpro@gmail.com,王超的个人邮箱:ezmissu@gmail.com),如果有同学对我们要写的文章内容感兴趣,想一起参与进来,完成相关内容的撰写,我们就更欢迎了。当然,任何一个健康的open-source项目,都不可避免会有一个“温柔而坚定”的“独裁者”,以保证协同工作的秩序和质量,我们这个文章写作项目也算是一个open-source项目,所以,如果是想以这个系列的名目来贡献文章的同学,您的文章只有在我和王超review通过以后,才会在我们的渠道上发布,这可能会给您带来些许不便,但是相信对open-source项目比较了解的同学,都还是能理解的。
整个文章系列的计划大纲构成如下:
预计共分为六个部分
第一部分是序言部分,包括本节,以及下一节对本书内容概要性的综述。
第二部分是算法部分,也是本系列文章的核心所在。会分别从有监督学习,无监督学习的角度来介绍大规模算法的实施原理。选择这种划分方式并不是因为大规模算法的实现在有监督学习和无监督学习算法之间有着清晰的差异区别,而更多是为了follow大家理解把握机器学习算法的常用思考角度。在这一部分,除了具体的算法并行化实施以外,也会试图总结、探究一些大规模机器学习领域开发方法论的事物。其中,有监督学习部分计划涵盖线性模型(Logistic Regression和SVM)和非线性模型(Decision Tree、Gradient Boosted Decision Tree和Random Forest),将SVM归属在线性模型里可能会引起一些争议,所以会专门有一个小节介绍SVM的非线性kernel相关的内容,以保证叙述逻辑的自洽性。无监督学习部分计划涵盖K-Means和层次聚类算法,以及PLSA、LDA这两个主题模型算法。另外,对于最近几年比较火热的神经网络算法在无监督学习领域的的应用,也会在此处涉及,主要包括word2vec以及神经网络语言模型算法。考虑到本系列文章的重点是机器学习算法的大规模实施,而非算法本身,所以在这一部分,对于算法的建模原理会有提及,但不会介绍得非常详尽,除非是跟大规模并行化实施有着比较直接联系的部分,对于算法原理期望更深入钻研了解的,可以通过文章中提供的参考文献按图索骥,获得相应的资讯,实际上,关于机器学习具体算法原理的介绍,我也确实觉得有很多前辈和著作讲得非常好了,不再需要我们在这里锦上添花。
第三部分是效果评估,会介绍对于第二部分实现的算法,在实际应用中,我们需要通过哪些指标来度量其是否满足业务场景的上线需要。效果评估通常来说,可以划分为业务无关的common metrics以及业务相关的specific metrics,我们会结合自己对一些业务的理解,分别有所提及。效果评估,实际上是一个蛮复杂的话题,限于经验所限,我们没有办法提供一个非常全面的list,更多是抛砖引玉,提供一些比较典型的评估指标,供读者在实际应用中参考。
第四部分是特征工程,会介绍一些常见的特征工程的内容。在机器学习的实际应用中,除了模型调参之外,数据的准备和特征的设计实际上在大多数场景下是更为重要也是耗时更多的环节,我也一直以为,一个真正全面的大规模机器学习平台,实际上是应该在特征工程上提供有效的处理能力的。所以在这一部分,我们会探讨一些比较fundamental的特征工程的技巧和相关实现。
第五部分是前沿机器学习平台探讨,会探讨一些相对前沿的大规模机器学习相关的技术,包括Parameter Server,GPU以及一些open-source的大规模机器学习平台,比如Pentumm,希望通过这些探讨能够让我们对这个领域的演进方向和未来趋势建立起一定的把握能力。
第六部分是总结,主要包括对于大规模机器学习领域从业人员素养的思考,并且结合我们所使用经历过的一些机器学习平台的演化历程谈一下我们对大规模机器学习平台的理解、认识以及展望。
是为引言。

[1]. [Petuum官网]   http://petuum.github.io/
[2]. [YiWang2014]  Peacock: Learning Long-Tail Topic Features for Industrial Applications.  http://arxiv.org/abs/1405.4402
[3]. [冯扬博客2014] 并行逻辑回归. http://blog.sina.com.cn/s/blog_6cb8e53d0101oetv.html

Large Scale Machine Learning--An Engineering Perspective--0. 引言相关推荐

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  2. 入门机器学习(二十一)--大规模机器学习(Large Scale Machine Learning)

    大规模机器学习(Large Scale Machine Learning) 1. 大型数据集的学习(Learning With Large Datasets) 2. 随机梯度下降法(Stochasti ...

  3. Machine Learning week 10 quiz: Large Scale Machine Learning

    Large Scale Machine Learning 5 试题 1. Suppose you are training a logistic regression classifier using ...

  4. 【机器学习】课程笔记16_大规模机器学习(Large Scale Machine Learning)

    大规模机器学习 大型数据集的学习(Laerning with Large Datasets) 随机梯度下降(Stochastic Gradient Descent) 小批量梯度下降(Mini-Batc ...

  5. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)

    一.如何学习大规模数据集? 在训练样本集很大的情况下,我们可以先取一小部分样本学习模型,比如m=1000,然后画出对应的学习曲线.如果根据学习曲线发现模型属于高偏差,则应在现有样本上继续调整模型,具体 ...

  6. 机器学习系列:大规模机器学习(Large Scale Machine Learning)

    目录 1.大型数据集的学习 2.随机梯度下降法 3.小批量梯度下降 4.随机梯度下降收敛 1.大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果.我们应该怎样应对一 ...

  7. Large Scale Machine Learning--An Engineering Perspective--1. 大规模机器学习平台的构成

    机器学习/数据挖掘在各种业务场景中的应用已经非常之多了,在线广告/搜索/商品推荐/风险建模/图像处理/语音识别/机器翻译都是机器学习成功应用的典型case. 有效应用机器学习解决业务问题,在我看来依赖 ...

  8. [论文阅读] Large Scale Incremental Learning

    论文地址:https://openaccess.thecvf.com/content_CVPR_2019/html/Wu_Large_Scale_Incremental_Learning_CVPR_2 ...

  9. 机器学习(Machine learning: a probabilistic perspective) 第三章阅读笔记

    生成式分类器(generative classifiers) 判定特征向量x是否属于某一类型 p(y=c|x)=p(y=c)p(x|y=c)∑c′p(y=c′|θ)p(x|y=c′) p(y=c|x) ...

最新文章

  1. PCA(Principal Component Analysis)的原理、算法步骤和实现。
  2. 分析增加站点权重的四大切入点(转载)
  3. harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
  4. Android Studio或者Eclipse中的最常用的快捷键,最简单的,部分不适用eclipse
  5. java求100以内的a2 b2=c2,Java语言程序设计Ⅱ-中国大学mooc-试题题目及答案
  6. AR头显要上天!欧洲太空总署或用HoloLens维修太空站
  7. 21行代码AC_HDU 5935 Car【贪心, 精度】
  8. linux 编写脚本示范,Linux-scripts-简单脚本和脚本的执行
  9. oracle连接外部数据库_使用Oracle验证外部数据
  10. 如何在字符串中添加双引号?
  11. 如何自定义FusionCharts图表上的工具提示?
  12. 电闹上赠么使用计算机,计算器怎么算n次方 怎么用电脑计算器算次方
  13. Leetcode 122.买卖股票的最佳时机II
  14. 创建微服务多模块项目
  15. 计算机三级网络技术知识点cn,计算机等级三级网络技术考试详解
  16. 符合c语言语法规定的是,若变量已正确定义并赋值,符合C语言语法的表达式是 A。a=a+7; B.a=7+b+c,a++...
  17. 项目实施方案指导性文件
  18. 设计资源神器,国外网盘免费下载揭秘!
  19. C语言中getch()、getche()、getc()、getchar()、gets()、fgetc()、fgets()的区别与使用
  20. php 刮奖,php抽奖概率算法(刮刮卡,大转盘),抽奖刮刮卡_PHP教程

热门文章

  1. Android 主题设计全解析
  2. 虚拟计算机组装的软件,如何使用虚拟光驱安装软件
  3. 灰度环保完成数千万元Pre-A轮融资,将着力搭建环保包装信息化物流产业链
  4. Ansible自动化运维的安装及常用模块详解
  5. 多多情报通:拼多多两天没发货会怎样处理?延迟交货怎么办?
  6. 用动态面板阈值模型研究金融和经济增长的关系
  7. MTK DTS 文件配置
  8. JavaScript为iphone添加到主屏幕
  9. sql横着连接起来sql_SQL联接
  10. ubuntu不支持安装搜狗_Ubuntu系统安装搜狗输入法详细教程