[Открытый код] Распространяемые китайские шахматы Alpha Zero

Google искусственный интеллект открытый источник Go

Сначала зайдите на github, этот проект все еще находится в стадии активной разработки и поддержки, с помощью этого проекта вы можете настроить свой собственный кластер и обучить свой собственный альфа-гоу китайских шахмат:

icyChessZero

В Китае проживает 1,3+ миллиарда человек, и аудитория китайских шахмат тоже очень широкая, однако проектов с открытым исходным кодом, связанных с китайскими шахматами alpha go/zero, не так много, известные в Китае можно пересчитать по пальцам. , и содержание очень похоже, все они используют метод обучения сети альфа-ноль + альфа-го и перечисляют два относительно известных:

  • Jiajia Zero: Это команда, которая поддерживает и перемещает Leela Zero (шахматный проект альфа-ноль) в китайский шахматный проект.В настоящее время он является самым сильным с точки зрения очков Эло, и есть небольшая тенденция к коммерциализации.
  • cczero: Код поддерживает почти один человек.Это также китайский шахматный проект, организованный и поддерживаемый людьми.Цель состоит в том, чтобы стать самым сильным проектом с открытым исходным кодом.

Оба проекта замечательны, так зачем мне самому писать один? Это начинается раньше Еще после выхода альфа-го и до выхода альфа-0 у меня была идея использовать нейронные сети для создания китайских шахмат, но в то время люди толком не знали, как это делать. и Го были очень разными. Я написал относительно наивную сеть, надеясь использовать сеть без какого-либо алгоритма, подобного Монте-Карло, для предсказания регулярности человеческих ходов. В конце концов, простая стратегическая сеть в Го может достичь некоторых любительских шахматных навыков. Уровень, я не гонюсь за лучшим в мире, несколько любительских абзацев для меня вполне нормально.

В то время я написал краулер и просканировал множество отечественных шахматных записей, в том числе многие партии известных нам шахматных мастеров, а затем начал обучать сеть предсказывать ходы человека:

Это очень наивный сетевой код, который я реализовал в то время:

icyElephant

图 1. 两个网络分别负责选子和落子

Мой подход в то время состоял в том, чтобы использовать 2 сети для прогнозирования движения человека, одну из которых назвали сетью выбора (сеть 1 на рисунке 1), чтобы предсказать, какой ребенок переместится, а другую назвали сетью перемещения, чтобы предсказать, куда движется ребенок. будет двигаться. , по сравнению с методом альфа-ноль, альфа-ноль использует одну сеть для выполнения двух задач:

图 2. Alpha zero 方法,一个网络预测选子和移动子的笛卡尔积

Интуитивно кажется, что сетевая логика сначала прогнозирует выбор, а затем прогнозирует размещение, больше соответствует процессу человеческого мышления, однако разница в точности между этими двумя сетями очень мала, когда они фактически обучаются с использованием реальных игровых данных. :

И мой метод в то время (сеть выбора-хода) не подходил для предсказания вероятности каждого хода в поиске по дереву Монте-Карло, поэтому позже, когда я написал icyChessZero, я также использовал форму сети политик альфа-ноль. После обучения этой сети я обнаружил, что хотя точность предсказания шахматных ходов не очень низкая, но просто играя против этой сети, которая предсказывает ходы, я обнаружил, что, хотя эта сеть имеет хороший старт, как только она достигает середины в играх и эндшпилях , Интернет часто ведет себя странно, раздавая фигуры. Я думаю, что это явление вызвано разницей между Го и шахматами. Потому что ситуация в Го больше подходит для оценки непосредственно с доски (так называемый «потенциал») , а в шахматах больше логического мышления.

До этого момента есть еще много проектов, которые можно сделать, например, в Zhihu есть серия статей:

RUS Bo: Самодельный AlphaGo за 28 дней

Статья под названием 28-дневная самопальная альфа идет (хотя этот цикл статей был потом евнухом, и автор продал лампу, наверное из-за недостаточной вычислительной мощности), но если идти дальше, то на самом деле есть некий порог, Использование дерева Монте-Карло Выполнение вспомогательных игр и обучение обучению с подкреплением нейронной сети требует огромной вычислительной мощности.Этот порог, другие проекты с открытым исходным кодом обычно решаются с помощью краудфандингового обучения, такого как cczero и Jiajia zero, но некоторые преодолели этот порог. не перешагнул этот порог, например, другой проект на Zhihu раньше:

Cheng Shidong: AlphaZero Practice - китайские шахматы (с бумажным переводом)

Этот проект ограничен огромным количеством ресурсов, необходимых для обучения с подкреплением.Хотя код написан, но из-за недостаточной вычислительной мощности автор может сдаться только после сжигания нескольких сотен долларов.

Итак, как мне справиться с этой проблемой? Я воспользовался своим статусом студента и получил в свои руки каждую машину с графическим процессором, до которой мог дотянуться.Я упросил дедушку сказать моей бабушке, чтобы она купила четыре или пять машин, и сформировал кластер.Хотя вычислительная мощность еще недостаточно, я могу хотя бы начать тренироваться. .

Чтобы фундаментально решить эту проблему, мы можем использовать только огромное количество вычислительной мощности, но мы также можем частично облегчить эту проблему с помощью некоторых методов повышения эффективности, некоторых широко используемых методов, таких как:

  1. Ускоряем код с помощью c/c++
  2. Используйте многопроцессорность для запуска нескольких сетей одновременно
  3. Используйте сопрограммы для группировки нескольких переадресаций в пакеты для повышения эффективности использования графического процессора.
  4. Используйте сопрограммный/многопроцессный алгоритм дерева Монте-Карло, чтобы ускорить скорость поиска дерева Монте-Карло.
  5. Используйте несколько машин для распространения шахматного репертуара и используйте больше графических процессоров.

Кроме метода ускорения C/C++, я еще не использовал его, я использовал другие методы, подробнее см.:

Глубокое понимание метода альфа-го и его применения в китайских шахматах.

После реализации функции использования дерева Монте-Карло для поиска ходов я позволил сети обучения с учителем и двум алгоритмам обучения с учителем + дерево Монте-Карло конкурировать друг с другом, и результаты следующие:

В 29 партиях дерево Монте-Карло не проиграло ни одной партии, а 5 партий с ничьей были превышены лимитом количества ходов на тот момент (100 ходов, в целях экономии времени), а ничьи были все мкт без исключения Преимущество. Это ясно доказывает, что дерево Монте-Карло может эффективно улучшить шахматную мощь сети политик.

Принцип этого проекта прост, но реализация логична. Начал писать в марте (сомнительно) и не успел написать. Писал с перерывами. Побегав несколько дней в мае, появились некоторые баги, а потом снова всплыла куча вещей., этот проект снова был отложен, а в июле или августе я неожиданно обнаружил, что у меня наконец-то появилось немного времени, так что, наконец, я завершил первую версию моей китайской шахматной альфы go zero .

Потом начался долгий процесс обучения.Поскольку мои вычислительные мощности очень ограничены,пока только кластер из 4 или 5 gpu серверов обучает эту версию альфа ноль.Мой первоначальный результат оценки основан на лабораторных ресурсах.Я могу обкатать его на лет 10. Позже, по мере того, как расчет становился все более и более точным, я обнаружил, что вполне возможно завершить обучение всего за один год или даже за полгода (моя цель — достичь уровня среднего и высшего человеческого .На пределе вычислительных мощностей и времени) но одной машины точно мало, машин много, поэтому я написал распределённую версию, да ещё и потратил неделю на рефакторинг большого количества кода, после этого рефакторинга некоторые баги исчезли необъяснимым образом Теперь кривая эло, наконец, начинает нормально расти.

Предложение PS: если у вас есть разрешение на бездействующий сервер графического процессора в Beiyou, и вы готовы присоединиться к кластеру для совместного обучения, я надеюсь, что вы можете связаться со мной

На мой взгляд, ценно не только тренировать самую сильную сеть (конечно, если есть ресурсы для обучения самой сильной сети, я не против [вручную закрою лицо]), исследовать точки оптимизации в этом тренировочном процессе, и будьте осторожны. Если в процессе обучения с подкреплением альфа-ноль есть какие-либо необоснованные места, они ценны.

Открытый исходный код на этот раз включает в себя как главный, так и подчиненный код кластера.Я загрузил минимальный образец кластеризации на диск Google:

col AB.research.Google.com/drive/1SC-a…

Этот минимальный образец можно запустить непосредственно с помощью Google Colab (бесплатно), просто сохраните файл на свой собственный диск Google и откройте его с помощью Colab (обратите внимание, чтобы включить ускорение GPU):

Выполнение всего кода в этом минимальном примере в google colab должно привести к результатам, подобным следующим, что указывает на то, что случайный вес был инициализирован и использован для подигры дерева Монте-Карло:

В соответствии с прогрессом и ситуацией с другими проектами, для достижения моей небольшой цели потребуется 4000 ~ 5000 эло.Теперь этот проект достиг около 700 эло, поэтому достижение цели не является невозможным.

Кроме того, данный проект относится к реализации многих подобных проектов, таких как:

zhuanlan.zhihu.com/p/34433581

cczero.org/

GitHub.com/Джун Сяосун…

Цель написания этого проекта также состоит в том, чтобы надеяться, что на пути исследования будет еще одна дорога и еще один человек.

Последний совет для тех, кто интересуется алгоритмом альфа-нуля:

Если у вас недостаточно вычислительных мощностей, не играйте в шахматы, если вам нечего делать.Для сложной игры, такой как Го, вы можете начать обучение с простой игры, такой как Гомоку, которая имеет гораздо более низкий порог вычислительной мощности.

Кроме того, если вы хотите обсудить какие-то технические вопросы, вы можете приватно пообщаться, прокомментировать или передатьicybee@yeah.netсвяжитесь со мной