Sono sicuro che molte persone risponderanno con link a “fammelo google per te”, quindi voglio dire che “ho cercato di capire questo fuori quindi per favore perdona la mia mancanza di comprensione qui, ma non riesco a capire come funziona effettivamente limplementazione pratica di una rete neurale.

Capisco il livello di input e come normalizzare i dati, capisco anche lunità di bias, ma quando si tratta del livello nascosto, qual è il calcolo effettivo in quel livello e come si mappa al luscita è solo un po nebbiosa. 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 e così via Ho solo alcune domande sullaspetto pratico. Naturalmente, una semplice spiegazione dellintero processo della rete neurale come spiegheresti a un bambino, sarebbe fantastico.

Quali calcoli vengono eseguiti nel livello nascosto ?

Come vengono mappati questi calcoli al livello di output?

Come funziona il livello di output? D-normalizzazione dei dati dal livello nascosto?

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

Commenti

  • Le persone qui intorno sono simpatiche, non ho mai visto una risposta “fammi cercare su google quella per te” ma molte risposte sorprendentemente complete e penetranti a quelle che allinizio sembravano essere domande di base. Sfortunatamente, non posso ‘ aiutarti w con il tuo, ma sembra abbastanza pertinente, quindi lo voto con gioia.
  • Grazie per il commento e il voto Gael, ‘ probabilmente sono un po stanco di la comunità SO, come tutti sappiamo come possono ottenere quelle persone 🙂 Sono contento di vedere più uno spirito di collaborazione qui invece di cercare di guadagnare badge e punti modificando / chiudendo le domande.
  • Non lo sono esperto in reti neurali in particolare, anche se sono coinvolto nelle loro applicazioni e metodi. La mia risposta forse non così utile sarebbe che i calcoli specifici nel nascosto dipendono dalla ‘ funzione di costo ‘ che sei imponendo il tuo output, cioè ciò che cerchi di ottenere. Ad esempio, se desideri raggruppare gli elementi di input in insiemi raggruppati, calcolerai le distanze tra gli elementi nel livello nascosto. Questo può subire varie iterazioni e cicli di ottimizzazione allinterno di questo livello, fino a quando non si incontra un criterio di errore che consente al processo di `lasciare ‘ questo livello.

Risposta

Versione a tre frasi:

  • Ogni livello può applicare qualsiasi funzione tu voglia al livello precedente (di solito una trasformazione lineare seguita da una non linearità schiacciante).

  • Il compito dei livelli nascosti “è trasformare gli input in qualcosa che il livello di output può usare.

  • Il livello di output trasforma le attivazioni dei livelli nascosti nella scala su cui desideri che il tuo output sia.

Like you “re 5:

Se vuoi che un computer ti dica se cè “un bus in unimmagine, il computer potrebbe avere tempi più facili se avesse gli strumenti giusti.

Quindi il tuo rilevatore di bus potrebbe essere composto da un rilevatore di ruote (per aiutarti a dirti che è un veicolo) e un rilevatore di scatole (poiché lautobus ha la forma di una grande scatola) e un rilevatore di dimensioni (per dirti è troppo grande per essere unauto). Questi sono i tre elementi del tuo livello nascosto: non fanno parte dellimmagine grezza, sono strumenti che hai progettato per aiutarti a identificare gli autobus.

Se tutti e tre questi rilevatori si accendono (o forse se “sono particolarmente attivi), allora ci sono buone probabilità che tu abbia un autobus davanti a te.

Le reti neurali sono utili l perché ci sono buoni strumenti (come la propagazione allindietro) per costruire molti rilevatori e metterli insieme.


Come te “sei un adulto

Una rete neurale feed-forward applica una serie di funzioni ai dati. Le funzioni esatte dipenderanno dalla rete neurale che stai utilizzando: più frequentemente, ciascuna di queste funzioni calcola una trasformazione lineare del livello precedente, seguita da una non linearità schiacciante. A volte le funzioni faranno qualcosaltro (come calcolare le funzioni logiche nei tuoi esempi , o la media dei pixel adiacenti in unimmagine). Quindi i ruoli dei diversi livelli potrebbero dipendere dalle funzioni che vengono calcolate, ma cercherò di essere molto generale.

Chiamiamo linput vettore $ x $, le attivazioni del livello nascosto $ h $ e lattivazione delloutput $ y $. Hai una funzione $ f $ che mappa da $ x $ a $ h $ e unaltra funzione $ g $ che mappa da $ h $ a $ y $.

Quindi lattivazione del livello nascosto è $ f (x) $ e loutput della rete è $ g (f (x)) $.

Perché hanno due funzioni ($ f $ e $ g $) invece di una sola?

Se il livello di complessità per funzione è limitato, $ g (f (x)) $ può calcolare cose che $ f $ e $ g $ non possono fare individualmente.


Un esempio con funzioni logiche:

Ad esempio, se consentiamo solo $ f $ e $ g $ per essere semplici operatori logici come “AND”, “OR” e “NAND”, quindi non puoi “t calcolare altre funzioni come” XOR “con una sola di esse. Daltra parte, potremmo calcolare “XOR” se volessimo sovrapporre queste funzioni una sopra laltra:

Funzioni di primo livello:

  • Assicurati che almeno un elemento sia “TRUE” (utilizzando OR)
  • Assicurati che “non siano tutti” TRUE “(utilizzando NAND)

Funzione di secondo livello:

  • Assicurati che entrambi i criteri di primo livello siano soddisfatti (utilizzando AND)

Loutput 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 lintera rete possa eseguire XOR.


Un esempio con le immagini:

Diapositiva 61 da questo discorso – anche disponibile qui come singola immagine: mostra (un modo per visualizzare) cosa cercano i diversi livelli nascosti in una particolare rete neurale.

Il primo livello cerca piccoli pezzi di bordi nellimmagine: questi sono molto facili da trovare dai dati grezzi dei pixel, ma non sono molto utili da soli per dirti se stai guardando una faccia o un autobus o un elefante.

Il livello successivo compone i bordi: se i bordi del livello nascosto inferiore si incastrano in un certo modo, uno dei rilevatori di occhi al centro della colonna più a sinistra potrebbe accendersi . Sarebbe difficile creare un singolo livello 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 up compone i rilevatori di occhi e i rilevatori di naso in volti. In altre parole, si accenderanno quando i rilevatori degli occhi e dei rilevatori del naso dello strato precedente si accenderanno con i modelli giusti. Sono molto utili per cercare tipi particolari di volti: se uno o più di essi si accendono, il livello di output dovrebbe segnalare la presenza di un volto.

Ciò è utile perché i rilevatori di volti sono facili da costruire con rilevatori di occhi e naso, ma davvero difficili da costruire con intensità di pixel.

Quindi ogni livello ti porta sempre più lontano dai pixel grezzi e più vicino al tuo obiettivo finale (ad es. rilevamento del volto o rilevamento del bus).


Risposte a varie altre domande

“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 carina qui . La risposta breve è che” sono come intercettare i termini nella regressione.

“Dove le immagini del “rilevatore di occhi” nellesempio dellimmagine provengono? “

Non ho ricontrollato le immagini specifiche a cui ho collegato, ma in generale queste visualizzazioni mostrano linsieme di pixel nel livello di input che massimizzano lattività del neurone corrispondente. Quindi, se pensiamo al neurone come a un rilevatore di occhi, questa è limmagine che il neurone considera più simile a un occhio. La gente di solito trova questi set di pixel con unottimizzazione (hill-climbing).

In questo articolo di alcuni utenti di Google con una delle reti neurali più grandi del mondo, mostrano un neurone “rilevatore di volti” e un neurone “rilevatore di gatti” in questo modo, nonché un secondo modo: mostrano anche le immagini reali che attivano il neurone più fortemente (figura 3, figura 16). Il secondo approccio è carino 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.

Commenti

  • Quindi ce nè solo uno definito algoritmo per ogni singolo nodo su un dato livello e i pesi sono ciò che rende diversi gli output? Oppure puoi programmare ogni nodo sul livello in modo che sia diverso?
  • @GeorgeMcDowd questo arriva al problema chiave: guardando 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 prova per fare inferenze basate sui bordi, il che è molto più facile che provare a farlo in base ai pixel.
  • COSÌ dovrebbe darti qualche altra ricompensa (oltre ai punti) per il tempo e gli sforzi che dedichi a questa risposta!
  • @JoshuaEnfield Penso che la logica nel 1980 ‘ s era una combinazione di essere simile a come la gente pensava che il cervello funzionasse, che fosse differenziabili ovunque e che i valori fossero limitati come hai detto tu. 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à.
  • Lesempio del bus e la catena di funzioni lo hanno semplicemente inchiodato. Non ‘ capire perché i libri di testo non possono ‘ essere così descrittivi.

Risposta

Proverò ad aggiungere alla descrizione operativa intuitiva …

Un buon modo intuitivo di pensare a una rete neurale è pensare su ciò che un modello di regressione lineare tenta di fare. Una regressione lineare prenderà alcuni input e creerà 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 questi risultati a una risposta di output che corrisponde alloutput reale. I coefficienti sono determinati trovando i valori che ridurranno al minimo alcune metriche di errore tra il valore di output desiderato e il valore appreso dal modello. Un altro modo per dire è che il modello lineare proverà a creare moltiplicatori di coefficienti per ogni input e sommarli tutti per cercare di determinare la relazione tra linput (multiplo) e loutput (tipicamente singolo) val ues. Lo stesso modello può essere quasi pensato come lelemento costitutivo di base di una rete neurale; una singola unità perceptron.

Ma la singola unità perceptron ha un altro pezzo 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 lunità di base del livello nascosto, che è un blocco che sommerà un insieme di input ponderati – quindi passa la risposta sommata a una funzione non lineare per creare una risposta del nodo di output (livello nascosto). Lunità di bias è proprio come nella regressione lineare, un offset costante che viene aggiunto a ciascun nodo da elaborare. A causa del blocco di elaborazione non lineare, non sei più limitato a risposte solo lineari (come nel modello di regressione lineare).

Ok, ma quando hai molte delle singole unità perceptron che lavorano insieme, ciascuna può avere moltiplicatori di peso di ingresso differenti e risposte differenti (anche se TUTTI elaborano lo stesso insieme di ingressi con lo stesso blocco non lineare precedentemente descritto). Ciò che rende le risposte diverse è che ciascuna ha pesi di coefficienti diversi che vengono appresi dalla rete neurale tramite laddestramento (alcune forme includono la discesa del gradiente). Il risultato di tutti i perceptrons viene quindi nuovamente elaborato e trasmesso a un livello di output, proprio come sono stati elaborati i singoli blocchi. 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 allerrore tra il vero output effettivo e quello appreso output del modello. Lerrore viene in genere trasmesso allindietro attraverso la rete e lalgoritmo di feedback aumenterà o diminuirà individualmente quei pesi di una certa proporzione allerrore. La rete itererà ripetutamente passando in avanti, misurando la risposta in uscita, quindi aggiornando (passando allindietro 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 approssimatore di funzione universale.

Uno dei modi che mi ha davvero aiutato a capire come funziona veramente una rete neurale è stato studiare il codice di unimplementazione di rete neurale e costruirla. Una delle migliori spiegazioni di base del codice può essere trovata nel capitolo sulla rete neurale della (disponibile gratuitamente) “The Scientist and Engineer” s guide to DSP “ Ch. 26. È scritto per lo più in un linguaggio molto elementare (penso fosse fortran) che ti aiuta davvero a vedere cosa sta succedendo.

Answer

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

Hidden-to-Output

Loutput del livello nascosto potrebbe essere diverso, ma per ora supponiamo che provenga da funzioni di attivazione sigmoidale . Quindi sono valori compresi tra 0 e 1 e per molti input possono essere solo 0 “se 1”.

Mi piace pensare alla trasformazione tra gli output di questi neuroni nascosti e lo strato di output come una semplice traduzione (in senso linguistico, non geometrico). Questo è certamente vero se la trasformazione è invertible , e in caso contrario qualcosa si è perso nella traduzione. Ma fondamentalmente hai solo gli output dei neuroni nascosti visti da una prospettiva diversa.

Input-to-Hidden

Supponiamo che tu abbia 3 neuroni di input (solo così posso facilmente scrivi qui alcune equazioni) e alcuni neuroni nascosti. Ogni neurone nascosto riceve come input una somma ponderata di input, quindi ad esempio forse

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 niente sensibile a input_2 e solo leggermente sensibile a input_3.

Quindi potresti dire che hidden_1 sta catturando un particolare aspetto dellinput, che potresti chiamare “input_1 è un aspetto importante “.

Loutput di hidden_1 è di solito formato passando linput attraverso una funzione, quindi diciamo che stai utilizzando una funzione sigmoid . Questa funzione assume valori compresi tra 0 e 1; quindi pensalo come un interruttore che dice che input_1 è importante o non lo è.

Quindi questo è ciò che fa il livello nascosto! Estrae aspetti o caratteristiche dello spazio di input.

Ora anche i pesi possono essere negativi! Ciò significa che puoi ottenere aspetti come “input_1 è importante MA INOLTRE input_2 toglie tale importanza”:

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

o input_1 e input_3 hanno limportanza “condivisa”:

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

Più geometria

Se ne conosci algebra lineare, puoi pensare geometricamente in termini di proiezione lungo determinate direzioni. Nellesempio sopra, ho proiettato lungo la input_1 direzione.

Guardiamo di nuovo hidden_1, da Una volta che il valore in input_1 è abbastanza grande, loutput della funzione di attivazione del sigmoide rimarrà a 1, non diventerà più grande . In altre parole, sempre più input_1 non faranno alcuna differenza per loutput. Allo stesso modo, se si muove nella direzione opposta (cioè negativa), dopo un punto luscita non sarà influenzata.

Ok, va bene. Ma supponiamo di non volere la sensibilità nella direzione dellinfinito in una certa direzione, e vogliamo che sia attivata solo per un certo intervallo su una linea. Significa che per valori molto negativi non cè effetto e per valori molto positivi non cè effetto, ma per valori compresi tra 5 e 16 vuoi che si riattivi. Qui è dove useresti una funzione di base radiale per la funzione di attivazione.

Riepilogo

Il livello nascosto estrae le caratteristiche dello spazio di input e il livello di output le traduce nel contesto desiderato. Potrebbe esserci molto di più di questo, con le reti multistrato e simili, ma questo è ciò che ho capito finora.

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

Commenti

  • Come lOP, ‘ sono un po confuso riguardo al livello nascosto nelle reti neurali. Nel tuo esempio, come fa lalgoritmo NN a trovare i pesi per i neuroni hidden_1, hidden_2 e hidden_3? E poiché hidden_1, hidden_2 e hidden_3 derivano dalle stesse variabili di input, ‘ i pesi convergono nella stessa soluzione?

Risposta

Prendiamo il caso della classificazione. Quello che il livello di output sta cercando di fare è stimare la probabilità condizionale che il tuo campione appartenga a una data classe, cioè quanto è probabile che quel campione appartenga a una data 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 decisionali non convesse come quelle illustrate qui .

Si possono vedere le unità in livelli nascosti come lapprendimento di caratteristiche complesse dai dati che consentono al livello di output di essere in grado di discernere meglio una classe da unaltra, per generare confini decisionali più precisi. Ad esempio, nel caso del riconoscimento facciale, le unità nei primi strati apprendono caratteristiche simili ai bordi (rilevano i bordi a determinati orientamenti e posizioni) e lo strato superiore impara a combinarli per diventare rilevatori di caratteristiche facciali come il naso, la bocca o gli occhi. I pesi di ciascuna unità nascosta rappresentano quelle caratteristiche e il suo output (supponendo che sia un sigmoide) rappresenta la probabilità che quella caratteristica sia presente nel campione.

In generale, il significato degli output di output e i livelli nascosti dipendono dal problema che stai cercando di risolvere (regressione, classificazione) e dalla funzione di perdita che utilizzi (entropia incrociata, errori dei minimi quadrati, …)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *