KataGo

KataGo是一款由美國程式設計師David J. Wu所研發的免費開源的圍棋軟體，其採用分散式訓練並融入多項創新技術，現為最強大的圍棋人工智慧之一。它具備優越的通用性，支援多種圍棋規則、棋盤尺寸、貼目及讓子棋等。

## 背景

2015年，DeepMind的圍棋程式AlphaGo率先擊敗職業棋手樊麾，隨後在2016年AlphaGo李世乭五番棋中戰勝李世乭九段，並於2017年AlphaGo對陣柯潔比賽中擊敗柯潔九段，其在網路對弈平台亦取得全勝戰績。這些成果證明相關演演算法與技術的成熟，引發人們對人工智慧領域的關注。人機對戰結束後，DeepMind宣布AlphaGo將不再與人類對弈，並發表最終版本AlphaGo Zero的論文。

## 簡介

2019年初，作者以AlphaGo Zero和AlphaZero論文為基礎，並參考Leela Zero的實作經驗，結合自身研究的多項改進方法，設計出初期版本且發表相關論文。項目早期的訓練工作僅於內部進行，由簡街資本（Jane Street）提供運算資源支持。在經歷數次實驗性測試後，項目於2020年底轉為公開的分散式訓練，允許人們貢獻算力以生成訓練資料。所有網路權重與訓練數據亦同步公開。截至2025年10月，已累積超過8600萬筆訓練對局。

相較於其他圍棋程式，它具備多項獨特功能，例如：目數預測、自訂棋盤尺寸與貼目、支援讓子棋以及多種圍棋規則，它也使用多種先進技術及獨自發明的方法，還設計圍棋專屬的輸入特徵︰氣、刧爭、貼目奇偶性、活棋判斷與征子等。因其強大的棋力，它已成為職業棋手日常訓練與棋局分析的工具之一，也被線上圍棋網站「OGS」和「AI Sensei」用作分析引擎。

其名稱「KataGo」取自日文詞語「かた」（型），此概念源自武術中為磨練技藝而設計的動作模式，恰如其程式透過持續自我對弈以追求更高棋藝的核心理念。

它支持主流的硬體與作業系統。不過它本身是一個後端引擎，使用者通常需要搭配圍棋圖形使用者介面使用。

## 版本

### 內測版

g65，2019年2月，使用35顆 NVIDIA V100 訓練7天，網路規模從最初的b6c96提升至b10c128，再達到b15c192，其棋力表現與LZ130（Leela Zero的第130代網路）相當，達到職業棋手的強度。（v1.0）

g104，2019年6月，使用28顆 NVIDIA V100 花費19天，網路規模提升至b20c256。其改善訓練參數並新增LCB（信置下限）演算法，大幅增強棋力，僅需3.5天就超越前者，其棋力超越LZ-ELFv2（ELF OpenGo的v2權重），並接近LZ200水平。（v1.1）

g170，2020年1月，使用約44顆GPU耗時157天，網路規模增加至b20c256x2、b30c320x2和b40c256x2。其經過大幅改進並擴充功能，使訓練效率與品質顯著提升。相較上次，b20c256x2提升740Elo，b30c320x2與b40c256x2提升1000Elo。（v1.2~v1.4.5）

### 正式版

kata1，2020年12月啟用分散式訓練。目前持續進行更新並歷經多個版本。其網路架構亦不斷升級：初始規模為b40c256，2021年8月擴展至b60c320，2023年3月架構升級為b18c384nbt，2024年5月擴展至b28c512nbt，整體棋力提升900Elo。（v1.5~v1.16.x）

版本｜更新內容｜日期

v1.16.4｜ 新增 eval-cache（評估快取）功能，當回溯到上一步時，能利用已探索的評估結果 子樹價值偏差在虛手之後的節點不再生效，以避免評估被沒有局部特徵的模式所干擾 修復在貢獻分散式訓練時，不必要的鎖定可能阻擋新對局開始的問題 修復 play.py 和特徵提取中的拼寫錯誤，這些錯誤可能導致 Python 程式崩潰 進行各種內部程式碼重構與清理 ｜2025年10月20日

v1.16.3｜ 新增對 Windows 系統上 MinGW 編譯器的支援（用於 OpenCL/Eigen）允許使用人類策略來生成開局庫 修復分散式訓練程式偶發崩潰問題 為 Linux 版 CUDA 和 TensorRT 程式啟用 TCMalloc 修復某些虛手 hack 選項會導致搜尋行為錯誤的問題 修復開局庫轉換為訓練資料時的回合數不正確的問題 修復非法遊戲歷史記錄檢查的調試輸出 修復 MacOS/Metal 平台編譯和腳本問題 ｜2025年6月28日

v1.16.2｜ 修復 v1.16.1 中一個導致 Metal 後端完全無法使用神經網路權重計算的嚴重錯誤 修復在從原始碼編譯時，無法正確檢測較新的 TensorRT 版本的問題 ｜2025年6月4日

v1.16.1｜ 緩解因神經網路輸出出現無限值/非數值（NaN）導致程式崩潰的問題 修正 "-fixed-batch-size" 和 "-half-batch-size" 參數在基準測試中批次大小限制方面的錯誤 現在能容忍 SGF 或 GTP 指令中的簡單劫爭違規（類似於已支援的超級劫處理）升級編譯標準至 C++17，而不是 C++14 修復在 +bs50 可執行檔中不接受 50 參數的問題 更新 cmake 邏輯以支援新版 TensorRT 命名格式 大幅重組 Python 程式碼目錄結構，將模組移至 ./python/katago/ 套件中 更新部分訓練腳本不再依賴於符號連結，以改善在 Windows 系統上的相容性 ｜2025年6月3日

v1.16.0｜ 新增記錄 「動作價值」（q-value），即預期勝率與得分，並新增兩個策略頭通道 支援讀取新的訓練資料 (qValueTargetsNCMove) 和 v16 版網路，同時保持向後相容性 合併 Metal 後端的程式碼，可在 MacOS 上運行 KataGo（暫無預編譯執行檔）新增搜尋參數 enableMorePassingHacks，預設為 GTP/Analysis 啟用，改善虛手邏輯 分析引擎現在會報告 playSelectionValue，顯示 KataGo 選擇某一步的傾向 在訓練中添加對嵌套殘差瓶頸塊的實驗性支持，其透過單一或前後轉置的擴張卷積組成 在訓練中新增訓練視窗（即資料範圍）的日誌記錄 實現 npz 檔案的並發加載，以略微加快訓練速度 新增對 Pytorch 2.6+ 安全檢查點的支援 在 Python GTP play.py 腳本中支援矩形棋盤和命名規則 修復 GTP 指令 kata-get-param 無法正確讀取 numSearchThreads 的問題 修復即使允許非法動作，相同玩家連續第二次的移動也會被視為無效的問題 修復 autoAvoidRepeat 相關參數被忽略或解析失敗的問題 修復開局庫生成、更新各種 sgf/hint 處理工具 改進對 GoGoD 和 Fox SGF 格式的處理，以用於產生 sgf 訓練資料 改進 GPU 數值錯誤檢查與測試腳本 對 play.py 腳本進行細微修復 修復在彙總自我對弈檔案以快取其大小時，腳本錯誤地報告 修復用於摘要舊自我對弈檔案的腳本中的錯誤回報機制，以快取其檔案，避免頻繁的查詢 修復訓練程式碼在讀取「chunky」格式的資料檔時，隨機化計算不正確的問題 修復訓練程式碼在避免對同一資料重複取樣時過於激進的問題 修復洗牌腳本在記錄資料檔案範圍時不正確的問題，確保日誌資訊的準確性 ｜2025年4月10日

v1.15.3｜ 修復 genmove 在較高 humanSL 訪問次數與較低 maxVisits 時無法返回著法的錯誤 修復在從原始碼編譯時，無法正確檢測較新的 TensorRT 版本的問題 ｜2024年8月6日

v1.15.2｜ 修復無權重存取 humanSLRootExploreProbWeightless 不計入總訪問/模擬次數限制的問題 修復 KataGo 在第一次或第二次訪問任何節點時會忽略人類 SL 探索參數的問題 修復在不使用任何後端（即虛擬後端）的情況下編譯 KataGo 進行測試時出現的編譯錯誤 修復某些系統上 cuda 後端編譯類型的問題 改進關於使用人類模型的相關文件與註解 新增一個名為 gtp_human9d_search_example.cfg 的範例配置檔 ｜2024年8月5日

v1.15.1｜ 修復分析引擎在查詢版本時會報告錯誤的問題 改進範例檔 gtp_human5k_example.cfg 中關於如何使用全新人類 SL 模型的文檔 ｜2024年7月20日

v1.15.0｜ 全新的人類模型，可模擬不同棋力等級的人類棋手，用於分析或下出更像人類的棋 修改 GTP 和分析引擎以支援人類 SL 模型，請參閱文件 修改 GTP 指令，現在會報告所用神經網路的訊息，而不僅僅是 KataGo 可執行版本 修改 GTP kata-set-param 現在支援動態改變大部分搜尋參數，而不僅僅是部分參數 修改 GTP kata-analyze 現在支援新的 rootInfo 屬性，用於報告根節點統計資料 新增 GTP resignMinMovesPerBoardArea 屬性，用於防止提前認輸 新增 delayMoveScale 和 delayMoveMax 參數，可為著法添加隨機延遲，使節奏更自然 分析引擎會在回應包含未使用欄位的查詢時報告警告，以幫助提醒使用者註意拼字錯誤 分析引擎現在會在 rootInfo 中報告各種原始神經網路輸出 重新定義 visits，現在表示子節點的訪問次數，更能體現評估深度。而不是邊訪問次數 新增 edgeVisits，用於報告邊訪問次數，一定程度上顯示搜尋對此移動的「偏好」程度 對 TensorRT 的錯誤處理功能更加完善，捕捉硬體出現問題的情況，避免錯誤或遊戲中斷 對訓練腳本進行大量更改和更新，以支援人類 SL 模型訓練和架構 新增 sgf->training data 指令 ./katago writetrainingdata，用於產生人類網路的訓練資料 新模型的配置現在預設為模型版本 15，不同的通道輸出頭架構 對訓練腳本進行許多小錯誤修復和細微調整 在 Gatekeeper 中新增配置所需獲勝比例的選項 ｜2024年7月19日

v1.14.1｜ 從原始碼編譯可以再次使用 TensorRT 8.5 和對應的 CUDA 版本（如 11.8）修改終局得分獎勵，使其不阻礙吃子走法，鼓勵頻繁地輕微對抗，並駁斥糟糕的殘局清理 訓練程式碼會隨機化歷史掩碼，而不是使用資料生成時的靜態遮罩，略微改善資料多樣性 訓練程式碼會在訓練資料中清除 NAN，若神經網路在訓練過程中遇到梯度爆炸後仍能恢復 對各種程式碼和文件的細微清理，並新增一份關於「圖形搜尋」的文件 ｜2024年3月11日

v1.14.0｜ 支援更大、更強的 b28c512nbt 神經網路 新增對「v15」模型格式的支持，該格式為虛手策略頭添加非線性，是 b28 網路所必需的 分析模式會忽略歷史記錄（仍然遵循劫爭），對弈模式默認考慮歷史記錄（均可設定） Eigen 版本所有執行緒會共享網路權重而不是複製它，這應該會大大減少記憶體佔用 TensorRT 編譯新增 USE_CACHE_TENSORRT_PLAN 選項，可加快啟動速度但佔用記憶體 修正嚴格計分規則下被迫分析一個理應已結束的局面時，不會嘗試贏得比賽且假設對手不會獲勝的錯誤 修正記憶體存取錯誤，該錯誤可能導致在日文規則填充 dame 時出現輕微偏差 修正貢獻訓練對局時，若首次網路查詢失敗，則整個程式失敗，而不是重試該查詢的問題 修正一些多執行緒競爭問題，避免在搜尋過程中在陣列之間複製任何子節點 修正指定多個 GPU 的情況下解析某些格式錯誤的配置時出現的錯誤 修正含有設置棋子的 SGF 檔案中，判斷首回合隱含落子方的錯誤 修正當根策略樂觀度與樹策略樂觀度不同或 softmax 等參數發生變化時，重新計算根策略樂觀度的錯誤 修正 Eigen 後端線程數不一致的問題 縮小 Eigen 後端預設的批次大小，能有效地利用執行緒較少的核心 對涉及回合數、搜尋節點和其他細節的內部程式碼進行少量清理 新增 bSizesXY 選項，用於精確控制棋盤尺寸，用於自我對弈或匹配，而不只是單邊長 改進書籍生成程式碼，並添加先前用於 katagobooks.org 上 9x9 書籍生成的參數 summarize_sgfs.py 工具現在可以識別和輸出 Elos 中石頭剪刀佈局面的統計資料 在內部測試比賽中增加對動態貼目 (komi) 的實驗性支援 對 startpos/hintpos 命令添加各種附加參數以及細微的更改和錯誤修復 訓練模型使用更便宜的 repvgg-linear 架構，其不會實例化1x1卷積，而是增加3x3卷積中心方格的 LR 更新所有過時的自我對弈配置參數，並添加它們的 readme 檔案 細微調整訓練資料 NPZ 格式（向後相容），以支援將人類遊戲轉換為 NPZ 訓練資料 改進 shuffle.py 和 training.py 的預設值以及 -help 文件，python shuffle.py -help 對各種文件進行各種其他小更新 改進並稍微重新安排同步循環邏輯 修正 Python 開發板實作中 wouldBeKoCapture 的錯誤 修正本地自我對弈提示位置中 trainingWeight 會被忽略的錯誤 現在將 pytorch 模型檢查點遷移到較新版本時會清除循環計數器 修正更新自我對弈檔案總計和 shuffle 腳本參數出現的錯誤 修正用於訓練的開發命令和 Python 腳本的其他一些錯誤 ｜2023年12月28日

v1.13.2｜ 修復 Homebrew 或其他自動化建置流程的測試問題 ｜2023年5月26日

v1.13.1｜ 修復 TensorRT 版本中 plan cache 命名衝突問題，並加強錯誤檢查機制 ｜2023年5月24日

v1.13.0｜ 新增樂觀策略，傾向於尋找意想不到的好棋 新增 Softplus 激活函數，用於預測梯度與激活縮放，以修正導致訓練不穩定的異常值 修正在低模擬數下判斷最佳手的錯誤，導致其在小棋盤上偶爾下出極差的棋步（1-1 點）自動將線程數限制為模擬數的 1/8 左右，以防止使用過多線程數導致搜尋品質受損 新增迴避歷史對局中的棋步，提升落子多樣性（gtp_example.cfg）更新 gtp2ogs 8.x.x 版本中 ogsChatToStderr = true 的行為，以便在 OGS 上運行 KataGo 新增參數 gtpForceMaxNNSize，減少更改棋盤大小時冗長的等待，但會降低小棋盤的性能 修正 match 運行循環匹配時 extraPairs 的錯誤，刪除對 blackPriority 配對邏輯的支持，並添加 extraPairsAreOneSidedBW 以允許使用單面顏色進行匹配 新增腳本 query_analysis_engine_example.py，示範透過 Python 使用分析引擎 新增支援模型版本 "12"（對應樂觀策略頭）、"13" 和 "14"（對應 softplus 誤差縮放）提供三個腳本能把舊版本升級 migrate_optimistic_policy.py、migrate_softplus_fix.py、migrate_squared_softplus.py 更新 train.py 採用 KataGo 主訓練流程中經測試有效的參數 修改 summarize_old_selfplay_files.py 所輸出的 JSON 格式，該檔案會被 shuffle_loop.sh 洗牌腳本呼叫，用於快取資料以避免每次洗牌都重新搜尋所有目錄，新格式現在追蹤目錄的 mtime，避免漏抓資料 重寫 synchronous_loop.sh 腳本，使其將所有內容複製到一個以日期命名的目錄中執行，以避免 git 影響正在進行的訓練流程。也新增 -max-train-bucket-per-new-data 等標記，有助於防止過擬合，能更好地調整週期/遊戲週期/遊戲週期的大小 重寫自我對弈訓練相關文件，使其內容與 v1.12.x 版本中引入的 PyTorch 訓練流程保持一致，並補充推薦使用 -max-train-bucket-per-new-data 及其他先前未特別強調的參數，這些設定能更輕鬆地掌控自我對弈與訓練速度之間的比例 移除 C++ 程式碼中用於將部分資料分離為驗證資料的混亂邏輯（maxRowsPerValFile 與 validationProp），因為這部分未被訓練腳本實際使用。現由 shuffle.sh 腳本隨機選取約 5% 的 .npz 檔案作為驗證資料。可設定環境變數 SKIP_VALIDATE=1 以停用此行為 移除 train.py 對自我蒸餾的支持 優化 shuffle.py 處理大量檔案時的效能 修正洗牌器在處理由其他洗牌產生的 .npz 檔案而因命名錯誤而無法正確洗牌的問題 修正 train.py 中 -no-repeat-files 選項失效的問題 自我對弈現接受 .bookposes.txt 與 .startposes.txt 結尾的檔案，不再僅限於 .hintposes.txt 刪除程式碼中不必要的 sgfmill 函式庫，若需使用可透過 pip 安裝 將 Python 縮排標準化為 4 個空格 針對各種腳本添加各種其他標誌並進行細微清理 在初始化規則訓練時，減弱對貼目限制的力度，以學習應對極端貼目 對訓練資料記錄的「分數」設定上下限 在開局書配置檔 genbook7jp.cfg 中新增探索性參數、提升生成效率及其他改進 執行 contribute 將不再將配置的密碼回傳到偵錯/日誌中 將 half 函式庫升級至版本 2.2，以修復在部分系統上出現的相容性問題 對文件進行多項更新、清理、功能添加以及內部程式碼和工具的修改 ｜2023年5月23日

v1.12.4｜ 新增 enablePassingHacks 參數，緩解若嘗試虛手也導致對手虛手，阻礙正確搜索的問題 修改搜尋機制，區分電腦式規則（需吃子才能結束）與人類式規則（不需吃子即可結束）修正從白棋先行的局面生成訓練資料時，貼目被錯誤初始化為反向值的問題 修正隱藏神經網路輸入歷史時，棋子的歷史階梯狀態不會被隱藏，導致資訊洩漏的問題 修正解析某些規則字串的貼目時出現的錯誤 更新 genconfig 命令產生的配置，使其與先前版本中引入的 GTP 配置的格式和文件相符 自訂訓練用的提示位置工具（hint position tools）也進行小幅修正與功能補充 ｜2023年2月18日

v1.12.3｜ 修正 v1.12.x 中引入的 TensorRT 效能退化問題 緩解 OpenCL 中一個長期存在的效能錯誤 修正 GTP 或分析模式下，某些設定導致無法正確判定「連續兩次虛手為終局」的問題 修正 PyTorch 訓練程式碼中，模型無法順利處理變動 tensor 尺寸（不同棋盤大小）的問題 contribute 在 OpenCL 模式下也會針對新架構 b18c384nbt 進行預調校，與其他模型一致 ｜2023年1月22日

v1.12.2｜ 修復 TensorRT 在 v1.12.1 中計算錯誤值的錯誤 修復 OpenCL 調校器可能選擇效能極差甚至錯誤參數的問題 將 TensorRT 從 8.2 升級到 8.5，顯著縮短初始化時間，並消除對 CUDNN 的依賴 在配置解析中添加一些支持，以便能夠指定檔案路徑、密碼等帶有井號或空格的字串 新增更好的內部測試和錯誤檢查，以便將資料貢獻給公開運行 ｜2023年1月11日

v1.12.1｜ 修復 TensorRT 後端可能會產生錯誤的局面評估和不合理落子的問題 ｜2023年1月9日

v1.12.0｜ 全新嵌套殘差瓶頸結構（nested residual bottleneck），模型更強大 訓練程式碼全面改寫為 PyTorch，取代 TensorFlow。訓練與自我對弈腳本也已更新 新增 terminate_all 指令 分析引擎預設將錯誤查詢的錯誤和警告回顯到stderr，可選擇停用 新增回報參數：weight、rawStWrError、rawStScoreError，用於評估局面的不確定性 修正計算剪枝根值時權重的微小異常 自我對弈與分散式訓練改為計算和記錄稍微低雜訊的值，用於輔助價值訓練 略微改進分散式訓練的自動錯誤檢查 新增參數以支援更靈活的貼目初始化，未來納入訓練流程 修正 SGF 中指定棋盤位置時，生成 sgfposes/hintposes 的回合數計算錯誤 改進 LCB（Lower Confidence Bound）邏輯，使其在低模擬次數下更平滑，略微提升強度 修正極端貼目輸入導致的潛在錯誤 優化 OpenCL 效能調校邏輯 清理並明確化 gtp_example.cfg 設定檔 修正處理非 ASCII 路徑的錯誤 清理並增強 KataGo 的設定系統與日誌功能的靈活性 修正若 SGF 中同時編輯多顆棋子，整體合法但部分可能非法的處理錯誤 ｜2023年1月8日

v1.11.0｜ 全新更強大的圖搜索（MCGS），不同走法導致相同局面時只搜尋一次，而非重複搜尋 全新參數 FPU（首次下棋緊迫性），根據現有走法表現，動態調整探索新走法的傾向 對預設搜尋參數略微調整和改進 contribute 命令現在支援暫停和恢復 優化 Windows 支援非 ASCII 檔案路徑和目錄 PV 訪問數不再單調遞減：因圖形搜尋可能導致局面重複出現，新增 pvEdgeVisits 區分「到達某位置」與「執行特定移動」的訪問次數 新增 pvEdgeVisits 輸出，用於區分到達給定位置的訪問次數和執行特定移動的訪問次數 GTP 中的 kata-analyze 指令現在可以報告每個移動的預測所有權 GTP 新增 kata-benchmark NVISITS 擴展，它將在 GTP 內部執行一個簡單的基準測試 修正書籍哈希演演算法中的一個錯誤，可能導致書籍調換錯誤，並大大降低磁碟空間要求 新增 checkbook 指令可檢查書籍檔案完整性 新增 GUI 工具連結：Ogatak，簡潔優雅的圖形介面 contribute 現可選擇僅進行評分對局 printsgf 會更智能地記錄最終得分，而非簡單地將所有棋子視為活棋來計算比分 修正 GTP 和分析引擎中的避免移動選項可能仍然包括避免移動的錯誤 修正部分規則下是否應抑制虛手的判斷錯誤 優化長/深度搜尋的所有權的計算速度 Selfplay 現在會在 .npz 檔案中記錄一些關於策略、搜尋意外和熵的額外統計資料 Python 神經網路模型訓練現在可以追蹤重啟後的匯出週期 對搜尋程式碼進行重大重構與清理 多項文件更新與補充 ｜2022年3月21日

v1.10.0｜ 強效的 TensorRT 後端，在 NVIDIA GPU 上通常快 1.5 倍，但啟動時間較長 GTP 的反鏡像邏輯略有改進 分析引擎和 kata-analyze 支援報告所有權的標準差（ownershipStdev） match 中加入用於隨機高溫策略初始化的次要選項 若只使用單一棋盤大小，預設跳過遮罩邏輯（分析引擎除外）新增用於生成書籍的程式碼，可透過 ./katago genbook 運行 Windows 現應能正確處理非 ASCII 路徑 修正 GTP/Analysis 當只有 1 次播放並且移動基於原始策略時 "avoid" 未被應用的錯誤 GTP/Analysis 的 "avoid" 現在可以正確地與根對稱修剪互動 修復 GTP 指令 loadsgf 中的各種錯誤 修正終局局面分析值回報異常 修正多執行緒分析時，零訪問走法出現奇怪統計的問題 修正多個 contribute 同時啟動時可能發生的輕微競爭問題 貢獻指令現更能容錯並重試損毀的下載 分散式訓練貢獻中更可靠地容忍和重試損壞的下載 benchmark 現在遵循配置中的 defaultBoardSize 修正在 Windows 中使用 mingw 進行 cmake 建置設定時出現的問題 修正 train.py 載入既有模型時 swa_model 命名空間錯誤 ｜2021年10月25日

v1.9.1｜ 修正在查詢分析之前終止會導致引擎崩潰的錯誤 分析引擎將所有權的精確度達到 10^-6，其他值的精確度達到最高有效位元後 7-8 位小數 分析引擎中針對完全未知參數的參數覆蓋將發出警告 消除 contribute 指令中可能產生稍微令人困惑的輸出或錯誤訊息 ｜2021年6月30日

v1.9.0｜ 搜尋演演算法的重大改進，使用相同的最新神經網路，等級分較前者提升約 75 分 實現接近無鎖的 MCTS 搜尋，在強大的 GPU 上顯著提升多執行緒搜尋效能 新增 avoidRepeatedPatternUtility 選項，優先避免下已經在其他角落下過相同的定式 新增「SGF 避免模式」，引導避免某些走法，在對局中提升變化多樣性 若開局局面具對稱性，KataGo 將利用對稱性優化搜尋，並預設以黑棋從右上角開局 新增 analysisWideRootNoise 參數，在分析中擴大搜索廣度 新增可統計勝負結果並計算Elo的腳本 summarize_sgfs.py 為分析引擎新增新的 clear_cache 指令 分析引擎現在會在根資訊中報告當前玩家的走法 當啟用對稱性處理rootSymmetryPruning時，若動作與其他動作對稱則報告 isSymmetryOf 改善 OpenCL 調校器在部分 GPU 上選擇錯誤參數的機率 修正執行緒過多時的搜索偏誤 透過多執行緒釋放或重用搜尋樹，以減少高播放時出現的延遲 修復幾個罕見的記憶體存取和線程錯誤，可能導致直接崩潰的錯誤 改進分析引擎 rootInfo 的品質 對棋盤程式碼進行一些小的內部性能優化 修正使用 clang 編譯時的一些警告和 CMake 問題 ｜2021年6月28日

v1.8.2｜ 分別對棋盤初始化和實際遊戲過程中的貼目進行取樣 重新設計並重構貼目初始化，使貼目隨機化更加一致 完善並改進一些運行專門訓練的開發者感興趣的命令的邏輯，例如 dataminesgfs ｜2021年4月19日

v1.8.1｜ 改進分散式客戶端錯誤和網路連線問題，包括兩個可能導致掛起或鎖死的錯誤 分散式客戶端會在第一次中斷（ctrl-c）時正常停止並完成目前遊戲，第二次將強制停止 新增 https_proxy 環境變數支援，方便透過代理伺服器連線 OpenCL 版本在首次啟動時預先調整所有的模型大小，這比下載再調整更加準確 在非 Tromp-Taylor 規則下，若對手剛虛手且盤面無利可圖，KataGo 會更傾向虛手，而非強行清理死子。可透過 friendlyPassOk 參數控制 新增對 Fischer 時間控制的支援，並引入新的 GTP 指令來管理時間設定 GTP 可以透過 kata-set-param 在運行時更改搜尋線程的數量 修復 GTP 中與終局計分相關的指令可能靜默改變其他設定（如 PDA）的問題 修復使用大量執行緒時可能導致終局計分不準確的問題 GTP 終局計分指令現在會根據友好金行為報告相應的比分 對多個命令和程式中的日誌記錄和錯誤訊息進行細微改進 分析引擎報告根節點的 thisHash 和 symHash，可用於識別對稱局面 修復 vartime 輔助訓練目標的損失加權錯誤，該錯誤導致神經網路在學習中出現嚴重偏差 對內部SGF採集、測試工具進行清理和重構，並新增基於條件篩選 SGF 的指令列參數 新增解析 Fox 伺服器 SGF 中特殊格式的貼目與棋手段位的邏輯 更新 json 解析庫版本，修復在特定 MSVC 版本上的編譯錯誤 ｜2021年3月15日

v1.8.0｜ 支援官網上的新格式神經網路，為未來搜尋邏輯的改進做準備 進行大量內部更改和修復許多錯誤，以支援即將開始的公開分散式訓練貢獻 引入新的「子樹價值偏差校正」方法，預計能提升 20-50 Elo 強度 修復 LCB 中選擇阻止對最高策略值的著手發揮作用的錯誤 徹底重寫時間控制邏輯，但目前大部分新功能預設關閉，以待進一步測試 修復日式規則下處理雙劫情形的錯誤，這需要網路逐步適應這些規則 根對稱性採樣從「有放回取樣」改為「無放回取樣」，上限從 16 調整為 8（即所有可能）移除不再使用的舊搜尋參數 fpuUseParentAverage komiAuto 功能使用 100 訪問次數，而非 20 次來尋找公平貼目 match 增加一些邏輯來避免過早認輸，與 GTP 行為保持一致 修復 genconfig 指令在生成配置時可能發生的記憶體區段錯誤 修復分析引擎有時會從錯誤的視角報告 rootInfo 的問題 修復分析引擎中優先級數值超出 -2³¹, 2³¹-1 有效範圍而無法正常工作的問題 修正 kata-raw-nn 指令以報告虛手的策略機率 預設神經網路版本升級至 v10，新增訓練目標並重新平衡損失函數權重 神經網路第一層使用 3x3 卷積，而非 5x5。速度略快、強度略降，並大幅減少記憶體佔用 修復 hintposes 未根據初始回合數調整的問題 改進 startposes 文件處理，使其能夠處理更深層的分支文件，而不會耗盡堆疊空間 修復舊的根神經網路策略可能會導致 hintpos 無法生效的錯誤 提示位置後的幾步內會進行更完整的搜尋，而非僅使用快速搜尋 改進自我對弈訓練的除錯日誌紀錄，並改善自我對弈產生的 SGF 檔案註解 訓練腳本可以鎖定訓練步數與資料樣本比例 訓練腳本會自動搜尋訓練目錄下的 initial_weights 子資料夾內的 TensorFlow checkpoint 與 meta 檔 移除部分舊的、未使用的模型程式碼 加入 PyTorch genboard 腳本，可在給定部分棋子情況下生成合理的棋盤局面 ｜2021年1月13日

v1.7.0｜ 支援 CUDA 11.1，可在 NVIDIA RTX 30 系列上使用 CUDA（不再僅限於 OpenCL）新增 ignoreGTPAndForceKomi 可強制使用指定 komi 值，也會忽略 GTP 控制 編譯不再需要 Boost 函式庫 優化 OpenCL 後端，降低 GPU 記憶體使用量 benchmark 命令能更有效率地選擇執行緒搜尋範圍 改進 JSON 分析引擎 分析引擎可預測每一步的盤面歸屬圖（ownership map）分析引擎可回傳進行中的查詢結果，支援與 kata-analyze、lz-analyze 類似的功能 分析引擎可在查詢尚未完成前中途取消或終止查詢 分析引擎可以在單一查詢中指定不同的每回合優先順序 分析引擎支援超過 ±2³¹ 的優先權值，方便用於時間戳記、外部 ID 或長時間任務的排序 修正在 Button 規則下，可能導致無法選出最佳終著手的錯誤（其具有區域計分的簡單性和優雅性，且具有領土計分的更清晰、公平的計分粒度）修正 -override-config 參數的部分解析問題 修正 Eigen 後端在 benchmark 命令使用多執行緒時的異常行為 自我對弈訓練的 shuffle 腳本現在統一混合所有資料（不再分開訓練與驗證集）進行大量內部重構，為分散式訓練做準備，BUILD_DISTRIBUTED=1 以啟用此功能 ｜2020年11月9日

v1.6.1｜ 修正兩個導致 Eigen 實作佔用過多記憶體 的問題，特別是在多執行緒環境下 改進 Eigen 預設執行緒數設定，並新增可在設定檔中覆寫的新參數 分析引擎中，用於控制平行搜尋盤面數量的參數，改由 numAnalysisThreads 控制 新增 numSearchThreadsPerAnalysisThread 代替 numSearchThreads，使參數名稱更清楚表達其用途 ｜2020年8月25日

v1.6.0｜ 大幅優化 Eigen 後端，使其效能顯著提升 降低 OpenCL 程式碼開銷，使其能夠在少數舊 GPU 上運行 解決 OpenCL 與 NVIDIA GPU 的主要問題，該問題導致 OpenCL 無法有效利用多個 GPU 分析引擎實現允許和避免選項，允許將搜尋範圍限制在特定著法或棋盤的特定區域 分析引擎新增 pvVisits 選項，報告不同著法在任何主要變體中每著法的訪問次數 改進分析引擎設定檔 analysis_example.cfg，提供更多可調整的參數，並附有預設值 修正部分介面相關的錯誤，並改善 CMake 編譯設定，讓提示訊息與錯誤說明更清晰友善 ｜2020年8月24日

v1.5.0｜ 新增支援 OpenCL FP16 張量核心，理論效能大約翻倍 新增 GTP 指令 set_position，允許直接設定盤面位置，不需透過多次 play 指令模擬 新增預設思考時間，而非無限時間 新增簡易「鏡像圍棋」處理邏輯（僅作趣味用途，非完整支援）改進讓子棋檢測邏輯，提升自動調整線程數的效率與自動認輸判定準確度 新增類雜湊型棋局 ID 寫入自我對弈產生的 SGF 檔 修正一個極少見的自我對弈分支初始化錯誤，該錯誤可能導致落子合法性判定錯誤及神經網路雜湊衝突（特別是在日本規則的清理階段）對稱性從 GPU 改至 CPU 計算，從而簡化程式碼 多項內部效能優化與程式清理 新增可透過 -DUSE_BACKEND=EIGEN 編譯的純 CPU 實作版本 ｜2020年8月3日

v1.4.5｜ 修正 analysis_example.cfg 中 nnMaxBatchSize 參數重複的錯誤 新增防護機制，若設定檔中有重複參數，會直接報錯，而非默默忽略 將其中一個 OpenCL kernel 拆分成多個部分，縮短編譯時間 改進 OpenCL 調校器（tuner），使其運行更快 match 會依照對局中最大的棋盤尺寸來調整網路大小，而非固定 19，小棋盤效能更佳 ｜2020年6月22日

v1.4.4｜ 可將 logFile 設為空字串以停用記錄，或透過 -override-config 指令覆蓋 新增 homeDataDir= 參數，覆寫快取資料（如 OpenCL 調校檔）的儲存目錄 Benchmark 命令 現在預設以 -tune 模式執行 CUDA 版本現已改為使用 CUDA 10.2 編譯（取代 10.1） Linux 版本現改為使用 libzip5 編譯（取代 libzip4）修復多個 OpenCL GPU/異廠牌裝置，同時運行時的相容性問題 修正 cputime GTP 指令 每局清零的問題，現會持續累積時間 修正分析引擎中 reportAnalysisWinratesAs 在多數情況下被忽略的問題 修正部分 輸入管線/標準輸入 被關閉時錯誤處理與重複執行最後指令的問題 修正自我對弈 SGF 檔的起始局面處理錯誤，該錯誤會忽略 SGF 中的棋盤尺寸設定 修正自對戰腳本中的一個拼字錯誤，避免在提供不正確的參數時出現錯誤/混亂的行為 多項內部程式碼清理與註解改進 澄清程式碼庫原始碼中包含的模型是微型測試神經網路 ｜2020年6月14日

v1.4.2｜ 修正在 v1.4.x 中引入的錯誤，當讓子棋或 PDA 設為非零值，且同時開啟思考模式時，搜尋結果可能出現符號不一致的評估值，嚴重影響棋力與搜尋品質 修復在使用非零 PDA 時，分析引擎會採用錯誤的符號方向 若未明確設定 maxTimePondering、maxPlayoutsPondering、maxVisitsPondering，則會視為「無限制」。而不是分別預設使用 maxTime、maxPlayouts、maxVisits ｜2020年5月13日

v1.4.1｜ 修正當 PDA 設為非零值且同時啟用思考模式時，樹重用無法正常運作或失效的問題 使用 logDir=DIRECTORY （而不是 logFile=FILE.log）將日誌輸出為帶日期的多檔案形式 ｜2020年5月11日

v1.4.0｜ 新的實驗性配置：analysisWideRootNoise，用於擴大根節點的搜尋範圍並評估更多走法，但需要更多時間才進行更深入的搜尋。僅影響分析，不影響遊戲（例如 genmove）現在可接受副檔名為 .gz 的模型檔案（不再限定為 .bin.gz 或 .txt.gz）新增 cputime 與 gomill-cpu_time 指令，可用於比賽或測試，回報並比較思考時間 改進 playoutDoublingAdvantage 與 dynamicPlayoutDoublingAdvantage，預設平局會均衡著法，讓子方時積極進攻，受子方則穩健防守 修正非標準 GTP 讓子方式（連續黑棋落子＋白棋跳過）下（如中國規則每讓子 +1 分）未正確處理的問題，可透過 assumeMultipleStartingBlackMovesAreHandicap = false 停用該修正邏輯 修復系統時間或時區變更可能導致搜尋時間異常的問題 新增支援同步訓練的腳本 新增 JSON 分析引擎可輸出根節點資訊與原始策略分佈且執行時可覆寫幾乎任何搜尋參數 自我對弈配置重新組織至 cpp/configs/selfplay/ 子目錄，並進行多項內部清理 移除設定檔中的 num_games_total 改以-max-games-total 參數控制，方便自動化腳本使用 ｜2020年5月10日

v1.3.5｜ 修正 printsgf GTP 指令在部分規則設定下可能失敗的問題 放寬規則解析，現在對部分規則別名的容忍度更高 JSON 分析引擎（../katago analysis）現在支援查詢優先權（priority） ｜2020年3月31日

v1.3.4｜ 若同目錄中存在 default_gtp.cfg，在未指定 -config 時會自動載入該檔；若同目錄中存在 default_model.bin.gz 或 default_model.txt.gz，在未指定 -model 時會自動載入該模型，若具備上述檔案，可直接執行 ./katago gtp 無需額外參數 調整 GTP 設定，更積極地認輸，提高 PV 顯示的最大手數，genconfig 預設訪問次數等 調整 PDA 在小棋盤上表現更合理，受讓子時會得更穩健，提升讓子局棋力 新增 avoidMYTDaggerHack 以避免某特定開局定式，目前應對該定式的表現不佳 新增 printsgf 指令，可輸出目前棋局為 SGF 格式 新增多項 GTP 擴充功能，以改善與 Sabaki GUI 的整合 移除大量過時或未使用的程式碼，並進行重大內部重構 移除對 dirent.h 的依賴，提升跨平台兼容性 自我對弈中新增對「評估結果出乎預期」的位置給予更高權重的選項 自我對弈中增加一個「均衡開局」比例的選項 ｜2020年3月30日

v1.3.3｜ 新的模型格式，磁碟佔用空間更小、載入速度更快，其副檔名由 .txt.gz 改為 .bin.gz 新增指令 ./katago genconfig -model .gz -output .cfg，可依偏好自動調整規則、執行緒、記憶體設定等。方便新手快速建立設定檔 簡化規則設定，僅需一行即可 rules=chinese、rules=japanese、rules=tromp-taylor 等 新增參數覆寫功能 -override-config KEY=VALUE, KEY=VALUE...在啟動時覆寫設定檔內容 OpenCL 版本可偵測基於 CPU 的 OpenCL 設備，並可在沒有 GPU 的純 CPU 機器上執行 支援 KGS 的擴充指令 kgs-rules 和 kgs-time_settings，可設定 KGS 遊戲規則及日規讀秒 新增 kata-raw-nn 指令，可輸出神經網路的原始評估值 修正部分網路在終局臨近時連續虛手導致評估波動的問題 自我對弈訓練腳本新增 shuffle_and_export_loop.sh 與 export_model_for_selfplay.sh 參數，現需提供全域唯一前綴，以區分不同訓練來源的模型 多項內部小修與程式清理 修復若誤將 .bin.gz 解壓成 .bin，將導致無法載入的問題 ｜2020年2月28日

v1.3.2｜ 優化 OpenCL 版本的 xgemm 實作，整體效能提升約 10%～50% GTP 配置中與 GPU 相關的所有選項現在也都是可選的，並且具有更好的預設值 自動選擇合適的 batch size，自動偵測並自動啟用或停用 FP16 更新基準測試中線程數的演算法 ./katago benchmark -config GTP_CONFIG.cfg -model MODEL.txt.gz 遊戲未結束或未完全清理時呼叫 final_status_list 和 final_score 指令，將使用神經網路來猜測局面評估 新增支援 fixed_handicap 指令 修復「思考中」與其他指令之間的競爭問題 改善讓子棋處理邏輯，允許透過「連續黑棋落子 + 白棋虛手」的方式設置讓子 新增在 train.py 訓練到固定回合數後自動停止，在 gatekeeper 完成傳遞後停止 取消自動對 Pascal 架構 GPU 啟用 FP16（導致精度損失或穩定性問題）修正多項 GTP 協定錯誤與舊有讓子處理問題 改進程式容錯能力，使其更能處理非標準的讓子開局 ｜2020年2月3日

v1.3.1｜ 設定檔中可刪除「根移動選擇和偏差」之後的所有內容，以取得更好的預設值 調整 cpuctExplorationLog 從 0.6 到 0.4 新增 lz-genmove_analyze 和 kata-genmove_analyze 指令，讓分析工具可即時顯示 修正領先值重大誤差的問題（大幅領先超過 70 目時，它可能嚴重低估差距） ｜2020年1月18日

v1.3｜ 支援「日式類規則」、「數子規則」等多種組合 新增 PDA (Playout Doubling Advantage) 設定，在讓子局中採取激進著法 由「平均得分」改為「領先目差」，即讓局勢公平所需的目數差，這更合理和直觀 重新設計 cPUCT 演演算法，使其在高訪問次數下探索更充分，並提升強度 新增「分析引擎」./katago analysis -model .txt.gz -config .cfg -analysis-threads N 升級至 TensorFlow 1.5，並支援多 GPU 同步訓練 "-multi-gpus 0,1" 預設停用批量歸一化（可手動啟用）調整訓練目標、訓練資料格式和其他細節，與舊訓練版本不相容 ｜2020年1月14日

v1.2｜ 新增 Windows 與 OpenCL 後端支援 提供預編譯 Linux 版本（但仍需安裝對應的共享函式庫與 CUDA/CUDNN）預設執行檔名稱改為 katago / katago.exe（原為 main）在小於 19x19 棋盤時使用較小記憶體空間，以提升效能 修正 Windows 上 .gz 模型檔載入失敗的問題 新增 analysisPVLen 參數，設定分析路徑的最長長度 新增 dynamicScoreZeroWeight參數，調整分數效用函數，主要用於讓子棋的策略控制 預設啟用自動認輸，並對範例 GTP 配置參數進行細微變更 支援 loadsgf 指令，可直接從 SGF 檔載入棋譜 新增記錄 GTP_Extensions 擴充指令的文檔 修復各種錯誤並進行內部清理 修正日誌檔案中評估符號翻轉的錯誤 修正在棋局結束後仍嘗試落子會導致非法手的錯誤 增加一些邏輯來預設為 OpenCL 選擇合理的設備 改進讓子棋與貼目更新及棋盤清理邏輯 預設 OpenCL 共用調校結果於所有棋盤尺寸，避免每種尺寸都重新調校造成延遲 ｜2019年7月21日

v1.1｜ 全新一輪訓練（g104），棋力已達到或略強於 Leela Zero ELFv2 實現 LCB，顯著提升對戰強度 .npz 資料檔案的格式略有變化，與舊版本產生的訓練資料不相容 改良超參數與訓練策略，顯著提升訓練效率 改進並修復各種錯誤 ｜2019年6月20日

Initial｜ 首個訓練運行（g65），棋力達到 Leela Zero LZ130 左右水準 ｜2019年2月27日

## 弱點

鏡像圍棋

人類棋手能在對局中運用模仿棋以謀取優勢，然而這種戰術意圖對於圍棋程式而言難以理解，因此無法正確應對或加以利用，此策略在讓子棋或逆貼目等不平衡對局中尤為關鍵。雖然KataGo已設置鏡像破解邏輯，不過實現方法仍顯粗糙，尚未真正解決此挑戰。

對抗性攻擊

2022年底，研究團隊成功透過對抗性網絡擊敗KataGo，揭露出「環形群漏洞」。對抗性網絡並非依靠常規棋力取勝，而是刻意構造特殊局面，利用其盲點以產生嚴重錯誤判斷。該漏洞亦被人類棋手成功復現。對此，開發者在訓練中加入相關類型的對局資料，以增強抵禦性。

## 其他連結

- KataGo Opening Books，收錄小棋盤的開局書。
- Extra networks，收錄主運行外的網路。

## 基本資料

- 開發者：David J. Wu（lightvector）
- 發行日期：2019年2月27日
- 程式語言：C++、Python
- 類型：電腦圍棋
- 許可協議：MIT許可證