Creazione di una rete neurale per la funzione xor


8

È risaputo che una rete a 1 strato non è in grado di prevedere la funzione xor, poiché non è separabile linearmente. Ho tentato di creare una rete a 2 livelli, utilizzando la funzione sigmoid logistica e backprop, per prevedere xor. La mia rete ha 2 neuroni (e un bias) sul livello di input, 2 neuroni e 1 bias nel livello nascosto e 1 neurone di output. Con mia sorpresa, questo non converge. se aggiungo un nuovo livello, quindi ho una rete a 3 livelli con input (2 + 1), hidden1 (2 + 1), hidden2 (2 + 1) e output, funziona. Inoltre, se mantengo una rete a 2 livelli, ma aumento la dimensione del livello nascosto a 4 neuroni + 1 polarizzazione, converge anche. C'è un motivo per cui una rete a 2 strati con 3 o meno neuroni nascosti non sarà in grado di modellare la funzione xor?


2
Puoi prevedere XOR usando quella struttura. In realtà non hai nemmeno bisogno di pregiudizi (vedi qui ).
Krychu,

Devo inizializzare i miei pesi in un modo speciale per ottenere la convergenza? Sto provando una semplice rete neurale con pesi tra (-1,1) inizializzati in modo casuale, ma non riesco a farlo convergere (anche usando i pregiudizi)
utente

In realtà, usando il sigmoid logistico converge a volte, ma non tutte le volte, dipende dalla scelta iniziale di pesi casuali.
utente

Il tuo raggio d'azione sembra piuttosto ampio, prova (-0,1, 0,1). Altrimenti si rischia che il segnale di ingresso a un neurone possa essere grande dall'inizio, nel qual caso l'apprendimento per quel neurone è lento. Potresti anche voler ridurre il tasso di apprendimento e aumentare il numero di iterazioni.
Krychu,

Al contrario, valori più grandi lo fanno convergere più velocemente. Ho provato un tasso di apprendimento più piccolo e molte iterazioni. Penso che la risposta di Neil Slater qui sotto riassuma i problemi, anche se non sono ancora sicuro del perché.
utente

Risposte:


7

Sì, c'è un motivo. Ha a che fare con il modo in cui inizializzi i tuoi pesi.

Esistono 16 minimi locali che hanno la più alta probabilità di convergere tra 0,5 - 1.

inserisci qui la descrizione dell'immagine

Ecco un documento che analizza il problema di xor.


2
Sembra che il collegamento sia interrotto.
Adam Kingsley,

@Emil Quindi, se i pesi sono molto piccoli, stai dicendo che non convergeranno mai? Ho anche corretto il link per te.
utente

@utente corretto.
Emil

6

Una rete con uno strato nascosto contenente due neuroni dovrebbe essere sufficiente per separare il problema XOR. Il primo neurone funge da porta OR e il secondo da porta NOT AND. Aggiungi entrambi i neuroni e se passano il treshold è positivo. Puoi semplicemente usare i neuroni decisionali lineari per questo regolando i pregiudizi per i treshold. Gli ingressi della porta NOT AND devono essere negativi per gli ingressi 0/1. Questa immagine dovrebbe renderlo più chiaro, i valori sulle connessioni sono i pesi, i valori nei neuroni sono i pregiudizi, le funzioni decisionali agiscono come decisioni 0/1 (o anche la funzione segno funziona anche in questo caso).

Rete neurale XOR

Immagine grazie al "blog Abhranil"


Grazie, quindi non è possibile farlo utilizzando un sigmoid logistico, poiché limita il valore a (0,1)
utente

No, dovrebbe essere ancora possibile impararlo con un sigmoid logistico, dovrebbe solo imparare le soglie / i pesi in modo diverso
Jan van der Vegt

Il bias nel gate NAND dovrebbe essere a +1.5.
Marc

4

Se stai usando la discesa gradiente di base (senza altra ottimizzazione, come lo slancio) e una rete minima 2 ingressi, 2 neuroni nascosti, 1 neurone di uscita, allora è sicuramente possibile addestrarlo per imparare XOR, ma può essere abbastanza ingannevole e inaffidabile.

  • Potrebbe essere necessario regolare il tasso di apprendimento. L'errore più comune è quello di impostarlo su un valore troppo alto, quindi la rete oscillerà o divergerà invece di apprendere.

  • Può essere necessario un numero sorprendentemente elevato di epoche per addestrare la rete minima utilizzando la discesa gradiente in batch o online. Forse saranno necessarie diverse migliaia di epoche.

  • Con un numero così basso di pesi (solo 6), a volte l'inizializzazione casuale può creare una combinazione che si blocca facilmente. Quindi potrebbe essere necessario provare, controllare i risultati e quindi riavviare. Ti suggerisco di utilizzare un generatore di numeri casuali con seeding per l'inizializzazione e di regolare il valore di seed se i valori di errore si bloccano e non migliorano.


Sì, è quello che sto osservando, con alcuni valori di seme converge, altri no. Inoltre, se uso la tangente iperbolica invece del sigmoide, funziona sempre abbastanza bene, con il sigmoide dipende dal seme, come hai osservato. Qual è la ragione per cui è così complicato?
utente

Non sono del tutto sicuro di quale sia la ragione matematica, questo è solo per la mia esperienza nella scrittura di suite di test sull'apprendimento di xor. Nel mio caso, l'aggiunta di slancio ha aiutato, ma penso che qualsiasi aggiustamento lontano dalla rete più semplice e / o dall'ottimizzatore aiuti.
Neil Slater,
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.