动手实现并行版AlphaZero五子棋
前言
项目链接:github.com/hijkzzz/alp…
AlphaZero算法已经发布了一年多了,GitHub也有各种各样的实现,有一千行Python代码单线程低性能版,也有数万行C++代码的分布式版本。但是这些实现都不能满足一般的算法爱好者的需求,即一个简单的并且单机的可运行的高性能AlphaZero算法。
一图解密AlphaZero
首先我们通过一张图了解一下AlphaZero算法的原理
![432aa553e5a3ef4ba5edf1a6c86cd5fe.png](https://img-blog.csdnimg.cn/img_convert/432aa553e5a3ef4ba5edf1a6c86cd5fe.png)
可以看到AlaphaGo Zero的算法流程分为:
- 自对弈(利用蒙特卡洛树搜索)N局生成棋谱
- 利用生成的棋谱训练网络
- 评估新训练的网络
分析
对于Python版本的AlphaZero算法,通常受限制于GIL,过程中最耗时间的自对弈阶段(见下图)无法并行化,所以最直接的优化方式是使用C++这种高性能语言实现底层运算细节。
![fb9e7342b86e31c0dbf8bd37c842d7a0.png](https://img-blog.csdnimg.cn/img_convert/fb9e7342b86e31c0dbf8bd37c842d7a0.png)
解决方法
<