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