junxiaosong / AlphaZero_Gomoku

An implementation of the AlphaZero algorithm for Gomoku (also called Gobang or Five in a Row)
MIT License
3.27k stars 964 forks source link

遇到好像是陷入了local minimum的问题 #14

Closed GeneZC closed 6 years ago

GeneZC commented 6 years ago

在自我对弈的训练中最终陷入到两方都只进攻不防守,导致一局棋很快就结束了而且局面都比较类似,这种情况的问题在哪里?

junxiaosong commented 6 years ago

是每次训练最后都是这个情况,还是偶尔一次会到这个情况?大概跑了多少对局之后出现这种情况?出现这种情况的时候有没有人工和模型对战一下,也是不会防守么?

GeneZC commented 6 years ago

11*11的棋盘 每次训练都会遇到这种情况 大概跑了1500局之后 试了人工对战,就是不会防守

junxiaosong commented 6 years ago

8 8的棋盘跑过是正常的么?如果8 8的棋盘训练正常,现在只是增大了棋盘但没有改训练参数就出现这个问题的话,我的建议是可以试试减小mcts_alphaZero.py中dirichlet噪声的参数,具体可以看一下issue 13,现在代码里用的是0.3,可以减小到0.15或0.1,可能可以避免自我对弈每局局面都很类似的情况。

GeneZC commented 6 years ago

好的 我试试

GeneZC commented 6 years ago

还有我想问这与没有异步实现蒙特卡洛树搜索有没有关系

junxiaosong commented 6 years ago

我觉得没有关系的,现在每一步用于训练的mini-batch数据也都是从self-play生成的data buffer中随机采样的,不是只用最近一局的数据,所以和一边生成self-play数据一边训练逻辑上差异不大

GeneZC commented 6 years ago

已解决

junxiaosong commented 6 years ago

Hi @GeneZC , 能分享下你这边最后发现了什么问题,以及如何解决的么?感觉很多童鞋都有遇到类似的问题,可能有些经验可以供大家借鉴一下

GeneZC commented 6 years ago
  1. 减小dirichlet噪声
  2. 增大simulation的数量 通过上面的两点在我这里可以缓解我之前遇到的对局过于类似的情况
GeneZC commented 6 years ago

其实很多时候出现这种情况在我这里往往是因为训练的时间不够长,这才是最关键的地方

jialeli1 commented 5 years ago
  1. 减小dirichlet噪声
  2. 增大simulation的数量 通过上面的两点在我这里可以缓解我之前遇到的对局过于类似的情况 你好,请问一下你在1515棋盘的时候最终解决不会堵棋这个问题的时候除了这两点还有其他的一些操作吗?因为我在训练1515的时候调整了这两点但是训练很久过后发现它能较好为自己五连落子,但还是不会堵棋,有些困惑。我猜想原因可能是网络过于简单,可以引入残差结构,另外我还自己和筛选模型的MCTSplayer下了几次,我发现这个筛选器的棋力就很不好,所以我怀疑是不是最终筛选方式不合理?希望你能给我一点经验建议 ;-)
GeneZC commented 5 years ago

@jialeli1

jialeli1 commented 5 years ago

@jialeli1

  • 引入残差结构最好,我在最后的时候用了3个残差层,但我建议15这样的大棋盘最好能用到4个以上的残差
  • 还有就是我觉得mcts不要继续使用python来编写了,python的mcts真的很慢,这样效率不高

好的,我决定试试添加残差,多谢辣!

baimantou commented 4 years ago

@jialeli1 关于15 15的棋盘的问题,可以交流一下嘛,我的模型训练不出来,不知道咋回事,可以解答一下嘛,万分感谢

anxingle commented 4 years ago

8 8的棋盘跑过是正常的么?如果8 8的棋盘训练正常,现在只是增大了棋盘但没有改训练参数就出现这个问题的话,我的建议是可以试试减小mcts_alphaZero.py中dirichlet噪声的参数,具体可以看一下issue 13,现在代码里用的是0.3,可以减小到0.15或0.1,可能可以避免自我对弈每局局面都很类似的情况。

@junxiaosong 减小到0.1的话,减小了dirichlet噪声。不是会导致局面类似吗?

junxiaosong commented 4 years ago

8 8的棋盘跑过是正常的么?如果8 8的棋盘训练正常,现在只是增大了棋盘但没有改训练参数就出现这个问题的话,我的建议是可以试试减小mcts_alphaZero.py中dirichlet噪声的参数,具体可以看一下issue 13,现在代码里用的是0.3,可以减小到0.15或0.1,可能可以避免自我对弈每局局面都很类似的情况。

@junxiaosong 减小到0.1的话,减小了dirichlet噪声。不是会导致局面类似吗?

@anxingle 说的是减小dirichlet噪声的参数alpha,这个会让dirichlet噪声更peak,不是减小dirichlet噪声前面的权重

anxingle commented 4 years ago

@anxingle 说的是减小dirichlet噪声的参数alpha,这个会让dirichlet噪声更peak,不是减小dirichlet噪声前面的权重

我理解错了,原来是这样! 😸