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.