Leela Chess Zero (сокращенно LCZero , lc0 ) — это бесплатный шахматный движок с открытым исходным кодом и глубокими нейронными сетями , а также проект добровольных вычислений . Разработку возглавил программист Гэри Линскотт, который также является разработчиком шахматного движка Stockfish . Leela Chess Zero был адаптирован из движка Leela Zero Go , [1] который, в свою очередь, был основан на проекте AlphaGo Zero от Google . [2] Одной из целей Leela Chess Zero была проверка методов, изложенных в статье AlphaZero , применительно к игре в шахматы.
Как и Leela Zero и AlphaGo Zero, Leela Chess Zero начинается без каких-либо внутренних знаний, связанных с шахматами, кроме основных правил игры. [1] Затем Leela Chess Zero учится играть в шахматы, обучаясь с подкреплением в ходе повторной самостоятельной игры , используя распределенную вычислительную сеть, координируемую на веб-сайте Leela Chess Zero.
По состоянию на июнь 2024 года [update]Leela Chess Zero сыграла более 2,5 миллиардов игр против самой себя, играя около 1 миллиона игр каждый день, [3] и способна играть на уровне, сопоставимом со Stockfish , ведущей традиционной шахматной программой. [4] [5]
Проект Leela Chess Zero был впервые анонсирован на TalkChess.com 9 января 2018 года. [1] [6] Это раскрыло Leela Chess Zero как самообучающийся шахматный движок с открытым исходным кодом, под которым он впоследствии стал известен, с целью создания сильного шахматного движка. [7] В течение первых нескольких месяцев обучения Leela Chess Zero уже достиг уровня гроссмейстера , превзойдя силу ранних версий Rybka , Stockfish и Komodo , несмотря на оценку на порядки меньше позиций из-за своей глубокой нейронной сети в своей оценочной функции и использования поиска по дереву Монте-Карло .
В декабре 2018 года команда AlphaZero опубликовала новую статью в журнале Science , в которой были раскрыты ранее неизвестные подробности архитектуры и параметров обучения, используемых для AlphaZero. [8] Эти изменения вскоре были включены в Leela Chess Zero и увеличили как ее силу, так и эффективность обучения. [9]
Работа над Leela Chess Zero послужила основой для аналогичного проекта AobaZero для сёги . [10]
Движок был переписан и тщательно доработан с момента его создания, и с 2019 года [11] работает на нескольких бэкэндах , что позволяет ему эффективно использовать различные типы оборудования, как ЦП, так и ГП. [12]
Движок может быть настроен на использование различных весов , [13] включая даже различные архитектуры . Этот же механизм заменяемых весов может быть использован и для альтернативных шахматных правил, например, для варианта шахмат Фишера , который был реализован в 2019 году. [14]
С 2022 года он использует пост-LN encoder-only transformers , аналогично BERT . Он представляет шахматную доску как последовательность токенов длиной 64. [15] Выход сети — это еще одна последовательность закодированных токенов длиной 64. Отдельный модуль используется для вычисления логита для каждого возможного хода из одного квадрата (источника) в другой (цель). Модуль принимает в качестве входных данных два закодированных токена и выводит одно число (логит для этого хода). [16] : Приложение A
Метод, используемый разработчиками для того, чтобы Leela Chess Zero самообучалась и играла в шахматы на уровне выше человеческого, — это обучение с подкреплением . Это алгоритм машинного обучения, зеркально отражающий AlphaZero , используемый в исполняемом / двоичном коде обучения Leela Chess Zero (называемый «двоичным») для максимизации вознаграждения за счет самостоятельной игры . [1] [8] Как проект распределенных вычислений с открытым исходным кодом, пользователи-добровольцы запускают Leela Chess Zero, чтобы сыграть сотни миллионов игр, которые передаются в алгоритм подкрепления. [3] Чтобы внести свой вклад в развитие движка Leela Chess Zero, необходимо загрузить последнюю нерелизную версию движка (non-rc), а также клиент. Клиент необходим для подключения к текущему серверу Leela Chess Zero, где хранится вся информация из игр в шахматы с самостоятельной игрой, для получения последней сети, генерации игр с самостоятельной игрой и загрузки данных обучения обратно на сервер. [17]
Для игры против движка Leela Chess Zero на компьютере необходимы два компонента: двоичный файл движка и сеть. (Двоичный файл движка отличается от клиента тем, что клиент используется в качестве тренировочной платформы для движка). Сеть содержит функцию оценки Leela Chess Zero, которая необходима для оценки позиций. [17] Более старые сети также можно загрузить и использовать, поместив их в папку с двоичным файлом Lc0.
Self-play Elo используется для оценки относительной силы сети, чтобы искать аномалии и общие изменения в силе сети, и может использоваться в качестве диагностического инструмента, когда Lc0 претерпевает значительные изменения. С помощью тестовых игровых матчей, которые проводятся с минимальными колебаниями температуры, [18] клиенты движка Lc0 тестируют самую последнюю версию против других последних версий той же сети, которая затем отправляется на учебный сервер для создания общей оценки Elo.
Стандартные формулы Эло используются для расчета относительной силы Эло между двумя игроками. Более поздние расчеты Эло для самостоятельной игры используют результаты игры в матче против нескольких сетевых версий для расчета более точного значения Эло.
Подход «самостоятельной игры» имеет несколько последствий для оценки рейтинга Эло Lc0:
Накопительное инфляционное значение Эло самостоятельной игры можно сравнить с другими забегами, чтобы оценить отсутствие общности в оценке силы с помощью чистого кумулятивного Эло самостоятельной игры. Тестовый тест 71.4 по шахматам Фишера (названный сетями 714xxx) имеет почти 4000 кумулятивных Эло самостоятельной игры 76 сетей в своем забеге (714076). Сеть забега T60 (6xxxx) 63000 имеет кумулятивное Эло самостоятельной игры около 2900. Сравнивая 714076 с сеткой 63000, можно увидеть, что 63000 явно побеждает 714076 в личных встречах максимум, если не со всеми «честными» контролями времени. Однако Эло чистого 63000 значительно ниже, чем у его противника. Это подтверждает утверждение о том, что кумулятивный индекс самостоятельной игры Эло не является объективной мерой силы и не позволяет линейно сравнивать силу сети Lc0 с силой человека.
Настройка движка для игры с одним узлом с --minibatch-size=1
и go nodes 1
для каждого сыгранного хода создает детерминированную игру, и Self-Play Elo при таких настройках всегда будет давать одинаковый результат между 2 одинаковыми сетями на одной и той же начальной позиции — всегда выигрыш, всегда проигрыш или всегда ничья. Self-play Elo не является надежным для определения силы в этих детерминированных обстоятельствах.
В 15 сезоне чемпионата Top Chess Engine Championship движок AllieStein соревновался вместе с Leela. AllieStein представляет собой комбинацию двух разных ответвлений от Leela: Allie, которая использует ту же оценочную сеть, что и Leela, но имеет уникальный алгоритм поиска для исследования различных линий игры, и Stein, оценочная сеть, которая была обучена с использованием контролируемого обучения на основе существующих игровых данных с участием других движков (в отличие от неконтролируемого обучения , которое использует Leela). Хотя ни один из этих проектов не был бы принят в TCEC по отдельности из-за их сходства с Leela, комбинация алгоритма поиска Allie с сетью Stein, называемая AllieStein, достаточно уникальна, чтобы гарантировать ей конкуренцию вместе с основной Lc0. (Правила TCEC требуют, чтобы движок на основе нейронной сети имел по крайней мере два уникальных компонента из трех основных характеристик: код, который оценивает сеть, сама сеть и алгоритм поиска. Хотя AllieStein использует тот же код для оценки своей сети, что и Lc0, поскольку два других компонента являются новыми, AllieStein считается отдельным движком.) [19]
В начале 2021 года блог LcZero анонсировал Ceres, новый шахматный движок, использующий сети LcZero. Он реализует поиск по дереву Монте-Карло , а также множество новых идей по улучшению алгоритмов. Первоначальное тестирование Эло показало, что Ceres сильнее Lc0 с той же сетью. [20]
В апреле 2018 года Leela Chess Zero стала первым движком, использующим глубокую нейронную сеть, который попал в чемпионат Top Chess Engine Championship (TCEC) в сезоне 12 в низшем дивизионе, дивизионе 4. [21] Leela выступила не очень хорошо: в 28 играх она выиграла одну, сыграла вничью две и проиграла оставшиеся; ее единственная победа была одержана в позиции, в которой ее противник, Scorpio 2.82, потерпел крах за три хода. [22] Однако она быстро улучшилась. В июле 2018 года Leela заняла седьмое место из восьми участников на чемпионате мира по шахматам среди компьютеров 2018 года . [23] В августе 2018 года она выиграла дивизион 4 13-го сезона TCEC с рекордом в 14 побед, 12 ничьих и 2 поражения. [22] [24] В 3-м дивизионе Лила набрала 16/28 очков, заняв третье место после Этериал, которая набрала 22,5/28 очков, и Арасана по тай-брейку. [25] [22]
К сентябрю 2018 года Leela стала конкурентоспособной с сильнейшими движками в мире. В чемпионате по компьютерным шахматам Chess.com 2018 года (CCCC) [26] Leela заняла пятое место из 24 участников. Восемь лучших движков прошли во второй раунд, где Leela заняла четвертое место. [27] [28] Затем Leela выиграла матч из 30 игр против Komodo , заняв третье место в турнире. [29] [30] Leela приняла участие в «кубке TCEC», мероприятии, в котором движки из разных дивизионов TCEC могут играть друг с другом. Leela победила движки более высокого дивизиона Laser, Ethereal и Fire, прежде чем, наконец, была выбита Stockfish в полуфинале. [22]
В октябре и ноябре 2018 года Лила приняла участие в чемпионате Chess.com Computer Chess Championship Blitz Battle. [31] Лила заняла третье место после Stockfish и Komodo. [32]
В декабре 2018 года Лила приняла участие в 14-м сезоне чемпионата Top Chess Engine Championship . Лила доминировала в дивизионах 3, 2 и 1, легко заняв первое место во всех из них. В главном дивизионе доминировал Stockfish, в то время как Houdini , Komodo и Лила боролись за второе место. Все свелось к игре финального раунда, где Лиле нужно было удержать Stockfish вничью черными, чтобы занять второе место, опередив Комодо. Лиле это удалось, и поэтому она встретилась со Stockfish в суперфинале. В матче с перевесом сначала Stockfish, а затем Лила вышли вперед на три игры, прежде чем Stockfish выиграл с минимальным отрывом 50,5–49,5. [22]
В феврале 2019 года Leela одержала свою первую крупную победу на турнире, победив Houdini в финале второго кубка TCEC. Leela не проиграла ни одной игры за весь турнир. [22] [33] В апреле 2019 года Leela выиграла чемпионат Chess.com Computer Chess Championship 7: Blitz Bonanza, став первым проектом на основе нейронных сетей, завоевавшим этот титул. [34]
В 15-м сезоне чемпионата Top Chess Engine (май 2019 г.) Leela защитила свой титул кубка TCEC, на этот раз победив Stockfish в финале со счетом 5,5–4,5 (+2 =7 −1) после того, как Stockfish допустила грубую ошибку в розыгрыше таблицы из семи человек . [35] Leela также впервые выиграла Суперфинал, набрав 53,5–46,5 (+14 −7 =79) против Stockfish, включая победы как белыми, так и черными в одном и том же заранее определенном дебюте в играх 61 и 62. [36] [37]
В 16 сезоне TCEC Leela заняла третье место в премьер-дивизионе, пропустив квалификацию в суперфинал, уступив Stockfish и новому глубокому нейронному сетевому движку AllieStein. Leela не потерпела никаких поражений в премьер-дивизионе, будучи единственной машиной, которая это сделала, и победила Stockfish в одной из шести сыгранных ими игр. Однако Leela удалось одержать только девять побед, в то время как AllieStein и Stockfish одержали по 14 побед. Эта неспособность победить более слабые машины привела к тому, что Leela заняла третье место, отстав на пол-очка от AllieStein и на очко от Stockfish. [38] В четвертом кубке TCEC Leela была посеяна первой как действующий чемпион, что поместило ее на противоположную половину сетки, как AllieStein и Stockfish. Leela смогла пройти в финал, где она встретилась со Stockfish. После семи ничьих Stockfish выиграла восьмую игру, выиграв матч. [39]
В 17-м сезоне TCEC , проходившем в январе-апреле 2020 года, Лила вернула себе чемпионство, победив Stockfish со счётом 52,5–47,5, одержав шесть замечательных побед в последних десяти играх, включая победы как белыми, так и чёрными в одном и том же заранее определённом дебюте в играх 95 и 96. [40] Она снова прошла в суперфинал в 18-м сезоне , но на этот раз проиграла Stockfish со счётом 53,5–46,5. [41] В финале 6-го кубка TCEC Лила проиграла AllieStein, заняв второе место. [42]
В 19 сезоне TCEC Лила снова прошла в суперфинал. На этот раз она играла против новой версии Stockfish с поддержкой NNUE , функции оценки на основе неглубокой нейронной сети, используемой в основном для конечных узлов дерева поиска. Stockfish NNUE убедительно победила Лилу с финальным счетом 54,5–45,5 (+18 −9 =73). [43] [44] С тех пор Лила неоднократно проходила в суперфинал, только чтобы каждый раз проиграть Stockfish: +14 −8 =78 в 20 сезоне , +19 −7 =74 в 21 сезоне, +27 −10 =63 в 23 сезоне, +20 −16 =64 в 24 сезоне, +27 =50 -23 в 25 сезоне и +31 =52 -17 в 26 сезоне.