Reti neurali invarianti di permutazione


14

Data una rete neurale che accetta come input punti dati: . Diciamo che è invariante di permutazione sefnx1,,xnf

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

per qualsiasi permutazione .pi

Qualcuno potrebbe raccomandare un punto di partenza (articolo, esempio o altro documento) per le reti neurali invarianti di permutazione?


Domanda interessante. Vuoi trattare i tuoi input come un set piuttosto che come un vettore. Supponendo che i tuoi input siano scalari o comunque comparabili, hai preso in considerazione l'ordinamento dei tuoi input per creare una rappresentazione canonica invariante-permutazione e alimentarla in una rete normale?
mjul

@mjul I miei input sono una serie di puntate di clienti (ogni scommessa è rappresentata da un vettore di alcune variabili matematiche e continue). Potrei ordinarli in ordine cronologico, ad esempio, ma poiché lo spazio tra le scommesse per ciascun cliente è molto diverso, questo non avrebbe molto senso. Questo potrebbe probabilmente essere risolto usando una funzione (fissa o appresa) del tempo che decadrebbe i coefficienti per ogni scommessa. Ma penso che in questo caso l'ordinamento non contenga davvero, quindi ho voluto provare prima i dati non ordinati, il che ovviamente richiede di trattare le scommesse per ciascun cliente in modo simmetrico.
Josef Ondrej,

Qual è l'output di rete? Se la rete è invariante alla permutazione, l'output sarà lo stesso per qualsiasi ordine di input. È questo che vuoi?
BlueMoon93,

@ BlueMoon93 Sì, è esattamente quello che voglio. L'output può essere qualsiasi cosa (numero, vettore) purché non dipenda dall'ordine degli input.
Josef Ondrej,

perché vorresti una rete neurale invariante di permutazione?
kc sayz 'kc sayz'

Risposte:


2

Per quanto ne so, nessuno ha provato questo, a causa del modo in cui è strutturata la rete. Ogni input ha una serie di pesi, che sono collegati a più input. Se gli ingressi cambiano, anche l'uscita lo farà .

Tuttavia, è possibile creare una rete che si avvicina a questo comportamento. Nel tuo set di allenamento, usa l'apprendimento in gruppo e, per ogni campione di addestramento, fornisci tutte le possibili permutazioni alla rete in modo che impari a essere invariante alla permutazione. Questo non sarà mai esattamente invariante, potrebbe essere vicino .

Un altro modo per farlo è replicare i pesi per tutti gli input. Ad esempio, supponiamo che tu abbia 3 ingressi (i0, i1, i2) e che il successivo livello nascosto abbia 2 nodi (hl0, hl1) e la funzione di attivazione F. Supponendo un livello completamente connesso, hai 2 pesi w0 e w1. I nodi del livello nascosto hl0 e hl1 sono indicati, rispettivamente, da

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Dandoti così un livello nascosto i cui valori sono invarianti di permutazione dall'input. Da ora in poi, puoi imparare e costruire il resto della rete come ritieni opportuno. Questo è un approccio derivato da strati convoluzionali.


Fuori tema, sembra un bel progetto. Se vuoi collaborare a qualche progetto di ricerca, contattami (controlla il mio profilo)


Il primo approccio suggerito sarebbe impossibile nel mio caso a causa della complessità computazionale. Il secondo invece sembra forse troppo restrittivo. Ma è sicuramente un buon inizio. Quello che ho escogitato finora è un approccio simile a quello che ho trovato in questo documento: arxiv.org/pdf/1612.04530.pdf . Per prima cosa prendo in considerazione tutte le coppie (generalmente tutte le k-tuple) degli ingressi x_i, x_j, i, j in 0 ... n e applico una rete neurale su tutte (le stesse nn su ciascuna coppia). Questo mi dà n ** 2 uscite f (x_i, x_j) e poi le faccio una media (o prendo il massimo) e applico un anoter nn sul risultato.
Josef Ondrej,

Questo è quello che ho escogitato finora: github.com/josefondrej/Symmetric-Layers
Josef Ondrej


3

Ho implementato il livello permutazionale qui usando Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

È possibile chiamare la PermutationalModulefunzione per usarla.

Implementato in seguito a questo documento: https://arxiv.org/pdf/1612.04530.pdf

L'idea è di confrontare tutte le coppie di N ^ 2 coppie da N ingressi, utilizzare il modello con pesi condivisi, quindi utilizzare la funzione di raggruppamento N volte su N ingressi. L'output è possibile utilizzare nuovamente il pool ma nel documento, non menzionano un altro pool.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.