Debug di reti neurali


10

Ho creato una rete neurale artificiale in Python usando la funzione di ottimizzazione scipy.optimize.minimize (gradiente coniugato).

Ho implementato il controllo del gradiente, ricontrollato tutto ecc. E sono abbastanza sicuro che funzioni correttamente.

L'ho eseguito un paio di volte e raggiunge "Ottimizzazione terminata correttamente", tuttavia quando aumento il numero di livelli nascosti, il costo dell'ipotesi aumenta (tutto il resto viene mantenuto lo stesso) dopo che è terminato con successo.

Intuitivamente sembra che il costo dovrebbe diminuire all'aumentare del numero di livelli nascosti, in quanto è in grado di generare un'ipotesi più complessa che può adattarsi meglio ai dati, tuttavia ciò non sembra essere il caso.

Sarei interessato a capire cosa sta succedendo qui, o se ho implementato la rete neurale in modo errato?

Risposte:


9

Esistono così tanti modi di sbagliare con una rete neurale che sarà difficile eseguire il debug. Inoltre, per affrontare il tuo intuito, ogni ulteriore livello nascosto rende l'apprendimento molto più difficile. Detto questo, ecco alcune possibilità:

  1. Hai aggiunto un calo di peso. L'aggiunta di più livelli aggiunge più pesi che aumentano i costi di regolarizzazione.
  2. Il problema è abbastanza semplice che è sufficiente un modello con un singolo livello nascosto. L'aggiunta di più livelli nascosti rende più difficile l'apprendimento della rete (problema di ottimizzazione più difficile).
  3. Il metodo di ottimizzazione non sta facendo un ottimo lavoro (preferisco climin a scipy.optimize).
  4. Stai utilizzando la funzione di attivazione sigmoid / tanh. La funzione sigmoide causa il problema del gradiente evanescente che rende difficile l'apprendimento con più livelli. Prova a utilizzare la funzione ReLu.

L'allenamento delle reti neurali richiede molta pratica, fortuna e pazienza. In bocca al lupo.


1
Buona risposta. Considera che 2, 3, 4 possono interagire in modi complessi, però. Il debug potrebbe essere eseguito controllando i valori di attivazione della RNA, l'entità dei pesi della RNA, tenendo d'occhio l'errore nel campione e fuori campione e la convergenza dell'ottimizzatore, ecc.
Def_Os

3

Aumentare il numero di strati nascosti per una rete neurale standard non migliorerà i risultati nella maggior parte dei casi. La modifica della dimensione del livello nascosto lo farà.

Questo fatto (che il numero di strati nascosti fa pochissimo) è stato notato storicamente ed è la motivazione dietro il campo dell'apprendimento profondo. L'apprendimento profondo è in effetti un modo intelligente di formare reti neurali multistrato, ad esempio isolando sottoinsiemi di funzionalità durante l'allenamento di diversi livelli.

Buon video introduttivo su questo argomento su YouTube


2
L'apprendimento profondo riguarda l'aumento del numero di livelli nascosti. Altrimenti si chiamerebbe apprendimento grasso :)
Emre,

@Emre lo intendeva sicuramente. Maledici la punteggiatura!
eric chiang,
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.