feedback

意见

反馈

back-to-up

回到

顶部

搞懂这些,你也能转型70W年薪的机器学习工程师

数据侠

· 寇冠东

数据侠寇冠东   2018-11-16

人工智能的热潮依旧,相关人才缺口随势增长,顶着“高薪”、“稀缺”、“大佬”标签的机器学习专家成为了程序员、工程师、数据分析师的转型风向标。根据 Indeed 在美国 2018 年的最佳工作报告,机器学习工程师在美国前十的“最佳”工作排名中占据前列,年薪高达 13.62 万美元。 机器学习是什么?应用场景有哪些?成为机器学习专家难不难? 11月1日的数据侠实验室,Tapas数据仓库管理员寇冠东和大家分享了机器学习的那些事儿~本文为其演讲实录.

大家好,我是寇冠东,是一名数据仓库管理员,今天分享的主要内容,包括:

  • 机器学习的定义

  • 机器学习的应用场景

  • 机器学习的上下游

  • 学习机器学习所要掌握的相关知识点

  • 机器学习与人类学习之间的关系。

验证码与机器学习

 上网的时候,我们会看到很多各种各样的验证码,有的简单,有的复杂。普通用户非常讨厌这些验证码,因为它浪费了大家的时间,但这些验证码的作用是能够阻拦爬虫爬取数据。

在实际的网络请求中,只有非常少的一部分是真正的用户行为,大部分的网络请求都是由爬虫发起的,爬虫的目的就是为了采集数据。

实际工作中,爬虫工程师会使用一些机器学习技术解决验证码的问题,比如利用计算机视觉识别数字和字母,利用语义识别文字,并且将二者进行匹配处理。

而后端开发工程师的任务则是防止爬虫爬取数据及减轻服务器的压力。除了采用验证码防止爬虫,另一种方式是采用机器学习中的异常检测。

异常检测是指识别出哪些是普通的用户访问的行为,哪些是爬虫或恶意的网络请求。通过这样的识别,让正常的用户请求获取到正常的数据,让爬虫和其他的恶意网络请求获取到假数据、脏数据或者验证码。

底什么是机器学习?

根据Tom Mitchell 1997年提出的定义,机器学习是一种计算机程序,这种程序能够针对特定任务,表现随经验的增加而增加,即机器学习包含三大要素,分别是经验、任务和性能。机器学习的经验来自于数据,它的任务是解决特定的问题,它的性能取决于我们如何评估模型的表现。

机器学习的上下游

机器学习的上游是数学和计算机科学,它的下游是软件工程和商业应用。

其中,各个环节不是完全绝对划分的,各环节彼此之间有非常高的重叠度。比如说数学和计算机科学,两个学科在算法方面有很大重叠度,计算机科学和机器学习重叠度更高。

机器学习和软件工程一样,因为机器学习工程师很大一部分任务就是在编写软件代码,而软件工程又与商业应用最接近,我们日常所用的一些所谓机器学习的应用,大部分都是通过软件工程师经过封装之后才能够使用。

要想入门机器学习,你需要掌握哪些知识点?

机器学习中的数学

机器学习最上游靠近学术研究方向的是数学,机器学习中的数学包含但不限于微积分、线性代数、统计学、凸优化。

其中,统计学研究的对象就是数据和数据背后的规律。在学统计学专业的人看来,机器学习就是统计学的一种应用,但二者之间存在细微的差别,统计学的侧重点在于统计结果的可解释性,要用人类能够听懂的语言来解释它的结论;而机器学习的重点在于模型预测的准确性,而不是人类能不能理解模型的原理。

总的来说,数学是一门理论指导学科。如果不懂这些数学原理,其实也可以做机器学习工程师,但是如果偏学术方面的话,还是要更多地掌握一些数学原理。

机器学习中的计算机科学

相比于数学这一门纯粹性的学科,计算机科学更讲究实用主义,因为计算机科学会经常提及计算成本、效率这些非常实际的问题。所以有一些问题在数学上是可解的,但因为计算机的计算能力有限,所以我们认为它是不可解的。

比如说HTTPS的RSA加密算法、比特币的加密算法,从数学角度而言都是可以暴力破解的,但是以目前计算机的算力,要完成暴力破解,需要非常长的计算时间。从实用方面来考虑,我们认为这些加密算法是不可破解的。

决定机器学习过程中计算成本的最大因素是算法复杂度,算法复杂度分为两方面,一方面是时间复杂度,另一个是空间复杂度。其中时间复杂度是我们更关心的。

严格的说,时间复杂度不是指计算时间的长短,而是计算所需的操作次数。

如上图所示,随着输入数据量的增加,不同的算法复杂度,增长不同。其中增长最快的是指数增长、幂增长,增长较慢的是平方根增长、对数增长。

当数据量在1000条的时候,以上几种不同复杂度的算法的耗时都是一毫秒。对于线性增长的模型,数据每增加一千倍,它的时间也会扩大为原来的一千倍,这是比较常见的一种模式,就如一个人1分钟吃1个混沌,10分钟吃10个馄饨,这是日常生活中最常见的算法。

对数增长非常慢。当数据量从1000增大到100万的时候,数据量变成了原来的平方,而实际的计算时间只增加了两倍。

平方根增长也比较慢。当数据量增加1000倍的时候,1000个平方根相当于32左右,比线性增长要慢很多。

平方和立方这类幂增长则非常可怕,当我的数据量增加1000倍的时候,平方增长变成了原来的100万倍,立方增长变成了原来的10亿倍。

为机器学习选择算法的时候,尽量选择算法复杂度比较低的算法,尤其是在数据量比较大的时候。

机器学习的经验来源:数据

数据是机器学习的原料,是机器学习的经验来源。机器学习输入的是数据,输出的是一个具有预测能力的模型。

数据有多种形式,狭义的数据指数字形式,比如说网站的访问量、用户数量;广义的数据则包含一切能够被记录下来的信息,比如说文本、图片、视频、音频,虽然它们的编码格式和数据压缩的方式不一样,但它们都是基于二进制的数据。这些数据都可以用来训练机器学习的模型。

数据经过采集、预处理、探索性数据分析之后,确定机器学习的任务和算法,进行机器学习的模型训练,通过数据可视化输出一个产品。这样一个循环不是一次性完成的,它往往要经过多次迭代。

在数据采集过程中会涉及网站本身积累的用户数据、爬虫数据、人工标注数据;数据的预处理包括数据清洗、特征工程,通过预处理将数据去重、剔除脏数据;探索性数据分析(EDA)能够做一些统计性的描述,帮助我们更好地定义问题。

用来训练机器学习的数据非常重要,但是并不是所有的数据都用来训练模型。一般而言,使用60%的数据训练模型,使用20%的数据验证模型,并且调节优化模型参数,最后剩余20%的数据用于评估模型表现。

通过对数据的这样一种划分,能够让模型得到一个最初的训练、优化和评估。

如何定义机器学习的任务?

 机器学习的任务类型主要分为监督式学习和无监督学习,除此以外,还有半监督学习和强化学习。

监督式学习与无监督式学习

监督式学习,表现为训练数据的因变量有标注。

在定义一个函数的时候,往往包括自变量和因变量,自变量是函数的输入值,因变量是函数的输出值。训练数据的因变量指的是预测模型所输出的值。比如利用一个房子的面积来预测一个房子的价格,房子的面积是自变量,价格是因变量。而这样一条既有面积又有价格的数据,它就是一个因变量有标注的训练数据,可以用来做监督式学习。

无监督学习,表现为训练数据的因变量没有标注。

比如我们采集了很多的用户行为数据,但是我们并不知道哪一类用户和哪一类用户是相似的,通过机器学习可以让用户行为相似的群体划分成小的分组,这就是无监督学习,其中的训练数据并没有提供一个明确的标注。

监督式学习:回归问题、分类问题

监督式学习中通常可以分为两类,一类是回归问题,一类是分类问题。

所谓回归问题,表现为因变量是连续值或者有序整数。比如说产品销量、房价和股票等市场预测问题;温度、湿度、风速等天气预测问题,它们的输出值都是连续数值或有序的数字,属于回归问题。

(图片说明:坐标轴中横坐标是特征,纵坐标是输出;横坐标是自变量,纵坐标是因变量,使用一条直线或者曲线去拟合模型,这个模型解决的是一个回归问题。)

监督式学习中另外一种常见的问题叫做分类问题,表现为因变量是离散并且无序的。

(图片说明:图中横、纵坐标都是特征;象限中的数据是模型的因变量)

解决分类问题的目的在于找到一个分类器,划分出不同类数据之间的区别。分类问题不仅限于二分类,也可以是多分类,即对多种类进行划分。

验证码识别是一个典型的分类问题,如果是数字和字母验证码,对它的识别就是把验证码中的每一个数字或大小写字母分到可能的62个(26+26+10)分类中;垃圾与正常邮件识别也是一个二分类问题;文章分类则是个多分类(科技、经济、军事体育等)问题。

(图片说明:在微软应用how old上,上传一张带有人物照片的图片,能自动识别出人脸的位置,并标注出其中人物的性别和年龄。其中,关于性别预测是一个二分类问题,关于年龄的预测是一个回归问题。)

无监督学习:聚类、降维

无监督学习中常见的一种问题是聚类问题。

(图片说明:聚类问题的应用及未经过人工标注的数据坐标图。)

聚类问题的目的在于解决如何使机器自动将相近的数据点划分为一组。聚类问题的应用非常广泛,包括电商消费者划分、基于用户位置的商业选址、动植物种群划分等。

无监督学习中的另一类常见问题是降维问题。

降维的目的在于降低数据的维度、计算成本、以信息损失最少的代价压缩数据和高维数据可视化。降维常用的方法包括主成分分析、奇异值分解等。

模型训练

 

机器学习中的算法选择

  • 数据量对于机器学习训练的效果有什么影响?

一般数据量越大,算法训练出来的模型结果表现越好,而有的算法是在数据量比较小的时候表现更好,而有的算法则是在数据量更大的时候表现更好。

(图片说明:某公司根据文本进行的模型训练,随着数据量的增加,不同模型的表现都在提升)

  • 如何选择合适的算法?

以线性回归问题为例,其中有两种常见的算法,一种是正规方程,直接用数学去求出它的解析解,这种算法的复杂度是N的立方;另一种算法叫做梯度下降法,其中又分为批量梯度下降和随机梯度下降,他们的算法复杂度分别是N的平方和N。

对比正规方程和梯度下降,正规方程的精确度比较高,因为它是解析解,而梯度下降的精确度在可接受范围内,它最大的优点在于计算成本非常低,所以在数据量很大的时候,倾向于选择用梯度下降法来训练线性回归模型。

简单来说,梯度下降法就是把一个函数的梯度求出来,然后选择一个初始位置,让它进行梯度方向的迭代。梯度下降法的优点是算法复杂度较低,可以降低到N的平方或者N,缺点在于它有可能会陷入一个局部最优解。

(图片说明:右图中,如果用梯度下降法进行模型训练的起始位置是靠近右侧的凹坑,那么它最终迭代的结果则会是一个局部最小值,而不是中间这个凹坑的全局最优解。)

模型训练最重要的是要通过大量的迭代来达到最优解。

模型评估

泛化能力

模型的评估涉及模型的泛化能力,模型的泛化能力包括欠拟合、刚好拟合和过拟合。

什么是过拟合?什么是欠拟合?举例来说,比如大家对亲戚中某一个熊孩子非常不喜欢,你可以送她一件最好的礼物——五年高考三年模拟,如果熊孩子背下了所有往年的高考题,但遇上没有见过的题他就不会做,这就是一种过拟合;如果熊孩子并没有学会往年的高考题,在面临真实高考题时,他自然答得不好,这是一种欠拟合。

过拟合就是模型对于训练数据表现得非常好,对于新数据它不能够很好的预测;欠拟合与过拟合相反。评估机器学习模型时,最好能够达到刚好拟合,在此状态下,不论是训练数据还是新的数据,它都能够有非常好的一个拟合的状态。

为了更好地理解欠拟合和过拟合,需要引入两个新概念,分别是偏差(bias)和方差(variance)。

模型评估时,最不希望看到的结果,就是偏差方差都很大。

不同模型复杂度对于模型表现会有怎样的影响?

(图片说明:横轴是模型的复杂度,纵轴是模型的预测出来的误差。)

当模型非常简单的时候,即靠左的时候,我们可以看到模型的偏差非常大,但是方差比较小;随着模型复杂度的增加,到中间这部分时,模型的偏差和方差都相对比较小,这是模型评估希望看到结果;随着模型进一步变得复杂化,它的的偏差会变得比较小,但是方差变得比较大,出现了过拟合。

过拟合和欠拟合都是模型评估不希望看到的结果,但是它们的原理和情况是不一样的。欠拟合是由于模型过于简单,过拟合是由于模型过于复杂。在训练机器学习模型的时候,更多遇到的是过拟合。

机器学习与人类学习

机器学习和人类学习之间是有一定联系的。

不积跬步,无以至千里

机器学习中的“跬步”,就是降低代价函数过程中的每一次迭代,每一次迭代,模型参数的更新可能都比较小,它只是沿着梯度的方向下降了一小步,但是迭代次数只要足够多,那么最终的模型还是能够收敛到全局最优解。机器学习模型要经过大量的迭代。

吾尝终日而思矣,不如须臾之所学也

基于现有知识进行思考,相当于是基于现有的数据去训练模型;学习新知识,增加新的训练数据。

很多情况下,在一个有限的数据集上进行更多的迭代次数的训练,不如增加训练数据的量,这样最终达到的模型,它的表现会更好。机器学习和大数据之间的结合非常紧密,因为足够的数据量是机器学习的一个先决条件。

吾尝跂而望矣,不如登高之博见也

当使用梯度下降法训练模型时,如果只是基于当前位置去做小步长迭代,很可能会陷入一个局部最优解,而不是全局最优解。一旦梯度下降方法陷入局部最优解,就再也没有办法跳出局部最优解。我们所做的每一个小决定,就像模型训练中的一次次迭代,要放眼全局考虑问题,而不能只看到眼前的一点点。

 

数据侠门派

本文数据侠寇冠东,Tapas数据仓库管理员,挪威东南大学学院硕士武汉理工大学学士。

 

加入数据侠

“数据侠计划”是由第一财经旗下DT财经发起的数据社群,包含数据侠专栏、数据侠实验室系列活动和数据侠联盟,旨在聚集大数据领域精英,共同挖掘数据价值。了解数据侠计划详情请回复“数据侠计划”,投稿、合作请联系datahero@dtcj.com。

 

分享这篇文章到