Dada uma rede neural que recebe como entrada pontos de dados: . Dizemos que é permutação invariável se
para qualquer permutação .
Alguém poderia recomendar um ponto de partida (artigo, exemplo ou outro artigo) para redes neurais invariantes de permutação?
neural-networks
machine-learning
reference-request
Josef Ondrej
fonte
fonte
Respostas:
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)
fonte
Aqui estão alguns que podem ser o que você está procurando:
fonte
Eu implementei Camada Permutacional aqui usando Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py
Você pode chamar a
PermutationalModule
funçã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.
fonte