2016-11-04 1 views
5

Я хочу тренировать нейронную сеть, чтобы играть в игру 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

Q-learning for Keras

Deep Reinforcement Learning for Keras

+0

Вы можете найти это интересно: https://www.youtube.com/watch ? v = qv6UVOQ0F44 – Tim

+0

Это хорошо :) Я также хочу реализовать генетический алгоритм. К сожалению, автор не писал никаких объяснений, поэтому единственный вариант - прочитать его исходный код. – jirinovo

+0

Хотя этот вопрос можно перенести в SO, как вы просили, не похоже, что это будет по теме, поэтому, скорее всего, миграция будет просто отвергнута. – whuber

ответ

3

https://github.com/matthiasplappert/keras-rl Так, кажется, лучший способ. Вы должны реализовать только несколько методов, определенных API среды OpenAI Gym. Это step() и reset() метода: https://github.com/matthiasplappert/keras-rl/blob/master/rl/core.py#L330

Для получения дополнительной информации есть ответ от keras-rl разработчика: https://github.com/matthiasplappert/keras-rl/issues/38

Когда мой 2048 игровой проект AI будет закончен, я отправить ссылку на источник здесь (если я выиграл» забудьте сделать это :))

EDIT: вот обещанная ссылка на источник, совершенно забыл об этом:/ https://github.com/gorgitko/MI-MVI_2016

+0

Вы закончили: p? –

+1

@tt_Gantz yeah :) [ссылка] (https://github.com/gorgitko/MI-MVI_2016) добавлено – jirinovo

Смежные вопросы