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?


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)


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.