从零开始初识机器学习

从零开始,初识,机器,学习 · 浏览次数 : 401

小编点评

**机器学习与“普通”算法的异同** 机器学习算法与“普通”算法的不同主要在于其学习过程中的目标函数和约束条件。 **“普通”算法** * 目标函数:求解最优的模型参数,如线性回归中的系数。 * 约束条件:模型参数的范围,如线性回归中的系数的范围。 **机器学习算法** * 目标函数:求解模型预测的准确性或预测的误差。 * 约束条件:模型预测的误差,如线性回归中的预测误差的范围。 **机器学习算法的学习过程** 1. 目标函数的设定:根据机器学习的算法,定义一个目标函数,即希望机器学习算法的最终目标。 2. 约束条件的设定:根据机器学习的算法,设定一个约束条件,即模型的预测目标。 3. 学习算法的训练:根据目标函数和约束条件,训练机器学习算法,通过学习算法的算法,最终找到最优的模型参数。 4. 模型评估:使用训练集的误差或预测误差评估模型的性能,即模型预测的准确性或预测的误差。 **机器学习算法的异同** * 目标函数和约束条件的设定不同。 * 学习算法的训练过程不同。 * 模型评估的精度不同。 **总结** 机器学习算法与“普通”算法的不同主要在于其学习过程中的目标函数和约束条件。机器学习算法通过学习算法的算法,最终找到最优的模型参数,而“普通”算法通过设定目标函数和约束条件的方式,进行模型训练。

正文

本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章 初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。后续将推出机器学习的进阶内容,包括经典基础篇(线性模型、决策树、集成学习、聚类等),实战进阶篇(特征工程、模型训练与验证、融合与部署等)。本篇为第一章 初识机器学习(上),我们从这里开始,开启一个全新的学习旅程。

1 机器学习描述

1.1 机器学习是什么?

机器学习(Machine Learning,ML)是使用统计(或数学)技术从观察到的数据中构建模型(或系统)的一个计算机科学领域。机器学习用计算机程序模拟人的学习能力,从样本数据中学习得到知识和规律,然后用于实际的推断和决策。

从广义上来说,机器学习能够赋予“机器”学习的能力,使其实现直接编程无法完成的工作。但从实践意义上来说,机器学习是利用数据训练出模型,并使用模型进行预测的一种方法。“训练”与“预测”是机器学习的两个过程,“模型”则是过程中间的输出结果,“训练”产生“模型”,“模型”指导 “预测”。接下来我们把机器学习的过程与人类对历史经验归纳演绎的过程做个比对。

机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“演绎”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。

人类对历史经验归纳过程

人类在成长、生活过程中积累了很多的历史与经验。人类定期地对这些经验进行“归纳”,获得了生活的“规律”。当人类遇到未知的问题或者需要对未来进行“推测”的时候,人类将使用这些“规律”,对未知问题与未来进行“演绎”,从而指导自己的生活和工作。

1.2 机器学习的应用范围

机器学习应用广泛,在各方面都有其施展的空间,包括:数据分析与挖掘、模式识别、虚拟助手和交通预测等。从行业来看,在金融领域(检测信用卡欺诈、证券市场分析等)、互联网领域(自然语言处理、语音识别、搜索引擎等)、医学领域、自动化及机器人领域(无人驾驶、信号处理等)、游戏领域、刑侦领域等也都有所涉及。

1.2.1 数据分析与挖掘

“数据挖掘”和”数据分析”通常被相提并论,但无论是数据分析还是数据挖掘,都是在帮助人们收集与分析数据,使之成为信息并做出推测与判断。因此可以将这两项合称为数据分析与挖掘。数据分析与挖掘是机器学习技术和大数据存储技术结合的产物,利用机器学习手段分析海量数据,同时利用数据存储机制实现数据的高效读写。机器学习在数据分析与挖掘领域中拥有无可取代的地位,2012年Hadoop进军机器学习领域就是一个很好的例子。

1.2.2 模式识别

模式识别的应用领域广泛,包括计算机视觉、医学图像分析、光学文字识别、自然语言处理、语音识别、手写识别、生物特征识别、文件分类、搜索引擎等,而这些领域也正是机器学习大展身手的舞台,因此模式识别与机器学习的关系越来越密切。

1.2.3 虚拟助手

Siri,Alexa,Google Now都是虚拟助手。在交互过程中,虚拟助手会协助查找信息,搜索相关历史行为,或向其他资源(如电话应用程序)发送命令收集更多信息,以满足人们提出的需求。

1.2.4 交通预测

生活中我们经常使用GPS导航服务,机器学习能够帮助我们预测交通堵塞。当前高德地图,腾讯地图等都应用了机器学习技术,识别拥挤路段,规划最优路线。

2 机器学习发展史

2.1 浅层学习阶段

  1. 1957年,Rosenblatt发明了感知机(Perceptron),是神经网络的雏形,同时也是支持向量机的基础,在当时引起了不小的轰动。
  2. 1959年,IBM的写出了可以学习的西洋棋程序,并在 IBM Journal of Research and Development期刊上发表了一篇名为《Some Studies in Machine Learning Using the Game of Checkers》的论文中,定义并解释了一个新词——机器学习(Machine Learning,ML)。将机器学习非正式定义为“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域”。
  3. 1960年,Widrow发明了Delta学习规则,即如今的最小二乘问题,立刻被应用到感知机中,并且得到了一个极好的线性分类器。
  4. 1970年,Seppo Linnainmaa首次完整地叙述了自动链式求导方法(Automatic Differentiation,AD),是著名的反向传播算法(Back Propagation,BP)的雏形,但在当时并没有引起重视。
  5. 1974年,Werbos首次提出把BP算法的思想应用到神经网络,也就是多层感知机(Multilayer Perception,MLP),并在1982年实现,就是现在通用的BP算法,促成了第二次神经网络大发展。
  6. 1985-1986年,Rumelhart,Hinton等许多神经网络学者成功实现了实用的BP算法来训练神经网络,并在很长一段时间内BP都作为神经网络训练的专用算法。
  7. 1986年,J.R.Quinlan提出了另一个同样著名的ML算法—决策树算法(Iterative Dichotomiser 3,ID3),决策树作为一个预测模型,代表的是对象属性与对象值之间的一种映射关系,而且紧随其后涌现出了很多类似或者改进算法,如ID4,回归树,CART等。
  8. 1995年,Yan LeCun提出了卷积神经网络(Convolution Neural Network,CNN),受生物视觉模型的启发,通常有至少两个非线性可训练的卷积层,两个非线性的固定卷积层,模拟视觉皮层中的V1,V2,Simple cell和Complex cell,在手写字识别等小规模问题上,取得了当时世界最好结果,但是在大规模问题上表现不佳。
  9. 1995年,Vapnik和Cortes提出了强大的支持向量机(Support Vector Machine,SVM),主要思想是用一个分类超平面将样本分开从而达到分类效果,具有很强的理论论证和实验结果。至此,ML分为NN和SVM两派。
  10. 1997年,Freund和Schapire提出了另一个坚实的ML模型AdaBoost,该算法最大的特点在于组合弱分类器形成强分类器,可以形象地表述为:“三个臭皮匠赛过诸葛亮”,分类效果比其它强分类器更好。
  11. 2001年,随着核方法的提出,SVM大占上风,它的主要思想就是通过将低维数据映射到高维,从而实现线性可分。至此,SVM在很多领域超过了NN模型。除此之外,SVM还发展了一系列针对NN模型的基础理论,包括凸优化、范化间隔理论和核方法。
  12. 2001年,Breiman提出了一个可以将多个决策树组合起来的模型随机森林(Random Forest,RF),它可以处理大量的输入变量,有很高的准确度,学习过程很快,不会产生过拟合问题,具有很好的鲁棒性。
  13. 2001年,Hochreiter发现使用BP算法时,在NN单元饱和之后会发生梯度损失(梯度扩散)。简单来说就是训练NN模型时,超过一定的迭代次数后,容易过拟合。NN的发展一度陷入停滞状态。

2.2 深度学习阶段

二十一世纪初,学界掀起了以“深度学习”为名的热潮。所谓深度学习?狭义地说就是“很多层”的神经网络。在若干测试和竞赛上,尤其是涉及语音、图像等复杂对象的应用中,深度学习技术取得了优越性能。以往机器学习技术在应用中要取得好性能,对使用者的要求较高;而深度学习技术涉及的模型复杂度非常高,以至于只要下工夫“调参”,只要把参数调节好,性能往往就好。因此,深度学习虽缺乏严格的理论基础,但它显著降低了机器学习应用者的门槛,为机器学习技术走向工程实践带来了便利。那么它为什么此时才热起来呢?有两个原因,一是数据量增大了,二是计算能力强了。深度学习模型拥有大量参数,若数据样本少,则很容易“过拟合”。如此复杂的模型、如此大的数据样本,若缺乏强力计算设备,根本无法求解。恰恰人类进入了大数据时代,数据储量与计算设备都有了大发展,才使得深度学习技术又焕发一春。

  1. 2006年,Hinton和他的学生在《Nature》上发表了一篇深度置信网络(Deep Belief Network,DBN)的文章,从此开启了深度学习(Deep Learning,DL)阶段,掀起了深度神经网络即深度学习的浪潮。
  2. 2009年,微软研究院和Hinton合作研究基于深度神经网络的语音识别,历时两年取得成果,彻底改变了传统的语音识别技术框架,使得相对误识别率降低25%。
  3. 2012年,Hinton又带领学生在目前最大的图像数据库ImageNet上,基于深度神经网络对图分类问题取得了惊人的结果,将Top5错误率由26%大幅降低至15%。(ImageNet 是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。能够从图片识别物体。)
  4. 2012年,由人工智能和机器学习顶级学者Andrew Ng和分布式系统顶级专家Jeff Dean领衔的梦幻阵容,开始打造Google Brain项目,用包含16000个CPU核的并行计算平台训练超过10亿个神经元的深度神经网络,在语音识别和图像识别等领域取得了突破性的进展。该系统通过分析YouTube上选取的视频,采用无监督的方式训练深度神经网络,可将图像自动聚类。在系统中输入“cat”后,结果在没有外界干涉的条件下,识别出了猫脸。
  5. 2012年,微软首席研究官Rick Rashid在21世纪的计算大会上演示了一套自动同声传译系统,将他的英文演讲实时转换成与他音色相近、字正腔圆的中文演讲。同声传译需要经历语音识别、机器翻译、语音合成三个步骤。该系统一气呵成,流畅的效果赢得了一致认可,深度学习则是这一系统中的关键技术。
  6. 2013年,Google收购了一家叫DNN Research的神经网络初创公司,这家公司只有三个人,Geoffrey Hinton和他的两个学生。这次收购并不涉及任何产品和服务,只是希望Hinton可以将深度学习打造为支持Google未来的核心技术。同年,纽约大学教授,深度学习专家Yann LeCun加盟Facebook,出任人工智能实验室主任,负责深度学习的研发工作,利用深度学习探寻用户图片等信息中蕴含的海量信息,希望在未来能给用户提供更智能化的产品使用体验。
  7. 2013年,百度成立了百度研究院及下属的深度学习研究所(Institute of Deep Learning,IDL),将深度学习应用于语音识别和图像识别、检索,以及广告CTR预估(Click-Through-Rate Prediction,CTR),其中图片检索达到了国际领先水平。
  8. 2014年,谷歌宣布其首款成型的无人驾驶原型车制造完毕,将会在2015年正式进行路测。
  9. 2016年,谷歌旗下DeepMind公司开发的人工智能程序AlphaGo击败围棋职业九段选手李世石。
  10. 2017年,DeepMind团队公布了最强版AlphaGo,代号AlphaGo Zero,它能在无任何人类输入的条件下,从空白状态学起,自我训练的时间仅为3天,自我对弈的棋局数量为490万盘,能以100:0的战绩击败前辈。

3 易混淆领域梳理

3.1 机器学习与人工智能

人工智能(Artificial Intelligence,AI)是计算机科学的一个分支,它企图了解智能的本质,生产出一种能比肩人类,并做出智能反应的机器。我们都知道机器学习是人工智能最重要的一种实现方法,但机器学习并不是人工智能一开始就采用的方法。人工智能的发展主要经历了逻辑推理,专家系统,机器学习三个阶段。

  1. 第一阶段的重点是逻辑推理,例如数学定理的证明,这类方法采用符号逻辑来模拟人类智能。
  2. 第二阶段的重点是专家系统,这类方法为各个领域的问题建立专家知识库,利用这些知识来完成推理和决策。比如将医生的诊断经验转化成一个知识库,然后用这些知识对病人进行诊断。
  3. 第三阶段的重点即为机器学习,如今的人工智能主要依赖的不再是逻辑推理和专家系统,而是建立在机器学习的基础上解决复杂问题。无论是基于数学的机器学习模型,还是基于神经网络的深度学习模型,都活跃在如今大多数人工智能应用程序之中。

3.2 机器学习与深度学习

深度学习(Deep Learning,DL)是机器学习的一个重要分支,深度学习和机器学习的关系属于继承和发展的关系。在很多人工智能问题上,深度学习的方法加上大数据的出现以及计算机运行速度的提高,更突出了人工智能的前景。比如,自动驾驶汽车,足以彻底改变我们的出行方式,它的实现就需要深度学习的图像识别技术,需要用到卷积神经网络(Convolutional Neural Networks, CNN)来识别马路上的行人、红绿灯等。
为了更清晰的认识深度学习,我们首先介绍神经网络(Neural Networks, NN),顾名思义,它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。神经网络有输入层、隐藏层(中间层)以及输出层,其中输入层负责神经网络的输入,输出层负责产生输入的映射。机器学习中的逻辑回归,可以看作是一层的神经网络,即除了输入层、输出层之外只有一个隐藏层。

而深度学习,就是指神经网络使用了很多隐藏层。

那么深度学习的每一层都在学什么??

当你输入一张脸部的照片时,神经网络的第一中间层,可以看成是一个特征探测器或者边缘探测器,它会去找这张照片的各个边缘(第一张图片);第二中间层又把照片里组成边缘的像素们放在一起看,然后它可以把被探测到的边缘组合成面部的不同部分(第二张图片),有眼睛、鼻子等;最后再把这些部分放在一起,比如鼻子眼睛嘴巴,就可以识别或者探测不同的人脸(第三张图片)。

3.3 机器学习与数据挖掘

数据挖掘(Data Mining,DM)是指从大量的数据中搜索隐藏于其中信息的过程。机器学习是数据挖掘的重要工具之一,但数据挖掘不仅仅要研究、拓展、应用一些机器学习方法,还要通过许多非机器学习技术解决大规模数据与数据噪音等实际问题。大体上看,数据挖掘可以视为机器学习和大数据的交叉,它主要利用机器学习提供的技术来分析海量数据,利用大数据技术来管理海量数据。

3.4 机器学习与统计学

1.统计学简述

统计学(Statistics)是基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学依托背后的数学理论,在远早于机器学习大爆发的几十年,率先从解释因果的角度,努力寻找最优函数(或模型)。统计学里最重要的两个部分是回归分析和假设检验。其他的方法或者技术在统计学这个大框架下,最终也是为了这两者服务的。回归分析提供了解释因果的武器,假设检验则给这项武器装上了弹药。单纯的线性回归用最小二乘法求解逼近事实的真相,再使用显著性检验,检测变量的显著性、模型的显著性、模型的拟合精度。当然是否属于线性,也可以使用假设检验的方法检测。非线性回归的问题,使用极大似然估计或者偏最小二乘回归求解模型,后续的显著性检验仍然是一样的思路。

2.机器学习与统计学对比

统计学是个与机器学习高度重叠的学科,统计学近似等于机器学习。但是在某种程度上两者是有分别的,这个分别在于:统计学是理论驱动,对数据分布进行假设,以强大的数学理论解释因果,注重参数推断,侧重统计模型的发展与优化;机器学习是数据驱动,依赖于大数据规模预测未来,弱化了收敛性问题,注重模型预测,侧重解决问题。

3.5 机器学习算法与“普通”算法的异同

这里我们以《算法导论》中所诠释的算法作为机器学习算法的比较对象。其相同点,两者的目的都是通过制定目标,增加约束,求得最优的模型。不同点是《算法导论》里的“算法”,本质上是如何更有效率地求解具有精确解的问题。效率,可以是计算时间更短,也可以是计算过程所需要的空间更少。而机器学习算法要解决的问题一般没有精确解,也不能用穷举或遍历这种步骤明确的方法求解。这里需要强调的是“学习”这个属性,即希望算法本身能够根据给定的数据或变化的计算环境而动态地发现新的规律,甚至改变机器学习算法的逻辑和行为。

作者:京东物流 星火团队

来源:京东云开发者社区

与从零开始初识机器学习相似的内容:

从零开始初识机器学习

本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章 初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。

从零开始带你上手体验Sermant自定义插件开发

本文对Sermant的自定义插件开发的流程进行了体验和探索,包括项目编译、运行、动态配置验证、插件拦截原理等内容,希望对初次体验Sermant高效开发插件的开发者有所帮助。

从零开始学Spring Boot系列-集成Spring Security实现用户认证与授权

在Web应用程序中,安全性是一个至关重要的方面。Spring Security是Spring框架的一个子项目,用于提供安全访问控制的功能。通过集成Spring Security,我们可以轻松实现用户认证、授权、加密、会话管理等安全功能。本篇文章将指导大家从零开始,在Spring Boot项目中集成S

从零开始写 Docker(十八)---容器网络实现(下):为容器插上”网线“

本文为从零开始写 Docker 系列第十八篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实

从零开始写 Docker(十七)---容器网络实现(中):为容器插上”网线“

本文为从零开始写 Docker 系列第十七篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实

从零开始写 Docker(十六)---容器网络实现(上):为容器插上”网线”

本文为从零开始写 Docker 系列第十六篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。

从零开始写 Docker(十五)---实现 mydocker run -e 支持环境变量传递

本文为从零开始写 Docker 系列第十五篇,实现 mydocker run -e, 支持在启动容器时指定环境变量,让容器内运行的程序可以使用外部传递的环境变量。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现

从零开始写 Docker(十四)---重构:实现容器间 rootfs 隔离

本文为从零开始写 Docker 系列第十四篇,实现容器间的 rootfs 隔离,使得多个容器间互不影响。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理:深入理解 Docker 核心原

从零开始写 Docker(十三)---实现 mydocker rm 删除容器

本文为从零开始写 Docker 系列第十三篇,实现类似 docker rm 的功能,使得我们能够删除容器。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理:深入理解 Docker 核心

从零开始写 Docker(十二)---实现 mydocker stop 停止容器

本文为从零开始写 Docker 系列第十二篇,实现类似 docker stop 的功能,使得我们能够停止指定容器。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理:深入理解 Docke