Я пишу простую игрушечную игру, целью которой является обучение глубокой нейронной сети. Правила игры примерно следующие:
- В игре есть доска, состоящая из шестиугольных ячеек.
- Оба игрока имеют одинаковую коллекцию фигур, которую они могут свободно размещать на доске.
- Размещая различные типы фигур, начисляйте очки (или уменьшайте очки противника) в зависимости от их положения и конфигурации друг против друга.
- Тот, у кого больше очков, побеждает.
Существуют дополнительные правила (о поворотах, количестве и типах фигур и т. Д.), Но они не важны в контексте этого вопроса. Я хочу разработать глубокую нейронную сеть, которая может многократно учиться, играя против себя. Мои вопросы касаются представления ввода и вывода. Особенно:
- Так как структура кусочков имеет значение, я подумал иметь по крайней мере несколько сверточных слоев. Плата может быть разного размера, но в принципе очень мала (6х10 в моих тестах, ее можно увеличить на несколько ячеек). Имеет ли это смысл? Какой вид пула я могу использовать?
- Как представить обе стороны? В этой статье о го, авторы используют две входные матрицы, одну для белых камней и одну для черных камней. Может ли это работать и в этом случае? Но помните, у меня есть разные типы кусков, скажем, A, B, C и D. Должен ли я использовать входные матрицы 2x4? Это кажется очень редким и малоэффективным для меня. Боюсь, что это будет слишком разреженно для сверточных слоев.
- Я подумал, что результатом может быть распределение вероятностей по матрице, представляющей позиции на доске, плюс отдельный массив вероятностей, указывающий, какую часть играть. Тем не менее, мне также нужно представлять способность проходить терн, что очень важно. Как я могу сделать это, не разбавляя его значение среди других вероятностей?
- И самое главное , нужно ли применять только выигрышные или проигрышные ходы? Внедрить выигрышные ходы легко, потому что я просто установил желаемые вероятности равными 1. Но что я могу сделать при проигрыше? Установить вероятность перемещения на 0, а все остальные на то же значение? Кроме того, имеет ли смысл приводить ходы к окончательной разнице в баллах, даже если это противоречит значению результатов, которые являются примерно вероятностями?
Кроме того, я разработал игровой движок в node.js, намереваясь использовать Synaptic в качестве фреймворка, но я не уверен, что он может работать с сверточными сетями (я сомневаюсь, что есть способ исправить веса, связанные с локальными полями восприятия). Какой-нибудь совет относительно других библиотек, которые совместимы с узлом?