机器学习最近很火很厉害的样子,是时候跟风了解一波了~
机器学习顾名思义是让机器去进行学习,目前主要应用于自然语言处理(就是比如输入法啊,语音输入啊之类的)、模式识别、自动驾驶、各种数据的预测等等。
让我们先对机器学习有一个宽广的定义:
如果一个计算机程序对某类任务T的用P衡量的性能根据经验E来自我完善,那么我们称这个计算机程序在从经验E中学习,针对某类任务T,他的性能用P来衡量。
比如一个学习下西洋棋的程序,他的任务T就是下棋,他的性能标准P就是获得胜利的百分比,训练经验E就是不断和自己下棋。
1.2.1选择训练经验
训练经验有三个重要属性:
- 训练经验能否为系统的决策提供直接或间接的反馈。(也就是 说每一次的训练能否让程序学到东西)
- 学习器可以在多大程度上控制训练样例序列。(比如下棋程 序能否随时摆出一个他想要的棋局进行学习,有点debug工具的 感觉,自如的控制函数的执行过程)
- 训练样例的分布能多好的表示实例分布,通过样例来衡量最终系统的性能P。(也就是说用来训练的数据和真正用来测试的数据是不是尽可能的相似)
1.2.2选择目标函数
之后我们要选择目标函数。对于下棋程序来说,最终程序需要学会在合法的走子中选择最佳走子,这代表了一类任务:合法走子定义了某个已知的巨大搜索空间,但是最佳的搜索策略未知。学习从合法走子中选出最好的走法,也就是表明要学习的信息类型是一个能对任何给定的棋局选出最好的走法的程序或函数。但是对于下棋程序,由于系统的训练经验是间接地(也就是假定没有人类高手去教给程序每一步应该怎么走,而是程序靠自己跟自己下棋去学习),所以很难去直接判断在某个棋局里哪个走法是最好的,所以我们可以转化一下,把目标函数改为一个评估函数V,它为任何给定棋局评一个分,好的棋局评分较高。那么系统如果学会了V,在下每一步棋时就可以先产生每一个走法的下一步棋局,然后用V选择评分最高的棋局来确定最佳走子。通常要完美的学习这样一个V的可操作形式(也就是在时间限制内计算出结果)是很困难的,我们通常只希望学习算法得到近似的目标函数,所以学习过程常被称为函数逼近(function approximation)。
1.2.3选择目标函数的表示
现在我们确定了理想的目标函数V,接下来要选择一个被学习程序用来描述要学习的函数Ṽ的表示。一方面我们希望有一个最有表现力的描述来最大可能地逼近理想的目标函数V,另一方面ṋ越有表现力的描述则需要越多的训练数据。为了简化讨论,现在选择一个简单的表示法:对于任何给定的棋盘状态,函数Ṽ可以通过以下棋盘参数的线性组合来计算:
1.2.4选择函数逼近算法
-
估计训练值
我们使用一个简单的方法,用后续棋局Successor(b)的估计值来估计棋局b的值。很明显越接近游戏结束的棋局,Ṽ的估计越精确。
-
调整权值
要调整权值w,首先要定义最佳拟合(best fit)训练数据的含义(也就是说什么样的训练结果是最好的)。一种常用的方法是把最佳的假设(或权值集合)定义为使训练值和假设Ṽ预测出的值之间的误差平方和E最小。
现在我们需要一个算法,在有新的训练样例时可以更新权值,并且对训练数据中的差错有较好的健壮性。其中一个这样的算法叫做最小均方法(least mean squares)或叫LMS训练法则。对于每个训练样例,它把权值向减小这个误差的方向略微调整。
η是一个小的常数(如0.1),用来调整每次更新权值的幅度。
1.2.5最终设计
执行系统(Performance System):用已学会的目标函数来解决给定的任务,把新问题(一个新棋局)作为输入,产生一组解答路线作为输出。
鉴定器(Critic):它以对弈的路线或历史记录作为输入,输出目标函数的一系列训练样例。也就是把棋局的实例转化为训练法则。
泛化器(Generalizer):它以训练样例作为输入,产生一个输出假设作为它对目标函数的估计。也就是将每个特定的训练样例中泛化出一个一般的特征,使这个一般函数能覆盖这些样例和其它的样例。在这个例子中,泛化器对应LMS算法。
实验生成器(Experiment Generator):它以当前的假设(学到的函数)作为输入,输出一个新的问题(一个新棋局)让系统去探索。它的作用是挑选新的实践问题,以使整个系统的学习速率最大化。
以上只是一个机器学习的简单模型,用来概述机器学习的基本方法。实际上在各个步骤中都有更多更好的选择。