Se ti ricordi di utilizzare l'unità Incroci, il seguente problema di classificazione non è lineare:
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:
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:
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.
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.
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.
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.
Ecco un grafico:
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.
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.
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:
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.