Leela Zero
Leela Zero是由比利时程序员Gian-Carlo Pascutto起头所开发的电脑围棋软件,以及相关的运算计划。项目在2021年2月15日已经中止,并推荐改参与SAI与KataGo[2]。
原作者 | Gian-Carlo Pascutto |
---|---|
开发者 | Gian-Carlo Pascutto |
首次发布 | 2017年10月26日 |
当前版本 |
|
源代码库 | github |
编程语言 | C++ |
类型 | 电脑围棋 |
许可协议 | GPLv3 |
网站 | github |
原作者 | Jonathan Roy |
---|---|
开发者 | Jonathan Roy |
首次发布 | 2018年1月14日 |
源代码库 | github |
编程语言 | Node.js |
类型 | 电脑围棋 |
许可协议 | AGPLv3 |
网站 | zero |
简介
Leela Zero是依照DeepMind在科学期刊《自然》上对于AlphaGo Zero所发表的论文《[3]》所实做出的开源电脑围棋程序[4],也就是不使用人类棋谱与累积的围棋知识,仅实做围棋规则,使用单一类神经网络从自我对弈中学习(不像AlphaGo以人类角度思考,设计了Policy Network与Value Network)。
![]() |
维基教科书中的相关电子:Computer Go/Tromp-Taylor Rules |
软件使用蒙特卡洛树搜索(MCTS)仿真与ResNet[4],在蒙特卡洛树搜索仿真与自我训练时都采用Tromp–Taylor规则[5],这个规则的贴目虽然与中国规则相同,都是由黑棋贴7.5目,但在某些情境下可能会有差异。
代码部份,用户端对弈的代码与训练的代码以GPLv3授权公开[4],分布式运算的服务器端程序则以AGPLv3授权公开[6];数据的部份,训练对弈数据[7]以及训练对弈的原始数据[8]也可以公开下载[注 1]。
与论文的差异
初期时Leela Zero在确认算法以及程序是否实做正确,所以对论文里提到的部份参数进行调整,以加快验证速度:
- 类神经网络的架构
- AlphaGo Zero使用20 blocks或40 blocks,配上256 filters[3]。
- Leela Zero是逐步提升类神经网络的大小(在近期的版本开始使用Net2Net,将旧的网络数据转换到新的网络上[9]),一开始使用
- 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万盘时)[7]。
- 自我对战训练的盘数
- AlphaGo Zero使用最新的50万盘训练[3]。
- Leela Zero在10 blocks前(不含10 blocks)使用最新的25万盘自我对战结果训练[10](在2018年1月1号前因为有bug,导致只会使用最新的(约)16万盘自我对战结果进行训练[11]),在10 blocks x 128 filters后改用最新的50万盘自我对战结果训练[12]。
- 蒙特卡洛树搜索(MCTS)的仿真的次数
- AlphaGo Zero在论文里提到自我训练或正式对弈时,每一步都使用1600次仿真[3]。
- Leela Zero一开始使用与AlphaGo Zero的论文相同的1600次,但后来改为3200次[13]。
这些调整是希望在比较小的网络与训练盘数下快速确认程序的正确性[5]。在每个阶段确认没有重大问题以及bug后会重新评估调升,并且正式公开向社群寻求运算资源[5]。
另外作者发现在原论文里有瑕疵:论文里的第一层输入只有17个,会导致白棋较容易看到棋盘边缘(指类神经网络),这在Leela Zero内被修正为18个[4]。
目标
早期Leela Zero刚出来时,Gian-Carlo Pascutto的目标是重制AlphaGo Zero的论文结果[4][14]。在后来受到更多关注后,有更多的计算资源与人力投入Leela Zero计划之中,使得Leela Zero的强度迅速提升,甚至已经超越先前开发的Leela以及其他对手[14]。
训练
由于作者估算以当时的高端硬件(以Nvidia的GeForce GTX 1080 Ti估算)大约需要1700年的计算量才能达到AlphaGo Zero自我学习2900万盘的水平[15],所以在2017年十一月开始,让自愿者使用自己的硬件,通过作者群开发的AutoGTP程序参加分布式运算计划(以GTP自动与服务器沟通以取得计算工作)[7]:
- 在计划启动的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%资源)[16][17][注 2],另外自0.10版支持纯CPU版本(不需GPU),现有算法的优化以及新算法的引入,这些因素大幅提升了整体的计算速度。
Leela Zero官方曾鼓励参与者使用Google Colaboratory所提供的免费运算资源帮助训练[18],但后来因为文档里的操作步骤过时而失效而移除文档[19]。
在2019年十一月时,由于Gian-Carlo Pascutto个人时间的限制,加上最近的50万盘没有推进,而且其他的项目有不错的前景(包括SAI与KataGo),宣布先将训练盘数加到75万盘以确认是否到了极限,并暂定于2020年1月31日结束这次长达两年的训练[20]。
合作
Minigo
Minigo同样也是依照AlphaGo Zero论文所独立实做出来的软件[21],而Minigo项目取得Google赞助的计算资源[21],通过大量计算资源得到品质还不错的训练网络数据。因此Leela Zero的团队与Minigo的团队基于双方的经验,讨论参数的调整能带来的改善,以及双方训练数据共用的可能性[22]。
ELF OpenGo
ELF OpenGo是Facebook依照AlphaGo Zero与AlphaZero所实做出来的软件[23],由于Facebook使用大量资源运算(使用2000颗GPU计算两周)并公开训练网络数据,Leela Zero团队得以将数据转换为Leela Zero可以使用的格式(Hash值为62b5417b
[7]),并进行分析。
Leela Zero后来决定将ELF OpenGo的数据混入自我对弈,在2018年5月7日后引入了ELF OpenGo的数据[24][25]。
成绩
名称
程序名称会以LZ
或LeelaZero
之类的名称命名。大致上有几个不同的版本,像是使用训练网络的Hash值为名(如LZ-d6f3a6-t1-p1600
[27]),或是使用训练世代的次数为名(如LZ-000-p1600-t1-r1
[28])。
特例
有几个特别的训练网络不是自我训练产生,而是通过人类顶尖棋手的对弈棋谱产生,用以作为阶段性的指针。
名为LZ-HBest1-t1-p1600
[29][注 3]的帐号是使用Leela Zero的程序加上以人类棋谱计算出的20 blocks x 256 filters训练网络[31]所产生的的版本[32](BayesElo约2650分[33])。
另一个帐号是LZH256x20-t4-nolim
[34],也是使用20 blocks x 256 filters训练网络,但以CGOS的时间限制,找出Leela Zero的程序与人类棋谱训练的网络可以达到的最高成绩(BayesElo约3610分[33])。
分数
另外由于CGOS可以任意注册名称,有些人会拿较强的软件摸鱼混珠(而非使用Leela Zero),因此CGOS上面的数据需要确认后才有参考价值[35]。在CGOS上测试比较完整的基准参数是t1-p1600
(Thread 1、Playouts 1600),但目前(2018年四月)已暂时没有使用这个参数测试训练网络:
- 在
LZ-c99f1a-t1-p1600
[36](第36代,约136万盘训练)的BayesElo分数约1830分[33],超越CGOS的分数基准GNU Go(1800分),不过此时对GNU Go的胜率还不高。 - 在
LZ-097dee-t1-p1600
[37](第41代,约146万盘训练)后可以稳定对GNU Go获胜。此时BayesElo分数约2000分[33]。 - 在
LZ-c83e1b-t1-p1600
[38](第57代,约266万盘训练)的BayesElo分数约2480分[33],这是最后一个5 blocks x 64 filters的版本。 - 在
LZ-ed002c-t1-p1600
[39](第58代,约286万盘训练)的BayesElo分数约2460分[33],这是第一个6 blocks x 128 filters的版本。 - 在
LZ-5773f4-t1-p1600
[40](第65代,约314万盘训练)的BayesElo分数约2670分[33],是第一个在相同运行参数下,超越以人类棋谱训练出的版本(即LZ-HBest1-t1-p1600
[29]的2650分)。
相关链接
- AlphaGo Zero,Leela Zero所参考的论文所实做的电脑围棋软件。
- ELF OpenGo,由Facebook团队依照AlphaGo Zero论文所实做的开源电脑围棋软件,并将训练的数据被Leela Zero团队纳入。
- Leela,同作者的上一代电脑围棋软件。
- Minigo,另外一套开源电脑围棋软件。
- SAI,改自Leela Zero但支持动态贴目的围棋软件。
- 电脑围棋
- 围棋软件
参考数据
- . 2019年4月4日 [2019年4月4日].
- . 自然 (期刊). 2017-10-18 [2017-12-18]. (原始内容存档于2018-04-12) (英语).
- . [2017-12-18]. (原始内容存档于2021-01-06) (英语).
- . [2017-12-18]. (原始内容存档于2019-02-17) (英语).
- . [2018-01-14]. (原始内容存档于2020-09-15) (英语).
- . [2017-12-18]. (原始内容存档于2018-05-05).
- . [2018-01-09]. (原始内容存档于2019-10-18) (英语).
- . [2019-04-06]. (原始内容存档于2019-10-18) (英语).
- . 2017-12-24 [2017-12-27]. (原始内容存档于2019-02-17) (英语).
- . 2018-01-01 [2018-01-03]. (原始内容存档于2020-11-09) (英语).
- . [2018-04-02]. (原始内容存档于2020-11-09) (英语).
- . 2018-03-13 [2018-04-11]. (原始内容存档于2019-02-17) (英语).
- . European Go Federation. 2018-05-24 [2018-06-02]. (原始内容存档于2018-07-06).
- . 2017-10-20 [2017-12-18]. (原始内容存档于2020-01-18) (英语).
- . [2018-01-08]. (原始内容存档于2019-02-17) (英语).
- . [2018-01-08]. (原始内容存档于2020-01-03) (英语).
- . 2018-04-24 [2019-04-06]. (原始内容存档于2019-04-25) (英语).
- . 2018-10-23 [2019-04-06]. (原始内容存档于2019-04-29) (英语).
- . 2019-12-16 [2020-01-02]. (原始内容存档于2021-02-12) (英语).
- . [2018-02-02]. (原始内容存档于2020-11-09) (英语).
- . [2018-02-02]. (原始内容存档于2019-10-18) (英语).
- . [2018-05-06]. (原始内容存档于2018-05-06) (英语).
- . 2018-05-03 [2018-05-16]. (原始内容存档于2019-06-05) (英语).
- . [2018-05-08]. (原始内容存档于2019-02-17) (英语).
- . [2017-12-20]. (原始内容存档于2017-12-22) (英语).
- . 2018-02-09 [2018-02-25]. (原始内容存档于2020-07-10) (英语).
- . [2018-02-25]. (原始内容存档于2018-03-15) (英语).
- . [2017-12-20]. (原始内容存档于2020-07-10) (英语).
- . [2018-01-14]. (原始内容存档于2019-10-18) (英语).
- . [2018-02-02]. (原始内容存档于2019-02-17) (英语).
- . 2017-12-17 [2017-12-20]. (原始内容存档于2019-02-17) (英语).
- . [2018-02-02]. (原始内容存档于2018-01-17) (英语).
- . 2018-02-19 [2018-03-14]. (原始内容存档于2020-07-10) (英语).
- . [2018-01-05]. (原始内容存档于2019-02-17) (英语).
- . 2017-12-26 [2018-01-09]. (原始内容存档于2020-07-10) (英语).
- . 2017-12-31 [2018-01-01]. (原始内容存档于2020-07-10) (英语).
- . 2018-01-19 [2018-02-02]. (原始内容存档于2020-07-10) (英语).
- . 2018-01-22 [2018-02-02]. (原始内容存档于2020-07-10) (英语).
- . 2018-01-28 [2018-01-29]. (原始内容存档于2020-07-10) (英语).
- . [2018-03-09]. (原始内容存档于2018-03-08) (中文(中国大陆)).
- . 2018-04-27 [2018-05-13]. (原始内容存档于2018-04-30) (中文(中国大陆)).
注解
- 目前的原始训练数据超过150 GB,故通过BitTorrent的方式提供下载。
- 此时是使用5 blocks x 64 filters,从本来约每小时1500局,增加至约每小时3000局,大约多一倍的速度。
- Hash值为1e2b85cf611d5ede3f8d77ddc56a7bd79a7f1e51a647ddea428b92c00fdf2612[30],偶而会以1e2b85cf出现在Test Matches的Network Hashes上[7]。
外部链接
- 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