博舍

成为一名机器学习算法工程师,你需要这些必备技能 人工智能工程师要怎样学历才能学到技能

成为一名机器学习算法工程师,你需要这些必备技能

成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能力,这些能力中的每一项掌握起来都需要足够的努力和经验。

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

 

 

图1机器学习算法工程师技能树

基础开发能力

所谓算法工程师,首先需要是一名工程师,那么就要掌握所有开发工程师都需要掌握的一些能力。有些同学对于这一点存在一些误解,认为所谓算法工程师就只需要思考和设计算法,不用在乎这些算法如何实现,而且会有人帮你来实现你想出来的算法方案。这种思想是错误的,在大多数企业的大多数职位中,算法工程师需要负责从算法设计到算法实现再到算法上线这一个全流程的工作。笔者曾经见过一些企业实行过算法设计与算法实现相分离的组织架构,但是在这种架构下,说不清楚谁该为算法效果负责,算法设计者和算法开发者都有一肚子的苦水,具体原因不在本文的讨论范畴中,但希望大家记住的是,基础的开发技能是所有算法工程师都需要掌握的。

基础开发所涉及到的技能非常的多,在这里只挑选了两个比较重要的点来做阐述。

单元测试

在企业应用中,一个问题的完整解决方案通常包括很多的流程,这其中每个环节都需要反复迭代优化调试,如何能够将复杂任务进行模块划分,并且保证整体流程的正确性呢?最实用的方法就是单元测试。单元测试并不只是简单的一种测试技能,它首先是一种设计能力。并不是每份代码都可以做单元测试,能做单元测试的前提是代码首先是可以划分为多个单元——也就是模块的。在把项目拆解成可独立开发和测试的模块之后,再加上对每个模块的独立的、可重复的单元测试,就可以保证每个模块的正确性,如果每个模块的正确性都可以保证,那么整体流程的正确性就可以得到保证。

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

逻辑抽象复用

逻辑的抽象复用可以说是所有软件开发活动中最为重要的一条原则,衡量一个程序员代码水平的重要原则之一就是看他代码中重复代码和相似代码的比例。大量重复代码或相似代码背后反映的是工程师思维的懒惰,因为他觉得复制粘贴或者直接照着抄是最省事的做法。这样做不仅看上去非常的丑陋,而且也非常容易出错,更不用提维护起来的难度。

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

概率和统计基础

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

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

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

在统计方面,一些常用的参数估计方法也需要掌握,典型的如最大似然估计、最大后验估计、EM算法等。这些理论和最优化理论一样,都是可以应用于所有模型的理论,是基础中的基础。

机器学习理论

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

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

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

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

基础理论

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

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

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

正则化和bias-variancetradeoff。如果说现阶段我国的主要矛盾是“人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾”,那么机器学习中的主要矛盾就是模型要尽量拟合数据和模型不能过度拟合数据之间的矛盾。而化解这一矛盾的核心技术之一就是正则化。正则化的具体方法不在此讨论,但需要理解的,是各种正则化方法背后透露出的思想:bias-variancetradoff。在不同利益点之间的平衡与取舍是各种算法之间的重要差异,理解这一点对于理解不同算法之间的核心差异有着非常重要的作用。

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

机器学习的基础理论还有很多,可以先从上面的概念学起,把它们当做学习的起点,在学习过程中还会遇到其他需要学习的内容,就像一张网络慢慢铺开一样,不断积累自己的知识。这方面基础理论的学习,除了AndrewNg的著名课程以外,《LearningfromData》这门公开课也非常值得大家学习,这门课没有任何背景要求,讲授的内容是在所有模型之下的基础中的基础,非常地靠近机器学习的内核本质。这门课的中文版本叫做《机器学习基石》,也可以在网上找到,其讲授者是上面英文版本讲授者的学生。

有监督学习

在了解了机器学习的基本概念之后,就可以进入到一些具体模型的学习中了。在目前的工业实践中,有监督学习的应用面仍然是最广泛的,这是因为我们现实中遇到的很多问题都是希望对某个事物的某个属性做出预测,而这些问题通过合理的抽象和变换,都可以转化为有监督学习的问题。

在学习复杂模型之前,我建议大家都先学习几个最简单的模型,典型的如朴素贝叶斯。朴素贝叶斯有很强的假设,这个假设很多问题都不满足,模型结构也很简单,所以其优化效果并不是最好的。但也正是由于其简单的形式,非常利于学习者深入理解整个模型在建模和优化过程中的每一步,这对于搞清楚机器学习是怎么一回事情是非常有用的。同时,朴素贝叶斯的模型形式通过一番巧妙的变换之后,可以得到和逻辑回归形式上非常统一的结果,这无疑提供了对逻辑回归另外一个角度的解释,对于更加深刻理解逻辑回归这一最常用模型有着非常重要的作用。

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

在掌握了线性模型和树形模型这两种基础形式之后,下一步需要掌握的是这两种基础模型的复杂形式。其中线性模型的复杂形式就是多层线性模型,也就是神经网络。树模型的复杂形式包括以GDBT为代表的boosting组合,以及以随机森林为代表的bagging组合。这两种组合模型的意义不仅在于模型本身,boosting和bagging这两种组合思想本身也非常值得学习和理解,这代表了两种一般性的强化方法:boosting的思想是精益求精,不断在之前的基础上继续优化;而bagging的思想是“三个臭裨将顶一个诸葛亮”,是通过多个弱分类器的组合来得到一个强分类器。这两种组合方法各有优劣,但都是在日常工作中可以借鉴的思想。例如在推荐系统中所我们经常会使用多个维度的数据做召回源,从某个角度来看就是一种bagging的思想:每个单独召回源并不能给出最好表现,但是多个召回源组合之后,就可以得到比每个单独召回源都要好的结果。所以说思想比模型本身更重要。

无监督学习

有监督学习虽然目前占了机器学习应用的大多数场景,但是无监督学习无论从数据规模还是作用上来讲也都非常的重要。无监督学习的一大类内容是在做聚类,做聚类的意义通常可以分为两类:一类是将聚类结果本身当做最终的目标,另一类是将聚类的结果再作为特征用到有监督学习中。但这两种意义并不是和某种聚类方法具体绑定,而只是聚类之后结果的不同使用方式,这需要在工作中不断学习、积累和思考。而在入门学习阶段需要掌握的,是不同聚类算法的核心差异在哪里。例如最常用的聚类方法中,kmeans和DBSCAN分别适合处理什么样的问题?高斯混合模型有着什么样的假设?LDA中文档、主题和词之间是什么关系?这些模型最好能够放到一起来学习,从而掌握它们之间的联系和差异,而不是把他们当做一个个孤立的东西来看待。

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

机器学习理论方面的学习可以从《AnIntroductiontoStatisticalLearningwithApplicationinR》开始,这本书对一些常用模型和理论基础提供了很好的讲解,同时也有适量的习题用来巩固所学知识。进阶学习可使用上面这本书的升级版《ElementsofStatisticalLearning》和著名的《PatternRecognitionandMachineLearning》。

开发语言和开发工具

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

开发语言

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

架构设计

最后我们花一些篇幅来谈一下机器学习系统的架构设计。所谓机器学习系统的架构,指的是一套能够支持机器学习训练、预测、服务稳定高效运行的整体系统以及他们之间的关系。在业务规模和复杂度发展到一定程度的时候,机器学习一定会走向系统化、平台化这个方向。这个时候就需要根据业务特点以及机器学习本身的特点来设计一套整体架构,这里面包括上游数据仓库和数据流的架构设计,以及模型训练的架构,还有线上服务的架构等等。这一套架构的学习就不像前面的内容那么简单了,没有太多现成教材可以学习,更多的是在大量实践的基础上进行抽象总结,对当前系统不断进行演化和改进。但这无疑是算法工程师职业道路上最值得为之奋斗的工作。在这里能给的建议就是多实践,多总结,多抽象,多迭代。

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

现在可以说是机器学习算法工程师最好的时代,各行各业对这类人才的需求都非常旺盛。典型的包括以下一些细分行业:

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

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

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

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

但是所谓“工资越高,责任越大”,企业对于算法工程师的要求也在逐渐提高。整体来说,一名高级别的算法工程师应该能够处理“数据获取→数据分析→模型训练调优→模型上线”这一完整流程,并对流程中的各种环节做不断优化。一名工程师入门时可能会从上面流程中的某一个环节做起,不断扩大自己的能力范围。

除了上面列出的领域以外,还有很多传统行业也在不断挖掘机器学习解决传统问题的能力,行业的未来可谓潜力巨大。

人工智能时代需要怎样的技能人才

    【人才论坛】   

    人才是创新的第一资源,高技能人才则是促进产业升级、推动高质量发展的重要支撑。习近平总书记指出,“工业强国都是技师技工的大国,我们要有很强的技术工人队伍”。

    然而,我国“技工大国”“技能强国”建设的人才瓶颈明显,截至2018年,我国技能劳动者仅占就业人员总量的21.3%,高技能人才仅占技能劳动者总数的29%;具体到人工智能领域,拥有10年从业经历者仅占38.7%。技术更新与人力投入之间亦存在明显的替代效应,如大多数保安、翻译会被人工智能取代,楼宇配送机器人则将剥夺快递小哥的工作机会。但是,互联网的发展也导致了界面(UI)设计师、安卓/苹果(Android/iOS)程序员、互联网产品经理等新兴职位的蓬勃发展。一项全球评估显示,到2030年30%的工作活动可以实现自动化。

    人工智能时代,关于人工智能即将大规模蚕食人类工作岗位特别是技能岗位的预言,一直是热门话题。面对人工智能来袭,什么样的技能人才能够赶上时代的列车?结合人工智能的技术本质与劳动力特征,可以认为,人工智能时代的合格技能技术人才必须实现从态度到实践、从理念到行为、从内在到外在的全面跃迁,在理念层面、专业层面和实践层面掌握与机器竞争、对话、合作的能力。

有工匠精神的“螺丝钉”

    理念是行为的先导,科学而超前的理念将有助于引导技能人才醉心技艺的磨炼与提升,而忽视外界尘俗带来的诱惑与吸引。2016年政府工作报告提出,要培育精益求精的工匠精神。

    百度创始人李彦宏在一次演讲中说,“过去的世界都与现在完全不一样了,过去40年世界经济增长主要靠网络技术创新推动,搜索引擎是过去20年整个互联网技术或者网络技术创新的基石,是最大的推动力。然而,互联网只是前菜,人工智能才是主菜。”对于技能人才而言,人工智能不仅不标志着一个时代的终结,反而预示着一个时代的开始,对人才队伍建设提出了新的更高要求。事实上,中美贸易摩擦以及华为被美列入“黑名单”等事件,都表明,在基础理论研究方面、在高新技术开发方面,我们国家已经面临着严重的人才断层与瓶颈,必须寻找新时代的工匠。并且,作为新时代的技能人才,更应该具有前瞻性的眼光和思维,走出思维定式,打破水桶“短板”,从而实现技术、人际和概念技能的整体性推进。

有真才实学的“金刚钻”

    人工智能时代的到来已经产生了一些之前没听说过的新职位如“自然语言处理”“语音识别工程师”以及人工智能、机器人产品经理等,甚至有人断言,未来还将可能出现“机器人道德评估师”“机器人暴力评估师”等职位。做互联网报道的媒体人等“旧职位”在“人工智能化”升级后,需转型做人工智能领域的垂直媒体等。对于人工智能时代的技能人才而言,专业是第一位的,不仅要有过硬的专业知识,更要有能够把自己所掌握的理论、知识和先进做法推而广之的能力。

    面对大数据、人工智能、区块链等提出的知识化挑战以及我们冲击高精尖技术的现实需求,我们必须培养一批具有真才实学的执行者,即能“揽瓷器活”的“金刚钻”。需要注意的是,技能型人才队伍的建设应该是有等级层次、分门别类的。针对那些我国当前处于零起点、空白状态的领域的基础攻关,应该能够沉下心、耐得住寂寞,从零开始培养特定人才;与此同时,对于那些当前急需的大数据分析、人工智能、智慧政府等方面的人才建设与培养,也应该加大力度,从而打造一支能够匹配我国全门类制造的人才队伍。

有进取意识的“学习者”

    2018年5月28日,习近平总书记在两院院士大会上强调,中国要强盛、要复兴,就一定要大力发展科学技术,努力成为世界主要科学中心和创新高地。我们比历史上任何时期都更接近中华民族伟大复兴的目标,我们比历史上任何时期都更需要建设世界科技强国!在人工智能时代,知识传播和消费模式的改变,提升了技术变现的效率,并缩短了从书桌走向生产线的时间。面对这样一种知识爆炸和去中心化的传播模式,技能型人才必须始终秉持一颗善于学习的心,紧扣理论研究前沿,不断更新自己的专业知识库。研究发现,人工智能时代的来临以及智能机器人在生产线上的普遍替代,使新行业不断涌现,如针对人工智能可能导致的人类身心问题,会产生新的适应性岗位;探索天人关系、人机关系、机机关系并以此来重新定义产品和技术的实现方式需要新知识、新能力,那些不具备先进知识的工人必然要被时代所淘汰。因此,新时代技能人才更应该具备终身学习的能力,不仅能够利用新兴信息技术获取所需要的信息、知识,还能够利用其所学进行消化、活用,提升知识运用的效率和质量。

    摩尔定律表明,当前软件更新的频率已经从原来的半年缩短到了3周。对于人工智能时代而言,一旦我们的技能型人才跟不上理论研究与技术发展的步伐,就无法理解科学家们提出的最新构想,也必将抑制我国科学技术的进步,进而阻碍社会的前进。

    (作者:周湘智,系湖南省社会科学院智库办主任)

    延伸阅读  

高技能人才队伍

    “高技能人才”这一概念,是在2003年全国人才会上首次提出来的,这也意味着高技能人才纳入了党和国家人才队伍的范畴。

    2010年出台的《国家中长期人才发展规划纲要(2010-2020年)》,首次将高技能人才队伍建设纳入国家人才队伍建设总体规划。2011年,作为纲要的配套规划,《高技能人才队伍建设中长期规划(2010-2020年)》发布,成为10年间我国高技能人才制度建设规范。2015年召开的党的十八届五中全会,把高技能人才列为国家重点建设的四支人才队伍之一,和战略科学家、科技领军人才、企业家人才并列。

人工智能工程师学习路线及具备的5项基本技能

摘要学习路线

你是否对机器学习充满兴趣呢?其实到目前为止,每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上,你会发现现在没有哪一个领域比机器学习能引起更多的曝光率和关注度。机器学习已经以一种高调姿态闯入广大民众的意识当中,无论是采用机器学习等相关技术的GoogleAlphaGo以5局4胜的战绩打败人类世界的围棋冠军,还是采用了机器学习技术的Twitter能够鉴定是否你在酩酊大醉的时候发布了推文,无论你通过怎样的方式发现并知道机器学习技术的存在,有一件事不言而喻:机器学习的时代已经到来。

尽管机器学习技术看起来这般神器,但是对于机器学习技术的好奇心是一码事儿,而想要让该技术在相关产业当中发挥作用实际上又是另外一码事儿。这篇文章将会帮助你了解作为一名机器学习工程师具备怎样的思维方式以及需要什么样的专业技能才可以开展工作。如果你正在考虑投身机器学习工程师的职业生涯,那么在一开始的时候,你必须弄清楚两件非常重要的事情。首先,机器学习工程师的岗位并不是一个“纯粹的”学术角色,你不需要具备科学研究经验或者专业的学术教育背景。其次,如果你仅仅具备软件工程师的能力或者仅仅具备数据科学的经验还远无法成为一名合格的机器学习工程师,除非你同时掌握以上两方面的技术经验。

数据分析Vs.机器学习工程师

如果想成为一名机器学习工程师,那么你必须弄清楚前者和数据分析师之间的区别,而且这非常重要。简单来讲,两者之间最为关键的区别就是他们最终的目标大相径庭。作为一位数据分析师,你的主要职责就是分析数据,并从这些抽象的数据当中提炼出具体的能让大家明白的故事,并从中产生具有可行性的洞察。数据分析工作的重点就是向公众传播并展示图表、模型已经可视化效果。数据的分析和展示由人类执行,并且其他人会根据你展示的数据做出商业决策。尤其是这一点必须引起你足够的重视——你数据分析后产生的结果的“受众”是人。但是从机器学习工程师的角度来看的话,他们最终输出的结果是一种可以工作的软件(而不是你一路以来创建的分析结果或者可视化图形),并且你所输出结果的“受众”通常由其他软件插件组成,只需很少在少量人力劳动的监护下这些软件插件就可以自行运转。软件的智能性意味着可行性,但是在机器学习模型中,决策的制定由系统来决定,并且系统可以影响产品或者服务的行为方式。这就是软件工程技术为什么对机器学习工程师而言如此重要。

UnderstandingTheEcosystem——弄懂软件的生态系统

在你开始着手学习具体技能之前,我还要再向大家阐明另外一个概念。成为一名机器学习工程师必须要求你自己能够清楚地了解你所设计的整个软件系统。让我们打个比方,如果你正在为一个连锁店项目工作,并且公司需要根据客户以往的购买历史开始有针对性的发放优惠券,目的是想生成能够让消费者可以实际使用的优惠券。在数据分析模型当中,你可以收集消费者的采购数据,对这些数据分析之后可以观察出消费者的采购行为趋势,并据此提出响应的策略。机器学习的方法是编写一个可以自动生成优惠券的系统。但是学习采取什么方式才能编写出这样一种系统呢?这种方式奏效吗?你不得不去通盘了解项目开发所处的生态系统——包括商品库存、商品类目、价格、采购订单、销售点终端软件、CRM管理系统等等。归根结底,项目的处理流程和机器学习算法的理解关系不大,或者和应用他们的方式和时间也没有太多关系,但是却需要你能够对系统的相互关联性有很深入的了解,并需要你可以成功编写一个具有高度集成和接口功能的软件。请切记,机器学习输出的结果实际上是一个可以有效运行的软件!现在,就让我们开始了解成为一名机器学习工程师所需要注意的各种细节方面的事宜。我们会把这些信息分成两个基本点进行阐述:技能简介以及语言和库。首先我们将从技能介绍开始,在日后的内容中我们将介绍机器学习的语言和库。

技能简介1.ComputerScienceFundamentalsandProgramming计算机科学基础和编程

对机器学习工程师而言,计算机科学基础的重要性包括数据结构(数据堆栈、队列、多位数组、树形以及图像等等)、算法(搜索、分类、优化、动态编程等)、科计算性与复杂性(P对NP、NP完全问题、大O符号以及近似算法等)和计算机架构(存储、缓存、带宽、死锁和分布式处理等等)。当你在编程的时候必须能够对以上提到的这些基础知识进行应用、执行、修改或者处理。课后练习、编码竞赛还有黑客马拉松比赛都是你不可或缺的磨练技能的绝佳途径。

2.ProbabilityandStatistics概率论和数理统计

概率的形式表征(条件概率、贝叶斯法则、可能性、独立性等)和从其中衍生出的技术(贝叶斯网、马尔科夫决策过程、隐藏式马可夫模型等)是机器学习算法的核心,这些理论可以用来处理现实世界中存在的不确定性问题。和这个领域密切相关的还有统计学,这个学科提供了很多种衡量指标(平均值、中间值、方差等)、分布(均匀分布、正态分布、二项式分布、泊松分布等)和分析方法(ANOVA、假设实验等),这些理论对于观测数据模型的建立和验证非常必要。很多机器学习算法的统计建模程序都是可以扩展的。

3.DataModelingandEvaluation数据建模及评估

数据建模就是对一个给定的数据库的基本结构进行评估的过程,目的就是发现其中所蕴含的有用模式(相互关系,聚合关系、特征矢量等)和/或者预测以前案例(分类,回归、异常检测等)的特征。评估过程的关键就是不断地对所给模型的优良性能进行评价。根据手中的任务,你需要选取一种恰当的精准/误差衡量指标(比如日志分类的损失、线性回归的误差平方和等等)和求值策略(培训测试、连续Vs.随机交叉验证等)。通过对算法的反复学习,我们可以发现其中会存在很多误差,而我们可以根据这些误差对模型(比如神经网络的反相传播算法)进行细微的调整,因此即使你想能够运用最基本的标准算法,也需要你对这些测量指标有所了解。

4.ApplyingMachineLearningAlgorithmsandLibraries应用机器学习算法和库

尽管通过程式库/软件包/API(比如scikit-learn,Theano,SparkMLlib,H2O,TensorFlow等)可以广泛地实现机器学习算法的标准化执行,但是算法的应用还包括选取合适的模型(决策、树形结构、最近邻点、神经网络、支持向量机器、多模型集成等)、适用于数据的学习程序(线性回归、梯度下降法、基因遗传算法、袋翻法、模型特定性方法等),同时还需要你能够了解超参数对学习产生影响的方式。你也需要注意不同方式之间存在的优势和劣势,以及那些可能会让你受牵绊的大量陷阱(偏差和方差、高拟合度与低拟合度、数据缺失、数据丢失等)。对于数据科学和机器学习所带来的这些方面的挑战,大家可以去Kaggle网站获取很多学习参考,你可发现不同的问题当中存在的细微差别,从而可以让你更好的掌握机器学习的算法。

5.SoftwareEngineeringandSystemDesign软件工程和系统设计

在每天工作结束的时候,机器学习工程师通常产生的成果或者应交付的产品就是一种软件。这种软件其实也是一种小型插件,它可以适用于相对更大型的产品或者服务的生态系统。你需要很好地掌握如何才能让这些彼此不同的小插件协同工作,并与彼此进行流畅的沟通(使用库函数调用、数据接口、数据库查询等)的方法,为了让其他的插件可以依附你的插件进行很好的工作,你也得需要为你的差价建立合适的接口。精心设计的系统可以避免以后可能出现的瓶颈问题,并让你的算法系统满足数据量激增时候的扩展性能。软件工程的最佳的实践经验(需求分析、系统设计、模块化、版本控制、测试以及归档等)对于产能、协作、质量和可维护性而言是不可获取的无价之宝。

MachineLearningJobRoles——机器学习的工作角色

由于现在越来越多的公司开始尝试采用新兴技术为自己挖掘更多的利润,于是和机器学习相关的岗位需求也在不断的增加。下面这幅图片为大家展示了和数据分析师相比,对于一名典型的机器学习工程师而言,相对重要的核心技能包含以下内容:

TheFutureofMachineLearning——机器学技术的发展展望

机器学习工程师最让人欲罢不能的特征或许就是这个岗位角色拥有看起来无所不能的广泛适应性。包括教育行业、计算机科学还有更多领域在内的很多行业已经受到了机器学习的积极影响。实际上你会发现没有哪个领域不会应用机器学习技术。对于某些行业案例而言,他们对机器学习技术有极其迫切的需求。健康医疗产业就是一个显而易见的例子。机器学习技术已经在健康医疗长夜中的很多重要领域得到了广泛的应用,无论是致力于减少护理差异,还是医学扫描分析,机器学习技术正在潜移默化地为这些领域带来改变。来自纽约大学的数学科学克朗学院和数据科学中心的助理教授DavidSontag先生最近发表了关于机器学习技术和健康医疗系统的演讲,在演讲中他讨论了机器学习是如何通过自己的潜力改变了整个医疗产业。毫无疑问,这个世界正在发生着快速和戏剧性的转变。对于机器学习工程师的需求正在呈现指数型的增长趋势。世间充满了复杂的挑战,并因此需要更加复杂的系统才可以将这些挑战迎刃而解。而机器学习工程师们就是可以建造这些系统的最佳人选。如果你的未来需要借助机器学习技术获得更好的发展,那么此时此刻就是你迈出脚步掌握相关技能并开发你思维的最佳时机!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇