4

Я играю с машиной. Особенно 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
  • дает отрицательные плоды для неудач или только вознаграждения за успех, разные значения вознаграждения

Ничто не работает :(

Теперь у меня есть несколько вопросов:

  1. Поскольку это есть моя самая первая попытка Q-Learning является что-то я принципиально делаю не так?
  2. Какие параметры стоит изменить? В «Мозговой» вещи много: https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L57.
  3. Что будет хорошего подсчета количества скрытых узлов?
  4. Простая структура сети, как определено в https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L116, слишком проста для решения этой проблемы?
  5. Я просто слишком нетерпелив и должен тренироваться гораздо больше итераций?

Спасибо,

-Matthias

+0

Не могли бы вы высказать свой код? –

+0

Мое предложение: на первом этапе забыть о нейронной сети и придерживаться табличного представления стоимости всех состояний tic-tac-toe. Их число равно «3^9 = 19683». Используя Q-Learning, вы получаете немного больше состояний из-за действий <= 9, но все еще легко сохраняемых. Только после этого я бы сначала продолжил линейную регрессию, а затем с сетью. Затем вы также можете сравнить приблизительные и точные результаты. – davidhigh

+0

@John Wakefield: В настоящее время я создаю упрощенную версию (сетка 2x1 вместо 3x3, чтобы минимизировать пространство состояний). Я пошлю код, когда это будет сделано. – nitrogenycs

ответ

2

Matthias,

Это кажется, что вы используете один выходной узел? «Выходной сигнал сети на шаге вперед составляет от 1 до 9». Если так, то я считаю, что это проблема. Вместо того, чтобы иметь один выходной узел, я рассматривал бы это как проблему классификации и имел бы девять выходных узлов, соответствующих каждой позиции доски. Затем возьмите argmax этих узлов как предсказанный ход. Вот как настраиваются сети, играющие в игру Go (есть 361 выходных узлов, каждый из которых представляет собой пересечение на доске).

Надеюсь, это поможет!

+0

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