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

采用人工对战数据加快收敛 可行性分析 #26

Open apple1987 opened 6 years ago

apple1987 commented 6 years ago

您好 我现在想采用人工对战的数据用于加速收敛,请问这里人工对战的话,训练时候的mcts_probs_batch概率该如何设定呢 ,可否让采取当前action的概率为1 其他为0?

junxiaosong commented 6 years ago

应该是可以的,你可以收集一些人工对战或者用纯的MCTS对战产生的数据,来监督学习训练一个模型用于初始化,应该能加速收敛,策略部分学习的目标可以就按你说的那样,采取的action对应的概率为1,其他位置为0

apple1987 commented 6 years ago

谢谢,还有个问题,我这有个场景,“赛车追逐”,2辆赛车分别采取不同动作和策略攻击或者躲避对方,满足一定条件下的输赢博弈问题。这种非规则多action的场景,适合采用MCTS+NET框架吗,还是采用A3C,DDPG这种会比较好,不知道您有没有尝试过这种应用,(^o^)/~。

junxiaosong commented 6 years ago

要用MCTS进行前向搜索,必须要有环境的状态转移模型,比如在下棋里面在一个棋盘状态下选择某个落子之后到达什么样的新的棋盘状态这个过程十分明确,且模拟的计算量很小。我估计对于你的这个场景,应该没有明确的状态转移模型,当然你可以尝试把游戏引擎本身嵌入MCTS搜索过程中来进行前向搜索。而使用A3C,DDPG这种的话就不需要环境的状态转移模型了。

315920958 commented 6 years ago

请问一个小问题?song先生为什么选择使用8*8棋盘呢?如果没记错的话,五子棋需要至少11路棋盘,黑棋才能在第一手无限制的规则中必胜。 五子棋在不同棋盘下的策略也是完全不同的。

junxiaosong commented 6 years ago

@315920958 使用小棋盘主要是因为计算资源有限,然后这个项目的出发点是学习理解AlphaZero,用小棋盘的话能更快的看到训练的过程有没有学到东西,也能更快的尝试不同的参数或者模型结构之类的。对于五子棋本身我也不是很懂哈

statsmind commented 1 year ago

不仅棋盘调整为8x8,5子棋还需要变为4子棋,这样能更快看到训练的结果。同时还需要用到多进程并发获取自对弈数据,要不然实在是太慢了

总共耗时 133.6232秒, 每局耗时 89.3080秒, 每局平均 15.6步, 每步耗时 6.039879秒; 总局数 25, train_player1 赢16局, train_player1 赢7局, 平2局 游戏运行进度: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 25/25 [02:13<00:00, 5.35s/it]

epoch 1/10, loss=2.8048, entropy=2.4316, policy_err=2.4312, value_err=0.3736, batch_size=1332, kl=0.0000, lr=0.0017558, lr_multiplier=0.0877915 epoch 2/10, loss=2.8019, entropy=2.4313, policy_err=2.4303, value_err=0.3716, batch_size=1332, kl=0.0001, lr=0.0017558, lr_multiplier=0.0877915 epoch 3/10, loss=2.7981, entropy=2.4325, policy_err=2.4290, value_err=0.3691, batch_size=1332, kl=0.0004, lr=0.0017558, lr_multiplier=0.0877915 epoch 4/10, loss=2.7935, entropy=2.4348, policy_err=2.4272, value_err=0.3662, batch_size=1332, kl=0.0011, lr=0.0017558, lr_multiplier=0.0877915 epoch 5/10, loss=2.7883, entropy=2.4381, policy_err=2.4251, value_err=0.3631, batch_size=1332, kl=0.0023, lr=0.0017558, lr_multiplier=0.0877915 epoch 6/10, loss=2.7826, entropy=2.4421, policy_err=2.4228, value_err=0.3598, batch_size=1332, kl=0.0040, lr=0.0017558, lr_multiplier=0.0877915 epoch 7/10, loss=2.7765, entropy=2.4465, policy_err=2.4204, value_err=0.3562, batch_size=1332, kl=0.0064, lr=0.0017558, lr_multiplier=0.0877915 epoch 8/10, loss=2.7704, entropy=2.4510, policy_err=2.4179, value_err=0.3525, batch_size=1332, kl=0.0094, lr=0.0017558, lr_multiplier=0.0877915 epoch 9/10, loss=2.7642, entropy=2.4556, policy_err=2.4154, value_err=0.3489, batch_size=1332, kl=0.0128, lr=0.0017558, lr_multiplier=0.0877915 epoch 10/10, loss=2.7581, entropy=2.4599, policy_err=2.4128, value_err=0.3453, batch_size=1332, kl=0.0164, lr=0.0017558, lr_multiplier=0.0877915