Versione a tre frasi:
Ogni livello può applicare qualsiasi funzione desiderata al livello precedente (di solito una trasformazione lineare seguita da una non linearità schiacciante).
Il lavoro dei livelli nascosti consiste nel trasformare gli input in qualcosa che il layer di output può utilizzare.
Il livello di output trasforma le attivazioni del livello nascosto in qualsiasi scala su cui desideri che il tuo output sia attivo.
Come se avessi 5 anni:
Se vuoi che un computer ti dica se c'è un bus in una foto, il computer potrebbe avere un momento più facile se avesse gli strumenti giusti.
Quindi il tuo rilevatore di autobus potrebbe essere costituito da un rilevatore di ruote (per aiutarti a dirti che è un veicolo) e un rilevatore di scatole (poiché l'autobus ha la forma di una grande scatola) e un rilevatore di dimensioni (per dirti che è troppo grande per essere un'auto ). Questi sono i tre elementi del tuo livello nascosto: non fanno parte dell'immagine grezza, sono strumenti che hai progettato per aiutarti a identificare i bus.
Se tutti e tre questi rivelatori si accendono (o forse sono particolarmente attivi), allora c'è una buona probabilità che tu abbia un autobus di fronte a te.
Le reti neurali sono utili perché esistono buoni strumenti (come la backpropagation) per costruire molti rivelatori e metterli insieme.
Come se fossi un adulto
Una rete neurale feed-forward applica una serie di funzioni ai dati. Le funzioni esatte dipenderanno dalla rete neurale che stai utilizzando: molto spesso, queste funzioni calcolano ciascuna una trasformazione lineare del livello precedente, seguita da una non linearità schiacciante. A volte le funzioni faranno qualcos'altro (come calcolare le funzioni logiche nei tuoi esempi o fare la media su pixel adiacenti in un'immagine). Quindi i ruoli dei diversi livelli potrebbero dipendere da quali funzioni vengono calcolate, ma cercherò di essere molto generale.
Chiamiamo il vettore di input , le attivazioni del layer nascosto e l'attivazione dell'output . Hai qualche funzione che mappa da ad e un'altra funzione che mappa da a . xhyfxhghy
Quindi l'attivazione del layer nascosto è e l'output della rete è .f(x)g(f(x))
Perché avere due funzioni ( e ) invece di uno solo?fg
Se il livello di complessità per funzione è limitato, può calcolare cose che e non possono fare individualmente. g(f(x))fg
Un esempio con funzioni logiche:
Ad esempio, se solo permettono e di essere semplici operatori logici come "AND", "OR", e "NAND", allora non è possibile calcolare altre funzioni come "XOR" con una sola di esse. D'altra parte, si potrebbe calcolare "XOR" se fossimo disposti a strato queste funzioni sopra l'altro:fg
Funzioni del primo livello:
- Assicurati che almeno un elemento sia "TRUE" (usando OR)
- Assicurati che non siano tutti "VERO" (usando NAND)
Funzione secondo strato:
- Assicurati che entrambi i criteri del primo livello siano soddisfatti (usando AND)
L'output della rete è solo il risultato di questa seconda funzione. Il primo livello trasforma gli input in qualcosa che il secondo livello può utilizzare in modo che l'intera rete possa eseguire XOR.
Un esempio con le immagini:
La diapositiva 61 di questo discorso - disponibile anche qui come una singola immagine - mostra (un modo per visualizzare) cosa stanno cercando i diversi strati nascosti in una particolare rete neurale.
Il primo livello cerca piccoli bordi nell'immagine: questi sono molto facili da trovare da dati pixel grezzi, ma non sono molto utili da soli per dirti se stai guardando una faccia, un autobus o un elefante .
Il livello successivo compone i bordi: se i bordi del livello nascosto inferiore si adattano in un certo modo, uno dei rilevatori di occhi nel mezzo della colonna più a sinistra potrebbe accendersi. Sarebbe difficile creare un singolo strato che fosse così bravo a trovare qualcosa di così specifico dai pixel grezzi: i rilevatori di occhi sono molto più facili da costruire dai rilevatori di bordi che dai pixel grezzi.
Il livello successivo compone i rilevatori di occhi e i rilevatori di naso in volti. In altre parole, questi si illumineranno quando i rilevatori di occhi e di naso del livello precedente si accendono con i motivi giusti. Sono molto bravi a cercare particolari tipi di volti: se uno o più di essi si illuminano, il tuo livello di output dovrebbe segnalare che è presente un volto.
Ciò è utile perché i rilevatori di volti sono facili da costruire con rilevatori di occhi e naso, ma sono davvero difficili da costruire con intensità di pixel.
Quindi ogni livello ti avvicina sempre di più ai pixel grezzi e più vicino al tuo obiettivo finale (ad esempio il rilevamento del viso o del bus).
Risposte ad altre domande assortite
"Perché alcuni livelli nel livello di input sono collegati al livello nascosto e altri no?"
I nodi disconnessi nella rete sono chiamati nodi "bias". C'è una spiegazione davvero piacevole qui . La risposta breve è che sono come termini di intercettazione in regressione.
"Da dove provengono le immagini del" rivelatore di occhi "nell'esempio di immagine?"
Non ho ricontrollato le immagini specifiche a cui mi sono collegato, ma in generale, queste visualizzazioni mostrano l'insieme di pixel nel livello di input che massimizzano l'attività del neurone corrispondente. Quindi, se pensiamo al neurone come un rivelatore di occhi, questa è l'immagine che il neurone considera più simile agli occhi. La gente di solito trova questi set di pixel con una procedura di ottimizzazione (salita).
In questo articolo di alcune persone di Google con una delle reti neurali più grandi del mondo, mostrano in questo modo un neurone "rilevatore di volti" e un neurone "rilevatore di gatti", nonché un secondo modo: mostrano anche le immagini reali che attivano il neurone più fortemente (figura 3, figura 16). Il secondo approccio è utile perché mostra quanto sia flessibile e non lineare la rete: questi "rilevatori" di alto livello sono sensibili a tutte queste immagini, anche se non sembrano particolarmente simili a livello di pixel.
Fammi sapere se qualcosa qui non è chiaro o se hai altre domande.