Перестановочные инвариантные нейронные сети

14

Дана нейронная сеть f которая принимает в качестве входных данных n точек: x1,,xn . Мы говорим, что f является перестановкой, если

f(x1...xn)=f(pi(x1...xn))

для любой перестановки пя .

Может ли кто-нибудь порекомендовать отправную точку (статью, пример или другую статью) для нейронных сетей, инвариантных к перестановкам?

Йозеф Ондрей
источник
Интересный вопрос. Вы хотите рассматривать свои входные данные как набор, а не как вектор. Предполагая, что ваши входные данные являются скалярными или иным образом сопоставимыми, рассматривали ли вы возможность сортировки входных данных для создания канонического представления, инвариантного к перестановкам, и передачи его в обычную сеть?
Мюль
@mjul Мои входные данные представляют собой серии ставок клиентов (каждая ставка представлена ​​вектором некоторых категорических и непрерывных переменных). Я мог бы, например, заказать их в хронологическом порядке, но, поскольку интервал времени между ставками для каждого клиента сильно отличается, это не имеет большого смысла. Вероятно, это можно решить, используя некоторую функцию (фиксированную или усвоенную) времени, которая уменьшит коэффициенты для каждой ставки. Но я думаю, что порядок в действительности не имеет значения в этом случае, поэтому я хотел сначала попробовать неупорядоченные данные, что, очевидно, требует симметричной обработки ставок для каждого клиента.
Йозеф Ондрей
Что такое сетевой выход? Если сеть является инвариантом перестановки, выходные данные будут одинаковыми для любого порядка входов. Это то, что вы хотите?
BlueMoon93
@ BlueMoon93 Да, именно это я и хочу. Выход может быть любым (число, вектор), если он не зависит от порядка входов.
Йозеф Ондрей
Зачем вам нужна инвариантная нейронная сеть с перестановкой?
kc sayz 'kc sayz'

Ответы:

2

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

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

Другой способ сделать это - скопировать веса для всех входных данных. Например, предположим, что у вас есть 3 входа (i0, i1, i2), а следующий скрытый слой имеет 2 узла (hl0, hl1) и функцию активации F. Предполагая, что у вас полностью связанный слой, у вас есть 2 веса w0 и w1. Узлы скрытого слоя hl0 и hl1 задаются соответственно

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Таким образом, давая вам скрытый слой, значения которого являются перестановками, инвариантными от ввода. Отныне вы можете изучать и строить остальную сеть по своему усмотрению. Это подход, полученный из сверточных слоев.


Не по теме, это похоже на крутой проект. Если вы хотите сотрудничать в каком-либо исследовательском проекте, свяжитесь со мной (проверьте мой профиль)

BlueMoon93
источник
Первый предложенный подход был бы невозможен в моем случае из-за сложности вычислений. Второе, с другой стороны, может показаться слишком ограничительным. Но это, безусловно, хорошее начало. До сих пор я придумал подход, аналогичный тому, который я нашел в этой статье: arxiv.org/pdf/1612.04530.pdf . Сначала я рассматриваю все пары (как правило, все k-кортежи) входов x_i, x_j, i, j в 0 ... n и применяю к ним некоторые нейронные сети (одинаковые nn для каждой пары). Это дает мне n ** 2 выходных сигнала f (x_i, x_j), а затем я усредняю ​​их (или беру максимум) и применяю анотер nn к результату.
Йозеф Ондрей
Это то, что я придумала до сих пор: github.com/josefondrej/Symmetric-Layers
Йозеф Ондрей
5

Вот некоторые из них, которые могут быть тем, что вы ищете:

elgehelge
источник
3

Я реализовал здесь Перестановочный слой, используя Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Вы можете позвонить PermutationalModule функцию, чтобы использовать ее.

Реализовано после этого документа: https://arxiv.org/pdf/1612.04530.pdf

Идея состоит в том, чтобы сравнить все пары из N ^ 2 пар из N входов, использовать модель с общими весами, а затем использовать функцию объединения N раз на N входах. Вывод, который вы можете использовать снова, но в статье не упоминается о другом пуле.

off99555
источник