五子棋的深度学习模型

时间:2024-03-20 17:37:56

五子棋的深度学习模型

五子棋游戏,是一个15x15大小的棋盘,横竖斜三个方向连成5个棋子,就胜利。

 

可以将整个棋盘数据,以及当前下棋的棋手(白方还是黑方),作为神经网络的输入。

 

输出则是,下一步下棋的位置。

 

这就确定了神经网络的输入层以及输出层。

 

隐藏层怎么确定呢?

 

现如今很多神经网络的隐藏层数量以及神经元数量,都是人为凭感觉设定的。极为不科学。

容易出现过拟合或欠拟合现象。

 

而且,如果直接将输入层确定为,整个棋盘的数据,以及当前棋手。看起来没什么问题,AI(也就是神经网络)已经知道了所有数据。但是AI怎么能知道下一步该怎么下呢?就像一个对五子棋一无所知的人,你让他跟你下棋,他都不知道规则,下一步给出的答案,很可能都不符合游戏规则。例如他给出一个坐标,此坐标已经有棋子了,是非法的。

当然,如果一个新手,经过大量的观察(训练)之后,可以慢慢理解下棋的规则。

例如AI每次给出一个非法的解,则告诉AI非法,多次训练之后,AI渐渐能理解游戏规则,从而减少给出非法解的机会。

但是这样一来,需要大量的训练。而规则是死的,这是仅仅需要记住的东西,而不需要训练。例如人下棋,首先了解规则,则不会出现非法的下棋步骤。

 

如何告知AI(神经网络)下棋的规则?

 

在这里,我们对第一个隐藏层建模,这个隐藏层输入是第一层的输出,也就是棋盘数据。这个隐藏层的输出,是棋盘上的可下的点。

 

注意,这个隐藏层的输出,和第一层的输出,本质上没有任何区别。只是换了一个表示形式。

因为整个棋盘数据=棋盘上可下的棋子的点

理解这一点非常重要,因为棋盘数据确定的情况下,可下的棋子的点已经确定了。

虽然如此,意义却非常不一样。

棋盘上可下棋子的坐标点,是在理解游戏规则的前提下才能得出的。

也就是,在这一步输出,AI已经理解了游戏规则。换句话说,我们已经告知AI游戏规则了。

注意这一步不需要学习。没有任何学习参数。我们就应程序变成,写一个函数,直接得出输出。这个函数我们假设为F(x)。由整个棋盘数据,得出可以下棋的点,这个函数非常好写。函数是确定的,输入参数是棋盘数据,输出则是可以下棋的坐标点。

 

这样可以极大的简化AI学习任务。

 

我们输出是可以下棋的点,是一个二维向量[ [1,1],[3,6] …   ]。由于这个向量是动态长度的,不适合构建神经网络。我们换一种表示方式 [1,0,0,0,1,1,1,0,…]。这个一维向量,长度为15x15,对应棋盘每个格子是否可以下棋,1表示可以下棋,0表示不能下棋。由于棋盘的格子数量是固定的,所以这个向量长度也是固定的.

 

第一个隐藏层确定了。我们已经知道可以下棋的坐标点了。接下来的任务是,得出最优解。

也就是我们要知道,哪个坐标点是最优的。

 

注意的是,要得出棋盘可以下棋的点,五子棋比较特殊,它不需要当前下棋的棋手就可以得出。也就是不论当前是白方下,还是黑方下棋,可以下棋的坐标点,都是一样的。这不像中国象棋,必须要知道当前是哪一方下棋,才能得出可以下棋的点。

 

但是五子棋根据当前可以下棋的点,要得出最优解,这个棋手信息就必不可少了。

 

所以当前的棋手数据,我们当作第三层的输入。

 

 

在第三层这里,输入和输出的关系不太容易确定。所以我们直接取一个函数进行拟合。

最简单的函数是线性回归。但是,输入和输出之间,可以确定关系比较复杂,肯定不是线性关系。

 

要确定这个函数,首先需要了解,怎么样训练这个函数的参数。

 

假设这个函数已经确定了,神经网络通过输入,得出了一个输出。我们根据输出,与目标输出的误差,来重新调整参数,使下一次误差减少。按照函数梯度下降的方向,逐渐使函数拟合。

 

关键问题是,五子棋游戏我们没有样例(例如棋谱),所以没有目标输出。

这种情况下,我们的五子棋属于无监督学习。

 

 

无监督学习有几种方法:

最简单的是遗传算法:先生成一批随机参数的AI(神经网络)。然后让这一批AI对弈,胜者留下,负者淘汰。然后将胜者杂交,生成新的后代,这样不断迭代,以让AI自动进化。

这个方案运算量比较大,而且一旦神经元数量比较多的时候,不容易拟合。

 

优化方案是,是给每一步下棋打分。综合分数高的留下,分数低的淘汰。这样可以大大增加迭代的效率。不必等到每一盘棋下完,才进行迭代。

 

当然,还可以动用棋谱。棋谱的方案是最优的,我们调整参数,拟合棋谱。但是并不是每一步棋都有对应的棋谱。这个只能当作优化AI的手段。如果这一步有对应的棋谱,用反向传播算法调整参数。

 

最后,我们希望AI在与玩家对弈的时候,自动进化。从失败中学到教训。每一次输棋之后,我们调整参数,使最后一步棋子,更大的概率挑选其他走法。