AlphaZero_Gomoku icon indicating copy to clipboard operation
AlphaZero_Gomoku copied to clipboard

现在的模型似乎没法在 15*15 上的棋盘上训练出一个好的 AI

Open selfboot opened this issue 1 year ago • 24 comments

看作者说考虑计算量问题,所以没在 15*15 的棋盘上训练。 但是现在算力不是问题,我用个人笔记本 M1 的 mac 训练,基本两天就能训练完。

但是棋盘大小改成 15*15,训练出来的 AI 不会堵棋,水平太差了。

尝试调了些参数,还是不行

selfboot avatar Nov 25 '24 02:11 selfboot

我试了下,也不行,不知道如何调整算法和参数。

joezou avatar Jan 16 '25 06:01 joezou

一样

YorickFin avatar Feb 28 '25 11:02 YorickFin

试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI

initial-h avatar Feb 28 '25 17:02 initial-h

我试了一下,也不行。作者代码是纯卷积的视觉思路,可能表现力会差,得上lstm或注意力

Karesis avatar Mar 05 '25 23:03 Karesis

还是得接着训才行,只是这个路子走通了。cnn没问题的,AlphaGo都可以。

initial-h avatar Mar 05 '25 23:03 initial-h

我尝试了一种新的方法,贼简单,效果不错,还在整理代码,预计下周发出来,甚至不用mcts,一个list就搞定了。我这周要补考,下周抓紧发✧٩(ˊωˋ*)و✧

Karesis avatar Mar 06 '25 01:03 Karesis

我尝试了一种新的方法,贼简单,效果不错,还在整理代码,预计下周发出来,甚至不用mcts,一个list就搞定了。我这周要补考,下周抓紧发✧٩(ˊωˋ*)و✧

等大佬效果

selfboot avatar Mar 06 '25 06:03 selfboot

完啦,根本简单不了 qAq 看我最近的一些研究,Self那个项目 感觉一丢掉mcts就完蛋

Karesis avatar Mar 12 '25 00:03 Karesis

https://github.com/Karesis/Self.git

Karesis avatar Mar 12 '25 01:03 Karesis

我尝试用一个基于搜索的ai生成数据,然后我写了一个神经网络来做学习。这个效果还不错,可以看https://github.com/Karesis/GmetaMini2 还没有readme,晚一点我给一个。有时间我准备把里面的一些方法来替换这个作者项目里的神经网络

Karesis avatar Mar 13 '25 10:03 Karesis

有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。

Karesis avatar Mar 20 '25 04:03 Karesis

有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。

请问下,具体是以哪个棋子呢?比如现在白棋下了一步,紧接着应该黑棋下,那么黑棋子的落子是围绕上一步白棋的落子,还是上上一步黑棋的落子呢?在我看来围绕白棋就是寻找防守,围绕黑棋就是寻求进攻?

joezou avatar Mar 25 '25 06:03 joezou

试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI

大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?

joezou avatar Mar 25 '25 06:03 joezou

试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI

大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?

不会一直降低的,因为数据一直在变化。只要维持在一个低的水平波动就是正常的。可以搞几个固定的模型对打画个曲线出来。

initial-h avatar Mar 25 '25 16:03 initial-h

有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。

请问下,具体是以哪个棋子呢?比如现在白棋下了一步,紧接着应该黑棋下,那么黑棋子的落子是围绕上一步白棋的落子,还是上上一步黑棋的落子呢?在我看来围绕白棋就是寻找防守,围绕黑棋就是寻求进攻?

就是以所有棋子,但是区分轨道。我的想法是假设现在黑棋要下,人为的把所有黑子和他附近的3×3或5×5取出来,送入一个神经网络,得到黑子数量乘以3×3的方阵(以3×3为例),mask,然后再把他们加起来,看做进攻policy。同样的把所有白子附近的3×3取出来,送入一个神经网络,得到白子数量乘以3×3的方阵,mask,加起来(这里可以归一化一下),看做防守policy。最后就看哪个大嘛,或者你可以所有统一归一化一下,把白的乘以一个负数,加一起看哪里大,就下哪里。

Karesis avatar Mar 26 '25 04:03 Karesis

试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI

大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?

不会一直降低的,因为数据一直在变化。只要维持在一个低的水平波动就是正常的。可以搞几个固定的模型对打画个曲线出来。

感谢回复~

joezou avatar Mar 26 '25 07:03 joezou

有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。

请问下,具体是以哪个棋子呢?比如现在白棋下了一步,紧接着应该黑棋下,那么黑棋子的落子是围绕上一步白棋的落子,还是上上一步黑棋的落子呢?在我看来围绕白棋就是寻找防守,围绕黑棋就是寻求进攻?

就是以所有棋子,但是区分轨道。我的想法是假设现在黑棋要下,人为的把所有黑子和他附近的3×3或5×5取出来,送入一个神经网络,得到黑子数量乘以3×3的方阵(以3×3为例),mask,然后再把他们加起来,看做进攻policy。同样的把所有白子附近的3×3取出来,送入一个神经网络,得到白子数量乘以3×3的方阵,mask,加起来(这里可以归一化一下),看做防守policy。最后就看哪个大嘛,或者你可以所有统一归一化一下,把白的乘以一个负数,加一起看哪里大,就下哪里。

我理解下你的意思,就是黑棋要落子,你会遍历下棋盘上黑棋附近3x3和5x5方阵的可以落子点(通过mask),然后所有的落子位置进行归一化,作为进攻policy;再遍历下棋盘上白棋附近3x3和5x5方阵的可以落子点(通过mask),同样归一化作为防守policy;最后再考虑进攻和方式的policy,进行落子?

如果我理解正确的话,我觉得一端到端看这个方案太复杂了;二输入变得太局限了,仅看该子周围的3x3和5x5方阵,你想想最牛逼的棋手是只看局部情况的吗?显然不是啊。我认为太tricky了。

joezou avatar Mar 26 '25 08:03 joezou

有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。

请问下,具体是以哪个棋子呢?比如现在白棋下了一步,紧接着应该黑棋下,那么黑棋子的落子是围绕上一步白棋的落子,还是上上一步黑棋的落子呢?在我看来围绕白棋就是寻找防守,围绕黑棋就是寻求进攻?

就是以所有棋子,但是区分轨道。我的想法是假设现在黑棋要下,人为的把所有黑子和他附近的3×3或5×5取出来,送入一个神经网络,得到黑子数量乘以3×3的方阵(以3×3为例),mask,然后再把他们加起来,看做进攻policy。同样的把所有白子附近的3×3取出来,送入一个神经网络,得到白子数量乘以3×3的方阵,mask,加起来(这里可以归一化一下),看做防守policy。最后就看哪个大嘛,或者你可以所有统一归一化一下,把白的乘以一个负数,加一起看哪里大,就下哪里。

我理解下你的意思,就是黑棋要落子,你会遍历下棋盘上黑棋附近3x3和5x5方阵的可以落子点(通过mask),然后所有的落子位置进行归一化,作为进攻policy;再遍历下棋盘上白棋附近3x3和5x5方阵的可以落子点(通过mask),同样归一化作为防守policy;最后再考虑进攻和方式的policy,进行落子?

如果我理解正确的话,我觉得一端到端看这个方案太复杂了;二输入变得太局限了,仅看该子周围的3x3和5x5方阵,你想想最牛逼的棋手是只看局部情况的吗?显然不是啊。我认为太tricky了。

可以试一下,只是我最近没时间(过段时间我肯定会试的)。就是五子棋可以这样想,毕竟最终棋盘也不是特别大。有可能其他地方“浪费了”,类似于稀疏注意力的想法,并且这样可以把棋子落点约束到现有棋子周围(之前我试过随机在已有落子周围落子,在五子棋这个任务上,比单纯的随机落子会“聪明”一点) 但这只是一个想法,得试。

Karesis avatar Mar 26 '25 16:03 Karesis

我也是遇到这个问题,棋盘大小改成15*15后,训练收敛loss非常快,500局就到3点几了,然后自对弈每局步数越来越少,20多步,10多步就结束胜出了。根本不防守的,双方只拼谁更快5子连珠。不管对方棋。硬着头皮继续训练,到3000局,也是一样,平均10-20步每局。永远学不会防守。

sucray avatar Jun 20 '25 05:06 sucray

我也是遇到这个问题,棋盘大小改成15*15后,训练收敛loss非常快,500局就到3点几了,然后自对弈每局步数越来越少,20多步,10多步就结束胜出了。根本不防守的,双方只拼谁更快5子连珠。不管对方棋。硬着头皮继续训练,到3000局,也是一样,平均10-20步每局。永远学不会防守。

你有没有改善?我现在用棋手先sft之后,再强化学习,也还是不会防守,下了快40000盘了,双方老是贴边进攻。

joezou avatar Jul 15 '25 06:07 joezou

我试了下基于规则评估器+随机Q+多层模拟的方式来训练,怎么说呢,有点用,但又没用,你可以很快的得到一个挺强的模型,但是这些都是基于规则评估器的设计,因为我试了不加载模型,单纯用评估器,也挺强的,但是他有盲点,除非你的评估器写得面面俱到,那就根本不是训练了。。。。。。然后目前还是转回mcts方案,目前的方法是把mcts模拟给他限制在存在棋子的周围两格内的空位,把第一步棋往中间下的概率调高,然后他爱咋咋的吧

YorickFin avatar Aug 11 '25 10:08 YorickFin

我调小了棋盘的大小,9*9的棋盘,下了将近2w盘棋,还是没有得到一个很牛逼的AI。“限制在存在棋子的周围两格内的空位”,这件事情应该是让ai自己学会,而不是限制住,我发现现在还是学不会。

joezou avatar Aug 14 '25 07:08 joezou

主要是为了减少计算量,限制两格空位的是MCTS树展开时第一个节点的选择范围,不是全局落子规则,这种方法对于常规的中心开局的局面是没有什么影响的,对于其他局面的开局会弱一些

YorickFin avatar Aug 14 '25 08:08 YorickFin

也可以在收敛之后进行强化训练,换回标准AlphaZero_MCTS就行,算力够的话.....

YorickFin avatar Aug 14 '25 08:08 YorickFin