Che cosa calcola il livello nascosto in una rete neurale?


187

Sono sicuro che molte persone risponderanno con link per "lasciami google che per te", quindi voglio dire che ho provato a capirlo, quindi perdona la mia mancanza di comprensione qui, ma non riesco a capire come l'attuazione pratica di una rete neurale funziona davvero.

Capisco il livello di input e come normalizzare i dati, capisco anche l'unità di polarizzazione, ma quando si tratta del livello nascosto, qual è il calcolo effettivo in quel livello e come si associa all'output è solo un po 'confuso. Ho visto diagrammi con punti interrogativi nel livello nascosto, funzioni booleane come AND / OR / XOR, funzioni di attivazione e nodi di input che mappano a tutte le unità nascoste e nodi di input che mappano solo a poche unità nascoste ciascuna Ho solo alcune domande sull'aspetto pratico. Naturalmente, una semplice spiegazione dell'intero processo della rete neurale come spiegheresti a un bambino, sarebbe fantastica.

Quali calcoli vengono eseguiti nel livello nascosto?

Come vengono mappati quei calcoli sul livello di output?

Come funziona lo strato di uscita? De-normalizzare i dati dal livello nascosto?

Perché alcuni livelli nel livello di input sono collegati al livello nascosto e altri no?


13
Le persone qui intorno sono simpatiche, non ho mai visto una risposta "fammi cercare Google per te", ma molte risposte sorprendentemente complete e perspicaci a quelle che all'inizio sembravano domande di base. Sfortunatamente, non posso aiutarti con i tuoi, ma sembra abbastanza pertinente, quindi li voto felicemente.
Gala,

4
Grazie per il commento e il voto Gael, probabilmente sono un po 'stanco della comunità SO poiché sappiamo tutti come possono ottenere queste persone :) Sono contento di vedere più di uno spirito di collaborazione qui invece di provare a guadagnare badge e punti modificando / chiudendo le domande.
FAtBalloon,

1
Non sono esperto in reti neurali in particolare, anche se mi coinvolgo nelle loro applicazioni e metodi. La mia risposta forse non così utile sarebbe che i calcoli specifici nascosti dipendono dalla "funzione di costo" che si sta imponendo sul proprio esito, ovvero su ciò che si tenta di ottenere. Ad esempio, se si desidera raggruppare gli elementi di input in insiemi di cluster, verranno calcolate le distanze tra gli elementi nel livello nascosto. Questo può passare attraverso varie iterazioni e cicli di ottimizzazione all'interno di questo livello, fino a quando non si incontra un criterio di errore che consente al processo di "abbandonare" questo livello.
Lucozade,

Risposte:


230

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.


2
Quindi esiste un solo algoritmo definito per ogni singolo nodo su un dato livello e i pesi sono ciò che rende gli output diversi? Oppure puoi programmare ogni nodo sul layer in modo che sia diverso?
FAtBalloon,

3
@GeorgeMcDowd questo arriva al problema chiave: guardare i pixel e identificare i bus è difficile, come hai suggerito. Fortunatamente, guardare i pixel e trovare i bordi è facile: è tutto ciò che il primo livello nascosto cerca di fare. Il livello successivo cerca di fare inferenze basate sui bordi, il che è molto più semplice che provare a farlo in base ai pixel.
David J. Harris,

4
SO dovrebbe darti qualche altra ricompensa (oltre ai punti) per il tempo e lo sforzo che dedichi a questa risposta!
samsamara,

1
@JoshuaEnfield Penso che la logica degli anni '80 fosse una combinazione di essere simile a come la gente pensava che il cervello funzionasse, che fosse differenziabile dappertutto e che i valori fossero limitati come hai menzionato. Da allora, le persone hanno scoperto che f(x) = max(x, 0)(l '"unità lineare rettificata") spesso funziona meglio, anche se non ha molte di queste proprietà.
David J. Harris,

2
L'esempio del bus e la catena di funzioni l'hanno appena inchiodato. Non capisco perché i libri di testo non possano essere così descrittivi.
eseguire il

12

Proverò ad aggiungere alla descrizione operativa intuitiva ...

Un buon modo intuitivo per pensare a una rete neurale è quello di pensare a ciò che un modello di regressione lineare tenta di fare. Una regressione lineare prenderà alcuni input e produrrà un modello lineare che prende ogni valore di input moltiplicato per alcuni coefficienti di ponderazione ottimali del modello e cerca di mappare la somma di tali risultati a una risposta di output che corrisponda strettamente all'output reale. I coefficienti vengono determinati trovando i valori che minimizzeranno alcune metriche di errore tra il valore di output desiderato e il valore appreso dal modello. Un altro modo di dire è che il modello lineare proverà a creare moltiplicatori di coefficienti per ogni input e sommarli tutti per provare a determinare la relazione tra i valori di input (multiplo) e (tipicamente singolo). Lo stesso modello può quasi essere pensato come il blocco base di una rete neurale;

Ma il perceptron a singola unità ha un pezzo in più che elaborerà la somma dei dati ponderati in modo non lineare. In genere utilizza una funzione di schiacciamento (sigmoide o tanh) per ottenere questo risultato. Quindi hai l'unità base del livello nascosto, che è un blocco che somma una serie di input ponderati, quindi passa la risposta sommata a una funzione non lineare per creare una risposta del nodo di output (livello nascosto). L'unità di polarizzazione è esattamente come nella regressione lineare, un offset costante che viene aggiunto a ciascun nodo da elaborare. A causa del blocco di elaborazione non lineare, non si è più limitati alle sole risposte lineari (come nel modello di regressione lineare).

Ok, ma quando hai molte delle singole unità percettron che lavorano insieme, ognuna può avere diversi moltiplicatori di peso in ingresso e risposte diverse (anche se TUTTI elaborano lo stesso insieme di ingressi con lo stesso blocco non lineare precedentemente descritto). Ciò che rende le risposte diverse è che ognuno ha pesi di coefficienti diversi che vengono appresi dalla rete neurale attraverso l'allenamento (alcune forme includono la discesa gradiente). Il risultato di tutti i percettroni viene quindi nuovamente elaborato e passato a un livello di output, proprio come i singoli blocchi sono stati elaborati. La domanda quindi è come vengono determinati i pesi corretti per tutti i blocchi?

Un modo comune per apprendere i pesi corretti è iniziare con pesi casuali e misurare la risposta di errore tra l'output effettivo reale e l'output del modello appreso. L'errore viene in genere passato all'indietro attraverso la rete e l'algoritmo di feedback aumenta o diminuisce individualmente quei pesi di una certa proporzione all'errore. La rete ripeterà ripetutamente passando in avanti, misurando la risposta in uscita, quindi aggiornando (passando indietro le regolazioni del peso) e correggendo i pesi fino a raggiungere un livello di errore soddisfacente. A quel punto hai un modello di regressione che può essere più flessibile di un modello di regressione lineare, è quello che viene comunemente chiamato un approssimatore di funzioni universali.

Uno dei modi che mi ha davvero aiutato ad imparare come funziona veramente una rete neurale è studiare il codice di un'implementazione di una rete neurale e costruirlo. Una delle migliori spiegazioni del codice di base può essere trovata nel capitolo della rete neurale del (The liberamente disponibile) Guida dello scienziato e ingegnere al DSP ' Ch. 26. È principalmente scritto in un linguaggio molto semplice (penso che sia stato Fortran) che ti aiuta davvero a vedere cosa sta succedendo.


12

Descriverò la mia visione di ciò in due passaggi: il passaggio da input a nascosto e il passaggio da nascosto a output. Farò prima il passaggio nascosto all'output perché sembra meno interessante (per me).

Nascosto-to-Output

L'output del layer nascosto potrebbe essere qualcosa di diverso, ma per ora supponiamo che escano da funzioni di attivazione sigmoidal . Quindi sono valori compresi tra 0 e 1 e per molti input possono essere solo 0 e 1.

Mi piace pensare alla trasformazione tra i risultati di questi neuroni nascosti e il livello di output come una semplice traduzione (in senso linguistico, non in senso geometrico). Questo è certamente vero se la trasformazione è invertibile e, in caso contrario, qualcosa è andato perso nella traduzione. Ma fondamentalmente hai solo le uscite dei neuroni nascosti viste da una prospettiva diversa.

Input-to-Nascosto

Diciamo che hai 3 neuroni di input (solo così posso facilmente scrivere alcune equazioni qui) e alcuni neuroni nascosti. Ogni neurone nascosto riceve come input una somma ponderata di input, quindi forse per esempio

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Ciò significa che il valore di hidden_1è molto sensibile al valore di input_1, per nulla sensibile input_2e solo leggermente sensibile a input_3.

Quindi potresti dire che hidden_1sta catturando un aspetto particolare dell'input, che potresti chiamare l' input_1aspetto " è importante".

L'output da hidden_1viene generalmente formato passando l'input attraverso alcune funzioni, quindi supponiamo che tu stia utilizzando una funzione sigmoid . Questa funzione assume valori compresi tra 0 e 1; quindi pensalo come un interruttore che dice che o input_1è importante o non lo è.

Ecco cosa fa il livello nascosto! Estrae aspetti o caratteristiche dello spazio di input.

Ora anche i pesi possono essere negativi! Ciò significa che è possibile ottenere aspetti come " input_1è importante MA ANCHE input_2toglie tale importanza":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

o input_1e input_3hanno un'importanza "condivisa":

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Più geometria

Se conosci un'algebra lineare, puoi pensare geometricamente in termini di proiezione lungo determinate direzioni. Nell'esempio sopra, ho proiettato lungo la input_1direzione.

Diamo un'occhiata di hidden_1nuovo, dall'alto. Una volta che il valore at input_1è abbastanza grande, l'output della funzione di attivazione sigmoid rimarrà solo a 1, non sarà più grande . In altre parole, sempre più input_1non farà differenza per l'output. Allo stesso modo, se si sposta nella direzione opposta (cioè negativa), dopo un punto l'uscita non sarà influenzata.

Ok bene. Ma supponiamo di non volere la sensibilità nella direzione dell'infinito in una certa direzione, e vogliamo che sia attivata solo per un certo intervallo su una linea. Il significato per valori molto negativi non ha alcun effetto e per valori molto positivi non c'è alcun effetto, ma per valori tra diciamo 5 e 16 si desidera che si svegli. Qui è dove useresti una funzione di base radiale per la tua funzione di attivazione.

Sommario

Il livello nascosto estrae le funzionalità dello spazio di input e il livello di output le traduce nel contesto desiderato. Potrebbe esserci molto di più di questo, per quanto riguarda le reti multistrato e simili, ma questo è quello che ho capito finora.

EDIT: Questa pagina con i suoi meravigliosi grafici interattivi fa un lavoro migliore di quanto la mia lunga e ingombrante risposta sopra potrebbe mai fare: http://neuralnetworksanddeeplearning.com/chap4.html


1
Come l'OP, sono un po 'confuso riguardo al livello nascosto nelle reti neurali. Nel tuo esempio, in che modo l'algoritmo NN trova i pesi per i neuroni hidden_1, hidden_2 e hidden_3? E poiché hidden_1, hidden_2 e hidden_3 sono derivati ​​dalle stesse variabili di input, i pesi non converrebbero nella stessa soluzione?
RobertF,

5

Prendiamo il caso della classificazione. Ciò che il livello di output sta cercando di fare è stimare la probabilità condizionale che il campione appartenga a una determinata classe, ovvero la probabilità che quel campione appartenga a una determinata classe. In termini geometrici, la combinazione di strati in modo non lineare tramite le funzioni di soglia consente alle reti neurali di risolvere problemi non convessi (riconoscimento vocale, riconoscimento di oggetti e così via), che sono i più interessanti. In altre parole, le unità di output sono in grado di generare funzioni di decisione non convesse come quelle illustrate qui .

È possibile visualizzare le unità in livelli nascosti come l'apprendimento di funzionalità complesse dai dati che consentono al livello di output di essere in grado di discernere meglio una classe da un'altra, per generare confini di decisione più precisi. Ad esempio, nel caso del riconoscimento facciale, le unità nei primi livelli apprendono le caratteristiche del bordo (rilevano i bordi in determinati orientamenti e posizioni) e il livello superiore impara a combinare quelli per diventare rilevatori di caratteristiche del viso come naso, bocca o occhi. I pesi di ciascuna unità nascosta rappresentano tali caratteristiche e il relativo output (supponendo che sia un sigmoide) rappresenta la probabilità che tale caratteristica sia presente nel campione.

In generale, il significato degli output di output e dei layer nascosti dipende dal problema che si sta tentando di risolvere (regressione, classificazione) e dalla funzione di perdita che si impiega (entropia incrociata, errori al minimo quadrato, ...)

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.