AI工程师职业规划和学习路线完整版

AI工程师职业规划和学习路线完整版

如何成为一名机器学习算法工程师程序员

成为一名合格的开发工程师不是一件简单的事情,须要掌握从开发到调试到优化等一系列能 力,这些能力中的每一项掌握起来都须要足够的努力和经验。而要成为一名合格的机器学习算法工程师(如下简称算法工程师)更是难上加难,由于在掌握工程师的通用技能之外,还须要掌握一张不算小的机器学习算法知识网络。下面咱们就将成为一名合格的算法工程师所需的技能进行拆分,一块儿来看一下究竟须要掌握哪些技能才能算是一名合格的算法工程师。算法

 

AI工程师职业规划和学习路线完整版

基础开发能力编程

所谓算法工程师,首先须要是一名工程师,那么就要掌握全部开发工程师都须要掌握的一些能力。有些同窗对于这一点存在一些误解,认为所谓算法工程师就只须要思考和设计算法,不用在意这些算法如何实现,并且会有人帮你来实现你想出来的算法方案。这种思想是错误的,在大多数企业的大多数职位中,算法工程师须要负责从算法设计到算法实现再到算法上线这一个全流程的工做。网络

小编曾经见过一些企业实行过算法设计与算法实现相分离的组织架构,可是在这种架构下,说不清楚谁该为算法效果负责,算法设计者和算法开发者都有一肚子的苦水,具体缘由不在本文的讨论范畴中,但但愿你们记住的是,基础的开发技能是全部算法工程师都须要掌握的。架构

基础开发所涉及到的技能很是的多,在这里只挑选了两个比较重要的点来作阐述。机器学习

AI工程师职业规划和学习路线完整版

单元测试函数

在企业应用中,一个问题的完整解决方案一般包括不少的流程,这其中每一个环节都须要反复迭代 优化调试,如何可以将复杂任务进行模块划分,而且保证总体流程的正确性呢?最实用的方法就是单元测试。工具

单元测试并不仅是简单的一种测试技能,它首先是一种设计能力。并非每份代码均可以作单元测试,能作单元测试的前提是代码首先是能够划分为多个单元——也就是模块的。在把项目拆解成可独立开发和测试的模块以后,再加上对每一个模块的独立的、可重复的单元测试,就能够保证每一个模块的正确性,若是每一个模块的正确性均可以保证,那么总体流程的正确性就能够获得保证。oop

对于算法开发这种流程变更频繁的开发活动来说,作好模块设计和单元测试是不给本身和他人挖坑的重要保证。也是能让本身放心地对代码作各类改动优化的重要前提。性能

逻辑抽象复用

逻辑的抽象复用能够说是全部软件开发活动中最为重要的一条原则,衡量一个程序员代码水平的重要原则之一就是看他代码中重复代码和类似代码的比例。大量重复代码或类似代码背后反映的是工程师思惟的懒惰,由于他以为复制粘贴或者直接照着抄是最省事的作法。这样作不只看上去很是的丑陋,并且也很是容易出错,更不用提维护起来的难度。

算法开发的项目中常常会有不少相似逻辑的出现,例如对多个特征使用相似的处理方法,还有原始数据 ETL 中的不少相似处理方法。若是不对重复逻辑作好抽象,代码看上去全是一行行的重复代码,不管是阅读起来仍是维护起来都会很是麻烦。

AI工程师职业规划和学习路线完整版

几率和统计基础

几率和统计能够说是机器学习领域的基石之一,从某个角度来看,机器学习能够看作是创建在几率思惟之上的一种对不肯定世界的系统性思考和认知方式。学会用几率的视角看待问题,用几率的语言描述问题,是深刻理解和熟练运用机器学习技术的最重要基础之一。

几率论内容不少,但都是以具体的一个个分布为具体表现载体体现出来的,因此学好经常使用的几率分布及其各类性质对于学好几率很是重要。对于离散数据,伯努利分布、二项分布、多项分布、Beta 分布、狄里克莱分布以及泊松分布都是须要 理解掌握的内容;对于离线数据,高斯分布和指数分布族是比较重要的分布。这些分布贯穿着机器学习的各类模型之中,也存在于互联网和真实世界的各类数据之中,理解了数据的分布,才能知道该对它们作什么样的处理。

此外,假设检验的相关理论也须要掌握。在这个所谓的大数据时代,最能骗人的大概就是数据了,掌握了假设检验和置信区间等相关理论,才能具有分辨数据结论真伪的能力。例如两组数据是否真的存在差别,上线一个策略以后指标是否真的有提高等等。这种问题在实际工做中很是常见,不掌握相关能力的话至关于就是大数据时代的睁眼瞎。

在统计方面,一些经常使用的参数估计方法也须要掌握,典型的如最大似然估计、最大后验估计、EM 算法等。这些理论和最优化理论同样,都是能够应用于全部模型的理论,是基础中的基础。

AI工程师职业规划和学习路线完整版

机器学习理论

虽然如今开箱即用的开源工具包愈来愈多,但并不意味着算法工程师就能够忽略机器学习基础理论的学习和掌握。这样作主要有两方面的意义:

掌握理论才能对各类工具、技巧灵活应用,而不是只会照搬套用。只有在这个基础上才可以真正具有搭建一套机器学习系统的能力,并对其进行持续优化。不然只能算是机器学习搬砖工人,算不得合格的工程师。出了问题也不会解决,更谈不上对系统作优化。

学习机器学习的基础理论的目的不只仅是学会如何构建机器学习系统,更重要的是,这些基础理论里面体现的是一套思想和思惟模式,其内涵包括几率性思惟、矩阵化思惟、最优化思惟等多个子领域,这一套思惟模式对于在当今这个大数据时代作数据的处理、分析和建模是很是有帮助的。若是你脑子里没有这套思惟,面对大数据环境还在用老一套非几率的、标量式的思惟去思考问题,那么思考的效率和深度都会很是受限。

机器学习的理论内涵和外延很是之广,绝非一篇文章能够穷尽,因此在这里我列举了一些比较核心,同时对于实际工做比较有帮助的内容进行介绍,你们可在掌握了这些基础内容以后,再不断探索学习。

AI工程师职业规划和学习路线完整版

基础理论

所谓基础理论,指的是不涉及任何具体模型,而只关注“学习”这件事自己的一些理论。如下是一些比较有用的基础概念:

VC 维。VC 维是一个颇有趣的概念,它的主体是一类函数,描述的是这类函数可以把多少个样本 的全部组合都划分开来。VC 维的意义在哪里呢? 它在于当你选定了一个模型以及它对应的特征以后,你是大概能够知道这组模型和特征的选择能 够对多大的数据集进行分类的。此外,一类函数的 VC 维的大小,还能够反应出这类函数过拟合的可能性。

信息论。从某种角度来说,机器学习和信息论是同一个问题的两个侧面,机器学习模型的优化过程同时也能够看做是最小化数据集中信息量的过程。对信息论中基本概念的了解,对于机器学习理论的学习是大有裨益的。例如决策树中用来作分裂决策依据的信息增益,衡量数据信息量的信息熵等等,这些概念的理解对于机器学习问 题神本的理解都颇有帮助。

正则化和 bias-variance tradeoff。若是说现阶段我国的主要矛盾是“人民日益增加的美好生活须要和不平衡不充分的发展之间的矛盾”,那么机器学习中的主要矛盾就是模型要尽可能拟合数据和模型不能过分拟合数据之间的矛盾。而化解这一矛盾的核心技术之一就是正则化。正则化的具体方法不在此讨论,但须要理解的,是各类正则化方法背后透露出的思想:bias-variance tradoff。在不一样利益点之间的平衡与取舍是各类算法之间的 重要差别,理解这一点对于理解不一样算法之间的核心差别有着很是重要的做用。

最优化理论。绝大多数机器学习问题的解决,均可以划分为两个阶段:建模和优化。所谓建模就是后面咱们会提到的各类用模型来描述问题的方法,而优化就是建模完成以后求得模型的最优参数的过程。机器学习中经常使用的模型有不少, 但背后用到的优化方法却并无那么多。换句话说,不少模型都是用的同一套优化方法,而同一个优化方法也能够用来优化不少不一样模型。对各类经常使用优化方法的和思想有全部了解很是有必要,对于理解模型训练的过程,以及解释各类 状况下模型训练的效果都颇有帮助。这里面包括最大似然、最大后验、梯度降低、拟牛顿法、L-BFGS 等。

机器学习的基础理论还有不少,能够先从上面的概念学起,把它们当作学习的起点,在学习过程当中 还会遇到其余须要学习的内容,就像一张网络慢慢铺开同样,不断积累本身的知识。这方面基础理论的学习,

AI工程师职业规划和学习路线完整版

有监督学习

在了解了机器学习的基本概念以后,就能够进入到一些具体模型的学习中了。在目前的工业实践中,有监督学习的应用面仍然是最普遍的,这是由于咱们现实中遇到的不少问题都是但愿对某个事物的某个属性作出预测,而这些问题经过合理的抽象和变换,均可以转化为有监督学习的问题。

在学习复杂模型以前,我建议你们都先学习几个最简单的模型,典型的如朴素贝叶斯。朴素贝叶斯有很强的假设,这个假设不少问题都不知足,模型结构也很简单,因此其优化效果并非最好的。但也正是因为其简单的形式,很是利于学习者深刻理解整个模型在建模和优化过程当中的每一步,这对于搞清楚机器学习是怎么一回事情是很是有用的。

同时,朴素贝叶斯的模型形式经过一番巧妙的变换以后,能够获得和逻辑回归形式上很是统一的结果,这无疑提供了对逻辑回归另一个角度的解释,对于更加深入理解逻辑回归这一最经常使用模型有着很是重要的做用。

在掌握了机器学习模型的基础流程以后,须要学习两种最基础的模型形式:线性模型和树形模型,分别对应着线性回归/逻辑回归和决策回归/分类树。如今经常使用的模型,不管是浅层模型仍是深度学习的深层模型,都是基于这两种基础模型形式变幻而来。而学习这两种模型的时候须要仔细思考的问题是:这两种模型的本质差别是什么?为何须要有这两种模型?他们在训练和预测的精度、效率、复杂度等方面有什么差别?了解清楚这些本质的差别以后,才能够作到根据问题和数据的具体状况对模型自如运用。

在掌握了线性模型和树形模型这两种基础形式以后,下一步须要掌握的是这两种基础模型的复杂形式。其中线性模型的复杂形式就是多层线性模型,也就是神经网络。树模型的复杂形式包括以 GDBT 为表明的 boosting 组合,以及以随机森林为表明的 bagging 组合。

这两种组合模型的意义不只在于模型自己,boosting 和 bagging 这两种组合思 想自己也很是值得学习和理解,这表明了两种通常性的强化方法:boosting 的思想是精益求精,不断在以前的基础上继续优化;而 bagging 的思想是 “三个臭裨将顶一个诸葛亮”,是经过多个弱分类器的组合来获得一个强分类器。这两种组合方法各有优劣,但都是在平常工做中能够借鉴的思想。例如在推荐系统中所咱们常常会使用多个维度的数据作召回源,从某个角度来看就是一种bagging的思想:每一个单独召回源并不能给出最好表现,可是多个召回源组合以后,就能够获得比每一个单独召回源都要好的结果。因此说思想比模型自己更重要。

AI工程师职业规划和学习路线完整版

无监督学习

有监督学习虽然目前占了机器学习应用的大多数场景,可是无监督学习不管从数据规模仍是做用上来说也都很是的重要。无监督学习的一大类内容是在作聚类,作聚类的意义一般能够分为两类:一类是将聚类结果自己当作最终的目标,另外一类是将聚类的结果再做为特征用到有监督学习中。但这两种意义并非和某种聚类方法具体绑定,而只是聚类以后结果的不一样使用方式,这须要在工做中不断学习、积累和思考。而在入门学习阶段须要掌握的,是不一样聚类算法的核心差别在哪里。

例如最经常使用的聚类方法中,kmeans 和 DBSCAN 分别适合处理什么样的问题?高斯混合模型有着什么样的假设?LDA 中文档、主题和词之间是什么关系?这些模型最好可以放到一块儿来学习,从而掌握它们之间的联系和差别,而不是把他们当作一个个孤立的东西来看待。

除 了 聚 类 以 外 ,近 年 来 兴 起 的 嵌 入 表 示( embedding representation )也是无监督学习的一种重要方法。这种方法和聚类的差别在于,聚 类的方法是使用已有特征对数据进行划分,而嵌入表示则是创造新的特征,这种新的特征是对样 本的一种全新的表示方式。这种新的表示方法提供了对数据全新的观察视角,这种视角提供了数据处理的全新的可能性。此外,这种作法虽然是从 NLP 领域中兴起,但却具备很强的普适性,可用来处理多种多样的数据,均可以获得不错的结果,因此如今已经成为一种必备的技能。

机器学习理论方面的学习能够从《 An Introduction to Statistical Learning with Application in R 》开始,这本书对一些经常使用模型和理论基础提供了很好的讲解,同时也有适量的习题用来巩固所学知识。进阶学习可以使用上面这本书的升级版《 Elements of Statistical Learning 》和著名的《 Pattern Recognition and Machine Learning 》。

开发语言和开发工具

掌握了足够的理论知识,还须要足够的工具来将这些理论落地,这部分咱们介绍一些经常使用的语言和工具。

开发语言

近年来 Python 能够说是数据科学和算法领域最火的语言,主要缘由是它使用门槛低,上手容易,同时具备着完备的工具生态圈,同时各类平台对其支持也比较好。因此 Python 方面我就再也不赘述。可是在学习 Python 之外,我建议你们能够再学习一下 R 语言,主要缘由有如下几点:

R 语言具备最完备的统计学工具链。咱们在上面介绍了几率和统计的重要性,R 语言在这方面提供的支持是最全面的,平常的一些统计方面的需求,用 R 来作可能要比用Python 来作还要更快。 Python 的统计科学工具虽然也在不断完善,可是 R 仍然是统计科学最大最活跃的社区。

向量化、矩阵化和表格化思惟的培养。R 中的全部数据类型都是向量化的,一个整形的变量本质上是一个长度为一的一维向量。在此基础上 R 语言构建了高效的矩阵和( DataFrame )数据类型,而且在上面支持了很是复杂而又直观的操做方法。这套数据类型和思考方式也在被不少更现代化的语言和工具所采纳,例如 Numpy 中的 ndarray,以 及 Spark 最新版本中引入的 DataFrame,能够说都是直接或间接从 R 语言获得的灵感,定义在上面的数据操做也和 R中对 DataFrame 和向量的操做一模一样。就像学编程都要从 C 语言学起同样,学数据科学和算法开发我建议你们都学一下 R,学的既是它的语言自己,更是它的内涵思想,对你们掌握和理解现代化工具都大有裨益。

除了 R 之外,Scala 也是一门值得学习的语言。缘由在于它是目前将面向对象和函数式两种编程范式结合得比较好的一种语言,由于它不强求你必定要用函数式去写代码,同时还可以在可以利用函数式的地方给予了足够的支持。这使得它的使用门槛并不高,可是随着经验和知识的不断积累,你能够用它写出愈来愈高级、优雅的代码。

开发工具

开发工具方面,Python 系的工具无疑是实用性最高的,具体来讲,Numpy、Scipy、sklearn、pandas、Matplotlib 组成的套件能够知足单机上绝大多数的分析和训练工做。可是在模型训练方面,有一些更加专一的工具能够给出更好的训练精度和性能,典型的如 LibSVM、Liblinear、XGBoost 等。

大数据工具方面,目前离线计算的主流工具仍然是Hadoop和Spark,实时计算方面 Spark Streaming 和 Storm 也是比较主流的选择。近年来兴起的新平台也比较多,例如 Flink 和 Tensorflow 都是值得关注的。值得一提的是,对于 Hadoop 和 Spark 的掌握,不只要掌握其编码技术,同时还要对其运行原理有必定理解,例如,Map-Reduce 的流程在 Hadoop 上是如何实现的,Spark 上什么操做比较耗时,aggregateByKey 和 groupByKey 在运 行原理上有什么差别,等等。只有掌握了这些,才能对这些大数据平台运用自如,不然很容易出现程序耗时过长、跑不动、内存爆掉等等问题。

架构设计

最后咱们花一些篇幅来谈一下机器学习系统的架构设计。所谓机器学习系统的架构,指的是一套可以支持机器学习训练、预测、服务稳定高效运行的总体系统以及他们之间的关系。在业务规模和复杂度发展到必定程度的时候,机器学习必定会走向系统化、平台化这个方向。这个时候就 须要根据业务特色以及机器学习自己的特色来设计一套总体架构,这里面包括上游数据仓库和数据流的架构设计,以及模型训练的架构,还有线上服务的架构等等。

这一套架构的学习就不像前面的内容那么简单了,没有太多现成教材能够学习,更多的是在大量实践的基础上进行抽象总结,对当前系统不断进行演化和改进。但这无疑是算法工程师职业道路上最值得为之奋斗的工做。在这里能给的建议就是多实践,多总结,多抽象,多迭代。

机器学习算法工程师领域现状

如今能够说是机器学习算法工程师最好的时代,各行各业对这类人才的需求都很是旺盛。典型的包括如下一些细分行业:

推荐系统。推荐系统解决的是海量数据场景下信息高效匹配分发的问题,在这个过程当中,不管是候选集召回,仍是结果排序,以及用户画像等等方面,机器学习都起着重要的做用。

广告系统。广告系统和推荐系统有不少相似的地方,但也有着很显著的差别,须要在考虑平台和用户以外同时考虑广告主的利益,两方变成了三方,使得一些问题变复杂了不少。它在对机器学习的利用方面也和推荐相似。

搜索系统。搜索系统的不少基础建设和上层排序方面都大量使用了机器学习技术,并且在不少网站和 App 中,搜索都是很是重要的流量入口,机器学习对搜索系统的优化会直接影响到整个网站的效率。

风控系统。风控,尤为是互联网金融风控是近年来兴起的机器学习的又一重要战场。不夸张地说,运用机器学习的能力能够很大程度上决定一家互联网金融企业的风控能力,而风控能力自己又是这些企业业务保障的核心竞争力,这其中的关系你们能够感觉一下。

可是所谓“工资越高,责任越大”,企业对于算法工程师的要求也在逐渐提升。总体来讲,一名高级别的算法工程师应该可以处理“数据获取→数据分析→模型训练调优→模型上线”这一完整流程,并对流程中的各类环节作不断优化。一名工程师入门时可能会从上面流程中的某一个环节作起,不断扩大本身的能力范围。 除了上面列出的领域之外,还有不少传统行业也在不断挖掘机器学习解决传统问题的能力,行业的将来可谓潜力巨大。

相关文章
相关标签/搜索