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