tmp 文件夹用于存储缓存数据。 data 文件夹下设置 info.json,格式为
{
"models": [
"data/nnet-2024-10-30-22-14-10.pt"
],
"best": "data/nnet-2024-10-30-22-14-10.pt",
"dataset": [
]
}
然后推荐用 conda 创建虚拟环境,在环境中安装 torch 等依赖。最终执行
nohup python selfplay.py >> log.txt 2>&1 &
进行训练。运行日志见 log.txt
每一次 ai 自我对弈,在对弈的过程中,每走一步棋之前先进行 numMCTSSims=500 次 MCTS 搜索,再获取当前状态
与现在的程序不同的是,
获得的训练数据去训练神经网络后,有时效果反而更差了,这是为什么? 怎样能保证这个策略迭代的过程能够有效地收敛至最优策略?
每次获取一定数量的训练数据(100000 量级)后,去训练策略网络和价值网络,用得到的新网络和旧网络进行对弈(50 次游戏),如果胜率超过 55% 就承认这次迭代是有效的,拿它替换旧网络;否则 reject 新网络。
除了这种竞技场对弈评价网络好坏的方式,还有没有其他可以量化的指标?只看网络训练过程中的 loss function 大小靠谱吗?
现在的程序有许多超参数 (在 selfplay.py 开头), 还有一些神经网络训练的超参数没有包括进去 (lr, weightdecay 之类的)。 而过去的一段时间里以为人工调整这些参数能够获得好的效果,但是都失败了,反而浪费了很长的时间。这个事情有没有什么理论指导可以少走弯路。
为什么 alphago 采用的带有策略先验的 PUCT 公式是 $$ u(s,a) = \bar{Q}{s,a} + c\mathrm{puct} P(s,a) \frac{\sum_b N(s,b)}{1 + N(s,a)} $$ 而一般的 UCT 公式是 $$ u(s,a)=\bar{Q}{s,a} + c\mathrm{uct} \sqrt{\frac{2\ln t}{N(s,a)}} $$ 这两个公式好像完全不一样?这些公式是怎么被写出来的?
在面临具体的强化学习问题时,怎样去权衡"探索"和"经验",哪些情况下只能用
之前尝试过用 python 的 concurrent.futures 模块去同时执行多次 selfplay,但是却发现没有得到加速,原因可能是用神经网络去 predict 的过程没有真正地并行。
有没有什么比较好的并行方法,比如在 mcts 搜索的过程中,等待收到一定数量个 predict request 后,将这些 requests 的输入合并为一个 tensor 一起做 predict,在 predict 结束之前这些 mcts 线程被锁死,直到 predict 结束以后将结果返还给各个线程。这样做能有效加速 selfplay 过程吗?这样的代码应该怎样写?