首页 » 技术分享 » 关于阿法狗的一点个人小见解

关于阿法狗的一点个人小见解

 

看了不少老司机的博文,有感而发,今天想自己拉扯几句。

先说下最傻逼试的暴力穷举,想象一盘围棋,19*19的落子,一种特定的落子方式决定一种局面,我们称之为S(i),在当前状态S(i)下,有着对应的一个落子策略A(i),想象一下,如果,两个不懂下围棋的人,在交替胡乱的落子,会怎么样,最终肯定会有输赢吧,假设输赢有系统判定,对赢的那个人的每一步进行一个加分,就是对赢的人的,T(S(i),A(i)){i=1,2,3,4,5,6.......}这个步骤+1分,好,一盘棋局就这样结束了,那么第2盘的时候,如果电脑有遇到S(i)这样一个特定的局面的时候,他会怎么样?他会毫无犹豫的选择对应的这样一个A(i)的行动,当然,因为第一盘完全是乱下的,也许A(i)的方案也是毫无意义的,但是,从每次的下棋中,对获胜的一方,对他这一盘的每一步都进行这样的一个加分,并且把步骤和行动都传到服务器储存起来,那么对于T(S(i),A(i)),对于一个特定的S(i),A(i)会有多种选择,是吧,但是总会有一个得分最高的A(i),这是肯定的,因为经过漫长的自我博弈锻炼出来的决策,有一定的指导价值,如果你仔细思考,你可以从中看过遗传算法的味道(其实这种方式的学名叫做,蒙特卡洛搜索树,也是一种增强学习常用思维)。


这里全是字,可能你看了就不想看了,我就贴个图,这图是网上找的,反正图这种东西,呵呵。

因为围棋的落子可能性千变万化,就算你穷举足够多的次数,还是有可能出来没见过的局面S(i),对吧,如果真人对弈的时候,你对于没见过的局面,就乱下了一步狗血的臭棋,岂不是GG,显然不行的啊,这时候就用到神经网络了,嘿嘿,知道什么是神经网络,就是一种估值的网络,通过用大量的大量数据进行训练,算出一组BP神经网络的一组参数(实际用的是不是BP我不知道,我只是觉得可以这么做),当然这个在后面再说,我只是先提出这个问题,免得又疑问。

那我们重新回到问题上,其实你仔细想想,下围棋的过程,是不是一个无后效性的马尔科夫链?下围棋本身就是一种博弈游戏,局势是通明的,双方都可以看得到,这样,我们可以把围棋抽象成这样的状态:


1.双方的信息已知,完全对称

2.假设无后效性,每一步的策略只考虑着一步的状态。


这时候,下围棋的过程就理解为一个数学模型,马尔科夫决策过程,在第一步中,我们已经通过了类似遗传算法的思维把基本的下棋的方向感找出来了,但是,如果要下棋的策略足够精明,根据大数定律,只有下无数的棋局才会收敛至任意精确地解,很明显这是不现实的,就算是几千万盘的自我博弈,对于围棋来说,也只是洒洒水,那我问你,你要学会知识,一方面是通过不断地练习,但同时,如果你想成为一个高手,是不是需要研究棋谱,就算你笨,你背下来总可以吧,遇到相似的局面,多少可以有一些思路,同样的,电脑也可以这样做,对于历史上的经典棋局,可以把它转化为数学语言,在转化为机器语言扔给阿法狗,比如说,天龙八部里的珍珑棋局,不关你是黑子还是白子,总会有某一步棋,可以令人称赞,你就把这时候对应的局面S(i),和这步好棋的走法A(i),以很高的权重,输入电脑,就这样不断的背棋谱,通过模仿,可以加快电脑的学习进度,当然,就算你背棋谱还是可能会出现没有遇到的局面,这里我个人给一点小意见,用矩阵的形式,来记录棋局,比如说棋局是19*19,那么我们就给定一个19*19的矩阵,

黑子记为1,白子-1,其余0,这样可以用一个矩阵来表示一个局面S(i),如果遇到没有见过的局面,我们可以通过查找已知的相似度最大的棋局(矩阵相似度最大),给出的下棋策略,作为参考策略,至于矩阵的相似度如何计算,我们可以考虑把二维矩阵拉直,计算他们的余弦,就是他们的夹角,夹角越小越好,越有参考价值。

最后,在回到我们的马尔科夫,对于我们经过自我博弈和背棋局之后得到的电脑里,对于一个已有的状态,对应着一组A(i),每个A(i)的权重都不同(这里可以用主成分分析,把那些小概率事件去掉,减少搜索量),对于未知的状态,也可以计算矩阵的相似度来做出决策,那好,对于一个状态S(i),到终局S(n),通过遍历每一种可能(注意,这里我已经用主成分分析剪枝了,搜索量肯定减少),找出一条优势最大的,算出一个所谓的估值函数,



也就是说这一步的贴现价值,因为,如果按照一定要棋局结束才能得到回报的话,这种先行算棋的方式,可以提供很好的理论依据,到这里,电脑已经形成一个良好的策略网络。

但是,还不够。没有深度学习的阿法狗怎么能叫狗呢?让机器来做就是有监督学习的回归算法, 你要提取棋局的特征,算出对应每一个走法出现的概率P(a(t)|s(t)),但是,围棋的特征太过于复杂,普通的聚类很容易欠拟合,也容易陷入局部最优解,同样的思路,还是需要模仿,为了让阿法狗更加真人化,找一些近年来的砖家的棋局实战,当做大量的数据,用80%当做训练数据,20%当做交叉验证数据,依次的训练神经网络,当这个神经网络训练完成的时候,再把我们前两步骤得到的策略网络,跟这个神经网路博弈,也就是说,拿我们原来设计的策略网络,来训练这个实际数据得到的神经网络,对它进行梯度调优。这时候,大体的思路基本完成,下棋的时候,

每一步用蒙特卡洛抽样,决定这一步的行动,因为是随机的(随机不是指乱下,而是有偏好,权重的下),所以每一步都不尽相同,也完全也可能衍生出新的局面,在把新局面的贴现价值反馈给神经网络,不断调整,不断进步。

以上都是我个人的一些猜想,有可能并不是很准确,也没有很具体的推导(时间问题,以后我会补充这部分),算不上干货,你可以看看就好,不过这种智能的设计思维还是可以借鉴的。



转载自原文链接, 如需删除请联系管理员。

原文链接:关于阿法狗的一点个人小见解,转载请注明来源!

0