《机器学习》 第一章
图书馆借了本机器学习,作者是:Tom M.Mitchell,亚马逊这本书排名挺靠前的。
好了,直接开篇。
定义一个学习问题,必须由三个特征:任务种类,衡量任务提高的标准,经验来源。
接下来大篇幅讲述了,如何挑选训练经验,选择目标函数,目标函数的表示,选择函数逼近算法。
整个设计下来,分为了四大模块:执行系统、鉴定器、泛化器、实验生成器。
看过这本书的都会被第一章的跳棋学习深深吸引了,从豆瓣上面就可以看出来,那么接下来就从四大模块进行讲述。
任务:下跳棋
标准:取胜的百分比
训练经验:自己跟自己训练。
目标函数:将棋盘上的棋局映射为一个数字
目标函数的表示:V(b)=w0+x1*w1+x2*w2+x3*w3+x4*w4+x5*w6+x1*w6
PS(x1~x6分别代表:棋盘上的黑子数量、红字数量、黑王数量、红王数量、被威胁的黑子数量、被威胁的红字数量,w0~w6是参数,可进行初始化,电脑的学习就是把参数进行调整。
ok,以上是对跳棋学习任务的描述,接下来就看,实际上是怎么运行的:
执行系统:
输入:棋局
输出:整盘琪玩下来的记录
也就是说,执行系统通过对一个棋局的分析,做出了走哪一步棋的决定,请注意,在整个过程,电脑都是在和自己下棋,所以它能够把这盘棋下完。
关键在于,电脑是怎么做出走下一步棋的决定的?是这样的,电脑在拿到一个棋局之后,会算出所有所有合法的走法,然后根据
V(b)=w0+x1*w1+x2*w2+x3*w3+x4*w4+x5*w6+x1*w6,算出每个走法的数值,然后选取数值最大的那个走法。
是的,就这样,一步步下去,电脑就能跟自己走完一盘棋了。
鉴定器:
输入:整盘琪玩下来的记录
输出:每一步棋真正的数值
你会很好奇,为什么输出每一步棋真正的数值?刚才不是算过了吗?是这样的,电脑算出来的,是它认为的值,可能在这个棋局之中,电脑认为的值与现实有偏差,你应该告诉它,你错了,这个值是有偏差的。注意,正是这种电脑计算之后你告诉他对不对的过程,才让电脑不断调整w0~w6,使得它自己认为的值与事实上的更加相似。
那么,你鬼知道某一盘棋的数值啊!是的,你不知道,你知道了也没用,你不可能告诉电脑每一个棋局的数值,不然会累死你,那就让它自己算吧。怎么算?作者提出
让:V(b)=V(在b棋局情况下,我走完了而且对方也走完的另一个棋局)
我自己对这个也有疑问,但是作者说,13章会告诉你,这方法是可行的。
泛化器:
输入:某个棋局与这个棋局真正的数值
输出:w0~w6
是的,有了每个棋局真正应得的数值,以及电脑自己认为的值,那么我们就能使用各种方法调整参数,例如可以使用梯度下降的方法,这个后面会讲。
实验生成器
输入:w0~w6
输出:初始棋局
这个没啥好说的,为执行系统提供初始棋局罢了,一个好的学习方法应该会有好的开始。但是书里只是不断为执行系统提供同一个初始棋局。
是的,讲完了。