Alpha Zero 通用版(适用于任何游戏、任何框架!)
这是一个简化、高度灵活、带注释且(希望)易于理解的基于自我对弈强化学习的实现,基于 AlphaGo Zero 论文(Silver 等)。它被设计为易于应用于任何两人回合制对抗游戏和您选择的任何深度学习框架。我们为 Othello(黑白棋)提供了一个 PyTorch 和 Keras 的示例实现。可以在这里找到相关教程。我们还实现了许多其他游戏,如五子棋和井字棋。
要使用您选择的游戏,请继承 Game.py
和 NeuralNet.py
中的类并实现它们的功能。Othello 的示例实现可以在 othello/OthelloGame.py
和 othello/{pytorch,keras}/NNet.py
中找到。
Coach.py
包含核心训练循环,而 MCTS.py
执行蒙特卡洛树搜索。自我对弈的参数可以在 main.py
中指定。额外的神经网络参数在 othello/{pytorch,keras}/NNet.py
(cuda 标志、批量大小、训练轮数、学习率等)中。
要开始为 Othello 训练模型:
python main.py
在 main.py
中选择您的框架和游戏。
Docker 安装
为了方便环境设置,我们可以使用 nvidia-docker。一旦设置好 nvidia-docker,我们可以简单地运行:
./setup_env.sh
来设置一个(默认:pyTorch)Jupyter docker 容器。然后我们可以打开一个新终端并输入:
docker exec -ti pytorch_notebook python main.py
实验
我们为 6x6 的 Othello 训练了一个 PyTorch 模型(约 80 次迭代,每次迭代 100 集,每回合 25 次 MCTS 模拟)。这在一块 NVIDIA Tesla K80 上花了大约 3 天时间。预训练模型(PyTorch)可以在 pretrained_models/othello/pytorch/
中找到。您可以使用 pit.py
与其对弈。下面是该模型与随机基线和贪心基线对抗的表现图表,展示了不同迭代次数下的表现。
关于我们算法的简洁描述可以在这里找到。
引用
如果您发现这项工作有用,请随意引用它
@misc{thakoor2016learning,
title={Learning to play othello without human knowledge},
author={Thakoor, Shantanu and Nair, Surag and Jhunjhunwala, Megha},
year={2016},
publisher={Stanford University, Final Project Report}
}
贡献
虽然当前代码功能相当完善,但我们仍然可以从以下贡献中受益:
- 为更多游戏编写符合
Game.py
规范的游戏逻辑文件及其神经网络 - 其他框架的神经网络
- 不同游戏配置的预训练模型
- 代码的异步版本——自我对弈、神经网络训练和模型比较的并行处理
- 论文中描述的异步 MCTS
这里已经实现了一些扩展。
贡献者和鸣谢
- Shantanu Thakoor 和 Megha Jhunjhunwala 帮助完成了核心设计和实现。
- Shantanu Kumar 为 Othello 贡献了 TensorFlow 和 Keras 模型。
- Evgeny Tyurin 为井字棋贡献了规则和训练模型。
- MBoss 为五子棋贡献了规则和模型。
- Jernej Habjan 贡献了 RTS 游戏。
- Adam Lawson 为 3D 井字棋贡献了规则和训练模型。
- Carlos Aguayo 为连点成线贡献了规则和训练模型,并提供了JavaScript 实现。
- Robert Ronan 为 Santorini 贡献了规则。
- Plamen Totev 为 Othello 贡献了 Go Text Protocol 玩家。
注意:Chainer 和 TensorFlow v1 版本已被移除,但可以在此提交之前找到。