现在的模型似乎没法在 15*15 上的棋盘上训练出一个好的 AI
看作者说考虑计算量问题,所以没在 15*15 的棋盘上训练。 但是现在算力不是问题,我用个人笔记本 M1 的 mac 训练,基本两天就能训练完。
但是棋盘大小改成 15*15,训练出来的 AI 不会堵棋,水平太差了。
尝试调了些参数,还是不行
我试了下,也不行,不知道如何调整算法和参数。
一样
试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI
我试了一下,也不行。作者代码是纯卷积的视觉思路,可能表现力会差,得上lstm或注意力
还是得接着训才行,只是这个路子走通了。cnn没问题的,AlphaGo都可以。
我尝试了一种新的方法,贼简单,效果不错,还在整理代码,预计下周发出来,甚至不用mcts,一个list就搞定了。我这周要补考,下周抓紧发✧٩(ˊωˋ*)و✧
我尝试了一种新的方法,贼简单,效果不错,还在整理代码,预计下周发出来,甚至不用mcts,一个list就搞定了。我这周要补考,下周抓紧发✧٩(ˊωˋ*)و✧
等大佬效果
完啦,根本简单不了 qAq 看我最近的一些研究,Self那个项目 感觉一丢掉mcts就完蛋
https://github.com/Karesis/Self.git
我尝试用一个基于搜索的ai生成数据,然后我写了一个神经网络来做学习。这个效果还不错,可以看https://github.com/Karesis/GmetaMini2 还没有readme,晚一点我给一个。有时间我准备把里面的一些方法来替换这个作者项目里的神经网络
有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。
有一种方法,就是限制棋子只能在同色棋子周围落子。直接mask也行,比较好的办法是让输出以棋子为中心,输出多个(比如黑棋的话就得以黑棋为中心的5×5区域,以白棋为中心的5×5区域,然后再把它们累加起来,归一化,得到value和policy。也就是输出是总棋子×5×5的tensor)这样棋子就更加会进攻或防守。觉得效果不好可以再缩减,比如把5×5变成3×3。
请问下,具体是以哪个棋子呢?比如现在白棋下了一步,紧接着应该黑棋下,那么黑棋子的落子是围绕上一步白棋的落子,还是上上一步黑棋的落子呢?在我看来围绕白棋就是寻找防守,围绕黑棋就是寻求进攻?
试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI
大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?
试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI
大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?
不会一直降低的,因为数据一直在变化。只要维持在一个低的水平波动就是正常的。可以搞几个固定的模型对打画个曲线出来。
有一种方法,就是限制棋子只能在同色棋子周围落子。直接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。最后就看哪个大嘛,或者你可以所有统一归一化一下,把白的乘以一个负数,加一起看哪里大,就下哪里。
试试这个 https://github.com/initial-h/AlphaZero_Gomoku_MPI
大佬,请教下,整个训练的过程中,loss和entropy变化会怎么样,比如loss会持续降低吗?如果loss不持续降低,是不是也并不是意味着棋力不再增强?那我们观察棋力是否增强,有什么好的方法呢?和历史上最好的模型去对弈?
不会一直降低的,因为数据一直在变化。只要维持在一个低的水平波动就是正常的。可以搞几个固定的模型对打画个曲线出来。
感谢回复~
有一种方法,就是限制棋子只能在同色棋子周围落子。直接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了。
有一种方法,就是限制棋子只能在同色棋子周围落子。直接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了。
可以试一下,只是我最近没时间(过段时间我肯定会试的)。就是五子棋可以这样想,毕竟最终棋盘也不是特别大。有可能其他地方“浪费了”,类似于稀疏注意力的想法,并且这样可以把棋子落点约束到现有棋子周围(之前我试过随机在已有落子周围落子,在五子棋这个任务上,比单纯的随机落子会“聪明”一点) 但这只是一个想法,得试。
我也是遇到这个问题,棋盘大小改成15*15后,训练收敛loss非常快,500局就到3点几了,然后自对弈每局步数越来越少,20多步,10多步就结束胜出了。根本不防守的,双方只拼谁更快5子连珠。不管对方棋。硬着头皮继续训练,到3000局,也是一样,平均10-20步每局。永远学不会防守。
我也是遇到这个问题,棋盘大小改成15*15后,训练收敛loss非常快,500局就到3点几了,然后自对弈每局步数越来越少,20多步,10多步就结束胜出了。根本不防守的,双方只拼谁更快5子连珠。不管对方棋。硬着头皮继续训练,到3000局,也是一样,平均10-20步每局。永远学不会防守。
你有没有改善?我现在用棋手先sft之后,再强化学习,也还是不会防守,下了快40000盘了,双方老是贴边进攻。
我试了下基于规则评估器+随机Q+多层模拟的方式来训练,怎么说呢,有点用,但又没用,你可以很快的得到一个挺强的模型,但是这些都是基于规则评估器的设计,因为我试了不加载模型,单纯用评估器,也挺强的,但是他有盲点,除非你的评估器写得面面俱到,那就根本不是训练了。。。。。。然后目前还是转回mcts方案,目前的方法是把mcts模拟给他限制在存在棋子的周围两格内的空位,把第一步棋往中间下的概率调高,然后他爱咋咋的吧
我调小了棋盘的大小,9*9的棋盘,下了将近2w盘棋,还是没有得到一个很牛逼的AI。“限制在存在棋子的周围两格内的空位”,这件事情应该是让ai自己学会,而不是限制住,我发现现在还是学不会。
主要是为了减少计算量,限制两格空位的是MCTS树展开时第一个节点的选择范围,不是全局落子规则,这种方法对于常规的中心开局的局面是没有什么影响的,对于其他局面的开局会弱一些
也可以在收敛之后进行强化训练,换回标准AlphaZero_MCTS就行,算力够的话.....