Как стать автором
Обновить

Машинное обучение с подкреплением через соревновательные нейронные сети

JavaScript *Машинное обучение *
🔥 Технотекст 2020
Tutorial
В классической игре «крестики-нолики» существует возможность представить все вероятные ходы — и никогда не проигрывать. Эту возможность я использовал как метрику своего обучения нейронной сети игре.

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

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

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

Ссылки:
Запись игры обученной сети
Обучить сеть с нуля
Исходники

Также можно ввести предобученную модель из GitHub по нажатию на соответствующую кнопку, чтобы сразу начать испытывать нейронную сеть.

Первые шаги в обучении нейронных сетей


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

Каждый слой увеличивает время на обучение из-за распространения обратной ошибки по слоям “вверх”, и сигнал при этом постепенно затухает, прежде чем дойдёт до “верхних” слоёв, которые начинают путь принятия решения.

После нескольких вариантов настроек сети я пришёл в выводу, что для простой игры с полем 3х3 будет достаточно использовать однослойную сеть с 128 нейронами.

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

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

Общие правила поощрения агентов


Для относительного прогноза нейронной сетью, каждая ячейка имеет динамическую награду в зависимости от её значимости для агента на текущий момент.

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

Награды ячеек имеют такое распределение:
Чем меньше сделано ходов, тем выше награда от 0.1 до 1.0
Занятая ячейка имеет награду -1.0
Проигрышная ячейка получит награду -0.4
Свободная ячейка имеет награду 0.1
Ход в свободную ячейку увеличивает её награду до 0.2
Выигрышная ячейка соперника имеет награду 0.5
Победная ячейка принесёт награду 1.0

Соревновательное обучение нейронных сетей


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

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

Агенты играют 9 игр у себя, далее переходят для 1 игры на соревновательное поле, где игра ведётся до победного с ограничением в 9 ходов, затем всё повторяется заново.

По окончании каждой игры обе сети обучаются на новом опыте соперничества на общем игровом поле.

Предотвращение победы соперника


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

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

Соревновательное обучение с человеком


Реализация обучения нейронной сети игре с человеком мало отличается от соревнований между агентами. Единственное серьёзное отличие состоит в том, что человек изначально играет разумно. Партия с таким соперником создаёт дополнительные ситуации для агента, что благоприятно скажется на его игровом опыте и, соответственно, на обучении.

Завершение


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

В целом, считаю проект успешно завершённым — цель достигнута.

Спасибо за внимание!


p.s. Обучайте соревновательные сети, это позволяет взглянуть на простые игры под другим углом.

UPD: Reinforcement Learning Snake
Теги: tensorflow-jsreinforcement-learningmachine-learningcompetitive-neural-networks
Хабы: JavaScript Машинное обучение
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 2
Комментарии Комментарии 2

Похожие публикации

Лучшие публикации за сутки