@PlayChessCoach在LICHESS上:观看|统计|挑战(1+0或0+1最多15+10)
Chesscoach是一种基于神经网络的国际象棋引擎,能够进行自然语言评论。它以大约3450 ELO的评分下棋,这意味着它通常应该击败2850 ELO和许多其他发动机,但通常会损失最强的发动机,例如3550 ELO的Stockfish 14。
与所有发动机一样,Chesscoach依靠检查数百万个国际象棋位置来决定最佳比赛。它使用一个大型,慢的神经网络,例如Alphazero或Leela Chess Zero(LC0)来评估每个位置,与经典的发动机不同,它旨在以更简单的评估或更新的NNUE发动机进行速度,或者是两种样式的更强混合物。
发动机核心的神经网络通过对抗自身的训练,使用反馈周期从几乎为零的知识开始 - 只是国际象棋的规则 - 并学习新的方法来击败自己,随着它的增长越来越强。更强的神经网络评估可以使其更好地搜索,并且更强大的搜索结果使其更有效地训练其神经网络评估。
Chesscoach还可以将其国际象棋知识提供给其他神经网络,以评论英语的动作和位置。这不是很有见地的,而且经常是错误的,但是对它能够继续训练的有限数据显示出一些希望。
我开始开发Chesscoach作为一个为期两个到三个月的项目,以了解我是否喜欢机器学习,并最终将事情带到了我的预期。最初的计划具有三个过于雄心勃勃的目标:复制一个小型的α型引擎,在培训反馈周期中增加了自然语言评论,并在单个GPU工作站上进行了一定程度的培训。
经过一年多的发展,我几乎无法在培训方法上取得进展。但是,我对Chesscoach产生的评论感到满意,考虑到所有因素,并对发动机的最终实力感到惊讶。
我很幸运能提供这么多公共资源,包括免费的云计算和免费的论文,讨论和数据。我也非常感谢许多为重要的澄清,讨论和调试提供帮助的人。
Chesscoach核心的国际象棋引擎与Alphazero(Silver等人,2018年)或LC0(Linscott&Pascutto,2018年)非常相似,在神经网络,培训时间表和搜索算法的结构中,但具有实际的,工程的方法,可以使您有必要,从而缺乏一支更大的团队的广度和深度研究才能。但是,我希望有一些新想法可以在其他地方有用。
The natural-language commentary piece is most like the work of Learning to Generate Move-by-Move Commentary for Chess Games from Large-Scale Social Forum Data (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) and Automated Chess Commentator Powered by Neural Chess Engine (Zang, Yu & Wan, 2019), but relies on a more heavily trained chess engine and larger training语料库,尽管具有更简单的架构。
Chesscoach的设计虽然很少和便携。它在Linux和Windows上运行,并支持单GPU,多GPU和张量处理单元(TPU)。面向性能的代码在C ++(10.5k行)中,神经网络代码在Python(3.7k行),依赖于TensorFlow 2。Stockfish代码用于位置管理,移动生成和最终游戏游戏表键探测,但不用于搜索或评估。根据Alphazero计划的4400万场比赛和700,000个培训批次,分别为4,096个职位,在Chesscoach项目中已经完全生成了自我游戏培训数据。
Alphazero以外的一些想法,但存在于文学和Katago(Wu,2020年)和LC0等项目中(通常我认为我正在尝试新事物,但事实证明LC0的聪明人几乎尝试了一切)。其中包括提供伴侣,最终游戏桌探测器,最小值最小值,随机重量平均(SWA),指数加权的移动平均值(EWMA),各种勘探激励措施,预测缓存,辅助训练目标和知识蒸馏。
我相信有些想法是新的。第一个是一种搜索方法,旨在避免战术陷阱,并通过线性探索和选择性反向传播来最大程度地减少简单的遗憾,这是通过消除 - sble-puct应用的。第二个是一种简单的神经结构,用于对位置的自然语言评论,并与核心采样(TOP-P)的调整相结合,重点介绍了正确性 - covet variety-covet采样。
结果是一套下棋,训练神经网络,优化参数,测试强度,过程培训数据,视图和调试训练数据,组织培训数据,单位测试和坐标簇的工具。为了结束该项目,可以在https://lichess.org/@/playchesscoach上设置一个机器人,以与挑战者和其他机器人一起玩游戏,并向观众提供评论。
在较新的V3-8 Cloud TPU VM上:
gui命令来实现引擎搜索。一些关键文件位于根部,包括config.toml驱动大多数工具,并从C ++和Python代码中读取。 Meson.build定义Linux构建,以及CPP/Chesscoach.sln和CPP/**/*。vcxproj定义Windows构建。 setup.sh/.cmd和build.sh/.cmd脚本自动设置和构建,尽管需要其他步骤。根源的Dockerfiles定义了每个群集工人角色的图像,而Docker - *。SH脚本有助于构建和上传这些图像。
在群集目录中,.SH/.YAML文件在较旧式的TPU上管理Kubernetes群集,而PY/Alpha.py在较新的云TPU VMS上管理群集。
CPP目录包含C ++代码,主要在CPP/ChessCoach中。 Chesscoach C ++代码主要以性能为导向。第三方库包括CPP/CRC32C,CPP/HUNSPELL,CPP/NOMPY,CPP/PROTOBUF-3.13.0,CPP/Stockfish,CPP/TCLAP,CPP/TOML11和CPP/Zlib。第三方数据包括CPP/词典和CPP/强度测试。使用高级软件包工具(APT)安装了其他第三方C ++库,并由Linux上的Meson Build System发现,并在Windows上使用Nuget安装和发现。 CPP/Protobuf库是使用ProtoC工具和CPP/Protobuf/Chesscoach.proto来生成的。
PY Directory包含Python代码,由C ++通过Network.py访问,也包含一些独立的脚本工具。 Chesscoach Python代码主要与神经网络和云存储有关。使用PIP安装其他第三方Python库。
JS目录包含Chesscoachgui和Chesscoachuci中使用的DEBUG GUI,依靠Chessboardjs。
工具目录包含可乐CLI和贝内斯洛,用于跑步和计算参与者的ELO等级,以及stockfish Fish Fisher 13 Engine二进制二进制二进制文件,以充当对手。
脚本目录包含各种情况脚本和便利。
文档目录包含文档和支持资产。
安装后,Chesscoach在Linux上的/usr/local/local/share/chesscoach找到静态数据,并与Windows中的二进制数据一起。它将动态数据定位在$ {XDG_DATA_HOME}/CHESSCOACH,或者在Linux上的〜/.local/share/Chesscoach和localappdata%/Chesscoach in Windows上的〜/.local/share/chesscoach失败。动态数据也可以位于Google云存储中;例如,gs:// chesscoach-eu/chesscoach。
如果在Google Cloud上运行,它可以简化GPU设置,以使用CUDA 11使用预构建的深度学习磁盘图像。
./setup.sh (可能需要30分钟才能从源构建Protobuf)。pip3 install -r requirements-all.txt 。sudo ./build.sh release install 。./setup.sh (可能需要30分钟才能从源构建Protobuf)。pip3 install -r requirements-all.txt 。sudo ./build.sh release install 。./setup.sh (可能需要30分钟才能从源构建Protobuf)。pip3 install tf-models-official==2.5.0 (这堵塞了预安装的TF-nightly)。pip3 uninstall tensorflow tf-slim tf-nightly 。--force-reinstall安装私人TF-night封装软件包。sudo ./build.sh release install 。conda activate chesscoach ,但是如果不使用虚拟环境时,这是可以的。setup.cmd (在运行activate_virtual_env.cmd之后,将其设置为Chesscoach_pythonhome)。build.cmd 。Chesscoach依赖于安装的数据,以$ {XDG_DATA_HOME}/CHESSCOACH,或者在Linux上的〜/.local/.local/share/chesscoach和localappdata%/chesscoach in Windows上的〜/.local/share/chesscoach失败。
安装神经网络重量。这需要372 MIB下载和406个MIB磁盘空间。
scripts/download_install_data.sh 。scripts/download_install_data.cmd 。可选地,安装Syzygy最终赛场表播。 3-4-5件的文件大约需要1个gib,而3-4-5 + 6件的文件大约需要150个gib。安装过程有些技术性。
在云存储模式下,Syzygy表将在启动时自动复制到本地存储。
脚本脚本/ramdisk_syzygy6.sh SH在诸如新风格的云TPU VM之类的机器上设置了一个RAM磁盘,以主机3-4-5 + 6件表,当内存高但磁盘空间较低时。使用磁盘时,最好将这些表放在SSD上以保持搜索速度。脚本脚本/ramdisk_syzygy6.sh使用路径…/chesscoach/syzygy6,依赖于config.toml中的配置更改,但是…/chesscoach/syzygy可以使用。
export PROJECT_ID=<your Google Cloud project ID> 。如果使用alpha.py(此部分特别凌乱):
cluster/cluster-prep-creds.sh以创建一个服务帐户和相应的键.json文件。gsutil cp将key.json复制到key_path 。技术解释中的分布式培训和自我播放部分提供了更多有关管理老年风格和新型群集的信息。
大多数Chesscoach程序都取决于构建和安装的config.toml。在运行ChessCoACHUCI时,设置search_threads参数(通过构建时间在运行时通过config.toml或在运行时uci选项)设置search_threads参数,以避免从不公平的预测计划中避免线程饥饿。
Chesscoachuci二进制可以在各种国际象棋中加载作为UCI发动机。
但是,当使用python的虚拟环境时,可能有必要:
Chesscoachuci除了UCI协议外,还提供自定义命令:
comment为当前位置和最后一步发挥了自然语言评论。最好通过position startpos moves …命令提供全部移动历史记录。gui标记启动搜索时发射的调试GUI(如高级解释中的图9所示)。~ puct [moves …] [csv]以文本形式显示debug GUI数据。~ fen显示了福赛斯 - 爱德华式符号(FEN)中的当前位置。有关自我播放和培训,请参阅数据文档中的自我播放和培训过程。
对于程序中列出的其他实用程序,请在config.toml中查找配置指南。许多公用事业都支持--help参数。脚本目录中脚本的内容可以显示示例。在使用Python的虚拟环境时,可能需要在运行实用程序之前激活它,尽管有些不依赖Python。
运行build/gcc/debug/ChessCoachTest或build/gcc/release/ChessCoachTest 。
运行activate_virtual_env.cmd ,然后cpp/x64/Debug/ChessCoachTest.exe或cpp/x64/Release/ChessCoachTest.exe 。
您还可以在Visual Studio中运行/调试ChessCoachTest项目,或在Visual Studio中使用Test Explorer界面。
Google的TPU研究云(TRC)计划对使该项目成为可能的计算资源非常慷慨,我特别感谢Jonathan Caton使事情实现。
我非常感谢Google的Cloud TPU团队使用Cloud TPU VM,尤其是Michael Banfield在新技术的整个Alpha中提供工程援助。
我衷心感谢Karlson Pfannschmidt(Paderborn University),其国际象棋调整工具和贝叶斯 - 滑雪鞋的实施以及有关贝叶斯优化的建议对于加强Chesscoach引擎是无价的。
我非常感谢Matthew Lai(DeepMind)以独立的能力,重要的澄清,对Alphazero论文提供重要的澄清。
我感谢Pierre de Wulf提供了有关CrapingBee的研究学分,以便在Chesscoach进行自然语言评论培训。
感谢Ted Li在项目开始时的宝贵想法和讨论。
感谢Freya Wilcox的图表原型。
特别感谢Gary Butner和Lynelle Rafton的编辑,校对和支持。
Chesscoach根据GPLV3或更高版本发布。
克里斯·巴特纳(Chris Butner),[email protected]