@PlayChessCoach On Lichess: смотреть | Статистика | Задача (1+0 или 0+1 до 15+10)
Chesscoach-это неврозный сетевый шахматный двигатель, способный к естественным языковым комментариям. Он играет в шахматы с рейтингом примерно 3450 ELO, что означает, что он обычно должен победить даже самых сильных игроков человека в 2850 ELO, и многие другие двигатели, но часто теряют самые сильные, такие как Stockfish 14 на 3550 ELO.
Как и во всех двигателях, Шесскоач полагается на изучение миллионов шахматных позиций, чтобы выбрать лучший шаг для игры. Он использует большую, медленную нейронную сеть, как и Alphazero или Leela Chess Zero (LC0), чтобы оценить каждую позицию, в отличие от классических двигателей, которые стремятся к скорости с гораздо более простой оценкой, или более поздних двигателей NNUE, которые являются более сильным гибридом обоих стилей.
Нейронная сеть в основе двигателя обучается, играя против себя, используя цикл обратной связи, чтобы начать с почти нулевых знаний - только правила шахмат - и изучать новые способы победить себя по мере его становления. Более сильные оценки нейронной сети позволяют ему лучше искать, а более сильные результаты поиска позволяют ему более эффективно обучать свою нейронную сеть.
Chesscoach может также подавать свои знания в шахматах в дополнительную нейронную сеть, чтобы комментировать ходы и позиции на английском языке. Это не очень проницательно и часто неправильно, но показывает некоторое обещание для ограниченных данных, на которых он смог обучить.
Я начал разрабатывать Chesscoach в качестве проекта с двумя-трехмесячным проектом, чтобы увидеть, понравилось ли мне машинное обучение, и в итоге взял вещи дальше, чем я ожидал. Первоначальный план имел три чрезмерно амбициозных целей: воспроизведение небольшого альфазеро, подобного двигателю, добавив естественный комментарий к циклу обратной связи с учетом и проведя некоторую степень обучения на рабочей станции с одним GPU.
Через чуть более года развития я почти не могу претендовать на прогресс в методах обучения. Тем не менее, я доволен комментарием, который производит Чесскоах, рассмотрено все обстоятельства, и удивлен возможной силой двигателя.
Мне повезло, что у меня было так много общественных ресурсов, в том числе бесплатные облачные вычислительные и свободно доступные документы, дискуссии и данные. Я также очень благодарен ряду людей, которые помогли с важными разъяснениями, дискуссиями и отладкой.
Шахматный двигатель, лежащий в ядре Chesscoach, очень похож на основание Alphazero (Silver et al., 2018) или LC0 (Linscott & Pascutto, 2018), в структуре нейронной сети, графика обучения и поискового алгоритма, но с практическим, инженерным подходом по необходимости, не хватает ширины и глубины исследований таланта более крупной команды. Тем не менее, я надеюсь, что есть несколько новых идей, которые могут быть полезны в другом месте.
Комментарий естественного языка наиболее похож на работу по обучению для создания комментариев к ходу за шахматы из крупномасштабных данных социального форума (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) и автоматизированный шахматный комментатор, приводимый в движение нереронным шахматным двигателем (Zang & Wan, 2019), но в более подходящем движении, но в более подходящем движении, но в более подходящем движении. с более упрощенной архитектурой.
Chesscoach разработан, чтобы быть несколько минимальным и портативным. Он работает на Linux и Windows, а также поддерживает одноразовые, мульти-GPU и тензоры (TPU). Код, ориентированный на производительность, находится в C ++ (10,5K Lines), а код нейронной сети находится в Python (3,7K Lines), полагаясь на Tensorflow 2. Код Stockfish используется для управления позициями, перемещения генерации и исследования базы таблицы конечностей, но не для поиска или оценки. Данные о самостоятельном обучении были полностью сгенерированы в рамках проекта Chesscoach после графика Alphazero 44 миллиона игр и 700 000 учебных партий в 4096 позиций в каждой.
Некоторые идеи за пределами альфазеро, но существующие в литературе и таких проектах, как Катаго (WU, 2020) и LC0, были интегрированы (часто я думал, что пробую что -то новое, но оказывается, что умные люди в LC0 пробовали почти все). Они включают в себя проводящую товарищ, зондирование на таблице эндшпил, минимакс эндшпиль, стохастическое усреднение веса (SWA), экспоненциально взвешенные скользящие средние (EWMA), различные стимулы для исследования, кэширование прогнозирования, вспомогательные цели обучения и дистилляция знаний.
Я считаю, что некоторые идеи являются новыми. Первый-это метод поиска, который направлен на то, чтобы избежать тактических ловушек и минимизировать простое сожаление посредством линейного разведка и селективного обратного эксплуатации, применяемых через элиминацию-протокол. Второе-это простая нейронная архитектура для естественного языка комментариев на позициях и движениях в сочетании с измененным применением отбора проб ядра (TOP-P), сфокусированного на правильности с использованием разности-желая.
Результатом является набор инструментов для игры в шахматы, обучения нейронных сетей, оптимизации параметров, прочности тестов, данных обучения, данных просмотра и отладки, организации данных обучения, теста на единицу и координационных кластеров. Чтобы завершить проект, бот создается по адресу 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 Scripts помогают в создании и загрузке этих изображений.
В каталоге кластера файлы .sh/.yaml управляют кластерами Kubernetes на TPU в старом стиле, тогда как Py/Alpha.py управляет кластерами на VMS TPU более нового стиля.
Справочник CPP содержит код C ++, в основном в CPP/Chesscoach. Код Chesscoach C ++ в основном ориентирован на производительность. Сторонние библиотеки включают CPP/CRC32C, CPP/Hunspell, CPP/Numpy, CPP/Protobuf-3.13.0, CPP/Stockfish, CPP/TCLAP, CPP/TOML11 и CPP/Zlib. Сторонние данные включают CPP/словаря и CPP/Pellestests. Дополнительные сторонние библиотеки C ++ устанавливаются с использованием инструмента Advanced Package (APT) и обнаружены системой Meson Build на Linux, а также установлены и обнаружены с использованием Nuget в Windows. Библиотека CPP/Protobuf создана кодом с использованием инструмента Protoc и CPP/protobuf/chesscoach.proto.
Каталог PY содержит код Python, первичный доступ через network.py от c ++, а также некоторые автономные инструменты сценариев. Код Physcoach Python в основном связан с нейронной сетью и облачным хранилищем. Дополнительные сторонние библиотеки Python устанавливаются с использованием PIP.
Справочник JS содержит графический интерфейс отладки, используемый в Chesscoachgui и Chesscoachuci, полагаясь на шахматные доски.
Справочник инструментов содержит Cutechess-Cli и Bayeselo для проведения турниров и расчета рейтингов участников ELO, а также бинарию двигателя Stockfish 13, чтобы выступить в качестве противника.
Справочник сценариев содержит различные ситуационные сценарии и удобства.
Справочник документов содержит документацию и активы.
После установки Chesscoach обнаруживает статические данные AT/USR/Local/Share/CHESSCOACH в Linux и вместе с бинарным в Windows. Он определяет динамические данные в $ {xdg_data_home}/chesscoach или в сборе, в ~/.local/share/chesscoach на Linux и At %localappdata %/chesscoach в Windows. Динамические данные также могут быть расположены в Google Cloud Storage; Например, gs: // chesscoach-eu/chesscoach.
Если вы работаете в Google Cloud, он может упростить настройку GPU, чтобы использовать предварительно построенное изображение глубокого обучения с CUDA 11.
./setup.sh (может потребоваться 30 минут, чтобы построить протобуф из источника).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (может потребоваться 30 минут, чтобы построить протобуф из источника).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (может потребоваться 30 минут, чтобы построить протобуф из источника).pip3 install tf-models-official==2.5.0 (это покрывает предварительно установленный TF-ночь).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , но это нормально, если это не удается, если не использовать виртуальную среду.setup.cmd (это устанавливает chesscoach_pythonhome после запуска activate_virtual_env.cmd).build.cmd .Chesscoach полагается на данные, установленные на $ {xdg_data_home}/chesscoach, или с ним, в ~/.local/share/chesscoach на Linux и в %localappdata %/chesscoach в Windows.
Установите вес нейронной сети. Для этого требуется загрузка 372 MIB и 406 MIB Disk Space.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Необязательно, установите базы таблиц эндшпиль -таблицы Syzygy. Файлы для 3-4-5 штук занимают приблизительно 1 GIB, а файлы для 3-4-5 + 6 штук занимают приблизительно 150 Гиб. Процесс установки несколько технический.
В режиме облачного хранения таблицы Syzygy автоматически реплицируются на локальное хранилище при запуске.
Script Scripts/ramdisk_syzygy6.sh устанавливает диск оперативной памяти на такие машины, как виртуальные тиражи TPU более нового стиля для размещения 3-4-5 + 6-штурных таблиц, когда память высока, но дисковое пространство низкое. При использовании диска лучше всего разместить эти таблицы на SSD для поддержания скорости поиска. Script Scripts/ramdisk_syzygy6.sh использует путь…/chesscoach/syzygy6, полагаясь на изменение конфигурации в config.toml, но вместо этого можно использовать chesscoach/syzygy.
export PROJECT_ID=<your Google Cloud project ID> .Если использовать alpha.py (эта часть особенно грязная):
cluster/cluster-prep-creds.sh для создания учетной записи службы и соответствующего файла key.json.gsutil cp .В разделе «Распределенное обучение и самостоятельное» в техническом объяснении есть больше информации об управлении кластерами в старом и более новом стиле.
Большинство программ Chesscoach зависят от встроенного и установленного config.toml. Особенно важно установить параметр search_threads при запуске Chesscoachuci, либо через config.toml во время сборки, либо опцию UCI во время выполнения, чтобы избежать голода с несправедливым планированием прогнозирования.
Двоиц Chesscoachuci может быть загружен как двигатель UCI в различных шахматных графиях.
Однако при использовании виртуальной среды для Python это может потребоваться: либо:
Chesscoachuci предлагает пользовательские команды в дополнение к командам протокола UCI:
comment генерирует естественный комментарий к текущей позиции и последнему шагу. Лучше всего обеспечить полную историю движения с помощью position startpos moves … Command.gui помечает графический интерфейс отладки для запуска при запуске поиска (как показано на рисунке 9 в объяснении высокого уровня).~ puct [moves …] [csv] Отображает отладку данных GUI в текстовой форме.~ fen отображает текущую позицию в нотации Forsyth -Edwards (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 .
Вы также можете запустить/отлаживать проект Chesscoachtest в Visual Studio или использовать интерфейс Test Explorer в Visual Studio.
Программа Google TPU Research Cloud (TRC) была исключительно щедрой в области компьютерных ресурсов, которые сделали этот проект возможным, и я благодарю Джонатана Катона, в частности за то, что все произошло.
Я очень ценю команду Google Cloud TPU за использование облачных виртуальных машин TPU, и особенно Майкла Банфилда за инженерную помощь на протяжении всей альфа -новой технологии.
Я искренне благодарю Карлсона Пфанншмидта (Университет Падерборна), чьи инструменты шахматной настройки и реализация Байеса-Скопта и советы по байесовской оптимизации были неоценимы для укрепления двигателя Chesscoach.
Я очень благодарен Мэтью Лай (DeepMind) за предоставление в независимом качестве, важных разъяснения на Alphazero Paper.
Я выражаю благодарность Пьеру де Вульфу за предоставление научно-исследовательских кредитов для Scrapingbee, чтобы обеспечить естественное обучение комментариев в Шескоахе.
Спасибо Теду Ли за ценные идеи и обсуждения в начале проекта.
Спасибо Фрейи Уилкокс за помощь с прототипированием диаграммы.
И особая благодарность Гари Бутнеру и Линель Рэфтону за редактирование, корректуру и поддержку.
Chesscoach выпускается под лицензией GPLV3 или более позднего дня.
Крис Бутнер, [email protected]