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

棋盘增大后是不是需要增加CNN的层数呢? #16

Open huyp182 opened 6 years ago

BIGBALLON commented 6 years ago

@782832949 hello, 我这样回答你的问题吧. 如果你有看AlphaGo Zero 的paper的话, 它们有两个实验,一个是20个blocks(40层conv),一个是40个blocks. 两个Net, 结论是后者更好.

那么,结合ResNet的特性.你加深Net是会带来好处的. 在这里就是model能学到更精准的估计.

来看这个五子棋, 如果按 @junxiaosong 哥的8x8棋盘,原本的net我觉得实际上太浅了.是可以加深的. 那么如果你再加大棋盘的话,我建议是加深层数.

PS: song哥的Net是conv堆积, 建议改成resnet.再考虑加深层数.

最后结论就是你想加大棋盘的话, 建议使用residual block的方式来加深 network. 当然,计算量就会大大提高,需要使用更好的GPU资源来训练 :smile:

have a nice try!

huyp182 commented 6 years ago

嗯,谢谢!顺便问一下,原文中有pρ和pπ两个策略网络,其中pπ是走棋速度快的,这个代码是不是用pure_mcts代替了pπ?

junxiaosong commented 6 years ago

你指的原文是哪篇?Alphazero论文里好像没有你说的那两个网络,隐隐记得最开始的AlphaGo论文里好像有个快速走棋的。 另外,pure_mcts和训练过程无关,这边只是用来评估看下模型训练效果的

huyp182 commented 6 years ago

嗯,就是AlphaGo里面的。。。AlphaZero把那个删了吗

junxiaosong commented 6 years ago

两者有很多不同的地方,总的来说AlphaZero的算法简洁又有效了。如果要详细了解的话还是看下论文吧,或者搜搜看别人的对比总结

huyp182 commented 6 years ago

嗯,,搜到了。不知道policy_loss为什么这样算呢? self.policy_loss = tf.negative(tf.reduce_mean(tf.reduce_sum(tf.multiply(self.mcts_probs, self.action_fc), 1))) 知道reduce_mean(),reduce_sum()的意思,但不知道为什么policy_loss是这个?

huyp182 commented 6 years ago

还有个问题,AlphaZero版的MCTS在进行一次扩展时是只选择满足a=argmax(Q+u)的那一个action吗?MCTS模拟是要下到终局还是不下到终局,而是根据结点的value来判断?

junxiaosong commented 6 years ago

@782832949 回答你上面那个问题,按照论文里policy_loss = -pi * log p,对应到tf的那个计算方式里,self.mcts_probs就是pi, self.action_fc 就是policy网络输出的log p, 所以那个就是直接按照表达式计算的policy loss.

TommyAnqi commented 6 years ago

@BIGBALLON ,我将网络改为resnet+bn 后,发现loss的跳动非常大,比如self-play 300局,会出现loss从2.9 上升到 4.5,或者从3.8下降到2.6,然后agent也没有太学会下棋。训练的方案我基本是按照@junxiaosong 的没有作改动,请问你有没有遇到这种情况,或者说这种要怎么解决比较合适。

xbhuang1994 commented 6 years ago

@BIGBALLON Hi,我发现大量的计算力都卡在了蒙特卡洛树搜索上,即使增加GPU貌似也无济于事。有没有好的办法能够解决这个蒙特卡洛树搜索效率的问题呢?

liunian321 commented 5 years ago

@TommyAnqi Excuse me, how did you change it?