Обучение многослойного персептрона игре в карты

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

Вот как я реализовал нейронную сеть.

  • Нейроны в первом слое выводят значения поля, представляющие состояния карт в колоде. Для каждого из этих нейронов существует массив постоянных весов. Например, если карта находится в руке у ИИ, нейрон выдает поле, равное первому весу в массиве, если карта на столе — второму и так далее. Эти постоянные входные веса необходимо оптимизировать в процессе обучения.
  • Далее идет несколько скрытых слоев нейронов. Топология фиксированная. Все нейроны предыдущего слоя связаны с каждым нейроном следующего слоя. Веса соединений должны быть оптимизированы.
  • Последний слой нейронов представляет действия игрока. Они соответствуют карте, которую можно разыграть, а также паре действий, не связанных с картой, например, взять карты со стола или завершить ход. Наибольшее значение выходного поля, соответствующее юридическому действию, определяет действие, которое нужно воспроизвести.

Есть предостережение. Я хочу, чтобы нейронная сеть нашла оптимальную стратегию, поэтому я не могу обучать ее на отдельных ходах. Скорее, я должен позволить ему играть, пока он не выиграет или не проиграет, а это примерно 50 ходов. Мне интересно, каков наилучший подход к обучению в этом сценарии, когда никто не знает правильный ответ для каждого хода, а знает только, была ли проблема решена правильно после нескольких оценок NN, то есть она выиграла игру.

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

Кто-нибудь знает, подойдет ли эта проблема оптимизации веса для решения чего-то другого, кроме метода Монте-Карло?




Ответы (1)


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

Есть предостережение. Я хочу, чтобы нейронная сеть нашла оптимальную стратегию, поэтому я не могу обучать ее на отдельных ходах.

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

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

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

person IVlad    schedule 28.11.2015
comment
Спасибо за комментарий! Я понимаю, что в некоторых играх можно тренироваться по очереди, и я читал, что люди делают это для покера. Но я не думаю, что это можно сделать для интересующих меня игр. Подумайте, например, о джин-рамми. Кроме того, обучение шаг за шагом обычно требует сравнения с базой данных чьих-то игр, но я хочу, чтобы моя нейронная сеть нашла свою собственную стратегию, а не подражала кому-то. Одна из вещей, которые я хочу выяснить, это то, может ли NN научиться играть достаточно хорошо, чтобы ее можно было использовать для изучения стратегии. Я посмотрю вашу ссылку. - person SU3; 28.11.2015