从20世纪70年代中期开始,人工智能研究进入了“知识工程时期”。专家系统所带来的巨大利润使得各大企业争相研发各个行业的专家系统,大量的专家系统问世,将人工智能推向一个新的高潮。
但是,随着时间的推移,人们开始意识到专家系统面临的“知识工程瓶颈”,简单地说,专家系统是由人将总结好的知识教给计算机,需要耗费大量的人力、财力。这时,研究人员就想,如果机器能够自己学习知识该多好啊。
学习是人类的一项重要的智能行为,但究竟什么是学习,长时间以来各有各的说法。按照人工智能大师西蒙的观点,学习就是系统在不断重复的工作中对本身能力的增强或者改进,使得系统在下一次执行时效率和准确率更高。
那么计算机,能够实现对于经验的学习和利用吗?
1959年美国的塞缪尔(Samuel)设计了一个西洋跳棋程序,它可以在不断的对弈中提高自己的棋艺。4年后,这个程序战胜了塞缪尔,又过了3年,这个程序战胜了美国一个保持8年的冠军。这个程序向人们展示了机器是可以进行学习的。
机器学习(Machine Learning)正是这样的一门学科,它致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。机器学习是继专家系统之后人工智能应用的又一重要研究领域,也是人工智能和神经计算的核心研究课题之一。随着科技的发展和数据量的激增,对计算机“学习”能力也提出了更高的要求。
1.学习方式
在机器学习发展的短短几十年内,研究人员采用了各种方法,如机械学习、基于解释学习、基于样例学习、类比学习等。20世纪80年代以来,被研究最多、应用最广的就是基于样例学习,即从训练样例中归纳出学习结果。而样例学习中应用最多的方式就是监督学习、非监督学习、半监督学习。
(1)监督学习
监督学习是指利用一组已知类别的样本调整分类器的参数,使模型能够达到所期望的功能。通俗来讲就是,应用监督学习时,所需要的数据是有标注的,即知道准确结果的。
而监督学习根据任务不同可以分为两大类:回归和分类(Regression and Classification)。两种的区别是,前者的输出的结果为连续的,而后者为离散的。
回归:其数据集是给定一个函数和它的一些坐标点,然后通过回归分析的算法,来估计原函数的模型,求出一个最符合这些已知数据集的函数解析式。然后它就可以用来预估其他未知输出的数据了,输入一个自变量模型解析式就会输出一个因变量,这些自变量就是特征向量,因变量就是标签。而且标签的值是建立在连续范围的。
例如在房价预测问题上,100平方米→10000元,200平方米→20000元,300平方米→30000元,100平方米等是自变量,10000元等即为标注,我们可以近似构造出函数:y=100x。因为x的取值为连续任意值,所以因变量也是一个连续值,所以是一个回归问题。
分类:其数据集,由特征向量和它们的标签组成,当学习器学习了这些数据之后,给学习器一个只知道特征向量不知道标签的数据,预测其所属类别。其和回归问题的主要区别就是输出结果是离散的,因为标签的集合是有限的。
例如,在区别男女的模型中,A→女,B→男,C→男,D→女,E→未知,F→未知,在这一实例中,男和女即为标注,我们已经知道的正确答案。然后将A、B、C、D和它们所对应的标注输入到所选择的算法模型进行训练,得到模型X。最后,将E和F输入到已经训练好的模型X中实现辨别男女的分类预测。
(2)非监督学习
非监督学习顾名思义,它与监督学习恰恰相反,在现实生活中,我们可能会遇到标注成本过高或没有足够的先验知识的情况,即没有标注的情况。这种情况下,我们就希望计算机能够帮助我们完成部分工作。非监督学习中,所使用到的原始数据是无标注的,我们是不知道标准答案的。非监督学习需要选择合适的算法来发现数据之间的关系。
非监督学习中,最典型的例子就是聚类(Clustering)。聚类的目的在于把相似的东西聚在一起,而并不关心这一类是什么。比如,还是有A、B、C、D、E、F 6个人,采取某种聚类算法将他们进行聚类,根据聚类之后的不同数目的聚类结果,我们可以从中分析到不同的联系。例如,如果聚成两类,可能是按照6人的性别进行聚类。如果聚成3类,可能是因为6人不同的身高。聚类的价值就在于能够帮助我们发现数据中潜在的关联关系。
(3)半监督学习
半监督学习在训练阶段使用的数据是大量未标记的数据和少量标签数据的集合。半监督学习的现实需求非常强烈,因为在现实应用中往往能容易地收集到大量未标记的样本,而标记样本需要耗费大量人力、物力。例如,在进行计算机辅助医学影像分析时,可以从医院获得大量医学影像,我们希望医生将所有的病因都标注出来,但是这样显然是不现实的。还有,在进行网页推荐时需请用户标记出感兴趣的网页,但很少用户愿花时间来提供标记,因此,有标记网页样本少,但互联网上存在无数网页可作为未标记样本来使用。半监督学习恰恰提供了一条利用“廉价”的未标记样本的途径。
要利用未标记样本,必然要做一些将未标记样本所揭示的数据分布信息与类别标记相联系的假设。最常见的是“聚类假设”,即假设数据存在簇结构,同一个簇的样本属于同一类别。另一种常见的假设是“流形假设”,即假设数据分布在一个流形结构上,邻近的样本拥有相似的输出值,如图8-8所示。无论是聚类假设还是流形假设,其本质都是“相似的样本拥有相似的输出”这个基本假设。
图8-8 流形假设图(黑点代表数据,分布类似流体图形)
2.学习过程
一个典型的机器学习步骤如图8-9所示,由数据采集、数据预处理、特征提取、模型训练及模型测试五部分组成。
图8-9 机器学习过程
(1)数据采集
显然,数据的采集是机器学习的前提条件。一个性能良好的模型一定需要首先捕获到好的训练数据。我们可以通过网络爬取、传感器、特定行业内来获取数据。
(2)数据预处理
一般来说,获取到的数据是不能直接被训练所采用的。原始数据内含有大量的无关数据和干扰数据。通过对数据的预处理,去除噪声之后,我们才能应用这些数据去训练模型。
(3)特征提取
预处理完的数据是无法直接进行判别分类的。通常来说,需要将数据从原始的测量空间“变换”到二次空间,而这个二次空间,研究人员一般将它称为特征空间。将数据从原始空间变换到特征空间后,就得到了代表某模式的二次特征,一般我们所指的特征就是这里所谓的二次特征。
(4)模型训练
当得到特征表示后,根据数据是否含有标签,确定选择监督学习还是无监督学习。如果含有标签,根据任务需求,选择分类模型还是回归模型。确定好确切算法之后,将处理好的特征输入到算法模型中进行训练。
(5)模型测试
将训练数据输入到算法模型之后,经过调参,确定好模型的最终参数。将需要测试的数据输入到已经确定参数的模型之中,得到测试结果,观察实验结果。如果不符合预期,可以适当更换算法模型,重复以上实验步骤。
3.常用算法
(1)K-Means算法简介
K-Means算法是一种聚类分析算法,属于无监督学习。其中K表示类别数,Means表示均值。顾名思义K-Means是一种通过均值对数据点进行聚类的算法。它通过预先设定的K值及每个类别的初始质心(质心可以认为是数据集中的一个数据点P,它是具有相似性的一组数据的中心,即该组中每个数据点到P的距离都比到其他质心的距离近。初始质心的选取往往对聚类的结果影响较大)对相似的数据点进行划分,并通过划分后的均值迭代优化获得最优的聚类结果。
1)拟解决的问题
K-Means算法主要解决的问题如图8-10所示。可以看到,在图中有一些点,用肉眼可以看出来有4个点群,但是如何通过计算机程序找出这几个点群呢?K-Means算法可以解决此类问题。(www.daowen.com)
图8-10 K-Means要解决的问题
2)算法过程
这个算法其实很简单,如图8-11所示。
图8-11 K-Means算法过程
图8-11中有A,B,C,D,E五个点。设K=2,圆圈内的点为设定的种子点。K-Means的算法如下:
①随机选取K (这里K=2)个种子点。
②求所有点到K个种子点的距离,假如点B离上面的种子点最近,那么B属于上面的种子点群。(图8-11中,可以看到A、B属于上面的种子点,D、E属于下面的种子点)。
③重新计算聚集点群的中心,移动种子点到属于它的“点群”的中心,一般来说:求点群中心点的算法是使用各个点到种子点的距离和的平均值,这其实也是K-Means算法名字的由来。
④重复第②和第③步,直到种子点没有移动(可以看到第④步,上面的种子点聚合了A、B、C,下面的种子点聚合了D、E)。
3)K-Means算法的优缺点
K-Means算法的优点:
①算法快速、简单。
②大数据集有较高的效率并且是可伸缩性的。
③时间复杂度近似于线性,而且适合挖掘大规模数据集。K-Means聚类算法的时间复杂度O(nkt),其中n代表数据集中对象的数量,t代表着算法迭代的次数,k代表簇的数目。
K-Means算法的缺点:
①K值需要事先给定。但在实际应用中K值的选定非常难以估计。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。
②初始种子点随机设定,不同的随机种子点会得到完全不同的结果。
③对噪声点敏感,且可能产生空聚簇,特别是当K比较大的时候。
针对上述缺点,提出了许多改进的方法。如ISODATA算法通过类的自动合并和分裂,可以给出较为合理的K初值,K-Means++算法可以有效地选择初始种子点。具体细节,读者可以阅读相关文献。
(2)神经网络
神经网络近来越来越受到人们的关注,因为它为解决大复杂度问题提供了一种相对比较有效的简单方法。神经网络可以很容易地解决具有上百个参数的问题。神经网络常用于两类问题:分类和回归。首先来说明单一神经元模型,图8-12示例了一个神经元模型。神经元的模型是人们参照人脑细胞的结构建立的。
人脑细胞有许多的神经末梢,这些神经末梢用于接收来自其他神经元细胞神经中枢的信号,每一个神经元细胞都有一个细胞抑止度,只有当外界的刺激信息超过了神经元细胞的细胞抑止度,神经元细胞才会处于激发状态。
在图8-12中的单一神经元可以接收多个输入,这对应着人脑细胞的多个神经末梢:在神经元中设置了一个激发阈值,这对应神经元细胞的细胞抑止度。使用方程y=sgn(F(x 1,x 2,…,x n)-T)来计算神经元的输出。其中,函数的物理意义是由输入(x 1,x 2,…,x n)对该神经元形成的刺激。当F(x 1,x 2,…,x n)>T时,神经元将输出1,否则输出0。单一神经元实际上是对输入(x 1,x 2,…,x n)在n维空间上进行了划分,将n维空间划分成“1”和“0”两类元素。对应于决策系统其实是对分析集合进行划分。
图8-12 单一神经元模型
在结构上可以把一个神经网络划分为输入层、输出层和隐含层,如图8-13所示。输入层的每个节点对应一个个的预测变量。输出层的节点对应目标变量(可有多个)。
图8-13 一个前向式神经元网络
除了输入层的节点,神经网络的每个节点都与很多它前面的节点(称为此节点的输入节点)连接在一起,每个连接对应一个权重w ij,此节点的值就是通过它所有输入节点的值与对应连接权重乘积的和作为一个函数的输入而得到的,我们把这个函数称为活动函数或挤压函数。图8-14中,节点4输出到节点6的值可通过如下计算得到:w 14×节点1的值+w 24×节点2的值。
图8-14 带权重的神经元网络 (w xy表示节点x到点y的权重)
调整节点间连接的权重就是在建立(也称训练)神经网络时要做的工作。最早的也是最基本的权重调整方法是错误回馈法,现在较新的有变化坡度法、类牛顿法、Levenberg-Marquardt法和遗传算法等。无论采用哪种训练方法,都需要有一些参数来控制训练的过程,如防止训练过度和控制训练的速度。
决定神经网络拓扑结构(或体系结构)的是隐含层及其所含节点的个数以及节点之间的连接方式。要从头开始设计一个神经网络,必须要决定隐含层和节点的数目,活动函数的形式以及对权重作哪些限制等。如果采用成熟软件工具,它会帮你决定这些事情。
在诸多类型的神经网络中,最常用的是前向传播式神经网络。我们下面详细讨论一下前向传播式网络,为讨论方便假定只含有一层隐含节点。
①前向传播:数据从输入到输出的过程是一个从前向后的传播过程,后一节点的值通过它前面相连的节点传过来,然后把值按照各个连接权重的大小加权输入活动函数再得到新的值,进一步传播到下一个节点。
②回馈:当节点的输出值与预期的值不同,也就是发生错误时,神经网络就要“学习”(从错误中学习)。我们可以把节点间连接的权重看成后一节点对前一节点的“信任”程度(它自己向下一节点的输出更容易受它前面相连那个节点输入的影响)。学习的方法是采用惩罚的方法。如果一节点输出发生错误,那么看它的错误是受哪个(些)输入节点的影响而造成的,是不是权重最高的节点使它出错,如果是则要降低它的权重,同时升高那些做出正确建议节点的权重。对那些被降低权重的节点来说,也需要用同样(类似)的方法来进一步调节它前面的节点的权重。就这样把调节过程一步步向前传播直到输入节点为止。
对训练集中的每条记录都要重复这个步骤,用前向传播得到输出值,如果发生错误,则用回馈法进行学习。当把训练集中的每一条记录都运行过一遍之后,我们称完成了一个训练周期。要完成神经网络的训练可能需要很多个训练周期,经常是几百个。训练完成之后得到的神经网络就是通过训练集发现的模型,它描述了训练集中相应变量受预测变量影响的变化规律。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。