Научит вас, как собрать AlphaZero (используя Python и Keras)

Keras алгоритм Нейронные сети игра

Энни Юнджун, подборка Эта статья воспроизводится с разрешения AI New Media Qubit (идентификатор публичной учетной записи: qbitai). Пожалуйста, свяжитесь с источником для перепечатки.


AlphaZero, сильнейший шахматист в лагере DeepMind.


Было проведено много теоретического анализа AlphaZero.Недавно Дэвид Фостер, соучредитель Applied Data Science, написал подробное руководство, чтобы научить вас создавать собственную систему AlphaZero. А также прикрепил код.


Оригинальный адрес: https://medium.com/applied-data-science/how-to-build-your-own-alphazero-ai-using-python-and-keras-7f664945c188.



Как создать свой собственный AlphaZero


Во-первых, нам нужно изучить и понять принципы AlphaGo Zero. Я написал краткое справочное руководство по пунктам знаний AlphaGo Zero ранее, и статья в блоге Тима Уилера также очень подробная, и я рекомендую ее вам.


Руководство по быстрой проверке Knowledge Point:


https://medium.com/applied-data-science/alphago-zero-explained-in-one-diagram-365f5abf67e0

Блог Тима Уиллера:


http://tim.hibal.org/blog/alpha-zero-how-and-why-it-works/

код


Я объясню на основе следующей базы кода:


https://github.com/AppliedDataSciencePartners/DeepReinforcementLearning

С чего начать создание собственного AlphaZero?


Не волнуйтесь, вы можете начать с запуска первых двух панелей run.ipynb в блокноте Jupyter. Как только будет достаточно локализации для игры, нейросеть начнет обучение. Благодаря дополнительным самостоятельным играм и тренировкам он будет постепенно лучше и лучше предсказывать ценность и следующий ход отдельных действий в игре, что приведет к лучшим решениям и более умным играм.


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


Connect4


Наш алгоритм научится играть в игру Connect4. Хотя она и не такая сложная, как Го, в ней тоже есть 4531985219092 игровых позиций.



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


Ниже приведены ключевые файлы, из которых состоит кодовая база:


game.py


Этот файл содержит правила игры для Connect4.


Каждому квадрату присвоен номер от 0 до 41, как показано на изображении ниже:



Файл game.py предоставляет логику в дополнение к переходу от одного игрового состояния к другому и предоставляет выбор действий. Например, учитывая пустую доску и номер действия 38, метод takeAction возвращается к новому игровому состоянию, которое находится в центре нижней строки.


Вы можете заменить файл game.py любым игровым файлом, соответствующим тому же API и алгоритму, и обучаться самостоятельно в соответствии с заданными вами правилами.


run.ipynb


Этот файл содержит код для запуска процесса обучения. Он загружает правила игры по основной ссылке в алгоритм и состоит из трех этапов:


1. Самостоятельная игра

2. Переобучить нейронную сеть

3. Оцените нейронную сеть


В этом сеансе также участвуют два агента, это best_player и current_player.


best_player содержит самую эффективную нейронную сеть и может использоваться для создания воспоминаний о самостоятельных играх. Затем current_player переобучает свою нейронную сеть на этих воспоминаниях, прежде чем играть против best_player. Если он выигрывает, нейронная сеть внутри best_player преобразуется в нейронную сеть внутри current_player, и цикл начинается снова.


agent.py


Этот файл содержит класс агента игрока в игре. В игре каждый игрок инициализируется собственной нейронной сетью и деревом поиска Монте-Карло.


Нам нужно запустить процесс поиска по дереву Монте-Карло с помощью метода симуляции. В частности, агент перемещается к конечному узлу дерева, оценивает узел с помощью своей нейронной сети и возвращает значение узла через дерево.


После этого нам также нужно несколько раз повторить симуляцию методом act, чтобы агент понял, что выгоднее всего двигаться с текущей позиции. Затем он возвращает последнее выбранное действие в игру, чтобы выполнить действие.


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


model.py


Этот файл включает класс Residual_CNN, который определяет, как построить экземпляр нейронной сети.



Он использует сжатую версию структуры нейронной сети из статьи AlphaGo Zero, за которой следует ряд остаточных слоев, затем разделенных на две ветви: значение и политика.


Глубину и количество сверточных фильтров можно указать в конфигурационном файле.


Для построения сети используется библиотека Keras, а бэкенд — TensorFlow.


Чтобы просмотреть один сверточно отфильтрованный и плотно связанный слой в нейронной сети, запустите в блокноте run.ipynb следующее:


current_player.model.viewLayers()

△ Сверточная фильтрация в нейронных сетях


MCTS.py


Он содержит узлы, ребра и классы MCTS, составляющие дерево поиска Монте-Карло.


Класс MCTS содержит вышеупомянутые методы moveToLeaf и backFill, а экземпляр класса Edge хранит статистику для каждого потенциального метода перемещения.


config.py


Здесь задаются ключевые параметры, влияющие на алгоритм.



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



funcs.py


Сюда входят функции playMatches и playMatchesBetweenVersions для игры между двумя агентами.


Чтобы сыграть против своего творения, запустите приведенный ниже код (также в блокноте run.ipynb).



initialise.py


При запуске алгоритма все файлы модели и памяти сохраняются в папке запуска в корневом каталоге.


Чтобы перезапустить алгоритм с точки записи, переместите папку запуска в папку run_archive и добавьте номер запуска к имени папки. Затем введите номер запуска, номер версии модели и номер версии памяти в файл initialise.py, соответствующий соответствующим файлам в папке run_archive.


разное


memory.py: экземпляр класса Memory хранит предыдущую игру, алгоритм использует его для переобучения нейронной сети для текущего игрока (current_player).


loss.py: этот файл включает пользовательскую функцию потерь.


settings.py: расположение папок run и run_archive.


loggers.py: файл журнала сохраняется в папке журнала в папке запуска. Чтобы включить ведение журнала, в этой папке установите для переменной logger_disabled значение False.


Рисунок ниже взят из файла logger.tourney, и вы можете увидеть вероятность каждого хода.



в заключении


После нескольких дней обучения наша модель выдает следующие значения потерь при мини-пакетной итерации:



Верхняя строка — ошибка на стороне политики (вероятность кросс-энтропийного движения MCTS соответствует выходу нейронной сети), нижняя — ошибка между значением и значением (среднеквадратическая ошибка между реальным игровым значением и значение нейронной сети), средний корень Линия представляет собой среднее из двух выше.


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


Чтобы показать, как это может проявиться в более сильных играх, я провел лигу между 17 игроками, играя каждой парой дважды с первой итерации нейронной сети до 49-й итерации, у обоих игроков есть шанс сыграть первым.


Итоговый рейтинг выглядит следующим образом:




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


Например, четкая стратегия, которой всегда придерживалась нейросеть, — как можно быстрее захватить центральный столбец, мы можем наблюдать разницу между первой версией алгоритма и 30-й версией —

△ Первая версия нейросети

△ 30-е издание нейронных сетей


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


Самое главное, что этому учится сама нейронная сеть, без участия человека.


изучайте разные игры


В папке с играми есть файл game.py под названием Metasquares. Так называемые метаквадраты заключаются в том, что две стороны по очереди играют в шахматы в сетке.Чем больше квадраты, образованные фигурами, тем выше счет.



Если вы замените Connect4 game.py на Metasquares game.py, тот же алгоритм начнет обучаться новой игре Metasquares.


End