Нейросеть крестики нолики python

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Задания по ооп питон

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Php output before header

Завершение

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

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

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

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

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

LMD Tic-Tac-Toe — это программа которая играет в крестики-нолики. Но она работает через искусственную нейронную сеть и по этому во время игры может сама обучаться. Есть 3 режима обучения которые можно переключать при помощи кнопок на верхней панели: H(hand — ручное обучения), G(game — обучение во время игры), A(auto — автоматическое обучения). В…

Winster332/LMD_Tic-Tac-Toe

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Читайте также:  How to set java path windows

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

LMD Tic-Tac-Toe — это программа которая играет в крестики-нолики. Но она работает через искусственную нейронную сеть и по этому во время игры может сама обучаться. Есть 3 режима обучения которые можно переключать при помощи кнопок на верхней панели: H(hand — ручное обучения), G(game — обучение во время игры), A(auto — автоматическое обучения). Вроде с 2 — мя первыми режимами все ясно. Автоматическое обучение заключается в том что сеть играет сама с собой при этом исправляя предыдущие ошибки тем самым обучаясь играть. При ручном обучении вы должны через правую панель указывать куда нужно в той или иной ситуации ставить нолик. Программа поделена на 2 части, игровая и информационная. Справа в первом поле отображается информация о событиях, ниже — панель обучения, что бы обучить сеть достаточно указать индекс и нажать «обучить». Индекс — это номер где должен стоять нолик, нумерация идет такая же как на клавиатуре кнопочных телефонов. Еще ниже панель корректировки нейронной сети. Первое поле — скорость, чем значение меньше, тем обучение длится медленнее но точнее, обычно ставится 0,5. Дельта — это значение оценки действий, 1 или -1. Индекс — это индекс корректируемого нейрона, его можно просмотреть на панели отображения действий. Так же НС можно сохранить и загрузить.

About

LMD Tic-Tac-Toe — это программа которая играет в крестики-нолики. Но она работает через искусственную нейронную сеть и по этому во время игры может сама обучаться. Есть 3 режима обучения которые можно переключать при помощи кнопок на верхней панели: H(hand — ручное обучения), G(game — обучение во время игры), A(auto — автоматическое обучения). В…

Источник

Оцените статью