Leela Zero

Leela Zero是由比利时程序员Gian-Carlo Pascutto起头所开发的电脑围棋软件，以及相关的运算计划。专案在2021年2月15日已经中止，并推荐改参与SAI与KataGo。

## 简介

Leela Zero是依照Google DeepMind在科学期刊《自然》上对于AlphaGo Zero所发表的论文《Mastering the game of Go without human knowledge》所实做出的开源电脑围棋程式，也就是不使用人类棋谱与累积的围棋知识，仅实做围棋规则，使用单一类神经网络从自我对弈中学习（不像AlphaGo以人类角度思考，设计了Policy Network与Value Network）。

软件使用蒙特卡洛树搜索（MCTS）模拟与ResNet，在蒙特卡洛树搜索模拟与自我训练时都采用Tromp–Taylor规则，这个规则的贴目虽然与中国规则相同，都是由黑棋贴7.5目，但在某些情境下可能会有差异。

程式码部分，用户端对弈的程式码与训练的程式码以GPLv3授权公开，分散式运算的服务器端程式则以AGPLv3授权公开；资料的部分，训练对弈资料以及训练对弈的原始资料也可以公开下载。

## 与论文的差异

初期时Leela Zero在确认算法以及程式是否实做正确，所以对论文里提到的部分参数进行调整，以加快验证速度：

类神经网络的架构：AlphaGo Zero使用20 blocks或40 blocks，配上256 filters。

Leela Zero是逐步提升类神经网络的大小（在近期的版本开始使用Net2Net，将旧的网络资料转换到新的网络上），一开始使用

- 1 block x 8 filters（2017年11月10日，第0代），并逐步换成
- 4 blocks x 32 filter（2017年11月17日，第2代，训练约1.9万盘时）。
- 5 blocks x 64 filters（2017年11月21日，第5代，约13.7万盘时）。
- 6 blocks x 128 filters（2018年1月20日，第58代，约286万盘时）。
- 10 blocks x 128 filters（2018年3月5日，第92代，约481万盘时）。
- 15 blocks x 192 filters（2018年4月9日，第117代，约664万盘时）。
- 20 blocks x 256 filters（2018年7月28日，第158代，约872万盘时），到目前使用的
- 40 blocks x 256 filters（2018年9月4日，第174代，约997万盘时）。

自我对战训练的盘数：AlphaGo Zero使用最新的50万盘训练。

Leela Zero在10 blocks前（不含10 blocks）使用最新的25万盘自我对战结果训练（在2018年1月1号前因为有bug，导致只会使用最新的（约）16万盘自我对战结果进行训练），在10 blocks x 128 filters后改用最新的50万盘自我对战结果训练。

蒙特卡洛树搜索（MCTS）的模拟的次数：AlphaGo Zero在论文里提到自我训练或正式对弈时，每一步都使用1600次模拟。

Leela Zero一开始使用与AlphaGo Zero的论文相同的1600次，但后来改为3200次。

这些调整是希望在比较小的网络与训练盘数下快速确认程式的正确性。在每个阶段确认没有重大问题以及bug后会重新评估调昇，并且正式公开向社群寻求运算资源。

另外作者发现在原论文里有瑕疵：论文里的第一层输入只有17个，会导致白棋较容易看到棋盘边缘（指类神经网络），这在Leela Zero内被修正为18个。

## 目标

早期Leela Zero刚出来时，Gian-Carlo Pascutto的目标是重制AlphaGo Zero的论文结果。在后来受到更多关注后，有更多的计算资源与人力投入Leela Zero计划之中，使得Leela Zero的强度迅速提升，甚至已经超越先前开发的Leela以及其他对手。

现在的目标是希望在移动电话上也能够有足够强的围棋软件可以使用。

## 训练

由于作者估算以当时的高阶硬件（以Nvidia的GeForce GTX 1080 Ti估算）大约需要1700年的计算量才能达到AlphaGo Zero自我学习2900万盘的水平，所以在2017年十一月开始，让自愿者使用自己的硬件，透过作者群开发的AutoGTP程式参加分散式运算计划（以GTP自动与服务器沟通以取得计算工作）：

- 在计划启动的34天后（2017年12月13日），自我对弈的训练量超过100万盘。
- 59天后（2018年1月8日）超过200万盘。
- 74天后（2018年1月23日）超过300万盘。
- 100天后（2018年2月18日）超过400万盘。
- 119天后（2018年3月9日）超过500万盘。
- 138天后（2018年3月28日）超过600万盘。
- 166天后（2018年4月25日）超过700万盘。
- 218天后（2018年6月16日）超过800万盘。
- 261天后（2018年7月29日）超过900万盘。
- 299天后（2018年9月5日）超过1000万盘。

2018年初，志愿者申请到超级电脑的部分计算资源，印第安纳大学的Big Red II（申请到3360 cores，约该台超级电脑的10.7%资源），另外自0.10版支援纯CPU版本（不需GPU），现有算法的最佳化以及新算法的引入，这些因素大幅提升了整体的计算速度。

Leela Zero官方曾鼓励参与者使用Google Colaboratory所提供的免费运算资源帮助训练，但后来因为文件里的操作步骤过时而失效而移除文件。

在2019年十一月时，由于Gian-Carlo Pascutto个人时间的限制，加上最近的50万盘没有推进，而且其他的专案有不错的前景（包括SAI与KataGo），宣布先将训练盘数加到75万盘以确认是否到了极限，并暂定于2020年1月31日结束这次长达两年的训练。

## 合作

### Minigo

Minigo同样也是依照AlphaGo Zero论文所独立实做出来的软件，而Minigo专案取得Google赞助的计算资源，透过大量计算资源得到品质还不错的训练网络资料。因此Leela Zero的团队与Minigo的团队基于双方的经验，讨论参数的调整能带来的改善，以及双方训练资料共用的可能性。

### ELF OpenGo

ELF OpenGo是Facebook依照AlphaGo Zero与AlphaZero所实做出来的软件，由于Facebook使用大量资源运算（使用2000颗GPU计算两周）并公开训练网络资料，Leela Zero团队得以将资料转换为Leela Zero可以使用的格式（Hash值为`62b5417b`），并进行分析。

Leela Zero后来决定将ELF OpenGo的资料混入自我对弈，在2018年5月7日后引入了ELF OpenGo的资料。

## 成绩

### CGOS

在CGOS（Computer Go Server）上会有志愿者将每次演化的版本挂上进行测试（19x19）以比较与其他围棋软件的差距。

#### 名称

程式名称会以`LZ`或`LeelaZero`之类的名称命名。大致上有几个不同的版本，像是使用训练网络的Hash值为名（如`LZ-d6f3a6-t1-p1600`），或是使用训练世代的次数为名（如`LZ-000-p1600-t1-r1`）。

#### 特例

有几个特别的训练网络不是自我训练产生，而是透过人类顶尖棋手的对弈棋谱产生，用以作为阶段性的指标。

名为`LZ-HBest1-t1-p1600`的账号是使用Leela Zero的程式加上以人类棋谱计算出的20 blocks x 256 filters训练网络所产生的的版本（BayesElo约2650分）。

另一个账号是`LZH256x20-t4-nolim`，也是使用20 blocks x 256 filters训练网络，但以CGOS的时间限制，找出Leela Zero的程式与人类棋谱训练的网络可以达到的最高成绩（BayesElo约3610分）。

#### 分数

另外由于CGOS可以任意注册名称，有些人会拿较强的软件摸鱼混珠（而非使用Leela Zero），因此CGOS上面的数据需要确认后才有参考价值。在CGOS上测试比较完整的基准参数是`t1-p1600`（Thread 1、Playouts 1600），但目前（2018年四月）已暂时没有使用这个参数测试训练网络：

- 在`LZ-c99f1a-t1-p1600`（第36代，约136万盘训练）的BayesElo分数约1830分，超越CGOS的分数基准GNU Go（1800分），不过此时对GNU Go的胜率还不高。
- 在`LZ-097dee-t1-p1600`（第41代，约146万盘训练）后可以稳定对GNU Go获胜。此时BayesElo分数约2000分。
- 在`LZ-c83e1b-t1-p1600`（第57代，约266万盘训练）的BayesElo分数约2480分，这是最后一个5 blocks x 64 filters的版本。
- 在`LZ-ed002c-t1-p1600`（第58代，约286万盘训练）的BayesElo分数约2460分，这是第一个6 blocks x 128 filters的版本。
- 在`LZ-5773f4-t1-p1600`（第65代，约314万盘训练）的BayesElo分数约2670分，是第一个在相同执行参数下，超越以人类棋谱训练出的版本（即`LZ-HBest1-t1-p1600`的2650分）。

### 野狐围棋

2017年12月16日，贴吧上的志愿者以`alphaleela`的账号在野狐围棋上开始测试，以快棋对弈为主，并随时更新为最新版的训练网络。于2017年12月30日（约150万盘训练）从级位升到一段，在2018年3月8日（约497万盘训练）升到九段。

### 2018世界人工智能围棋大赛

在预赛取得第三名，仅输给PhoenixGo与绝艺。

## 相关连结

- AlphaGo Zero，Leela Zero所参考的论文所实做的电脑围棋软件。
- ELF OpenGo，由Facebook团队依照AlphaGo Zero论文所实做的开源电脑围棋软件，并将训练的数据被Leela Zero团队纳入。
- Leela，同作者的上一代电脑围棋软件。
- Minigo，另外一套开源电脑围棋软件。
- SAI，改自Leela Zero但支援动态贴目的围棋软件。
- 计算机围棋
- 围棋软件

## 外部链接

- https://github.com/leela-zero/leela-zero
- Leela Zero，Leela Zero的训练状态页。
- leela-zero eval (0x0): Leela-Zero (eval with more cross play)
- Leela Zero on GitHub
- Leela Zero on Sensei's Library
- Play Leela Zero on ZBaduk

## 基本资料

- 作者：Gian-Carlo Pascutto
- 开发者：Gian-Carlo Pascutto
- 发行日期：2017年10月26日
- 编程语言：C++
- 类型：电脑围棋
- 许可协议：GPLv3
- 日语原文：Leela Zero Server
- 头衔：Leela Zero Server
- 作者：Jonathan Roy
- 开发者：Jonathan Roy
- 发行日期：2018年1月14日
- 编程语言：Node.js
- 许可协议：AGPLv3
- 软件版本周期：yes