quanti strati nascosti ?
un modello con zero strati nascosti risolverà i dati separabili linearmente . Quindi, a meno che tu non sappia già che i tuoi dati non sono separabili linearmente, non fa male verificarlo: perché utilizzare un modello più complesso di quello richiesto dall'attività? Se è separabile linearmente, funzionerà una tecnica più semplice, ma anche un Perceptron farà il lavoro.
Supponendo che i tuoi dati richiedano la separazione con una tecnica non lineare, inizia sempre con un livello nascosto . Quasi sicuramente è tutto ciò di cui avrai bisogno. Se i tuoi dati sono separabili utilizzando un MLP, probabilmente quel MLP necessita solo di un singolo livello nascosto. C'è una giustificazione teorica per questo, ma la mia ragione è puramente empirica: molti problemi di classificazione / regressione difficili vengono risolti utilizzando MLP a livello nascosto singolo, ma non ricordo di aver incontrato MLP a più livelli nascosti utilizzati per modellare con successo i dati- -se si tratti di bacheche di ML, libri di testo di ML, documenti accademici, ecc. Esistono, certamente, ma le circostanze che giustificano il loro utilizzo sono empiricamente piuttosto rare.
Quanti nodi nel livello nascosto?
Dalla letteratura accademica MLP. la mia esperienza, ecc., ho raccolto e spesso mi baso su diverse regole pratiche ( RoT ), che ho anche trovato essere guide affidabili (cioè, la guida era accurata, e anche quando non lo era, di solito era chiaro cosa fare dopo):
RoT basato sul miglioramento della convergenza:
Quando inizi la costruzione del modello, erra sul lato di più nodi nel livello nascosto.
Perché? Innanzitutto, è probabile che alcuni nodi extra nel livello nascosto non causino alcun danno: il tuo MLP converrà comunque. D'altra parte, un numero troppo basso di nodi nel livello nascosto può impedire la convergenza. Pensala in questo modo, i nodi aggiuntivi forniscono una certa capacità in eccesso - pesi aggiuntivi per memorizzare / rilasciare il segnale alla rete durante l'iterazione (addestramento o costruzione del modello). In secondo luogo, se inizi con nodi aggiuntivi nel tuo livello nascosto, è facile potarli in seguito (durante l'avanzamento dell'iterazione). Questo è comune e ci sono tecniche diagnostiche per assistervi (ad esempio, diagramma di Hinton, che è solo una rappresentazione visiva delle matrici dei pesi, una "mappa del calore" dei valori di peso).
RoT basati sulla dimensione del livello di input e sulla dimensione del livello di output:
Una regola pratica è che la dimensione di questo livello [nascosto] sia da qualche parte tra la dimensione del livello di input ... e la dimensione del livello di output ....
Per calcolare il numero di nodi nascosti usiamo una regola generale di: (Numero di ingressi + uscite) x 2/3
RoT basato sui componenti principali:
Tipicamente, specifichiamo tanti nodi nascosti quante sono le dimensioni [componenti principali] necessarie per catturare il 70-90% della varianza del set di dati di input .
Eppure l' autore di NN FAQ chiama queste Regole "nonsense" (letteralmente) perché: ignorano il numero di istanze di addestramento, il rumore negli obiettivi (valori delle variabili di risposta) e la complessità dello spazio delle caratteristiche.
A suo avviso (e mi è sempre sembrato che sappia di cosa sta parlando), scegli il numero di neuroni nello strato nascosto in base al fatto che il tuo MLP includa una qualche forma di regolarizzazione o arresto anticipato .
L'unica tecnica valida per ottimizzare il numero di neuroni nello strato nascosto:
Durante la costruzione del modello, prova ossessivamente; il test rivelerà le firme di un'architettura di rete "errata". Ad esempio, se inizi con un MLP con un livello nascosto composto da un piccolo numero di nodi (che aumenterai gradualmente secondo necessità, in base ai risultati dei test), il tuo errore di formazione e generalizzazione sarà entrambi elevato a causa di bias e underfitting.
Quindi aumentare il numero di nodi nel livello nascosto, uno alla volta, finché l'errore di generalizzazione non inizia ad aumentare, questa volta a causa dell'overfitting e dell'elevata varianza.
In pratica, lo faccio in questo modo:
livello di input : la dimensione del mio data vactor (il numero di funzioni nel mio modello) + 1 per il nodo bias e non includendo la variabile di risposta, ovviamente
livello di output : determinato esclusivamente dal mio modello: regressione (un nodo) rispetto alla classificazione (numero di nodi equivalente al numero di classi, assumendo softmax)
strato nascosto : per iniziare , uno strato nascostocon un numero di nodi uguale alla dimensione del livello di input. La dimensione "ideale" è più probabile che sia più piccola (cioè un certo numero di nodi tra il numero nello strato di input e il numero nello strato di output) piuttosto che più grande - ancora una volta, questa è solo un'osservazione empirica e la massa di questa osservazione è la mia esperienza. Se il progetto ha giustificato il tempo aggiuntivo richiesto, allora inizio con un singolo livello nascosto composto da un piccolo numero di nodi, quindi (come ho spiegato appena sopra) aggiungo i nodi allo strato nascosto, uno alla volta, calcolando la generalizzazione errore, errore di addestramento, bias e varianza. Quando l'errore di generalizzazione è diminuito e appena prima che inizi di nuovo ad aumentare, il numero di nodi in quel punto è una mia scelta. Vedere la figura sotto.