architettura multi-layer perceptron (MLP): criteri per la scelta del numero di strati nascosti e la dimensione dello strato nascosto?


104

Se abbiamo 10 autovettori allora possiamo avere 10 nodi neurali nel livello di input.Se abbiamo 5 classi di output, allora possiamo avere 5 nodi nel livello di output.Ma quali sono i criteri per scegliere il numero di livelli nascosti in un MLP e quanti neurali nodi in 1 livello nascosto?



Risposte:


217

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.

inserisci qui la descrizione dell'immagine


1
Vorrei aggiungere alcuni risultati relativi al RoT n. 1: negli SVM riusciti in realtà mappate il vostro input su uno spazio dimensionale superiore (più nodi nascosti rispetto ai nodi nel livello di input nel gergo NN). Il compito del livello di output è prendere la decisione da questa rappresentazione troppo completa. Potrebbe esserci anche una connessione a proiezioni casuali. Il brillante documento di Adam Coates e Andrew Y. Ng (2011) discute argomenti correlati.
Vladislavs Dovgalecs

Bella spiegazione. Qualche idea su come potrei tracciare una figura come quella sopra quando utilizzo sklearn e MLPClassifier?
Seralouk

1
@sera intendi lo stile xkcd?
denfromufa

In linea di principio, potresti automatizzare il processo di ottimizzazione del numero di neuroni nello strato nascosto? Inoltre, potresti ottimizzare automaticamente anche il numero di livelli nascosti?
Addison

2

È molto difficile scegliere il numero di neuroni in uno strato nascosto e scegliere il numero di strati nascosti nella tua rete neurale.

Di solito, per la maggior parte delle applicazioni, è sufficiente un livello nascosto. Inoltre, il numero di neuroni in quello strato nascosto dovrebbe essere compreso tra il numero di input (10 nel tuo esempio) e il numero di output (5 nel tuo esempio).

Ma il modo migliore per scegliere il numero di neuroni e strati nascosti è la sperimentazione. Addestra diverse reti neurali con un numero diverso di livelli nascosti e neuroni nascosti e misura le prestazioni di tali reti utilizzando la convalida incrociata . Puoi restare con il numero che produce la rete più performante.


2

Per automatizzare la selezione del miglior numero di livelli e del miglior numero di neuroni per ciascuno dei livelli, è possibile utilizzare l'ottimizzazione genetica .

I pezzi chiave sarebbero:

  1. Cromosoma : vettore che definisce quante unità in ogni strato nascosto (es. [20,5,1,0,0] significa 20 unità nel primo strato nascosto, 5 nel secondo, ..., con gli strati 4 e 5 mancanti). È possibile impostare un limite al numero massimo di livelli da provare e al numero massimo di unità in ogni livello. Dovresti anche porre delle restrizioni su come vengono generati i cromosomi. Ad esempio, [10, 0, 3, ...] non dovrebbe essere generato, perché qualsiasi unità dopo uno strato mancante (il "3, ...") sarebbe irrilevante e sprecherebbe cicli di valutazione.
  2. Funzione fitness : una funzione che restituisce il reciproco dell'errore di allenamento più basso nel set di convalida incrociata di una rete definita da un dato cromosoma. Puoi anche includere il numero di unità totali o il tempo di calcolo se desideri trovare la "rete più piccola / più veloce ma più precisa".

Puoi anche considerare:

  • Potatura : inizia con una rete di grandi dimensioni, quindi riduci i livelli e le unità nascoste, tenendo traccia delle prestazioni del set di convalida incrociata.
  • Crescita : inizia con una rete molto piccola, quindi aggiungi unità e livelli e tieni nuovamente traccia delle prestazioni del CV.

0

Recentemente c'è un lavoro teorico su questo https://arxiv.org/abs/1809.09953 . Supponendo che tu usi un RELU MLP, tutti i livelli nascosti hanno lo stesso numero di nodi e la tua funzione di perdita e la vera funzione che stai approssimando con una rete neurale obbediscono ad alcune proprietà tecniche (nel documento), puoi scegliere la tua profondità di cui essere ordina che $ \ log (n) $ e la larghezza dei livelli nascosti siano in ordine $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Qui $ n $ è la dimensione del campione, $ d $ è la dimensione del vettore di input e $ \ beta $ è un parametro di uniformità per la tua vera funzione. Poiché $ \ beta $ è sconosciuto, probabilmente vorrai trattarlo come un iperparametro.

In questo modo puoi garantire che con una probabilità che converge a $ 1 $ in funzione della dimensione del campione il tuo errore di approssimazione converge a $ 0 $ in funzione della dimensione del campione. Danno la tariffa. Nota che non è garantito che questa sia l'architettura "migliore", ma può almeno darti un buon punto di partenza. Inoltre, la mia esperienza personale suggerisce che cose come l'abbandono scolastico possono ancora aiutare nella pratica.

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.