Я пишу многослойную нейронную сеть персептрона для карточных игр для двух игроков. Я хотел бы знать, есть ли лучший способ оптимизировать веса, чем тестирование нейронных сетей со случайно регенерированными весами друг против друга.
Вот как я реализовал нейронную сеть.
- Нейроны в первом слое выводят значения поля, представляющие состояния карт в колоде. Для каждого из этих нейронов существует массив постоянных весов. Например, если карта находится в руке у ИИ, нейрон выдает поле, равное первому весу в массиве, если карта на столе — второму и так далее. Эти постоянные входные веса необходимо оптимизировать в процессе обучения.
- Далее идет несколько скрытых слоев нейронов. Топология фиксированная. Все нейроны предыдущего слоя связаны с каждым нейроном следующего слоя. Веса соединений должны быть оптимизированы.
- Последний слой нейронов представляет действия игрока. Они соответствуют карте, которую можно разыграть, а также паре действий, не связанных с картой, например, взять карты со стола или завершить ход. Наибольшее значение выходного поля, соответствующее юридическому действию, определяет действие, которое нужно воспроизвести.
Есть предостережение. Я хочу, чтобы нейронная сеть нашла оптимальную стратегию, поэтому я не могу обучать ее на отдельных ходах. Скорее, я должен позволить ему играть, пока он не выиграет или не проиграет, а это примерно 50 ходов. Мне интересно, каков наилучший подход к обучению в этом сценарии, когда никто не знает правильный ответ для каждого хода, а знает только, была ли проблема решена правильно после нескольких оценок NN, то есть она выиграла игру.
На данный момент я подумал только о простом эволюционном подходе, в котором группа случайно сгенерированных NN играет друг против друга несколько раз, и несколько наиболее успешных остаются для следующего раунда, где NN, которые не прошли, заменены другими случайными. Проблема, которую я вижу, заключается в том, что при таком подходе веса начнут сходиться через много времени. Но поскольку доля выигрышей является функцией многих весов (я ожидаю, что для правильного моделирования проблемы потребуется несколько сотен), которые сильно нелинейно влияют на вывод NN, я не понимаю, как я мог бы использовать функцию техника минимизации.
Кто-нибудь знает, подойдет ли эта проблема оптимизации веса для решения чего-то другого, кроме метода Монте-Карло?