Permutación invariante redes neuronales

14

Dada una red neuronal que toma como entrada puntos de datos: . Decimos que es permutación invariante sifnx1,,xnf

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

para cualquier permutación .pi

¿Podría alguien recomendar un punto de partida (artículo, ejemplo u otro documento) para redes neuronales invariantes de permutación?

Josef Ondrej
fuente
Interesante pregunta. Desea tratar sus entradas como un conjunto en lugar de un vector. Suponiendo que sus entradas son escalares o comparables, ¿consideró ordenar sus entradas para crear una representación canónica invariante de permutación y alimentarla a una red regular?
mjul
@mjul Mis entradas son series de apuestas de clientes (cada apuesta está representada por un vector de algunas variables categóricas y continuas). Podría ordenarlos cronológicamente, por ejemplo, pero como el espacio de tiempo entre las apuestas para cada cliente es muy diferente, esto no tendría mucho sentido. Esto probablemente podría resolverse usando alguna función (fija o aprendida) de tiempo que pudiese disminuir los coeficientes de cada apuesta. Pero creo que el orden realmente no importa en este caso, así que quería probar primero los datos desordenados, lo que obviamente requiere tratar las apuestas para cada cliente de forma simétrica.
Josef Ondrej
¿Cuál es la salida de la red? Si la red es invariante por permutación, la salida será la misma para cualquier orden de entradas. ¿Es esto lo que quieres?
BlueMoon93
@ BlueMoon93 Sí, eso es exactamente lo que quiero. La salida puede ser cualquier cosa (número, vector) siempre que no dependa del orden de las entradas.
Josef Ondrej
¿por qué querrías una red neuronal invariante de permutación?
kc sayz 'kc sayz'

Respuestas:

2

Hasta donde yo sé, nadie ha intentado esto, debido a la forma en que está estructurada la red. Cada entrada tiene un conjunto de pesos, que están conectados a más entradas. Si las entradas cambian, la salida también lo hará .

Sin embargo, puede construir una red que se acerque a este comportamiento. En su conjunto de entrenamiento, use el aprendizaje por lotes y, para cada muestra de entrenamiento, proporcione todas las permutaciones posibles a la red de modo que aprenda a ser invariante de permutación. Esto nunca será exactamente invariante, solo podría estar cerca .

Otra forma de hacerlo es replicar los pesos para todas las entradas. Por ejemplo, supongamos que tiene 3 entradas (i0, i1, i2), y la siguiente capa oculta tiene 2 nodos (hl0, hl1) y la función de activación F. Suponiendo una capa completamente conectada, tiene 2 pesos w0 y w1. Los nodos de la capa oculta hl0 y hl1 están dados, respectivamente, por

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Por lo tanto, le da una capa oculta cuyos valores son permutación invariante de la entrada. A partir de ahora, puede aprender y construir el resto de la red como mejor le parezca. Este es un enfoque derivado de capas convolucionales.


Fuera de tema, esto parece un proyecto genial. Si desea cooperar en algún proyecto de investigación, contácteme (consulte mi perfil)

BlueMoon93
fuente
El primer enfoque sugerido sería inviable en mi caso debido a la complejidad computacional. El segundo, por otro lado, parece ser demasiado restrictivo. Pero ciertamente es un buen comienzo. Lo que se me ocurrió hasta ahora es un enfoque similar al que encontré en este documento: arxiv.org/pdf/1612.04530.pdf . Primero considero todos los pares (generalmente todas las k-tuplas) de las entradas x_i, x_j, i, j en 0 ... ny aplico alguna red neuronal en todos ellos (el mismo nn en cada par). Esto me da n ** 2 salidas f (x_i, x_j) y luego las promedio (o tomo como máximo) y aplico otro anotador nn sobre el resultado.
Josef Ondrej
Esto es lo que se me ocurrió hasta ahora: github.com/josefondrej/Symmetric-Layers
Josef Ondrej
3

He implementado la capa permutacional aquí usando Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Puede llamar a la PermutationalModulefunción para usarla.

Implementado siguiendo este documento: https://arxiv.org/pdf/1612.04530.pdf

La idea es comparar todos los pares de N ^ 2 pares de N entradas, usar el modelo con pesos compartidos, luego usar la función de agrupación N veces en N entradas. El resultado puede volver a usar la agrupación, pero en el documento, no mencionan otra agrupación.

off99555
fuente