Какой тип нейронной сети может обрабатывать переменные входные и выходные размеры?

Я пытаюсь использовать подход, описанный в этом документе https://arxiv.org/abs/1712.01815 чтобы алгоритм научился новой игре.

Есть только одна проблема, которая напрямую не укладывается в этот подход. Игра, которую я пытаюсь изучить, не имеет фиксированного размера доски. Таким образом, в настоящее время входной тензор имеет размеры m*n*11, где m и n - размеры игрового поля и могут меняться каждый раз, когда проводится игра. Итак, прежде всего мне нужна нейронная сеть, способная использовать такие разные размеры входных данных.

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

Я читал о рекуррентных и рекурсивных нейронных сетях, но все они, похоже, имеют отношение к НЛП, и я не уверен, как перевести это на мою проблему.

Любые идеи по архитектуре NN, способной справиться с моим делом, приветствуются.


person Damian Szkaut    schedule 04.04.2018    source источник
comment
для различного размера ввода здесь есть несколько хороших ответов: stats.stackexchange.com/questions/388859/ и здесь: ai.stackexchange.com / questions / 2008 / для меняющегося размера вывода, который до сих пор остается для меня загадкой.   -  person Charlie Parker    schedule 28.07.2019
comment
Высоко теоретическая, полностью сверточная сеть. Например, YOLOv3 может обрабатывать изображения разного размера (в этом случае сеть не выйдет из строя).   -  person viceriel    schedule 29.07.2019


Ответы (3)


Что вам нужно, так это Pointer Networks (https://arxiv.org/abs/1506.03134)

Вот вступительная цитата из сообщения об этом:

Сети указателей - это новая нейронная архитектура, которая изучает указатели на позиции во входной последовательности. Это ново, потому что существующие методы должны иметь фиксированное количество целевых классов, что обычно не применимо - рассмотрим задачу коммивояжера, в которой количество классов равно количеству входных данных. Дополнительным примером может быть сортировка последовательности переменного размера. - https://finbarr.ca/pointer-networks/

Это модель, основанная на внимании.

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

Вариант использования, в котором я их использовал, - это перевод необработанного текста в запросы SQL.

  • Исходный текст: "СКОЛЬКО МАШИН БЫЛО ПРОДАНО В США В 1983 ГОДУ".
  • Вывод: SELECT COUNT (Car_id) FROM Car_table WHERE (Country = 'US' AND Year == '1983').

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

Вход -

  1. Запрос
  2. Метаданные таблицы (названия столбцов)
  3. Словарь токенов для всех категориальных столбцов
  4. Ключевые слова из синтаксиса SQL (SELECT, WHERE и т. Д.)

Все они складываются вместе.

Затем выходной слой просто указывает на конкретные индексы ввода. Он указывает на страну и год (из имен столбцов в метаданных), он указывает на США и 1983 год (из токенов в словаре категориальных столбцов), он указывает на SELECT, WHERE и т. Д. Из синтаксического компонента SQL входных данных.

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

Ваш случай очень похож: вам нужно передать входные данные, метаданные игры и все, что вам нужно, как часть вашего вывода в виде добавленного индекса. Затем сеть указателей просто делает выбор из входных данных (указывает на них).

person Akshay Sehgal    schedule 31.07.2019

Вам нужно вернуться к фиксированной проблеме ввода / вывода.

Обычный способ решить эту проблему при применении к изображениям / временным рядам ... - использовать скользящие окна для уменьшения размера. Возможно, это применимо к вашей игре.

person mxdbld    schedule 04.04.2018
comment
Я мог бы обучить сеть, скажем, с помощью игровой доски 4 на 4, а затем делать отдельные прогнозы для каждой части игровой доски 4 на 4. Тогда проблема состоит в том, как объединить результаты и как совместно компенсировать потерю информации по сравнению с тем, когда учитывается вся плата, поскольку удаленные части чаще всего влияют друг на друга. - person Damian Szkaut; 04.04.2018
comment
в среднем, голосование большинством, особые правила ... Я не знаю твою игру - person mxdbld; 04.04.2018

Полностью сверточная нейронная сеть способна на это. Параметры сверточных слоев - это сверточные ядра. Сверточное ядро ​​не так сильно заботится о размере ввода (да, есть определенные ограничения, связанные с шагом, вводом заполнения и размером ядра).

Типичный вариант использования - это несколько свёрток, за которыми следует maxpooling, которые повторяются снова и снова до некоторой точки, где фильтры сглаживаются и соединяются с плотным слоем. Плотный слой является проблемой, потому что он ожидает ввода фиксированного размера. Если есть еще один слой conv2, на выходе вы получите еще одну карту объектов подходящего размера.

Примером такой сети может быть YOLOv3. Если вы скармливаете его, например, изображением 416x416x3, на выходе может быть, например, 13x13x количество фильтров (я знаю, что YOLOv3 имеет больше выходных слоев, но я буду обсуждать только один из-за простоты). Если вы скармливаете YOLOv3 изображение 256x256x3, на выходе будет карта характеристик 6x6xколичество фильтров.

Таким образом, сеть не дает сбоев и не дает результатов. Результаты будут хорошими? Не знаю, может да, может нет. Я никогда не использую его таким образом, я всегда увеличиваю размер изображения до рекомендуемого размера или переобучаю сеть.

person viceriel    schedule 29.07.2019
comment
Вы себя проверяли? Я думаю, что TF / keras / ... увеличивает ошибку размера тензора несоответствия (что-то вроде этого). Вы имели в виду заполнение? - person Babak.Abad; 26.07.2020