Redes neurais invariantes de permutação

14

Dada uma rede neural f que recebe como entrada n pontos de dados: x1,,xn . Dizemos que f é permutação invariável se

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

para qualquer permutação pi .

Alguém poderia recomendar um ponto de partida (artigo, exemplo ou outro artigo) para redes neurais invariantes de permutação?

Josef Ondrej
fonte
Pergunta interessante. Você deseja tratar suas entradas como um conjunto e não como um vetor. Supondo que suas entradas sejam escalares ou comparáveis, você considerou ordenar suas entradas para criar uma representação canônica invariante de permutação e alimentá-la para uma rede regular?
Mjul 04/04
@mjul Minhas entradas são séries de apostas de clientes (cada aposta é representada por um vetor de algumas variáveis ​​categóricas e contínuas). Eu poderia ordená-los cronologicamente, por exemplo, mas como o intervalo de tempo entre as apostas para cada cliente é muito diferente, isso não faria muito sentido. Provavelmente isso poderia ser resolvido usando alguma função (fixa ou aprendida) do tempo que deterioraria os coeficientes de cada aposta. Mas acho que a ordem realmente não importa nesse caso, então eu queria experimentar primeiro os dados não ordenados, o que obviamente exige o tratamento simétrico das apostas de cada cliente.
Josef Ondrej
Qual é a saída de rede? Se a rede for invariante, a saída será a mesma para qualquer ordem de entrada. É isso que voce quer?
precisa saber é o seguinte
@ BlueMoon93 Sim, é exatamente isso que eu quero. A saída pode ser qualquer coisa (número, vetor), desde que não dependa da ordem das entradas.
Josef Ondrej
por que você deseja uma rede neural invariante de permutação?
kc sayz 'kc sayz' 12/12

Respostas:

2

Até onde eu sei, ninguém tentou isso, devido à maneira como a rede está estruturada. Cada entrada possui um conjunto de pesos conectados a mais entradas. Se as entradas mudarem, a saída também mudará .

No entanto, você pode criar uma rede que aborda esse comportamento. No seu conjunto de treinamento, use o aprendizado em lote e, para cada amostra de treinamento, forneça todas as permutações possíveis à rede, de modo que ela aprenda a ser invariante. Isso nunca será exatamente invariável, apenas poderá estar próximo .

Outra maneira de fazer isso é replicar os pesos para todas as entradas. Por exemplo, vamos supor que você tenha 3 entradas (i0, i1, i2), e a próxima camada oculta possui 2 nós (hl0, hl1) e a função de ativação F. Assumindo uma camada totalmente conectada, você tem 2 pesos w0 e w1. Os nós da camada oculta hl0 e hl1 são dados, respectivamente, por

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Dando assim a você uma camada oculta cujos valores são permutantes invariantes da entrada. A partir de agora, você poderá aprender e construir o restante da rede como achar melhor. Esta é uma abordagem derivada de camadas convolucionais.


Fora do tópico, isso parece um projeto interessante. Se você deseja colaborar em algum projeto de pesquisa, entre em contato comigo (consulte meu perfil)

BlueMoon93
fonte
A primeira abordagem sugerida seria inviável no meu caso devido à complexidade computacional. O segundo, por outro lado, parece talvez muito restritivo. Mas é certamente um bom começo. O que eu vim até agora é uma abordagem semelhante à que encontrei neste artigo: arxiv.org/pdf/1612.04530.pdf . Primeiro, considero todos os pares (geralmente todas as k-tuplas) das entradas x_i, x_j, i, j em 0 ... ne aplico alguma rede neural em todos eles (o mesmo nn em cada par). Isso me dá n ** 2 saídas f (x_i, x_j) e então eu as calculo a média (ou tomo o máximo) e aplico anoter nn sobre o resultado.
Josef Ondrej
É isso que eu criei
Josef Ondrej
5

Aqui estão alguns que podem ser o que você está procurando:

elgehelge
fonte
3

Eu implementei Camada Permutacional aqui usando Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Você pode chamar a PermutationalModulefunção para usá-la.

Implementado após este artigo: https://arxiv.org/pdf/1612.04530.pdf

A idéia é comparar todos os pares de N ^ 2 pares de N entradas, usar o modelo com pesos compartilhados e, em seguida, usar a função de agrupamento N vezes em N entradas. A saída que você pode usar no pool novamente, mas no jornal, eles não mencionam outro pool.

off99555
fonte