- 机器学习实战(视频教学版)
- 迟殿委 王培进 王兴平
- 6570字
- 2024-12-30 15:19:11
1.2 机器学习的发展史和分类
本节简单介绍一下机器学习的发展史及其分类。
1.2.1 机器学习的发展史
虽然人工智能并不是最近几年才兴起的,但是它一直作为科幻元素出现在大众视野中。自2016年AlphaGo战胜李世石之后,人工智能突然间成了公众热议的话题,仿佛人类已经创造出了超越人类智慧的机器。人工智能的核心技术——机器学习及其子领域深度学习迅速成为瞩目的焦点。面对这个似乎从天而降的新现象,乐观者有之,悲观者亦有之。
追溯历史,我们会发现机器学习的技术爆发有其历史必然性,属于技术发展的必然产物。而理清机器学习的发展脉络,有助于我们整体把握机器学习或者人工智能的技术框架,有助于从“道”的层面来理解这一技术领域。本节就先从三大究极哲学问题中的后两个——“从哪来”“到哪去”入手,整体把握机器学习,而后从“术”的角度深入学习,解决“是谁”的问题。
机器学习的发展并不是一帆风顺的,它的起源可以追溯到赫布理论的诞生。赫布于1949年基于神经心理提出了一种学习方法,该方法被称为赫布学习理论。大致可描述为:假设反射活动的持续性或反复性会导致细胞的持续性变化并增加其稳定性,当一个神经元A能持续或反复激发神经元B时,其中一个或两个神经元的生长或代谢过程都会变化。
从人工神经元或人工神经网络角度来看,赫布学习理论简单地解释了循环神经网络(Recurrent Neural Network,RNN)中节点之间的相关性关系(权重),即如果两个节点同时发生变化(无论是Positive还是Negative),那么节点之间有很强的正相关性(Positive Weight);如果两者变化相反,那么说明有负相关性(Negative Weight)。
赫布学习理论在20世纪70年代曾陷入了瓶颈期,而后大数据时代开始,机器学习也在大数据的支持下复兴,因此我们可以大致将它的理念和运作模式按大数据时代前后分为浅层学习和深度学习。浅层学习起源20世纪70年代人工神经网络的反向传播(Back Propagation,BP)算法的发明,使得基于统计的机器学习算法大行其道,虽然这时候的人工神经网络算法也被称为多层感知机,但由于多层网络训练困难,因此通常都是只有一层隐含层的浅层模型。而深度学习则是多层神经网络的感知机,它的实质便是通过海量的数据进行更有效的训练,从而获得更精确的分类或预测。
1.小数据时代(浅层学习)
1949年,Donald Hebb提出的赫布理论解释了人类学习过程中大脑神经元所发生的变化。赫布理论的诞生标志着机器学习领域迈出了第一步。1950年,阿兰·图灵创造了图灵测试(见图1-6)来判定计算机是否智能。图灵测试认为,如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么这台机器具有智能。这一简化使得图灵能够令人信服地说明“思考的机器”是可能的。
图1-6 图灵测试
2014年6月8日,一个叫作尤金·古斯特曼的聊天机器人成功地让人类相信它是一个13岁的男孩,成为有史以来首台通过图灵测试的计算机。这被认为是人工智能发展的一个里程碑事件。
1952年,IBM科学家亚瑟·塞缪尔(见图1-7)开发了一个跳棋程序。该程序能够观察当前位置,并学习一个隐含的模型,从而为后续动作提供更好的指导。塞缪尔发现,伴随着程序运行时间的增加,程序可以实现越来越好的后续指导。通过这个程序,塞缪尔驳倒了普罗维登斯提出的机器无法超越人类,无法像人类一样写代码和学习的理论。塞缪尔创造了“机器学习”这一术语,并将它定义为:可以提供计算机能力而无须显式编程的研究领域。同时,IBM首次定义并解释了“机器学习”,将它非正式定义为“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域”。
图1-7 塞缪尔工作照
1957年,罗森·布拉特基于神经感知科学背景提出了第二模型,非常类似于今天的机器学习模型。这在当时是一个非常令人兴奋的发现,它比赫布的想法更适用。基于这个模型,罗森·布拉特设计出了第一个计算机神经网络——感知机(Perceptron),它模拟了人脑的运作方式。
罗森·布拉特对感知机的定义如下:感知机旨在说明一般智能系统的一些基本属性,它不会被个别特例或通常不知道的东西束缚,也不会因为那些个别生物有机体的情况而陷入混乱。
1960年,威德罗提出了Delta学习规则,也就是差量学习规则,即如今的最小二乘问题。这种学习规则随即被应用到感知机模型中,创建出更精确的线性分类器。随后机器学习的发展出现了瓶颈。
1967年,K邻近算法(K-Nearest Neighbor Algorithm,KNN)出现,使计算机可以进行简单的模式识别。KNN算法的核心思想是,如果一个样本在特征空间中与其k个最相邻的样本中的大多数都属于某一个类别,则该样本也属于这个类别,并具有该类别样本的特性,如图1-8所示。这就是所谓的“少数服从多数”原则。
图1-8 KNN算法
1969年,明斯基提出了异域问题,指出了感知机的本质缺陷——面对线性不可分问题时无力,即当空间内的点无法被直线分类时,感知机便会束手无措。直到20世纪80年代末此算法才开始被接纳使用,并给机器学习带来了希望。人们发现,神经网络反向传播算法可以帮助机器从大量数据统计中整理规律,从而面对未知的事件做出推测。这时候的感知机只是一种含有一层隐藏层节点的浅层模型,这个时代的浅层学习也因此而得名。到了20世纪90年代,浅层学习进入黄金时代,各种各样的浅层学习模型被相继提出,这些模型大多数在实际运用中都取得了巨大的成功。
2.大数据时代(深度学习)
随着人类对数据信息的收集和应用逐渐娴熟,对数据的掌控力逐渐提升,伟博斯在1981年的神经网络反向传播算法中具体提出了多层感知机模型。虽然BP算法早在1970年就已经以“自动微分的反向模型(Reverse Mode of Automatic Differentiation)”为名提出来了,但直到此时才真正发挥效用,并且直到今天,BP算法仍然是神经网络架构的关键因素。有了这些新思想,神经网络的研究又加快了。多层感知机如图1-9所示。
1985-1986年,机器学习在海量数据的支持下攀上了新的高峰,神经网络研究人员鲁梅尔哈特、辛顿、威廉姆斯、尼尔森相继提出了使用BP算法训练的多参数线性规划(MLP)的理念,成为后来深度学习的基石。
图1-9 多层感知机
在另一个谱系中,昆兰于1986年提出了一种非常出名的机器学习算法,我们称之为决策树(见图1-10),更具体地说是ID3算法。这是另一个主流机器学习算法的突破点。此外,ID3算法也被发布成为一款软件,它能以简单的规划和明确的推论找到更多的现实案例,而这一特性正好和神经网络黑箱模型相反。
图1-10 决策树
决策树是一个预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表某个可能的属性值,每个叶节点则对应从根节点到该叶节点所经历的路径所表示的对象的值。
决策树仅有单一输出,若欲有复数输出,则可以建立独立的决策树以处理不同输出。在数据挖掘中,决策树是一种经常被使用的技术,可以用于分析数据,同样也可以用来进行预测。
在ID3算法提出来以后,研究社区已经探索了许多不同的选择或改进(如ID4、回归树、CART算法等),这些算法仍然活跃在机器学习领域中。
1990年,Schapire最先构造出一种多项式级的算法,这就是最初的Boosting算法。一年后,Freund提出一种效率更高的Boosting算法。但是,这两种算法存在共同的实践上的缺陷,那就是都要求事先知道弱学习算法学习正确的下限。
1995年,Freund和Schapire改进了Boosting算法,提出了AdaBoost(Adaptive Boosting)算法,该算法效率和Freund于1991年提出的Boosting算法几乎相同,但它不需要任何关于弱学习器的先验知识,因而更容易应用到实际问题当中。
Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法先构造一个预测函数系列,然后以一定的方式将它们组合成一个预测函数。它是一种框架算法,主要通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。
支持向量机(Support Vector Machine,SVM)的出现是机器学习领域的另一个重要突破,该算法具有非常强大的理论地位和实证结果。自SVM出现之后,机器学习研究也分为神经网络(Neural Network,NN)和支持向量机两派。
然而,自2000年左右提出了带核函数的支持向量机后,SVM在许多以前由NN为主的任务中获得了更好的效果。此外,相对于NN来说,SVM还能利用所有关于凸优化、泛化边际理论和核函数的深厚知识。因此,SVM可以从不同的学科中大力推动理论和实践的改进。
此时,神经网络又遭受到一个质疑。1991年Hochreiter等人和2001年Hochreiter等人的研究表明,在应用BP算法学习时,NN神经元饱和后会出现梯度损失(Gradient Loss)的情况。简单地说,在一定数量的epochs训练后,NN会产生过拟合现象。因此,这一时期与SVM相比,NN处于劣势地位。
决策树模型由布雷曼博士在2001年提出,它是一种通过集成学习的思想将多棵树集成的算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随机”,另一个是“森林”。“森林”很好理解,一棵叫作树,那么成百上千棵就可以叫作森林了,这样的比喻还是很贴切的,其实这也是随机森林的主要思想——集成思想的体现。
从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,并将投票次数最多的类别指定为最终的输出,这就是一种最简单的集成学习思想。
2006年,神经网络研究领域的领军者Hinton提出了神经网络Deep Learning算法,使神经网络的能力大大提高,并向支持向量机发出了挑战。同年,Hinton和他的学生Salakhutdinov在顶尖学术刊物Science上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。
这篇文章有两个主要的信息:①有很多隐藏层的人工神经网络具有优异的特征学习能力,学习到的特征对数据有更本质的刻画,从而有利于可视化或分类;②深度神经网络在训练上的难度可以通过“逐层初始化”(Layer-wise Pre-training)来有效克服。在这篇文章中,逐层初始化是通过无监督学习(Unsupervised Learning)来实现的。
2015年,为纪念人工智能概念提出60周年,LeCun、Bengio和Hinton推出了深度学习综述。
深度学习可以让那些拥有多个处理层的计算模型来学习具有多层次抽象的数据的表示。这些方法为人工智能的许多方面都带来了显著的改善,包括最先进的语音识别、视觉对象识别、对象检测和许多其他领域,例如药物发现等。深度学习能够发现大数据中的复杂结构。它利用BP算法来完成这个发现过程。BP算法能够指导机器如何从前一层获取误差,从而改变本层的内部参数,这些内部参数可以用于计算表示。深度卷积网络为图像、视频、语音和音频处理方面带来了突破,而递归网络在处理序列数据(例如文本和语音方面)时表现出闪亮的一面。
当前,统计学习领域热门的方法主要有Deep Learning和SVM,它们是统计学习的代表方法。可以认为神经网络与支持向量机都源自于感知机,但它们一直处于“竞争”关系。SVM应用核函数的展开定理,无须知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,因此与线性模型相比,不仅几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”。而早先的神经网络算法比较容易过训练,需要设置大量的经验参数;训练速度比较慢,在层次比较少(小于或等于3)的情况下效果并不比其他方法更优。
神经网络模型似乎能够实现更加艰难的任务,如目标识别、语音识别、自然语言处理等。但是,这绝对不意味着其他机器学习方法已终结。尽管深度学习的成功案例迅速增长,但是对这些模型的训练成本是相当高的,调整外部参数也很麻烦。同时,SVM的简单性促使其仍然是使用最为广泛的机器学习方式。
1.2.2 机器学习分类
根据算法类型,机器学习可以分为4类,即监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)、半监督学习(Semi-Supervised Learning)和强化学习(Reinforcement Learning)。机器学习分类示意图如图1-11所示,图中用灰色圆点代表没有标签的数据,其他颜色的圆点代表不同类别的有标签数据。
图1-11 机器学习分类
1.监督学习
监督学习使用标记过的数据进行训练。所谓标记过的数据,指的是包含已知输入和输出的原始数据。其中输入数据中的每个变量都称为一个特征(Feature)值,而输出数据则是针对这些输入数据的对应输出的期望值,也称标签值。在监督学习中,计算机使用输入数据计算输出值,然后对比标签值计算误差,最后通过迭代寻找最佳模型参数。监督学习通常用于基于历史数据的未来事件预测,主要解决两类问题,即回归(Regression)和分类(Classification)。例如在天气预报中使用历史数据预测未来几天的温度、湿度和降雨量等就是典型的回归问题,其输出的数据是连续的。而分类问题的输出是不连续的离散值,例如,使用历史数据判断航班是否晚点就是一种二元分类问题,其输出值只有“是”和“非”两种。在实际情况中,有些场景既可以看作回归问题,也可以看作分类问题,例如在天气预报中将利用回归计算得到的温度值转换为“炎热”和“凉爽”的分类问题。
简单来说,监督学习是指我们给算法一个数据集,并且给定正确答案,机器通过数据集来学习正确答案的计算方法。
举例来说,我们准备了一大堆猫和狗的照片,想让机器学会识别猫和狗。当使用监督学习的时候,我们需要给这些照片打上标签,如图1-12所示。
图1-12 给猫和狗的照片打标签
给照片打的标签就是“正确答案”,机器通过大量学习,就可以学会如何识别出猫和狗,如图1-13所示。
图1-13 识别猫和狗的机器学习过程
这种通过大量人工打标签来帮助机器学习的方式就是监督学习。这种学习方式效果非常好,但是成本也非常高。
常用的监督学习算法包括K邻近算法(K-Nearest Neighbors,KNN)、线性回归(Linear Regression)、逻辑回归(Logistic Regression)、支持向量机(Support Vector Machine,SVM)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、神经网络(Neural Network)和卷积神经网络(Convolutional Neural Networks,CNN)等。
2.半监督学习
半监督学习与监督学习的应用场景相同,主要面向分类和回归。但半监督学习使用的原始数据只有一部分有标签,因为无标签数据的获取成本更低。在实际场景中,用户会倾向于使用少量的标签数据与大量的无标签数据进行训练。例如,在图像识别领域,先在大量含有特定物体的原始图像中挑选部分图像进行手工标注,然后就可以使用半监督学习对数据集进行训练,从而得到能够从图像中准确识别物体的模型。
常用的半监督学习算法包括协同训练(Co-Training)和转导支持向量机(Transductive Support Vector Machine,TSVM)等。
3.无监督学习
与监督学习不同,无监督学习所使用的原始数据的输出部分没有标签,也就是说,在训练的时候并不知道期望的输出是什么。所以,无监督学习并不像监督学习那样预测输出结果,而是解决输入数据的聚类(Clustering)和特征关联(Correlation)问题,目标是通过训练来发现输入数据中存在的共性特征,或者发现特征值之间的关联关系。其中,聚类算法根据对象属性进行分组。
简单来说,无监督学习中,给定的数据集没有“正确答案”,所有的数据都是一样的,无监督学习的任务是从给定的数据集中挖掘出潜在的结构。
举个例子,我们把一堆猫和狗的照片给机器,不给这些照片打任何标签,但是我们希望机器能够将这些照片分类,如图1-14所示。
图1-14 数据输入机器
通过学习,机器会把这些照片分为两类,一类都是猫的照片,另一类都是狗的照片,如图1-15所示。虽然跟监督学习的结果看上去差不多,但二者有着本质的差别:无监督学习中,虽然照片分为了猫和狗,但是机器并不知道哪个是猫,哪个是狗。对于机器来说,相当于分成了A、B两类。
图1-15 机器分类
常用的无监督学习算法包括K均值聚类(K-Means Clustering)、主成分分析(Principal Component Analysis,PCA)算法、自组织映射(Self-Organizing Map,SOM)神经网络和受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)等。
4.强化学习
强化学习主要由智能体(Agent)、环境(Environment)、状态(State)、动作(Action)、奖励(Reward)组成。智能体执行了某个动作后,环境将会转换到一个新的状态,并对该新的状态给出奖励信号(正奖励或者负奖励),随后,智能体根据新的状态和环境反馈的奖励,按照一定的策略执行新的动作。上述过程为智能体和环境通过状态、动作、奖励进行交互的方式。
智能体通过强化学习,可以知道自己在什么状态下,应该采取什么样的动作,使得自身获得最大奖励。由于智能体与环境的交互方式与人类与环境的交互方式类似,因此可以认为强化学习是一套通用的学习框架,可以用来解决通用人工智能的问题。由此,强化学习也被称为通用人工智能的机器学习方法。
强化学习面向决策链问题,在不断变化的状态下,强化学习的目的是确定当前状态下的最佳决策。因为当前的决策往往无法立刻被验证和评估,所以强化学习往往没有大量的原始数据,计算机需要进行大量的试错学习,基于错误发现哪些行动能产生最大的回报,再根据规则找到生成最佳结果的最优路径。强化学习的目标是学习最好的策略,通常用于机器人、自动驾驶、游戏和棋类等,最典型的场景就是打游戏。例如《王者荣耀》里面的那些人机,都是训练出来的,我们不同段位的玩家遇到的人机的能力也是有区别的。