将棋吧 关注:8,228贴子:47,880
  • 0回复贴,共1

Alphazero-shogi开放

只看楼主收藏回复

真正的Alphazero其实是C库开发的,这里发布的基于python的代码。原版的核心算法代码是一个大佬复现的alphazero-go的版本,我在另一个大佬的国际象棋版下改出将棋版本。
整个代码分为四大步骤:预训练、自我博弈、训练及评估,其中第一个步骤是一次性的。首先通过`python src/shogi_zero/run.py sl`这个指令将/scripts/kif中的棋手的kif棋谱进行少回合的监督训练,得到一个“粗通将棋”的预训练模型。通过`python src/shogi_zero/run.py self`这个指令使用当前最好的模型(预训练模型)开始自己下棋,生成棋谱;通过`python src/shogi_zero/run.py opt`这个指令使用通过知识蒸馏、直接复制等手段得到的新模型对self得到的棋谱进行学习,不断迭代更新网络参数;通过`python src/shogi_zero/run.py eval`这个指令让opt模型与self模型对局,如50盘赢28盘,则self模型参数覆盖opt模型,opt模型用新参数接着自己打谱。
通过上述三个“死循环”,AI不断地迭代更新自己的下棋能力。我发布的代码中包括目前最好的模型,但实际上效果也一般,因为这个代码太吃电脑配置了,我1050显卡的笔记本电脑显然没资格跑出Deepmind团队的效果。
AlphaGO与Alphazero的本质区别在于蒙特卡洛树搜索算法的改进:前者是实打实的玩命下棋,得出每个棋盘状态的下一步的“好坏”,用于指导AI在实战中利用这个生成的决策树来找出最佳动作;后者使用神经网络“猜”出当前状态下可行的每个动作的“获胜的概率”,开发者训练的模型就是“猜的越来越准确”。需要注意的是,蒙特卡洛树搜索算法是蒙特卡洛搜索算法的特例,他不是完整遍历每个状态的每个动作生成一个“组合爆炸”的决策树,而是通过UCB1算法有依据地判断下一步选哪个动作来研究,在求解空间中一条相对靠谱的方向上找策略的“子树”。
代码和样本在贴吧官方群,有疑问可以在群里找我或者帖子里留言,因为本人是学生党,不一定能及时回复,敬请谅解。


IP属地:上海1楼2024-04-25 16:15回复