Я играю с машиной. Особенно Q-Learning, где у вас есть состояние и действия, а также вознаграждение в зависимости от того, насколько хорошо работает сеть.Tic tac toe machine learning - действительные ходы
Теперь для начала я поставил себе простую цель: тренировать сеть, чтобы она выдавала действительные ходы для tic-tac-toe (против случайного противника) в качестве действий. Моя проблема в том, что сеть не учится вообще или даже ухудшается с течением времени.
Первое, что я сделал, это связаться с факелом и глубоким учебным модулем для него: https://github.com/blakeMilner/DeepQLearning.
Затем я написал простую игру с тик-таком, где случайный игрок конкурирует с нейронной сетью и подключил ее к коду из этого образца https://github.com/blakeMilner/DeepQLearning/blob/master/test.lua. Выходной сигнал сети состоит из 9 узлов для установки соответствующей ячейки.
Перемещение действует, если сеть выбирает пустую ячейку (в ней нет X или O). В соответствии с этим я даю положительное вознаграждение (если сеть выбирает пустую ячейку) и отрицательные вознаграждения (если сеть выбирает занятую ячейку).
Проблема в том, что она никогда не учится. Я попробовал много вариаций:
- отображающие поле крестики-нолики, как 9 входов (0 = ячейки пустыми, 1 = игрок 1, 2 = игрок 2), или как 27 входов (например, для пустой ячейки 0 [пусто = 1, player1 = 0, player2 = 0])
- изменяются рассчитывать скрытые узлы между 10 и 60
- пытался до 60K итераций
- различной скорости обучения между 0,001 и 0,1
- дает отрицательные плоды для неудач или только вознаграждения за успех, разные значения вознаграждения
Ничто не работает :(
Теперь у меня есть несколько вопросов:
- Поскольку это есть моя самая первая попытка Q-Learning является что-то я принципиально делаю не так?
- Какие параметры стоит изменить? В «Мозговой» вещи много: https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L57.
- Что будет хорошего подсчета количества скрытых узлов?
- Простая структура сети, как определено в https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L116, слишком проста для решения этой проблемы?
- Я просто слишком нетерпелив и должен тренироваться гораздо больше итераций?
Спасибо,
-Matthias
Не могли бы вы высказать свой код? –
Мое предложение: на первом этапе забыть о нейронной сети и придерживаться табличного представления стоимости всех состояний tic-tac-toe. Их число равно «3^9 = 19683». Используя Q-Learning, вы получаете немного больше состояний из-за действий <= 9, но все еще легко сохраняемых. Только после этого я бы сначала продолжил линейную регрессию, а затем с сетью. Затем вы также можете сравнить приблизительные и точные результаты. – davidhigh
@John Wakefield: В настоящее время я создаю упрощенную версию (сетка 2x1 вместо 3x3, чтобы минимизировать пространство состояний). Я пошлю код, когда это будет сделано. – nitrogenycs