2014-02-03 5 views
1

Я работаю над проектом, в котором я занимаю позицию шахматной доски (строка FEN, преобразованная в двоичную). & это оценочная оценка и подача ее в нейронную сеть. Моя цель - сделать нейронную сеть дифференцированной между хорошими и плохими позициями.Автоматическое извлечение функции с позиций шахматной доски

Как закодировать позицию: Есть 12 уникальных штук в шахматной пешки, т.е. грача, рыцарь, епископ, королева и король для белого, а также черный. Я кодирую каждую часть, используя 4 бита с 0000, обозначая пустой квадрат. Таким образом, 64 квадратов кодируются в 256 бит, и я использую более 6 бит для обозначения состояния игры, как чья очереди двигаться, статус короля-замок, и т.д.

Проблема: Поскольку входное пространство для шахматных позиций ни гладкие, ни унимодальные (одно небольшое изменение в позиции платы может привести к огромному изменению оценки оценки), нейронная сеть не учится хорошо. Теперь, следующая логическая вещь, чтобы каким-то образом извлечь полезные функции (например, разницу в материалах, центральное управление и т. Д.) И передать их в сеть.

Я не хочу использовать функции, поскольку я хочу, чтобы сеть учила все сама по себе. Поэтому я думаю об автоматическом извлечении функций с помощью автокодеров . Есть ли лучший способ сделать это?

Основная информация: Каков наилучший способ автоматического извлечения элементов из положения шахматной доски, чтобы его можно было подавать в нейронную сеть?

ОБНОВЛЕНИЕ: Чтобы сформировать данные обучения, я модифицировал Stockfish, чтобы сбрасывать процесс оценки в файл журнала. Таким образом, каждый новый ход (позиция), который он считает, записывается в файл как строка FEN вместе с его оценкой оценки

ответ

0

Нейронные сети могут давать приближение к любой функции. Единственное, что нужно сделать, это размерность пространства поиска, которое дает ограничения на объем данных, которые вы должны получить в хорошем приближении.

Для контролируемой сети (вы используете автокодеры, то, я думаю, вы используете какой-то вариант backpropagation), мне сложно понять, как вы думаете, чтобы сделать тренировку, используя отдельные позиции, потому что вам нужны схожие позиции в вашем наборе тренировок. Возможно, ваш подход отличается, но я убежден, что вторая стратегия (использование функций) более перспективна. Я думаю, что использование позиций требует огромного объема обучения данных, чтобы получить хорошие результаты.

Для функций смотрите here и классической работе Shannon.

Я также использовал полезную информацию из исходного кода Crafty.

Но вы должны извлечь эти данные из строки FEN.

Autoencoders - это способ дать сокращение данных (хорошо, потому что увеличивает производительность). Кажется, что лучше использовать Pincipal Component Analysys, как сообщается here.

Надеюсь, это может вам помочь.

+0

Благодарим вас за подробный ответ @Francisco. Я не тренирую сеть, используя отдельные позиции. Я изменил Stockfish, чтобы выгрузить процесс оценки в файл журнала.Таким образом, каждый новый ход (позиция), который он считает, записывается в файл как строка FEN вместе с его оценкой оценки. Таким образом, у меня есть огромная свалка с аналогичными позициями (2 позиции на смежных строках в журнале отличаются на 1 разную позицию) – Rahul