机器学习之----初体验

    近年来,我们可以看到人工智能在各种领域展露手脚,国际上最有名的当属谷歌大脑项目,从2006年深度学习被提出后,到12年,深度学习使语音识别和图像识别取得了巨大的突破,可惜的是在自然语言识别问题上,深度学习并没有取得很好的成果。2012底年百度成立了“深度学习研究院”,虽然在我看来这是一个过于急功近利的选择,但是不得不承认,机器学习的研究目前正是热门的研究方向,是人工智能领域的极其重要的一部分。

    本篇文章主要讲诉一下,为什么会提出机器学习?什么是机器学习?机器学习是怎么实现的?这三个主要问题。使用的方法都是最简单数学表示,和推理逻辑。

    机器学习,刚看到这个名词的时候,我想所有人都想到了智能化,是的,因为学习是人才可以学习,机器怎么能学习呢?所以机器学习这一门技术,就是让机器像人一样思考能够去学习,这就需要比较一下人和机器的思考问题的异同。我们知道机器做完成任务的能力来源于其强大的计算能力,这一点是人类无法比拟的,只要设定好程序,机器会按照程序的要求去执行,不会做出程序设定以外的工作。而人虽然无法向机器一样拥有强大的计算能力,但是却拥有学习能力,通过以往的经验的学习提高正确率。而机器学习,就是人们为了让机器能通过经验去自动学习提升机器能力的一门学科。

    下面我们通过为《五子棋》设计智能下棋机器人程序,从实践中回答上面提出的机器学习问题。

    记得在本科毕业设计的时候,我的好朋友小辉辉同学的毕业设计就是《五子棋》,其中有一项任务就是实现人机对战,当时我也有思考这个问题,而这个问题直到我学习了机器学习,才能完整的作出分析,当然不使用机器学习也是可以做出来的,只不过这样的程序“智商”相当有限,并且不能自动提高。

设计:

         任务:下五子棋
         性能标准:成功率
         目标函数:MoveChoose:B->M

    我们提出任务是“下五子棋”,而成功率作为任务评价的标准。我们分析到,我们需要设计的主要问题集中在需要一个函数告诉我们下一步走哪,我们假设这个函数是MoveChoose:B->M,B代表棋局,M代表走哪,我们发现直接去思考这个问题是很头疼的,所以这里需要转化一下。我们在走下一步的时候,有很多选择,有的选择好,有的选择差,有的感觉有几步随便,都可以,那这时候我们依照这样的思想设计一个评价函数,评价走这一步的好坏,函数V:B->N,B作为棋局,N作为评分,我们只需要选择评分最高的走法,有同分这只能随机,当然我们希望设计出复杂点的目标函数,不会或者很少让程序去纠结还要随机吧。

转换设计:

         任务:下五子棋
         性能标准:成功率
         目标函数:V:B->N

     现在我们的问题集中在如何设计评价函数的问题上,我们定义V(b)如下:

1.    赢了v(b)=100

2.    输了v(b)=-100

3.    和局v(b)=0

4.    若这一步不是最终局,那么v(b)=v(bp) ,bp的意思呢就是走完这一步后,双方从b局开始都以最优的方式走的情况下的输赢

     根据以上设计,我们的计算机程序能够永远的走出最优的走法,从第一步开始就决定了输赢,如果这个棋的规则没有漏洞,那么计算机赢定了,因为他可以计算出绝对的最优的,而人再厉害也只能凭借经验去走下一步,不可能算出所有的步数,记得小时候有人会跟我说某某可厉害,走一步能看三步,这算不错的棋手了,但是跟计算机比,就没得比了。

     但是人类就真的输了吗?答案是NO,因为就算是计算机也没有如此强大的计算能力,所以说这样的设计“依赖于强大的计算,也失败于计算不够强大”,我们可以看出这是一个阶层级的递归,假如有10*10的棋盘,那他的搜索100*99*98*….1次计算,这是算法复杂度上线,也就是说我们的程序要在反应时间内做出那么多次选择,而计算机一般也就1秒几千万次的运算(普通),至于这个数多大需要多少秒,这个读者可以算计算器算一下(坑人的)。所以这样的递归是不可能的递归。

    通过以上设计过程我们可以清楚的认识到,基于纯计算穷举搜说的设计是不可取的,当然可以做一个搜索量极小的“弱智”程序。如果不这样做还有别的办法吗?这时候,就有人提出了能不能借鉴一下人的思维呢?我们来看一下,人在思考中,通常是根据尝试走下一步,然后根据棋局用经验去判断走不走,这些经验比如是:双4连子,4连子双通,4连子单通,双三连4通,3连子双通,3连子单通,两连子双通,单连子。我们把这些从经验中得到的,叫作特征。这些都是最简单的特征,如果要设计出高智商程序,需要很多有效的特征。在机器学习运用中,主要工作就是寻找特征,比如百度,就有专门的特征挖掘团队,有的艰难的特征是经过一两年才挖出来的。好了,下面我们通过机器学习的方法设计下棋程序。

机器学习设计:

         任务:下五子棋

         经验来源:和自己下棋
         性能标准:成功率
         目标函数:V:B->N
         特征:

x1:双4连子

x2:4连子双通

x3:4连子单通

x4:双三连4通

x5:3连子双通

x6:联子单通

x7:两连子双通

x8:单连子

x9:对方成5连

x10:对方成4
 x11:对方成3

    好了,下面的工作就是如何用机器学习的思想设计目标函数问题,我们知道理想的目标函数的不可能的,我们只能根据经量好的特征,更多更好训样例去表示一个可以和目标函数V接近的函数,叫做函数逼近。

这里目标函数可以用神经网络来表示,当然我们只是为了理解机器学习的原理,这里我用简单的线性函数来表示。

V(b)=w0+w1*x1+w2*x2+……+w11*x11

    wi就是特征的权值,也就是我们要学习的任务,通过训练样例,不断的更新wi使V(b)向理想函数逼近。好了,通过以上设计,我们基本上已经达到了能够表示的程度,下面只需要解决如何去学习权值的问题。

    如何学习权值的问题,其实就是选择什么样的函数逼近算法。我们从训练样例的设计开始,再到最后的泛华。

训练样例我们用序偶表示,b代表棋局,Vtrain(b)代表训练值

显然可以知道终局的Vtrain(b)的情况为100,-100,0;举个样例:

    <(x1=1,x2=0,…….x12=1),100> //双四胜局

    对于这样的终局我们很容给出评分,但是对于中间走法,我们很难给出评分,这时候我们需要一种新的思路。我们可以感觉到,越往后的评分越准确,所以我们有了这样的设计:

    Vtrain(b)=V(Success(b)) 

    Success(b)表示走完这一步后,对手再走完的一步后的棋局,V代表当前的近似函数。我们可以感觉到,这是一种自我的进化,根据现有的函数,进化自己,至于越往后评分越准确在这里我只能给描述出这样的感觉,这是被证明出来的,但过于复杂,不详细阐述。

    到这里我们解决了训练样例的问题,我们开始继续最后的拟合工作。一种常用的方法是,使训练样例和近似函数之间的平方误差和最小,误差越小,说明近似函数和训练函数越接近啊。

    平方误差和=Sum((Vtrain(b)-V(b))^2)

而我们接着需要的是用一个算法使平方误差和最小,我们用一个叫做LMS(最小均方法)的算法,她能够调整近似函数的权值,使近似函数的值向训练样例靠近。

LMS更新权值如下:

                 Wi=wi+k(Vtrain(b)-V(b))*xi (k,xi皆为非负数)

     我们可以看出,xi为0时Wi不受影响,而Vtrain(b)

我们把几个部分串一下:

   设定棋局---à用已有函数下棋生成经验集合---à选出训练样例-à用训练样例进行泛化更新权值  --à设定棋局(循环)

    我想这样的体系可以在绝大多数机器学习中运用,到这里我们已经理清了机器学习的原理,继续的研究工作只不过是用更好的近似函数,找出更多的特征,如何设置一个好的棋局,挑选更好的训练样例的问题。

    我想读者现在关心的可能是,这样的设计真的能够打败人类五子棋极限选手吗?显然是不能的,想要达到人类极限的水平需要更多创新的算法,更强的学习方式,不过最算是我这种最简陋的学习方法,慢慢去调教,也应该能够达到一流的选手水平,记得10年前被吴警小朋友用五子棋轻虐,现在我苦修10年用计算机去打败你,也算是报了当年的仇了,吴警小朋友的水平应该是一流的水准吧,和我的程序水平在伯仲之间。

    当然这里还要扩展一下的是,对于近似函数的表示有很多更高级的算法,比如神经网络,SVM,深度信念网络等。对于其设计也有很多其他方式,比如先存储训练样例然后挑出在“最接近的”来进行匹配,这就是最近邻算法;还可以产生多个后选程序,用比赛的方法,选出最优秀的,然后去培育和变异她,这叫做遗传算法;还有,基于解释的学习,通过分析每一次的成败去学习。不同的任务可能,其适合的算法不尽相同。

    最后说一下,了解了机器学习后,我们会发现并没有想象中的神秘,并且她的效果也没那么好,因为训练样例总是有盲区,而有用的特征总是挖掘不完,当出现这样的情况时,“高智商”机器学习就会变成“智障“,所以我们会看到谷歌大脑那么强大,其控制的无人汽车会犯很低级的错误,所以人工智能是逼不得已的技术,虽然其前途是光明的,但是确实还要很长一段来发展,所以我前面说百度的”深度学习研究院“是过于急功近利了,但是反观百度,确实没有什么领先的东西了,搜索已经发展顶天了,而人工智能半吊子,真的不知道会吊到什么时候,确实是让人堪忧的,但是其勇气是值得表扬的,也是他们的努力为中国的人工智能的研究超赶着国际的舞台,以至于未来不会太落后。

魏思政

2016.3.7

计算机学院楼

你可能感兴趣的:(机器学习,机器学习,神经网络,LMS,五子棋)