Reti neurali: struttura

Se ti ricordi di utilizzare l'unità Incroci, il seguente problema di classificazione non è lineare:

Trama cartesiana. L'asse X tradizionale è etichettato 'x1'. L'asse Y tradizionale è etichettato 'x2'. I punti blu occupano i quadranti nord-ovest e sud-est, mentre i punti gialli occupano i quadranti sud-ovest e nord-est.

Figura 1. Problema di classificazione non lineare.

"Non lineare" significa che non puoi prevedere con precisione un'etichetta con un modello del modulo \(b + w_1x_1 + w_2x_2\) In altre parole, la "superficie decisionale" non è una linea. In precedenza, abbiamo esaminato i crossing delle funzionalità come un possibile approccio alla modellazione di problemi non lineari.

Ora considera il seguente set di dati:

Il set di dati contiene molti punti arancioni e molti punti blu. È difficile determinare una sequenza coerente, ma i punti arancioni formano vagamente una spirale, mentre i punti blu potrebbero formare una spirale diversa.

Figura 2. Un problema di classificazione non lineare più difficile.

Il set di dati mostrato nella Figura 2 non può essere risolto con un modello lineare.

Per vedere come le reti neurali potrebbero aiutare a risolvere problemi non lineari, iniziamo rappresentando un modello lineare come un grafico:

Tre cerchi blu in una riga collegati da frecce a un cerchio verde sopra di essi

Figura 3. Modello lineare come grafico.

Ogni cerchio blu rappresenta una caratteristica di input e il cerchio verde rappresenta la somma ponderata degli input.

Come possiamo modificare questo modello per migliorare la sua capacità di affrontare problemi non lineari?

Livelli nascosti

Nel modello rappresentato dal seguente grafico, abbiamo aggiunto un "livello nascosto" di valori intermedi. Ogni nodo giallo nel livello nascosto è una somma ponderata dei valori del nodo di input blu. L'output è una somma ponderata dei nodi giallo.

Tre cerchi blu in una riga etichettata

Figura 4. Grafico di un modello a due livelli.

Questo modello è lineare? Sì, il relativo output è ancora una combinazione lineare di input.

Nel modello rappresentato dal seguente grafico, abbiamo aggiunto un secondo livello nascosto di somme ponderate.

Tre cerchi blu in una riga etichettata

Figura 5. Grafico di un modello a tre livelli.

Il modello è ancora lineare? Sì, lo è. Quando esprimi l'output in funzione dell'input e semplifica, ricevi solo un'altra somma ponderata degli input. Questa somma non modella in modo efficace il problema non lineare nella Figura 2.

Funzioni di attivazione

Per modellare un problema non lineare, possiamo introdurre direttamente una non linearità. Possiamo pipelinere ogni nodo del livello nascosto tramite una funzione non lineare.

Nel modello rappresentato dal grafico seguente, il valore di ogni nodo nel livello nascosto 1 viene trasformato da una funzione non lineare prima di essere passato alle somme ponderate del livello successivo. Questa funzione non lineare è chiamata funzione di attivazione.

Come nella figura precedente, ad eccezione del fatto che una riga di cerchi rosa con l'etichetta 'Non-Linear Transformation Layer' è stata aggiunta tra i due livelli nascosti.

Figura 6. Grafico di un modello a tre livelli con funzione di attivazione.

Ora che abbiamo aggiunto una funzione di attivazione, l'aggiunta di livelli ha un impatto maggiore. L'accumulo di non linearità su non linearità ci consente di modellare relazioni molto complicate tra gli input e gli output previsti. In breve, ogni livello apprende in modo efficace una funzione più complessa e di livello superiore sugli input non elaborati. Se vuoi sviluppare una migliore intuizione su come funziona questo articolo, leggi l'eccellente blog post di Chris Olah.

Funzioni di attivazione comuni

La seguente funzione di attivazione sigmoid converte la somma ponderata in un valore compreso tra 0 e 1.

$$F(x)=\frac{1} {1+e^{-x}}$$

Ecco un grafico:

Funzione sigmoidea

Figura 7. Funzione di attivazione sigmoidea.

La seguente funzione di attivazione dell'unità lineare rettificata (o ReLU, in breve) spesso funziona un po' meglio di una funzione regolare come il sigmoide, pur essendo significativamente più facile da calcolare.

$$F(x)=max(0,x)$$

La superiorità del ReLU si basa su risultati empirici, probabilmente dovuti al fatto che il ReLU ha una gamma più utile di reattività. La reattività di un sigmoideo è relativamente rapida su entrambi i lati.

Funzione di attivazione ReLU

Figura 8. Funzione di attivazione ReLU.

Di fatto, qualsiasi funzione matematica può fungere da funzione di attivazione. Supponiamo che \(\sigma\) rappresenta la nostra funzione di attivazione (Relu, Sigmoid o altro). Di conseguenza, il valore di un nodo nella rete è dato dalla seguente formula:

$$\sigma(\boldsymbol w \cdot \boldsymbol x+b)$$

TensorFlow è pronto per l'uso per molte funzioni di attivazione. Puoi trovare queste funzioni di attivazione all'interno dell'elenco di wrapper di TensorFlow per le operazioni di rete neurale primitive. Detto questo, ti consigliamo comunque di iniziare con ReLU.

Riepilogo

Ora il nostro modello ha tutti i componenti standard di ciò che le persone in genere significano quando dicono "rete neurale":

  • Un insieme di nodi, analogo ai neuroni, organizzato in livelli.
  • Un insieme di ponderazioni che rappresenta le connessioni tra ogni livello di rete neurale e il livello sottostante. Il livello seguente potrebbe essere un altro livello di rete neurale o qualche altro tipo di livello.
  • Un insieme di bias, uno per nodo.
  • Una funzione di attivazione che trasforma l'output di ciascun nodo in un livello. Livelli diversi possono avere funzioni di attivazione diverse.

Un'avvertenza: le reti neurali non sono sempre meglio dei cross-feature, ma le reti neurali offrono un'alternativa flessibile che funziona in molti casi.