Хорошо, поэтому я создал Q-ученику нейронной сети, используя ту же идею, что и алгоритм Atari от DeepMind (за исключением того, что я даю необработанные данные, а не изображения (все же)).Почему моя нейронная сеть Q-ученик не изучает tic-tac-toe
Нейронные сети сборка:
9 входов (0 для пустого места, 1 для "X", -1 для "O")
1 скрытого слой с 9-50 нейроны (пытались с различными размерами, активация функции сигмовидных)
9 выходов (1 для каждого действия, выводит Q-значение, активация функции сигмовидной)
- MSE функция потерь
- Адам backprop
Я 100% уверен, сеть построена правильно, так как градиентных проверок и много испытаний.
Q-параметры:
- -1 вознаграждение за потерянное игру
- -1 вознаграждение, если шаг предпринимается попытка уже занят место (например, X уже в том месте, где игрок O пытается поставить его «O»)
- 0 награда за черпает
- 0 награды за хода, которые не приводят к конечному состоянию
- +1 награды за выиграли игру
- Следующее состояние (в s, a, r, s ') - это состояние после вашего собственного и хода вашего противника. Например. пустая доска и игрок X имеет первый поворот и помещает «X» в верхний левый угол. Затем игрок O помещает «O» в верхний правый угол. Тогда s, a, r, s 'будет s = [0,0,0,0,0,0,0,0,0], a = 0, r = 0, s' = [1,0, - 1,0,0,0,0,0,0]
Проблема
Все мои Q-значения к нулю, если я дам -1 награду, когда ход делается уже занят место. Если я этого не сделаю, сеть не узнает, что она не должна перемещаться по уже занятым местам и, по-видимому, изучает произвольные Q-значения. Также моя ошибка, похоже, не сокращается.
Решения, которые не работают
Я попытался изменить награды (0, 0,5, 1) и (0, 1), но она до сих пор не научились.
Я попытался представить состояние как 0 для пустого, 0,5 для O, 1 для X, но не работал.
Я попытался дать следующее состояние сразу после того, как сделан ход, но это не помогло.
Я пробовал с Адамом и спинкой ванили, но все тот же результат.
- Я попытался с партиями из переигровки памяти и стохастического градиентного спуска, но все же
- Changed сигмовидной к РЕЛУ, но не помогло.
- Всех видов вещей, которые я не могу вспомнить сейчас
проекта в GitHub: https://github.com/Dopet/tic-tac-toe (Извините за уродливый код в основном из-за все эти реорганизации коды, и это должно было быть простым тестом чтобы увидеть, если алгоритм работы)
Основные моменты:
- TicTac класс имеет саму игру (из U петь шаблонный метод из абстрактного класса Game)
- NeuralNetwork класс записывает некоторые данные в файл, называемый MyLogFile.log в текущем каталоге
- Блочные и комбинированные классы просто используются для создания выигрышных ситуаций
- jblas-1.2.4. jar содержит библиотеки DoubleMatrix
Это сообщение отлично, насколько это возможно. Проблема в том, что (а) я не вижу ничего неправильного в вашем подходе; (b) вы не предоставили код для воспроизведения ошибки. – Prune
Я добавил проект в GitHub. Пожалуйста, спросите, есть ли у вас что-то непонятное! https://github.com/Dopet/tic-tac-toe – Dope
[Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применяется здесь. – Prune