Junxiao Song
Junxiao Song
1. loss下降到2左右之后,你有尝试人工对战评估下AI的情况么?可能已经学的不错了?因为loss确实是不会一直下降的,我也记不太清6x6四子棋最后loss跑到多少了,只记得8x8五子棋最后loss跑到2.2左右 2. explain_var_old这个数值可以用来看value function的学习情况,小于0说明预测很不准,比较理想的情况是在0~1之间逐渐增大
可以参考issue #25
给的模型文件是最开始基于Theano/Lasagne的版本训练得到的,所以没法直接用tensorflow加载。但是如果你用cPickle加载那个文件的话可以看到其实保存的就是神经网络每一层的权重参数的list,你可以考虑如何将这些权重参数赋值给tensorflow的网络,之前在PyTorch里类似处理过,参见 #5
因为evaluate这块完全对训练过程没有影响,只是用来观察一下训练进度,所以你完全可以按照想要观察的方式来进行,比如让current_policy对抗best_policy。我这边和pure_MCTS对比是因为pure_MCTS是一个相对稳定的基准,能看出我们训练的policy的绝对水平大概在什么位置,而current_policy对抗best_policy的话即使胜率很高也只是相对的,可能两个都很弱。 另外best_win_ratio这个确实是会重新从0开始,所以训练好的有价值的模型可以自己重命名保存起来。
谢谢你的建议,第一条是现在已经支持的,在创建TrainPipeline时把init_model参数指定为之前训练保存的模型就可以了;第二条分布式训练在好几个issue里都有过讨论,我这边估计短时间内没时间添加了,欢迎有兴趣的童鞋实现;第三条如果有需要的话可以在train.py里很容易保存。
Nice work!You have trained a good policy on 15*15 board?
我也遇到过跑偏的情况,比较明显的表现是explained_var_old:0.000,explained_var_new:0.000,两个都为0了,一般重跑一下就好了;另外减小learn_rate似乎能防止这种情况
@Egolas 不知道你在测试的时候n_playout是否依然设置的是400,我之前也注意到边缘落子不去堵的情况,当时我把n_playout慢慢增大,记得到3000的时候,就会堵了。其实在AlphaZero论文里虽然训练的时候n_playout设置的是800,但他们测试评估的时候其实会跑几十万次模拟,所以在单步时间允许的范围内增大n_palyout能提高效果,一定程度上解决这个问题。 如果要从算法训练的角度改进的话,我的想法是增加exploration的程度,使得自我对弈数据更多样化,比如增加开局时的噪声,或者最开始几步随机落子,然后在此基础上再自我对弈,以避免自我对弈始终从棋盘中央开始。这是我的想法,没有测试过,供参考。
测试评估我指的是人工对战的时候,就是发现AI不堵边缘时,尝试把playout设置的大一些,可能就会堵了。 现在使用的网络结构是很随意定的,考虑到实验的棋盘比较小,所以就用了一个很简单的卷积网络,卷积的层数大概就是让最上层的感受野能覆盖整个棋盘。关于你遇到的增加一个卷积层之后就完全不收敛的情况,可以减小learning rate试试。 关于网络结构我也没太多思路,一个可以尝试的就是使用AlphaGo Zero论文中采用的Res Block的结构,当然这边不需要20个block这么多,可能2~3个就差不多了。
这个公式没问题的,只对self._parent._n_visits开根号,不确定的话可以参见AlphaGo Zero论文