有些人认为人工智能和机器学习的本质不过是大肆运用if语句,或者说编程知识罢了,建议说这话的人最好能拿出详细证据证明。本文将对比两个概念,并解释从事这两个领域的专业人员的区别:他们的身份是什么?软件工程师、软件开发人员、机器学习专家、数据科学家、程序员或码农……有些人甚至更夸张,称他们为忍者、大师或摇滚明星!他们实际上都是一类人吗?即便真的如此,机器学习和传统编程之间又是否存在界限呢?
机器学习vs编程:首先,什么是机器学习?
人们常说人工智能和机器学习不过是if语句,或者简单来说就是统计学知识。那除此之外呢?难道机器学习就只是数学和算法的结合吗?这种简单化的概括有时候听起来似乎很有趣,但机器学习的涵义显然要比这更复杂。
不过,让我们先来看一个更加恰当的解释。
简单来说,人工智能就像是一把伞,下面涵盖图像处理、认知科学、神经网络以及其他各个领域内容。机器学习也是伞下的一个组成部分,它的核心思想是计算机不仅能执行预先写好的算法,同时还会自主学习如何解决问题。换句话说,可以用亚瑟·塞缪尔(Arthur Samuel,“机器学习”术语的提出者)曾给出的一个绝佳定义来解释:
机器学习是赋予计算机无明确编程即可学习的研究领域。
所以说,机器学习能够教机器完成算法难以解决的各种复杂任务。具体到哪些任务呢?它们很可能已经以各种形式出现在了生活中。例如:手机上的面部识别或语音识别、汽车驾驶(谷歌自动驾驶汽车)、智能诊疗(Watson)、产品推荐、购书(亚马逊)、观影(Netfix)、音乐(Spotify)、个人助手(Siri, Cortana)……还有列举不完的其他例子。
这样应该已经解释清楚了,接下来要谈的是有关机器学习十分重要的一点。
所有有效的机器学习技术都可以追溯到权限不同的三种访问级别。什么意思呢?首先,第一级别的机器学习技术只有谷歌和IBM这些主要行业巨头才有权访问。第二级别学生等具备一定知识的人可使用。第三级别则代表即便是老人也能够轻松应对。
目前机器学习的发展阶段正出于第二级别和第三级别的交界处。因此,借助这一技术,世界变化的进程也在飞速加快。
关于机器学习的最后一个要点:大多数机器学习任务可以被划分为有教师学习(监督学习)和自主学习(无监督学习)。不过,如果把机器学习的场景想象成程序员在旁边打个巴掌给个枣儿,就有点跑偏了。
“教师”在这里表示数据处理过程中的人为干预。在机器进行监督学习训练时,要先获得数据再根据数据进行预测。而另一方面,在机器自学,即进行无监督学习时,仍先需要数据,但这时要找到数据的属性。
机器学习vs编程:机器学习和编程有何差别?
“在传统编程中,程序的一切表现都取决于程序员的硬编码。在机器学习中,机器有大量空间自己学习数据并给予反馈。”
因此,上文提到的各种专业人员不能相互调换身份:数据工程师取代不了传统程序员的工作,反之亦然。尽管根据要求每位数据工程师都能够使用至少一种编码语言,但传统的编程仅占工程师工作内容的一小部分。而另一方面,软件开发人员也绝不能使用机器学习的算法来发布网站。
人工智能等机器学习技术不是传统编程的替代品,而是一个补充。例如,可以借助机器学习为一个网上贸易平台建立预测算法,但同时平台的用户界面、数据可视化以及其他元素则需要使用Ruby或Java等主流编程语言来实现。
因此,关键在于:机器学习可在传统编程无法解决问题时用来辅助,但仅机器学习自身无法完全胜任某项特定任务。
这对于实践有何借鉴意义?本文将通过对比预测汇率的两种不同方法来列举一个基于机器学习的典型案例。
传统编程法
解决任何问题的首要任务都是创建最佳算法并编写代码。然后,必须设置输入参数,一般来说只要实现的算法没问题,实际上就可以得到预期的结果。
软件开发师如何解决问题
① 开发一个算法; ② 编写算法代码;③ 执行该算法 输入参数-执行算法-得出结果。
但是,要进行预测任务需要使用一个包含不同输入参数的算法。具体到预测汇率,必须参照诸如前一天汇率、影响货币的国内外经济变化以及其他各种因素。
之后,就能大致得出一个参照一系列参数的解决方案,这个方案能根据输入数据预测未来汇率。
但是,关于这个方案,还有至关重要的一点需要考虑进去,或者说要解释清楚。究竟是什么呢?
答案其实很简单,我们需要添加数以万计的参数,而它们的有限集构建了一个非常基础且不可扩展的模型。所以,处理如此庞大的数据数组对任何人而言都十分困难。
机器学习法解决这一任务的方式又有何不同呢?
为使用机器学习解决问题,数据工程师要采取另一套完全不同的流程。工程师们无需开发一个单独的算法,只需收集一系列历史数据以供半自动建模处理。
在处理了足够多的数据之后,数据工程师将半自动模型运用到自定义好的机器学习算法。最终便得出一个能根据输入新数据来预测结果的模型。
数据工程师如何借助机器学习开发解决方案?
机器学习的显著特点是无需建立模型。这一复杂且重要的任务将由机器学习算法来执行。机器学习专家在此基础上简单编辑即可。
机器学习和编程的另一显著差异在于模型能够处理的输入参数数量。为保证预测准确性,必须添加数千个参数并且高精度执行这些参数,因为每一比特的运算都会影响最终结果。人类自身尚且无法创建能妥善处理全部参数细节的算法。
然而机器学习的处理能力没有限制。只要处理器和内存足够大,就能输入尽可能多的所需参数。毫无疑问,正因如此,如今机器学习才如此强大且应用如此广泛。
机器学习专家、数据科学家、
程序员和软件工程师……究竟谁是谁?
根据维基百科,数据科学是“通过科学方法、程序、算法和系统从结构化和非结构化数据中获取知识和见解的多学科领域”。
这一定义听起来似乎没什么大不了的。
关键是接下来的解释:
“使用最强硬件、最佳程序系统和最高效的算法来解决问题”。
更有意思的是:
2012年,《哈佛商业评论》将数据科学家称为“21世纪最性感的工作”。
其实,数据科学就像计算机科学一样,是另一把覆盖面广泛的大伞,只不过数据科学旨在处理数据并从中提取有用信息。
那编程是什么呢?如今的数据科学家们为了进行研究都会做一些额外的编程工作。他们不仅仅是程序员,通常情况下还都有应用统计学或科研学习背景。有些科学家,特别那些需要把数据科学或机器学习应用到公司产品的专家们还会负责软件工程。最关键的是,数据科学家不一定必须要擅长编程,但一定要会使用Matlab、SPSS、SAS等统计学软件。
机器学习工程师又是什么样的角色?
机器学习工程师更偏技术化。换句话说,相比数据科学家,机器学习工程师跟传统软件工程师在工作中的相同之处更多。
机器学习工程师的工作内容和数据科学家大体相似。机器学习工程师也需要处理数据,实践各种机器学习算法,借助这些算法解决问题,创建原型和现成的解决方案。
关于对他们的能力要求,需要着重强调:
· 使用一种或多种计算机语言(通常为Python语言)编程的扎实能力。
· 相比数据分析,更加看重处理机器学习算法的能力。
· 在现成程序库使用如NumPy/SciPy等Python包以组成不同模式堆栈的能力。
· 使用Hadoop等创建分布式程序的能力。
现在重新回到编程这一话题并仔细研究一下: 程序员都有哪些工作任务?
程序员实际上就像是数据分析师或者是业务系统开发人员。他们不必亲自构建系统,只需针对现有系统编写结构松散的代码。因此,可以把数据科学称为新的编程浪潮,但是写代码只是其中的一小部分。别理解错了哦!
继续深究就会发现,还有一些其他术语,如软件工程师和软件开发人员,二者的概念也不一样。例如:软件工程师必须要完成整项工程,工作内容涉及产品应用程序,分布式系统,并发、构建系统、微服务等各个方面。而软件开发人员为准确起见则需要对软件开发的各个周期都十分清楚,而不仅限于了解软件的应用(有时候这些工作不涉及任何编码或代码知识)。
所以,是编程还是机器学习,现在你体会到二者差异了吗?希望本文有助于理解这两个容易混淆的概念。毫无疑问,编程和机器学习有共同之处,即都属于技术,但相比之下二者的区别大于共同点。因此,机器学习工程师、软件工程师和软件开发人员完全不能相互替代。