Энни Юнджун, подборка Эта статья воспроизводится с разрешения 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