机器学习和传统编程之间有什么联系?
有些人认为人工智能(AI)和机器学习(ML)有些言过其实,它们只不过是if语句或者仅仅是编程之类的东西。但是事实真的是这样吗?本文向您提供了丰富的信息,在这篇文章中,我们将对比这些术语,并展示涉及这两个领域的专家(如软件工程师、机器学习专家、数据科学家和程序员等)之间的差异,它们真的是一样的吗?如果是的话,机器学习和传统编程。
什么是机器学习?
有些人说人工智能和机器学习只不过是if语句,更有甚至说它们只是简单的统计数据。或者说机器学习只是一个描述数学+算法的新词, 这种简化看起来很有道理,但很明显,机器学习更加复杂一些。
简单地说,人工智能是一把伞,它涵盖了图像处理、认知科学、神经网络等其他领域的知识,机器学习也属于这一范畴。机器学习的核心思想是,计算机不仅使用预先编写的算法,而且学习如何解决问题本身。Arthur Samuel(他创造了ML这个词)给出了一个很好的定义:
机器学习是一个使计算机无需明确编程即可学习的研究领域。
机器学习能解决各种复杂的、很难用算法解决的任务。例如,它可以是手机上的人脸识别或语音识别、自动驾驶汽车(如谷歌自动驾驶汽车)、根据症状诊断疾病(Watson)、书籍(亚马逊),电影(Netflix)、音乐(Spotify)、个人助理(Siri)等等。
关于机器学习的另一件重要的事:任何可用的机器学习技术都可以归因于三个可访问性层次。第一个层次是它特别适用于像谷歌或IBM这样的主要技术巨头,第二个层次是有一定知识存储的人(例如学生)可以使用它。机器学习可访问性的第三个层次是,即使是老奶奶也能处理它。
我们目前所处的发展阶段是机器学习处于第二层和第三层之间。在这项技术的帮助下,世界正在极速变化。
最后一件关于机器学习的事情是,大多数机器学习任务可以分为有老师的学习(监督学习)和没有老师的学习(非监督学习)。
“老师”的意思是人类干预数据处理。当训练时有老师干预,也就是监督学习,我们可以根据数据预测一些事情。反之就是无监督学习,通过这些数据,我们可以了解机器学习的性质。
机器学习和传统编程有什么不同?
在传统编程中,开发人员要对程序进行硬编码;在机器学习中,是机器从数据中学习。因此,这些术语是无法互换的,数据工程师不能替代传统编程工作,反之亦然。尽管每个数据工程师都必须使用至少一种编码语言,但传统编程只是他们工作的一小部分。反过来,我们也不能说软件开发人员正在使用机器学习算法来创建一个网站。
与人工智能一样,机器学习不是一种替代,而是对传统编程方法的补充。例如,机器学习可用于为在线交易平台构建预测算法,而该平台的UI、数据可视化和其他元素将使用主流编程语言(如Ruby或Java)执行。
因此,最重要的是,当机器学习用于传统编程策略不足以完全实现某个任务的情况下,这在实践中意味着什么?
下面用两种不同的方法解决经典的汇率预测问题。
不管哪种解决方案,第一个任务都是创建最合适的算法并编写代码。然后,必须设置输入参数,如果算法是正确的,它将产生预期的结果。
软件开发人员如何创建解决方案
当预测某件事时,需要使用具有各种输入参数的算法。对于汇率的预测,必须有以往的汇率、发行货币的国家内部和外部的经济变化等等作为参考。因此,我们设计了一个能够接受一组参数并基于输入数据预测新汇率的解决方案。
这很简单,我们需要添加上千个参数,使它用有限的集合构建一个非常基本且不可扩展的模型。但是,人工处理如此庞大的数据是很麻烦的。
所以我们需要一个机器学习方法来完成这个任务。
为了使用机器学习方法解决这个问题,数据工程师使用了与传统编程完全不同的过程。他们不需要自己开发算法,而是需要收集一系列历史数据用于半自动模型构建。在收集到一组令人满意的数据之后,数据工程师将其加载到已经定制的机器学习算法中。这样得出的结果是一个可以预测新结果的模型,可以接收新数据作为输入。
数据工程师如何使用机器学习开发解决方案
机器学习的一个显著特征是不需要构建模型,任务是由机器学习算法执行的。而机器学习专家只需对此添加一个小的编辑。机器学习和编程之间的另一个显著差异是由模型能够处理的输入参数量决定的。要想做出准确的预测,必须输入大量参数,并且准确度要高,因为每一个参数都会影响最终的结果,人工计算目前达不到这样的要求。
然而,机器学习是没有这样的限制的。只要有足够的处理器能力和内存,机器学习就可以使用任意多的输入参数。毫无疑问,这一事实使机器学习变得非常强大。
Wiki认为,数据科学是一个多学科领域,它一般使用科学方法、过程、算法和系统从结构化和非结构化数据中提取知识和见解。
它使用最强大的硬件、最强大的编程系统和最高效的算法来解决问题。2012年,《哈佛商业评论》称其为“21世纪最性感的工作”。
因此,数据科学就像计算机科学一样,只是数据科学的目的是处理数据并从中提取有用的信息。
那么编程呢?如今的数据科学家不仅是程序员,而且通常还应该具有应用统计学或研究背景。有些公司还从事软件工程,特别是在其产品中提供数据科学或机器学习服务的公司。
机器学习工程师的职位特点
机器学习工程师的职位更偏向“技术型”。换句话说,与数据科学家相比,机器学习工程师与经典软件工程师有更多的共同点。机器学习工程师的标准通常类似于数据科学家,另外你还需要能够处理数据,尝试用不同的机器学习算法来解决问题,包括创建原型和现成的解决方案。
这里要强调的关键区别有:
精通一种或多种语言(通常是Python)编程技能;较少强调在数据分析环境中工作的能力,而更多地强调机器学习算法;能够在应用程序中为不同堆栈使用现成的库,例如,用于Python的NumPy / SciPy;能够使用Hadoop等创建分布式应用程序。程序员的职业特点
程序员实际上是像数据分析师或业务系统开发人员那样的人。他们不必自己构建系统,只需针对现有系统编写松散结构的代码。数据科学可以说是编程的新浪潮,但编码只是其中的一小部分,注意不要混淆。
但是如果深入挖掘,我们会发现其他如软件工程师和软件开发人员也不相似。例如,软件工程师必须设计产品,他们处理生产应用程序、分布式系统、并发性、构建系统和微服务。另外,软件开发人员需要了解软件开发的所有周期,而不仅仅是实现步骤(有时甚至不需要任何编程或编码)。
你现在能感觉到编程和机器学习的不同了吗?希望这篇文章能帮助您避免混淆这些术语。毫无疑问,他们有技术共同点 ,但他们之间的差异要大得多。因此,机器学习工程师、软件工程师和软件开发人员是完全不可互换的。