Come impostare il numero di neuroni e strati nelle reti neurali


26

Sono un principiante delle reti neurali e ho avuto difficoltà a cogliere due concetti:

  1. Come si decide il numero di strati intermedi di una data rete neurale? 1 contro 10 o qualsiasi altra cosa.
  2. Come si decide il numero di neuroni in ogni strato intermedio? Si consiglia di avere un numero uguale di neuroni in ogni strato intermedio o varia con l'applicazione?

Risposte:


19

La considerazione del numero di neuroni per ogni strato e il numero di strati in reti completamente connesse dipende dallo spazio delle caratteristiche del problema. Per illustrare cosa succede nei casi bidimensionali per rappresentare, uso lo spazio 2-d. Ho usato immagini tratte dalle opere di uno scienziato . Per capire altre reti come CNNti consiglio di dare un'occhiata qui .

Supponiamo di avere un solo neurone, in questo caso dopo aver appreso i parametri della rete avrai un limite di decisione lineare che può separare lo spazio in due singole classi.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Supponiamo che ti venga chiesto di separare i seguenti dati. Avrai bisogno di ciò d1che specifica il limite superiore della decisione e in qualche modo sta eseguendo ANDun'operazione per determinare se i dati di input si trovano sul lato sinistro o sul lato destro. La linea d2sta eseguendo un'altra ANDoperazione che indaga se i dati di input sono superiori d2o meno. In questo caso d1sta cercando di capire se l'input è sul lato sinistro della linea per classificare l'input come cerchio , d2sta anche cercando di capire se l'input è sul lato destro della linea per classificare l'input come cerchio . Ora abbiamo bisogno di un altroANDoperazione per concludere i risultati delle due linee che sono costruite dopo aver allenato i loro parametri. Se l'ingresso è sul lato sinistro d1e sul lato destro di d2, dovrebbe essere classificato come cerchio .

inserisci qui la descrizione dell'immagine

Supponiamo ora di avere il seguente problema e che ti venga chiesto di separare le classi. In questo caso la giustificazione è esattamente come sopra.

inserisci qui la descrizione dell'immagine

Per i seguenti dati:

inserisci qui la descrizione dell'immagine

il limite di decisione non è convesso ed è più complesso dei limiti precedenti. Per prima cosa devi avere una sottorete che trovi i cerchi interni. Quindi devi avere un'altra sottorete che trova il confine di decisione rettangolare interno che decide che gli input che sono all'interno del rettangolo non sono circolari e se sono all'esterno sono circolari. Dopodiché, devi concludere i risultati e dire che se i dati di input si trovano all'interno del rettangolo più grande e all'esterno del rettangolo interno, devono essere classificati come cerchio . Hai bisogno di un'altra ANDoperazione per questo scopo. La rete sarebbe così:

inserisci qui la descrizione dell'immagine


Supponiamo che ti venga chiesto di trovare il seguente limite di decisione cerchiato .

inserisci qui la descrizione dell'immagine

In questo caso la tua rete sarebbe come la seguente rete a cui si faceva riferimento ma con molti più neuroni nel primo livello nascosto.

inserisci qui la descrizione dell'immagine


11

Ottima domanda, in quanto non esiste ancora una risposta esatta a questa domanda. Questo è un campo di ricerca attivo.

In definitiva, l'architettura della tua rete è legata alla dimensionalità dei tuoi dati. Poiché le reti neurali sono approssimatori universali, purché la tua rete sia abbastanza grande, ha la capacità di adattare i tuoi dati.

L'unico modo per sapere veramente quale architettura funziona meglio è provarle tutte, quindi scegliere quella migliore. Ma ovviamente, con le reti neurali, è abbastanza difficile in quanto ogni modello richiede un po 'di tempo per allenarsi. Quello che fanno alcune persone è prima di addestrare un modello "troppo grande" di proposito, e poi potarlo rimuovendo pesi che non contribuiscono molto alla rete.

E se la mia rete fosse "troppo grande"

Se la tua rete è troppo grande, potrebbe non adattarsi o fare fatica a convergere. Intuitivamente, ciò che accade è che la tua rete sta cercando di spiegare i tuoi dati in un modo più complicato di quanto dovrebbe. È come cercare di rispondere a una domanda a cui si potrebbe rispondere con una frase con un saggio di 10 pagine. Potrebbe essere difficile strutturare una risposta così lunga e potrebbero esserci molti fatti non necessari. ( Vedi questa domanda )

E se la mia rete fosse "troppo piccola"

D'altra parte, se la tua rete è troppo piccola, non sarà adatta ai tuoi dati e quindi. Sarebbe come rispondere con una frase quando avresti dovuto scrivere un saggio di 10 pagine. Per quanto la tua risposta possa essere, ti mancheranno alcuni dei fatti rilevanti.

Stima delle dimensioni della rete

Se conosci la dimensionalità dei tuoi dati, puoi dire se la tua rete è abbastanza grande. Per stimare la dimensionalità dei tuoi dati, puoi provare a calcolare il suo rango. Questa è un'idea chiave su come le persone stanno cercando di stimare la dimensione delle reti.

Tuttavia, non è così semplice. Infatti, se la tua rete deve essere a 64 dimensioni, crei un singolo strato nascosto di dimensioni 64 o due livelli di dimensione 8? Qui, ti darò alcune intuizioni su cosa accadrebbe in entrambi i casi.

Andando più in profondità

Andare in profondità significa aggiungere più livelli nascosti. Ciò che fa è che consente alla rete di calcolare funzionalità più complesse. Nelle reti neurali convoluzionali, ad esempio, è stato spesso dimostrato che i primi pochi livelli rappresentano caratteristiche di "basso livello" come i bordi e gli ultimi livelli rappresentano caratteristiche di "alto livello" come facce, parti del corpo ecc.

In genere è necessario approfondire se i dati non sono strutturati (come un'immagine) e devono essere elaborati un po 'prima che possano essere estratte informazioni utili da esso.

Allargando

Andare più in profondità significa creare funzionalità più complesse e "allargare" significa semplicemente creare più di queste funzionalità. È possibile che il tuo problema possa essere spiegato con funzionalità molto semplici, ma ce ne devono essere molte. Di solito, i livelli stanno diventando più stretti verso la fine della rete per la semplice ragione che le funzionalità complesse trasportano più informazioni rispetto a quelle semplici, e quindi non ne servono tante.


È possibile utilizzare il concetto di dimensione intrinseca per scoprire il numero di dimensioni rilevanti per il problema. Le dimensioni intrinseche cercano di rispondere a quante variabili sono necessarie per descrivere completamente un segnale ed è correlato al numero di variabili nella sorgente casuale di quel segnale.
Pedro Henrique Monforte

8

Risposta breve: è molto correlata alle dimensioni dei dati e al tipo di applicazione.

La scelta del giusto numero di livelli può essere ottenuta solo con la pratica. Non esiste ancora una risposta generale a questa domanda . Scegliendo un'architettura di rete, si limita il proprio spazio di possibilità (spazio di ipotesi) a una serie specifica di operazioni tensore, mappando i dati di input ai dati di output. In un DeepNN ogni layer può accedere solo alle informazioni presenti nell'output del layer precedente. Se un livello rilascia alcune informazioni rilevanti per il problema, queste informazioni non potranno mai essere recuperate dai livelli successivi. Questo è generalmente indicato come " collo di bottiglia delle informazioni ".

Informazioni Il collo di bottiglia è un'arma a doppio taglio:

1) Se usi un numero limitato di livelli / neuroni, il modello imparerà solo alcune utili rappresentazioni / caratteristiche dei tuoi dati e perderà alcuni importanti, perché la capacità degli strati intermedi è molto limitata ( insufficiente ).

2) Se si utilizza un numero elevato di livelli / neuroni, il modello apprenderà troppe rappresentazioni / caratteristiche specifiche dei dati di allenamento e non generalizza ai dati nel mondo reale e al di fuori del proprio set di allenamento ( overfitting ).

Link utili per esempi e altre scoperte:

[1] https: //livebook.manning.com#! / Book / deep-learning-with-python / capitolo-3 / point-1130-232-232-0

[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/


4

Lavorando con reti neurali da due anni fa, questo è un problema che ho sempre ogni volta che non voglio modellare un nuovo sistema. L'approccio migliore che ho trovato è il seguente:

  1. Cerca problemi simili che sono stati modellati anche con reti feed-forward e studia le loro architetture.
  2. Inizia con quella configurazione, addestra il set di dati e valuta il set di test.
  3. Esegui la potatura nella tua architettura e confronta i risultati nel set di dati con i risultati precedenti. Se l'accuratezza del tuo modello non è influenzata, puoi dedurre che il modello originale sta adattando eccessivamente i dati.
  4. Altrimenti, prova ad aggiungere più gradi di libertà (cioè più livelli).

L'approccio generale è provare diverse architetture, confrontare i risultati e adottare la migliore configurazione. L'esperienza ti dà più intuizione nella prima ipotesi di architettura.


1

Aggiungendo alle risposte precedenti, ci sono approcci in cui la topologia della rete neurale emerge endogena, come parte della formazione. Soprattutto, hai Neuroevolution of Augmenting Topologies (NEAT) in cui inizi con una rete di base senza strati nascosti e quindi usi un algoritmo genetico per "complessare" la struttura della rete. NEAT è implementato in molti framework ML. Ecco un articolo abbastanza accessibile su un'implementazione per imparare Mario: CrAIg: Usare Neural Networks per imparare Mario

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.