机器学习和传统编程之间是否存在界限?请看:
什么是机器学习?
机器学习只是一个描述数学+算法的新词吗?有时这样的简化看起来很有趣,但显然机器学习更复杂。
让我们来看看一个更合理的解释。
简单地说,人工智能是一把涵盖图像处理、认知科学、神经网络等其他领域的保护伞。机器学习也是这个保护伞下的一部分。它的核心思想是,计算机不仅使用预先编写的算法,而且学习如何解决问题本身。Arthur Samuel(他实际上创造了ML这个词)给出了一个很好的定义:
Machine Learning is a field of study that gives computers the ability to learn without being explicitly programmed.
所以,机器学习教一台机器解决各种复杂的任务,这些任务很难用算法去解决。这些任务是什么?例如,它可以是你手机上的人脸识别或语音识别系统,自动驾驶汽车,书籍(亚马逊),电影(Netflix),音乐(Spotify) ......
任何可用的机器学习都可以有条件地归为三个层次。第一个层次是适用于像谷歌或IBM这样的主要技术巨头时。第二个层次是具有一定知识的学生可以使用它。第三个层次是甚至一个奶奶能够应对它。
我们目前所处的发展阶段是机器学习处于第二层和第三层的交汇处。
机器学习和编程的不同
In traditional programming you hard code the behavior of the program. In machine learning, you leave a lot of that to the machine to learn from data.
因此,这些术语无法互换:数据工程师不能替代传统编程工作,反之亦然。尽管每个数据工程师都必须使用至少一种编码语言,但传统编程只是其工作的一小部分。另一方面,我们不能说软件开发人员正在使用机器学习算法来启动一个网站。
机器学习就像人工智能一样,不是替代品,而是对传统编程方法的补充。例如,机器学习可用于为在线交易平台构建预测算法,而该平台的UI、数据可视化和其他元素将使用主流编程语言(如Ruby或Java)执行。
因此,主要的问题是:机器学习用于弥补传统编程的不足,但不足以完全实现某项任务。
这在实践中意味着什么?这里有一个很好的解释,汇率预测基于2种经典机器方法:
传统编程方法
对于任何解决方案,第一个任务都是创建最合适的算法并编写代码。然后,必须设置输入参数,实际上,如果实现的算法是正确的,它将产生预期的结果。
软件开发人员如何创建解决方案
然而,当我们需要预测某件事时,我们需要使用具有各种输入参数的算法。对于汇率的预测,必须添加昨天的汇率等详细信,发行货币的国家内部和外部的经济变化等等。
因此,我们手工设计了一个能够接受一组参数并基于输入数据预测新汇率的解决方案。
但是,非常重要的是要再添加一件事,或者更清楚地说明这种方法的一个问题。那是什么呢?
很简单,我们需要添加成百上千个参数,而它们有限的集允许构建一个非常基本且不可扩展的模型。对于任何人来说,处理如此庞大的数据数组都是很麻烦的。
然后我们有一个稍微不同的机器学习方法来完成这个任务,那么它是什么呢?
为了使用机器学习方法解决同样的问题,数据工程师使用了完全不同的过程。他们不需要自己开发算法,而是需要收集一系列历史数据,用于半自动模型构建。
在管理一组令人满意的数据之后,数据工程师将其加载到已经定制的机器学习算法中。结果是一个可以预测新结果的模型,接收新数据作为输入。
数据工程师如何使用机器学习开发解决方案
机器学习的一个显著特征是不需要构建模型。这个复杂而有意义的任务是由机器学习算法执行的。而机器学习专家只会对此添加一个小的编辑。
机器学习和编程之间的另一个显著差异是:由模型能够处理输入参数的数量决定。要想做出准确的预测,你必须添加成千上万的参数,并且精度很高,因为每一个参数都会影响最终的结果。一个人先天无法建立一个算法来合理地利用所有这些细节。
然而,对于机器学习,没有这样的限制。只要有足够的处理器能力和内存,就可以使用任意多的输入参数。毫无疑问,这一事实使机器学习在今天变得如此强大和广泛。
机器学习专家、数据科学家
程序员、软件工程师的区别
数据科学是一个多学科领域,使用科学方法、过程、算法和系统从结构化和非结构化数据中提取相关内容。
2012年,《哈佛商业评论》称其为21世纪最性感的工作。
因此,数据科学是另一个广泛的领域,就像计算机科学一样,只是数据科学旨在处理数据并从中提取有用的信息。
编程怎么样?如今的数据科学家为了研究也是多渠道的学习。他们不仅是程序员,而且通常还具有应用统计学或研究背景。有些人还从事软件工程,特别在其产品中提供数据科学/机器学习服务的公司。最有趣的是,数据科学家不一定要编程很6,但可以局限于Matlab、SPSS、SAS等工具。
那么机器学习工程师的职位是什么呢?
机器学习工程师的职位更“技术型”。
机器学习工程师的标准任务通常类似于数据科学家。你还需要能够处理数据,尝试不同的机器学习算法来解决问题,创建原型和现成的解决方案。
我们要强调的主要差异有:
1、精通一种或多种语言(通常是Python)的编程技能;
2、较少强调在数据分析环境中工作的能力,而更多地强调机器学习算法;
3、能够在应用程序中使用现成的库来处理很多问题,例如使用Python的NumPy/SciPy;
4、能够使用Hadoop等创建分布式应用程序。
现在让我们回到编程,仔细看看分配给程序员的任务是什么。
程序员实际上是像数据分析师或业务系统开发人员那样的人。他们不必自己构建系统,只需针对现有系统编写代码即可。所以,我们可以把数据科学称为编程的新浪潮,但编程只是其中的一小部分。
但如果深入挖掘,我们会发现还有其他的术语,如软件工程师和软件开发人员,它们也不相似。例如,软件工程师必须设计工程。它们涉及生产应用程序、分布式系统、并发性、构建系统和微服务。另外,软件开发人员需要了解软件开发的所有周期,而不仅仅是实现(有时甚至不需要任何编程)。
那么,编程和机器学习,你现在感觉不同了吗?希望这篇文章能帮助你避免混淆这些术语。毫无疑问,他们都有一个共同点,那就是技术,但他们之间的差异要大得多。