Я хочу тренировать нейронную сеть, чтобы играть в игру 2048 года. Я знаю, что NN не являются хорошим выбором для государственных игр, таких как 2048, но я хочу добиться того, что NN будет играть в игру, как опытный человек, т. Е. Перемещая плитки только в трех направлениях.Как я могу обучить нейронную сеть играть в игру 2048 года?
Но я не могу понять, как самостоятельно обучать NN, так как мы не знаем действительного выхода. Обычно, например, в регрессии вы знаете правильный результат, и вы можете вычислить потерю (например, среднеквадратичную ошибку) и обновить вес. Но в 2048 году действительный результат в основном неизвестен (конечно, вы можете вычислить оценку для каждого направления, которое вы можете переместить, например, направление с наивысшей разницей score_after_move - previous_score
было бы нашим действительным результатом, но я думаю, что это не способ самообучения NN). Так можно определить функцию потери для игры 2048? Лучшее было бы дифференцируемым.
Следующий вопрос: когда нужно обновлять вес: после каждого хода или, скорее, после полной игры (игра закончилась)?
Если это важно: моя NN топология будет сейчас просто:
2D matrix of gaming board -> 2D matrix of input neurons -> 2D fully-connected hidden layer -> 1D 4-neuron layer
Таким образом, каждая плитка будет вход соответствующего нейрона в первом слое (есть ли специальное название для 2D полностью подключен слой?). Ожидаемый выход из последнего слоя представляет собой вектор длины 4, например. [1, 0, 0, 0] будет «вверх» направлением движения.
На данный момент я реализовал класс без головы (в Python/NumPy) для игры 2048, потому что использование визуального ввода происходит медленно, а также больше работы.
P.S. Возможно, я неправильно думаю об обучении NN для этой игры (или игр вообще). Не стесняйтесь показать мне лучший способ, я был бы признателен. Спасибо :)
РЕДАКТИРОВАТЬ: Усиление обучения кажется таким. Вот некоторые полезные ссылки:
Demystifying Deep Reinforcement Learning
Action-Value Methods and n-armed bandit problems
Deep Reinforcement Learning for Keras
Вы можете найти это интересно: https://www.youtube.com/watch ? v = qv6UVOQ0F44 – Tim
Это хорошо :) Я также хочу реализовать генетический алгоритм. К сожалению, автор не писал никаких объяснений, поэтому единственный вариант - прочитать его исходный код. – jirinovo
Хотя этот вопрос можно перенести в SO, как вы просили, не похоже, что это будет по теме, поэтому, скорее всего, миграция будет просто отвергнута. – whuber