Добро пожаловать на главный сайт Jizhi:Jizhi, двигатель, ведущий к эре интеллекта
Научите машину играть в игру Connect4 с помощью глубокого обучения и самостоятельной игры.
В этой статье я (автор Дэвид Фостер — прим. переводчика) в основном буду говорить о следующих трех вещах:
- Две причины, по которым AlphaZero совершает гигантский скачок в области искусственного интеллекта.
- Как вы можете создать ИИ, такой как AlphaZero, чтобы играть в игру «Четыре сына».
- Как можно использовать код в других играх.
AlphaGo → AlphaGo Zero → AlphaZero
В марте 2016 года на глазах у 2 миллионов человек команда DeepMind AlphaGo победила чемпиона мира по го Ли Седоля со счетом 4:1. Машина изучила человеческую стратегию го, которую раньше было невозможно вообразить.
Само по себе это уже было выдающимся достижением, но в октябре 2017 года DeepMind сделала еще один большой шаг вперед.
В своем выпуске «Овладение игрой в го без знаний человека» DeepMind продемонстрировал новый алгоритм AlphaGo Zero, который превзошел свою старую версию AlphaGo со счетом 100-0. Невероятно, но AlphaGo Zero училась исключительно через самостоятельную игру, начиная с «белой доски» и постепенно находя стратегию, которая могла бы победить AlphaGo. Создание такого сверхискусственного интеллекта вообще не требует какой-либо базы данных человеческого опыта для обучения.
Всего 48 дней спустя, 5 декабря 2017 года, DeepMind опубликовала еще одну статью «Овладение шахматами и сёги путем самостоятельной игры с помощью общего алгоритма обучения с подкреплением», в которой показано, что AlphaGo Zero также может победить чемпиона мира по шахматам StockFish и чемпиона Японии по сёги Элмо. Весь процесс обучения, от показа этих шахматных партий до AlphaGo Zero до того, как он стал лучшим игроком в мире в обеих играх, занял менее 24 часов.
В этом контексте родился AlphaZero — алгоритм общего назначения, который может быстро приобретать навыки в определенных областях без предварительного приобретения человеческого опыта.
Есть две вещи, которые замечательны в этом достижении:
1. AlphaZero не требует участия человека
Важность этого невозможно переоценить. Это означает, что подход, лежащий в основе AlphaGo Zero, можно использовать в любой игре в шахматы при наличии полной информации (если оба игрока знают состояние игры от начала до конца), поскольку ИИ не нужно ничего предварительно изучать. кроме правил этой игры.
Вот почему DeepMind смогла опубликовать статью, которая победила чемпиона мира по шахматам и сёги менее чем через 48 дней после публикации своей первой статьи AlphaGo Zero. Проще говоря, единственные необходимые изменения — это входные файлы, описывающие механику игры, и настройка высоких параметров, связанных с нейронными сетями и поиском по дереву Монте-Карло.
Алгоритм очень элегантный
Несмотря на то, что AlphaZero использует сверхсложные алгоритмы, понятные сегодня лишь небольшой части мира, это все же выдающееся достижение. Что делает его примечательным, так это то, что многие идеи в документе на самом деле намного проще, чем в предыдущей версии. Основная идея состоит в том, чтобы следовать чему-то вроде этих простых формул обучения:
- Пройдите все возможные сценарии от души, расставьте приоритеты по перспективным путям, также подумайте, как ваш противник, скорее всего, отреагирует на ваши действия, и продолжайте исследовать неизвестные ситуации.
- Достигнув незнакомого состояния, оцените, считаете ли вы текущую ситуацию выгодной для вас, сопоставьте баллы предыдущих шагов и проанализируйте психологический путь к текущему шагу.
- Рассмотрев все будущие возможности, предпримите наиболее изученное действие.
- В конце игры вернитесь назад и оцените, какие ошибочные суждения были сделаны в отношении будущих сценариев в то время, и соответствующим образом оптимизируйте свое понимание этих сценариев.
Это похоже на то, как вы учились играть в шахматы? Когда вы делаете плохой ход либо из-за того, что недооценили будущий ход, либо из-за того, что недооценили, как может сыграть ваш противник, и поэтому не приняли во внимание такую возможность. И именно на этих двух аспектах AlphaZero учится играть в шахматы.
Как создать свой собственный AlphaZero
В этой статье в основном объясняется, как построить AlphaZero, поэтому предполагается, что вы имеете общее представление о принципах AlphaZero. Если вы не знакомы с ним, вы можете заранее проверить соответствующую информацию, вы можете обратиться к этой статье, которую я сделалШпаргалкаили этостатья.
код
Скопируйте кодовую базу с Github
https://github.com/AppliedDataSciencePartners/DeepReinforcementLearning
Я процитирую код здесь позже.
Чтобы начать процесс обучения, сначала запустите первые две панели в блокноте run.ipynb Jupyter. После создания достаточного количества игровых сценариев нейросеть начинает обучение.
Благодаря самостоятельным играм и тренировкам он будет все лучше и лучше предсказывать ценности игры и следующие ходы в любой позиции, принимать более правильные решения и становиться умнее.
Теперь давайте рассмотрим код более подробно и покажем некоторые результаты, демонстрирующие, что ИИ со временем становится сильнее.
Примечание: это мое собственное понимание AlphaZero, основанное на статье, опубликованной DeepMind.Пожалуйста, поправьте меня, если я ошибаюсь.
«Четыре сына»
Игра, в которую научится играть наш алгоритм, называется Connect4. Хоть она и не такая сложная, как Го, но всего в ней 4 531 985 219 092 игровых позиции.
Правила игры просты:Игроки по очереди размещают фишки своего цвета в верхней части любого столбца. Выигрывает тот, кто первым разместит одинаковый цвет по вертикали, горизонтали или диагонали. Если все ячейки заполнены, а пешки одного цвета по-прежнему не появляются на одной линии, это ничья.
Вот краткое изложение ключевых файлов, составляющих кодовую базу:
game.py
Этот файл содержит правила игры «Четыре сына».
Каждому квадрату присвоен номер от 0 до 41, как показано на рисунке:
Этот файл содержит логику перехода от одного игрового состояния к другому на основе заданного действия. Например, имея пустую доску и номер действия 38, метод takeAction возвращается к новому игровому состоянию с позицией начального игрока в нижней части среднего столбца.
Вы можете заменить файл game.py любым игровым файлом, который соответствует тому же API, и, в принципе, алгоритм изучит стратегию игры, играя сам в соответствии с заданными вами правилами.
run.ipynb
Он содержит код для запуска процесса обучения. Он загружает правила игры, а затем проходит основной цикл алгоритма, состоящий из трех этапов:
- самостоятельная игра
- Переобучить нейронную сеть
- Оцените нейронные сети
В этом цикле два агента: best_player и current_player.
где best_player содержит самую эффективную нейронную сеть для создания воспоминаний о самостоятельных играх. Затем Current_player переобучает свою нейронную сеть на основе этих воспоминаний, а затем играет против best_player. Если он выигрывает, нейронная сеть в best_player заменяется нейронной сетью в current_player, и цикл начинается снова.
agent.py
Он содержит класс Agent (игрок в игре). Каждый игрок инициализируется собственной нейронной сетью и деревом поиска Монте-Карло.
Метод Simulate запускает процесс поиска по дереву Монте-Карло. В частности, агент перемещается к конечному узлу дерева, оценивает узел с помощью своей нейронной сети, а затем заполняет значение узла через дерево.
Метод Act повторяет метод симуляции несколько раз, чтобы понять, куда наиболее выгодно двигаться из текущей позиции. Затем он возвращает выбранное действие в игру, чтобы запустить игру.
Метод воспроизведения переобучает нейронную сеть, используя память из предыдущих игр.
Model.py
Этот файл содержит класс Residual_CNN, который определяет, как построить экземпляр нейронной сети.
Он берет сжатую версию архитектуры нейронной сети из статьи AlphaGo Zero, то есть сверточный слой, за которым следуют несколько остаточных слоев, а затем он разбивается на заголовок значения и заголовок политики.
Глубину и количество сверточных фильтров можно задать в конфигурационном файле.
Библиотека Keras используется для построения нейронных сетей с использованием бэкэнда TensorFlow.
Чтобы просмотреть один сверточно отфильтрованный и плотно связанный слой в нейронной сети, запустите следующий код в блокноте run.ipynb:
current_player.model.viewLayers()
MCTS.py
Он содержит классы node, edge и MCTS, которые образуют дерево поиска Монте-Карло.
Класс MCTS содержит вышеупомянутые методы moveToLeaf и backFill, а экземпляр класса Edge хранит статистику для каждого возможного перемещения.
config.py
Здесь вы устанавливаете ключевые параметры, влияющие на алгоритм.
Настройка этих переменных повлияет на время работы алгоритма, точность нейронной сети и общий успех алгоритма. Приведенные выше параметры позволяют получить высококачественный игровой плеер Four Sons, но для его завершения требуется много времени. Чтобы ускорить алгоритм, попробуйте следующие параметры.
funcs.py
Он содержит функции playMatches и playMatchesBetweenVersions, которые сопоставляют двух агентов.
Чтобы сыграть против созданного вами игрока, запустите следующий код (он также находится в записной книжке run.ipynb):
from game import Game
from funcs import playMatchesBetweenVersions
import loggers as lg
env = Game()
playMatchesBetweenVersions(
env
, 1 # the run version number where the computer player is located
, -1 # the version number of the first player (-1 for human)
, 12 # the version number of the second player (-1 for human)
, 10 # how many games to play
, lg.logger_tourney # where to log the game to
, 0 # which player to go first - 0 for random
)
initialise.py
Когда вы запускаете алгоритм, все файлы модели и памяти сохраняются в папке запуска в корневом каталоге.
Чтобы перезапустить алгоритм позже с этой контрольной точки, переместите папку запуска в папку run_archive, добавив номер запуска к имени папки. Затем введите номер запуска, номер версии модели и номер версии памяти в файл initialise.py в соответствии с расположением соответствующих файлов в папке run_archive. Затем с этой контрольной точки запустите алгоритм как обычно.
memory.py
Это экземпляр класса Memory для хранения воспоминаний из предыдущих игр, которые алгоритм будет использовать для переобучения нейронной сети current_player.
loss.py
Этот файл содержит пользовательскую функцию потерь для маскировки прогнозов недопустимых ходов перед передачей в функцию кросс-энтропийных потерь.
settings.py
Расположение папок run и run_archive.
logger.py
Этот файл содержит пользовательскую функцию потерь, которая маскирует предсказание недопустимых ходов перед передачей в функцию кросс-энтропийных потерь.
settings.py
Расположение папок run и run_archive.
loggers.py
Файлы журнала сохраняются в папку журнала в папке выполнения. Чтобы включить ведение журнала, установите значение переменной logger_disabled в этом файле на «False». Просмотр файлов журнала поможет вам понять, как работает алгоритм, и понять его «мышление». Например, вот пример из файла logger.mcts:
Образец также из файла logger.tourney, где вы можете увидеть каждую вероятность, связанную с ходом, на этапе оценки:
результат
После нескольких дней обучения после мини-пакетных итераций получается следующий график потерь:
Верхняя строка — ошибка на стороне политики (вероятность кросс-энтропийного движения MCTS соответствует выходу нейронной сети). Строка ниже — это ошибка на конце значения (среднеквадратическая ошибка между фактическим значением игры и значением нейронной сети). Линия посередине — это среднее из двух.
Ясно, что нейронные сети лучше предсказывают значение и вероятный следующий ход каждого игрового состояния. Чтобы показать, как этот результат становится еще сильнее, я провел лигу между 17 игроками, от первой итерации нейронной сети до 49-й итерации, где каждая пара играла дважды, причем у обоих игроков был шанс сыграть первым.
Вот окончательный рейтинг:
Очевидно, что более поздняя версия нейронной сети превзошла более раннюю версию, выиграв большинство соревнований между ними. Кроме того, похоже, что обучение не достигает насыщения, поскольку игрок становится более сильным, а усвоенная политика усложняется по мере увеличения времени обучения.
Например, явная стратегия, отдаваемая нейронным сетям с течением времени, заключается в том, чтобы раннее стрелять в центральный столбец. Обратите внимание на разницу между версией 1 и версией 30 алгоритма:
Первая версия нейронных сетей
Тридцатая версия нейронных сетей
Это хорошая стратегия, так как во многих шахматных линиях требуется средняя колонка — требование состоит в том, чтобы попытаться не дать противнику воспользоваться этим. И нейронные сети научились этому без участия человека.
научиться играть в другую игру
В папке с играми есть файл game.py для игры под названием Metasquares. Игра заключается в размещении маркеров X и O в сетке, чтобы попытаться сформировать квадраты разных размеров. Чем больше блок, тем выше счет игрока. Когда сетка заполнена, побеждает игрок с наибольшим количеством очков.
Алгоритм, который мы использовали выше, научится играть в Metasquares, если вы замените файл game.py игры Four Sons на файл Metasquare game.py.
Другими словами, таким образом наша модель может обучиться любой игре.