Come posso migliorare la stabilità della mia rete neurale?


11

Sto usando la rete neuronale in R per costruire un NN con 14 ingressi e un'uscita. Costruisco / alleno la rete più volte utilizzando gli stessi dati di addestramento di input e le stesse architetture / impostazioni di rete.

Dopo che ogni rete è stata prodotta, la utilizzo su una serie autonoma di dati di test per calcolare alcuni valori previsti. Sto scoprendo che c'è una grande varianza in ogni iterazione dei dati previsti, nonostante tutti gli input (sia i dati di training che i dati di test) rimangano gli stessi ogni volta che costruisco la rete.

Capisco che ci saranno differenze nelle ponderazioni prodotte all'interno della NN ogni volta e che due reti neurali non saranno identiche, ma cosa posso provare a produrre reti più coerenti su ciascun treno, dati gli stessi dati?


Puoi darci qualche dettaglio in più sull'algoritmo di apprendimento e sull'architettura che tu (o il pacchetto R) hai usato? Quanti strati ha l'NN?
Lucas,

Ciao Lucas, sto usando il link neuralnet del pacchetto R che ha un buon articolo esplicativo qui link . Sto usando uno strato nascosto di 8 neuroni. L'algoritmo di apprendimento è backpropagation resiliente con backtracking del peso.
TFB

Risposte:


8

In generale, si otterrebbe maggiore stabilità aumentando il numero di nodi nascosti e utilizzando un adeguato decadimento del peso (noto anche come penalità della cresta).

In particolare, consiglierei di usare il caretpacchetto per comprendere meglio la tua accuratezza (e persino l'incertezza nella tua precisione.) Anche nel punto di inserimento è quello avNNetche rende uno studente insieme da più reti neurali per ridurre l'effetto dei semi iniziali. Personalmente non ho visto enormi miglioramenti usando avNNetma potrebbe rispondere alla tua domanda originale.

Mi assicurerei anche che i tuoi input siano tutti adeguatamente condizionati. Hai ortogonalizzato e poi ridimensionato? Caret può anche eseguire questa pre-elaborazione tramite la sua pcaNNetfunzione.

Infine, puoi considerare di lanciare alcune connessioni skip layer. Tuttavia, è necessario assicurarsi che non vi siano valori anomali / punti di leva nei dati per inclinare tali connessioni.


È interessante notare che ho passato l'allenamento della rete alla funzione 'nnet' (disponibile nel pacchetto con lo stesso nome) e i risultati sul set di dati di test sono diventati molto più stabili - forse qualcosa a che fare con il diverso modo in cui i pesi sono inizializzato tra i due pacchetti?
TFB

Nei nnetpesi iniziali sono tutti inizializzati su un numero casuale uniforme compreso tra -0,7 e 0,7 se ricordo bene. E puoi controllare la grandezza in un parametro. Onestamente ho avuto una buona fortuna con il nnetpacchetto e non ho mai provato nessuna delle altre opzioni. Buona fortuna!
Shea Parkes,

1

Non ho lavorato con R, quindi posso solo dare consigli più generali.

Hai controllato se l'algoritmo convergeva? Una possibile spiegazione potrebbe essere che i diversi set di parametri sono tutti da qualche parte a metà dello stesso ottimale.

Se l'algoritmo converge sempre ma in un diverso ottimale locale, allora ci sono molte euristiche che potresti provare a evitare. Una strategia semplice quando si utilizza la discesa gradiente stocastica (SGD) sarebbe quella di utilizzare lotti più piccoli e un momento maggiore . Le dimensioni più piccole del lotto introducono effettivamente un po 'di rumore nell'allenamento che può aiutare a sfuggire ad alcuni optima locali. Una strategia molto più sofisticata sarebbe quella di inizializzare i pesi utilizzando gli autoencoder .


Proprio come un FYI, finché lui è usare la nnetdalla base R, utilizza il metodo di ottimizzazione BFGS da R di optim. In realtà calcola i gradienti per ottenere un'immagine della superficie. Non c'è elaborazione batch e nessun parametro momentum fisso nella sua implementazione. Detto questo, può facilmente non riuscire a convergere; specialmente con immondizia.
Shea Parkes

@SheaParkes grazie per i commenti e le risposte Shea. Attualmente sto usando il pacchetto neuralnet - vedi commento sopra. Utilizza un algoritmo di backpropagation resiliente con backtracking del peso
tfb

Poi mi scuso Lucas, mi sono perso quel bocconcino. Sono contento che tu l'abbia risolto tfb.
Shea Parkes,
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.