微软应用科学家全面解析机器学习:认识-学习-求职-工业界应用

微软应用科学家全面解析机器学习:认识-学习-求职-工业界应用

篱笆老师
篱笆老师
1571 浏览

 

本篇文章内容由篱笆导师 微软应用科学家Lan提供

 

01 如何认识机器学习?

 

首先我们来回答一个问题:人工智能、机器学习、深度学习三者之间是什么关系?

 

用最简单的一句话回答就是:深度学习是机器学习算法的一种,而机器学习是人工智能算法的一种。

 

人工智能&机器学习

目前机器学习算法在所有人工智能算法里面一骑绝尘,所以目前当人们说人工智能时,往往是在说机器学习。

 

在维基百科里,AI(人工智能)的页面引用了一个学术届对AI的定义:

Any system that perceives its environment and takes actions that maximize its chance of achieving its goals. 

 

任何能够【感知】其环境并【采取行动】以【最大限度地实现其目标】的系统。

 

但其实对AI的理解并不需要这么复杂,我们如果简单的把AI理解成用机器来实现人类的智慧或者决策也并没有什么问题。

 

比如著名AI,国际象棋深蓝、AlphaGo,它就是能实现人下棋的决策。换句话说,它能【感知】当前棋局,【采取】下棋的行动,来【最大限度】实现它获胜这个目标。

 

深蓝算法的核心是基于暴力穷举:生成所有可能的走法,然后执行尽可能深的搜索,并不断对局面进行评估,尝试找出最佳走法。

 

深蓝的象棋芯片包含三个主要的组件:走棋模块(Move Generator),评估模块(Evaluation Function),以及搜索控制器(Search Controller)。各个组件的设计都服务于“优化搜索速度”这一目标。

 

1.jpg

 

AlphaGo的核心算法基于机器学习。

(1)在训练的第一阶段,AlphaGo仅仅根据彼此无关的盘面信息模仿专家棋手的走法。通过3000万个盘面数据训练一个13层的监督式策略网络,这个神经网络随后就能以超过50%的精度预测人类专家的落子。值得注意的是,在这一阶段,AlphaGo对于围棋规则一无所知,只是毫无目的地模仿而已。尽管如此,由于违反规则的走法(例如“自杀”)专家棋手不会走出,所以AlphaGo也相当于学会了遵守围棋规则。

 

(2)在训练的第二阶段,AlphaGo开始与自己下棋:将过往训练迭代中的策略网络与当前的策略网络对弈,并将对弈过程用于自我强化训练。在这一阶段,引入了唯一的围棋规则:对获胜的棋局加以奖励。经过这一阶段的训练,AlphaGo已经超过所有围棋软件,对弈当时最强的开源围棋软件Pachi可以达到85%胜率。

 

(3)在训练的第三阶段,AlphaGo在自我对弈中,从不同棋局中采样不同位置生成3000万个新的训练数据,用以训练局面评估函数。经过三阶段训练的策略网络被混和进蒙特卡洛树搜索算法,从而在比赛进行过程中预测棋局未来可能的发展方式、并对各种可能的未来局面进行评估。

2.jpg

 

人工智能中有很多算法,比如机器学习,比如搜索,比如概率推理。深蓝就是搜索算法的代表。

 

而近些年来随着机器学习算法的效果越来越好,它逐渐成为人们实现人工智能的主流算法。但是这并不意味着其他人工智能算法就退出了历史舞台。

 

比如近十年最著名的AI,AlphaGo,它的一个核心算法依然是搜索,蒙特卡洛树搜索算法 Monte Carlo tree search (MCTS)。

 

深度学习

再来说深度学习。机器学习算法是一个统称,它又包含很多算法,比如深度学习,决策树随机森林,逻辑回归等等。

 

12/13年以来,深度学习逐渐成为了机器学习算法中效果最好的算法,所以当人们想用机器学习来解决问题时,深度学习便成了默认的一个主要选择。

 

02 机器学习的入门与进阶

3.jpg

 

我们可以把机器学习的入门路线,分为两个方面:一个是理论,一个是工程实践。

 

我们先来说说理论学习。

 

基础知识

想学懂研究生水平的机器学习课程,一般需要两类知识:

1、数学知识:

线性代数:机器学习算法的运算过程,涉及大量线性代数的知识

微积分:很多算法的优化过程,比如梯度下降,都需要你又微积分的背景

概率论与统计:机器学习算法设计大量参数估计的内容,概率论与统计是这些内容的基础

优化理论:这个不是一定需要掌握,但是如果能有一些优化理论的知识,对你理解机器学习将会非常非常有帮助

 

2、编程知识

最基本的要求,是你会Python。

虽然R在数据科学领域也有一席之地,但是在深度学习越来越普及的今天,Python是在机器学习领域更加重要。

 

以上这些知识对于一本理工科学生来说,都不是太大问题。有了这些理论知识,我们就可以开始学习机器学习的算法。 

 

我们可以大致把机器学习算法分成两个方面,一个是非深度的算法或者说传统机器学习模型算法, 一个是深度模型的算法。

 

机器学习算法

作为入门,我推荐两门课,一本书,来学习这两个方面的知识。

 

吴恩达的Coursera上的 《Machine Learning》课程

《深度学习》系列课程

南大周志华教授写的《机器学习》

 

学习的顺序,可以先从吴恩达的机器学习课程开始,这门课的难度适中,非常适合对机器学习完全没有基础的人。上完之后你就会对机器学习的传统算法模型有个很好的认知。

 

接着你可以再阅读周志华教授的机器学习书,这本书第一次读或许会觉得难度有一点点大,但是它非常值得你反复阅读,读不懂的地方可以静下心来慢慢理解或者咨询老师。这本书是对吴恩达课程的一个非常非常好的补充。上完这门课以及阅读完这本书,你将对机器学习传统算法有一个非常好的理解。

 

最后你可以上深度学习这门课,这门课的内容从浅入深,对于入门深度模型很有帮助,课程作业也会让你对于深度学习架构有一定了解。

 

有了这些知识之后,你可以对你感兴趣的方向,比如自然语言处理,或者计算机视觉,或者强化学习,来继续加深学习。Stanford对于这些方向都有着很好的公开课程,可以在网上搜到。

 

工程实践方面的入门学习

在你学习完吴恩达的机器学习课程后,你就可以开始进行工程实践方面的学习。

 

这方面的学习主要分为几点,一个是工具的使用,一个是项目的实践。

 

工具的使用

数据处理相关工具:最重要的就是numpy以及 pandas

涉及大数据:分布式数据处理工具Spark

重要的机器学习框架:传统机器学习框架scikit-learn,深度学习框架Pytorch或者TensorFlow。

其他深度学习框架:百度的paddlepaddle,Keras

 

但是这里我们还是推荐最主流的两款,也就是Pytorch或者是TensorFlow。至于这两个中该选哪个,我认为是都可以。

 

工具的学习往往是最简单的一步。网上有许多这些工具的Tutorials或者教程。一般花个几天时间看一下就可以大致入门了。接下来你要做的事便是多用,多看代码从而加深自己的熟悉程度和理解,这就说到项目实践。

 

项目实践

很多实践的知识是理论学习没法学到的,比如说如何进行特征工程,比如机器学习的代码如何组织更高效规范。所以我们需要去做一些项目,来补充这方面的经验。

 

作为刚入门的学生,一般可在上校内或者校外的机器学习理论课程上,通过做相关作业,我们就可以获得很多实践。又或者是,通过参加网上的在线实战培训课程,来获得有老师指导的实战培训。

 

同时,有一些著名的机器学习社区,比如Kaggle,上面有许多其他人的机器学习项目的代码。对于入门的学生来说,通过阅读理解这些其他人的代码,你的实践水平也可以得到很好的提高。

 

Kaggle上也有很多toy projects,提供给初学者用来练手。比如著名的泰坦尼克号项目。通过做这些简单的ML项目也可以达到快速上手的目的。

 

6.jpg

 

03 机器学习求职

 

目前机器学习的求职学历大部分是硕士,这里我就基于北美机器学习硕士(Master)的就业情况分享一下我的看法。

 

北美目前机器学习相关的硕士可以大致分为三类

(1)计算机类项目:随着机器学习近几年越来越火爆,越来越多计算机硕士项目开设了ML(机器学习)或者AI(人工智能)方向的track或者concentration(研究方向)。

(2)数据科学类项目:近几年虽然DS项目越来越多,但是申请难度却日益加强。

(3)其他类项目:比如统计/OR/Management Science and Eng/CSE/IS/EE。这些项目为了与时俱进,在课程设置的时候往往都会安排一两门机器学习相关的课程。

 

北美目前机器学习相关的岗位大致可以分为三类

(1)以发论文为目标的researcher(研究员)岗位

(2)Machine Learning Engineer(机器学习工程师)或者Software Engineer(软件工程师)

(3)Data Scientist(数据科学家)或者Applied Scientist(应用科学家)

 

这三类岗位中,第一类岗位不是Master的目标岗位,我们来重点讨论第二类MLE和第三类DS岗位。

 

在这里需要提到,并不是所有的DS都是与机器学习相关的,这就意味着,市面上绝大多数的机器学习类的岗位,其实还是Engineer岗。

 

例如Google,Facebook,LinkedIn等公司,都是以MLE为主要的机器学习岗位。所以如果之后想以机器学习为职业发展方向,MLE绝对是一个机会更多的岗位。如果本身对于做Engineer并不感兴趣,微软或者Amazon的Applied Scientist以及很多金融企业或者传统企业,也提供了一些ML相关的工作机会。

 

大部分面向毕业生的Entry Level(入门级别)岗位往往重视的是员工的执行能力。而ML类的岗位往往还需要有比较好的领域理解(Domain Knowledge)和设计能力(ML Design),这些能力有时候并不是应届毕业生所具有的。这就意味着其实针对应届毕业生的ML类的岗位其实并不多。同时,很多各个学科的Phd也在考虑ML为自己的就业方向。

 

这两个主要因素造成了ML方向的new grad岗位竞争往往是相对激烈的。但是ML这个方向的本身依然有着非常有很好的前景,在职跳槽后也有着很多的就业机会,如果你是一个对ML有热情的人,这一定是一个值得你去为之努力的方向。

 

最后,通过以上的分析,我们可以看出,CS, ML Track的毕业生,有着最好的就业前景。同学们在做职业规划的时候,也要尽早确定好自己是想在ML DS这个方向上深耕,还是同时兼顾Engineer的相关技能。

 

5.jpg

 

 

04  机器学习在互联网工业界的应用

 

目前机器学习在互联网工业界最重要的应用场是:搜广推,也就是搜索,广告,推荐

 

这是三个不同的场景,但是他们之间的算法技术栈是高度相关的。

 

比如,搜索要解决和预测哪些结果和用户的输入词更相关的问题,而广告同样也要解决哪些广告与用户需求更相关的问题。推荐系统要推荐用户更可能点击的产品,广告系统同样要推荐用户更可能点击的广告。

 

这些场景通常是与产品盈利以及产品用户体验最相关的场景,同时也是绝对以算法来驱动的场景。

 

这意味着,与这些方向对应的部门或者组,也就有了大量的算法人员的需求。而这方向的从业人员,往往也有着很广的就业面。

 

搜广推是个很复杂的系统,这不是几句话就可以完全概括的,但是简单来说来就是:

 

自然语言处理NLP/计算机视觉CV/传统ML技术在搜广推都有着广泛应用。

 

就比如:在广告领域,往往需要判断广告文本和用户输入文本是否在语义上相关。这意味着做这个方向的组将是一个非常NLP的组。而如果负责的广告主要是图片广告,那CV相关的技术同样也会很重要。

 

同时,搜广推也同样有着这个领域特定的技术:比如召回相关的模型,排序相关的模型,点击转化预估相关的模型。

 

大部分人肯定没法做到对推荐系统的每个部分都了如指掌,就如前文说的这是一个很复杂的系统,往往一个推荐系统产品是由好几个算法组一起负责,而每个组只负责系统里的一个子环节。所以你可以在大致了解推荐系统基本流程后,挑选自己喜欢的一个方向去深耕。

 

总结一句来回答题主的问题就是:夯实好自己NLP/CV/传统ML相关的基础(比如了解NLP和CV的一些主流模型),同时加深自己对推荐系统的了解。

 

当然对于非互联网领域,有些技术则非常重要。比如在金融领域,异常检测与时序预测是应用场景最广泛的机器学习技术。

 

7.jpg

 

此外,在实际工业界的应用角度,有一个著名的“没有免费的午餐”定理 。

 

简单来说就是如果算法一在问题A上比算法二好,那必然存在另一个问题B,在问题B上算法二比算法一好。换句话说,不存在一个算法可以在所有情况下都比另一个算法好。虽然有着这个定理,但是在实际工业界,并不是所有算法都会同等被对待。有些算法有着极为广阔的应用场景,而有些算法则基本很少出现,并不完全取决于该算法是不是最合适当下的应用场景。

 

比如贝叶斯算法,它的准确与否依赖于数据是否满足其核心假设:数据集属性之间是相互独立的。但是在实际生活中,很少很少有满足这样假设的应用场景。这就导致在工业界,很少能看到朴素贝叶斯的身影。

 

又比如支持向量机SVM,虽然理论上它在高维空间可以有好的效果(因为其复杂性取决于支持向量的数目,而不是样本空间的维数),但是它往往要求类与类时间有着明确的决策边界(clear margin of separation)。而实际应用场景中的数据往往非常复杂,SVM的要求往往难以满足。同时SVM的训练速度在大数据集上也堪忧,这进一步限制着它的应用场景。

 

在工业界,目前各个应用场景中最主流的模型,基本都是和深度学习相关的。很多组都会选择用一个最简单的FNN神经网络或者基于树的模型作为baseline,然后接着开发更为复杂的模型。比如NLP相关的场景就会开始开发基于Transformer的模型,而推荐系统领域也有各种著名的深度神经网络变种。

 

有些评论提到神经网络的缺点是慢,但是实际上正常大小的FNN对于目前的硬件来说已经不是什么问题,甚至对于端边设备(手机)来说运行它们都没有任何压力。对于数据量很大的场景来说,要达到同样的准确度NN的训练速度甚至会快于很多传统模型比如SVM。只一些相对较大的模型比如BERT,才会有一定的计算速度压力。

 

那是不是传统模型或者非深度的模型就一点用武之地都没有呢?其实也不然。

 

比如逻辑回归,虽然模型简单,但是它是很多推荐系统做Calibration的主流方式(Platt’s scaling)。

 

又比如很多基于树的模型(Boosting Machine/Random Forest),因为其很好的可解释性,它在很多对于模型解释性要求很高的应用场景,比如风控,依然有着一定的用武之地。同时因为树的天然特性,很多特征选择或者特征融合的工作也是基于树来完成的。

 

再比如随机条件场Conditional random fields (CRFs) ,虽然是相对早期的技术,但是在部分NLP的任务中,比如Tagging相关的任务中,仍然有着一定作用。

 

希望以上分享对你有所帮助!

 

本篇文章内容由篱笆导师 微软应用科学家Lan提供

我们是:清北硅谷导师/谷歌微软职场达人/分享留学求职经验/教育创业者

目前活跃的创作者们:

Joe:数据分析师/不安分的创业者/期望做出与众不同的产品

Kevin:一个清华非典型代表/谷歌技术经理/不断折腾的创业者

Lan: 微软应用科学家/沉心于机器学习的技术宅/网文写作者

Dana:横扫FLAG offer数据科学家/斯坦福毕业生/爱音乐爱美食爱生活

想了解更多干货知识 欢迎私信来篱笆老师提问哟

君君提示:你也可以发布优质内容,点此查看详情 >>

本文著作权归作者本人和北美省钱快报共同所有,未经许可不得转载。长文章仅代表作者看法,如有更多内容分享或是对文中观点有不同见解,省钱快报欢迎您的投稿。

1571 1 1

扫码下载APP