机器学习中对于学习有一个准确的定义:对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在经验E中学习。例如:对于识别手写文字问题,任务T是识别和分类图像中的手写文字,性能标准P就是分类的正确率,训练经验E为已知分类的手写文字数据库。这里对于学习的定义与我们日常生活中的学习基本相一致,将学习过程抽象出来,有助于我们抓住学习的本质,将设计的学习算法应用得更加广泛。
2.1 选择训练经验
经验的选择对于最后的学习效果具有很重要的影响。被选择的训练经验E一个关键点是:E能否为系统的决策提供直接或者间接的反馈。比方下棋:学习系统可以接收直接的训练样例,即各种棋盘状态和相应的正确走法。也可以接收间接的训练信息,即很多过去的对弈序列以及最终结局。一般说来,从直接的训练反馈学习比间接反馈学习容易;
训练经验的第二个重要属性是学习器可以再多大程度上控制训练样例序列。就是说学习器的决策多大程度上不受施教者的控制,而是通过自身的估计、规划;
训练经验的第三个重要属性是训练的样例是否能够尽可能得接近实例分布,而最终系统的性能P就是通过这种相似性来衡量的。这个很容易理解,对于以后要学习的实例,如果能够在训练期间就碰到的话,那么对于学习器来说,只要类似的实例输入,那么就能够准确地处理。在实际中,多数机器学习的理论都是基于训练经验与测试实例分布一致这一假设之上。尽管这是非常理想的情况,但是在实际中,这种假设一般是不成立的。
算法设计(以西洋跳棋学习问题为例):
任务T:下西洋跳棋
性能标准P:击败对手的百分比
训练经验E:和自己进行对弈
现在需要选择:
(1)要学习的知识的确切类型;
(2)对于这个目标知识的表示;
(3)一种学习机制。
2.2 选择目标函数
现在一个设计的主要任务是决定要学习的知识的确切类型以及执行程序怎样使用这些知识。在这里,学习器是从合法走子的跳棋博弈程序中开始的,那么最终学习器仅需学会从这些合法走子中选择最佳走子。这样,要学习的信息类型就是一个程序或函数,它对任何给定的棋局都能选出最好的走法,可称此函数为ChooseMove:B→M来表示这个函数,其以合法棋局集合中的状态B作为输入,并从合法走子集合中产生某个走子作为输出M。这样就把提高任务T的性能P的问题简化为学习像ChooseMove这样某个特定的目标函数问题。
因为这里的训练经验是间接的,所以直接发现ChooseMove这个目标函数式非常困难的,我们选择另一个可供选择的目标函数,这是一个评估函数,它为任何给定棋局赋予一个给定评分。令这个函数为V,并用V:B->R表示V把任何合法的棋局映射到一个实数值,我们让V给好的棋局赋予较高的评分。如果系统学会了这个目标函数,那么它便能够轻松地找到当前棋局最佳走法。
在实际情况中,我们一般仅仅希望学习算法能够得到近似的目标函数V~,这个过程因此被称为函数逼近。
2.3 选择目标函数表示
接下来需要表示好目标函数,它被学习程序用来描述要学习的函数V~。一方面,我们希望选取一个非常有表征能力的描述,以最大可能的逼近理想的目标函数V~,另一方面,越有表征能力的描述需要越多的训练数据,使程序能够从它表示的多种选择中选择。为了简化起见,现在选择一个简单的表示法:对于任何给定的棋盘状态,函数V~(以后用V表示)可以通过以下棋盘参数的线性组合来计算。
x1:棋盘上黑子的数量
x2:棋盘上红子的数量
x3:棋盘上黑王的数量
x4:棋盘上红王的数量
x5:被红子威胁的黑子数量(即会在下一次被红子吃掉的黑子数量)
x6:被黑子威胁的红子数量
于是,学习程序把V(b) = w0 + w1*x1 + w2*x2 + w3*x3 + w4*x4 + w5*x5 + w6*x6
其中,w0-w6为权,由学习算法来选择,权决定了相应棋盘参数特征的相对重要性,w0是一个附加的状态常量。
到目前为止,我们已经知道了学习问题的原型,即为它选择一种类型的训练经验、一个要学习的目标函数,以及这个函数的一种表示,于是现在的学习任务就是:
任务T:下西洋跳棋
性能标准P:击败对手的百分比
训练经验E:和自己对弈
目标函数:V:Board -> R
目标函数的表示:V(b) = w0 + w1*x1 + w2*x2 + w3*x3 + w4*x4 + w5*x5 + w6*x6
前三条是对学习任务的说明,后面两条制定了为实现这个学习程序的设计方案。这个设计的关键作用是把学习西洋跳棋战略的问题简化为学习目标函数表示中系数w0到w6值的问题。
2.4 选择函数逼近算法
为了学习目标函数,需要一系列训练样例,每一个样例描述了特定的棋盘状态b和它的训练值V-train(b),所以每个训练样例都是一个<b,V-train(b)>的序偶。
(1)估计训练值
学习器得到的信息仅仅只是对弈最后的胜负,最后的输赢情况很容易赋值,但是我们需要训练样例为每个棋盘状态赋予一个值。这里采取一种简单的方法:把任何中间棋局b的训练值V-train(b) 赋以V~(Successor(b)),其中注意V~是目标函数的一个近似,Successor(b)表示b之后再轮到程序走棋时棋盘的状态(也就是程序走了一步和对手回应一步后的棋局)。所以,训练值估计法则是:
V-train(b) <--- V~(Successor(b))
(2)调整权值
接下来就是选择最合适的权值wi。一种常用的方法是把最佳的假设定义为是训练值和假设V~预测出的值之间的误差平方和E最小
至此,我们的目标就是寻找权值或者V~,使E最小。
有很多算法可以得到权值使E最小化,在这里需要一个算法,它可以再有了新的训练样例后进一步改进权值,并且对估计的训练数据中的差错有好的健壮性。一个这样的算法被称作最小均方法(least mean squares)或者叫LMS训练法则,和梯度下降算法类似,对于每一个训练样例,它把权值向减少这个训练数据误差的方向略微调整。
LMS算法是这样定义的:
对于每一个训练样例<b,V-train(b)>
这里的是一个小常数,用来调整权值更新的幅度。
2.5 最终设计
西洋跳棋学习系统的最终设计可以用四个不同的程序模块来描述,这些模块在很多学习系统中都是核心组件,归纳在下图:
执行系统:用学会的目标函数来解决给定的任务,在此就是对弈西洋跳棋,它把新问题(新的一盘棋)的实例作为输入,产生一组解答路线(对弈历史记录)作为输出。在这里,执行系统采用的选择下一步走法的策略是由学到的评估函数V~来决定的。
鉴定器:以对弈的路线或者历史记录作为输入,输出目标函数的一系列训练样例。
泛化器:以训练样例作为输入,产生一个火速出假设,作为它对目标函数的估计。在这个例子中,泛化器对应于LMS算法,输出假设是学习到的权值w0,w1……w6描述的函数V~。
实验生成器:以当前的假设作为输入,输出一个新的问题供执行系统去探索,它的作用是挑选新的实践问题,以使整个系统的学习速率最大化。
总体来看,设计西洋跳棋程序流程如下图:
机器学习问题经常归结于搜索问题,于是学习器的任务就是搜索整个空间,寻找与训练数据最佳拟合的假设。对于不同定义的假设空间的表示(例如,线性函数、逻辑描述、决策树、人工神经网络)对应有许多搜索算法。这些不同的假设表示是和与学习不同的目标函数。
机器学习致力于回答以下问题:
机器学习致力于研究建立能够根据经验自我提高处理性能的计算机程序,包括: