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许可证