Nell'esercizio precedente hai visto che la semplice aggiunta gli strati nascosti della nostra rete non erano sufficienti per rappresentare le non linearità. Le operazioni lineari eseguite su operazioni lineari sono ancora lineari.
Come si configura una rete neurale per apprendere relazioni non lineari tra i valori? Abbiamo bisogno di un modo per inserire valori non lineari operazioni matematiche in un modello.
Se ti sembra familiare, è perché abbiamo effettivamente applicato operazioni matematiche non lineari all'output di un modello lineare in precedenza nel corso. Nella sezione Regressione logistica abbiamo adattato un modello di regressione lineare per restituire un valore continuo da 0 a 1 (rappresenta una probabilità) passando l'output del modello attraverso una funzione sigmoidea.
Possiamo applicare lo stesso principio alla rete neurale. Rivediamo il nostro modello dall'esercizio 2 prima, ma questa volta, prima restituisce il valore di ciascun nodo, per prima cosa applichiamo la funzione sigmoidea:
Prova a eseguire i calcoli di ciascun nodo facendo clic sul pulsante >| (a destra del pulsante di riproduzione). Rivedere le operazioni matematiche eseguite per calcolare il valore di ciascun nodo nel riquadro Calcoli sotto il grafico. Tieni presente che l'output di ogni nodo è ora una trasformazione sigmoidea della dei nodi dello strato precedente, mentre i valori di output sono il tutto fra 0 e 1.
In questo caso, la funzione sigmoidea funzione di attivazione per la rete neurale, una trasformazione non lineare del valore di output di un neurone prima che il valore venga passato come input per i calcoli della successiva livello della rete neurale.
Ora che abbiamo aggiunto una funzione di attivazione, l'aggiunta di livelli ha un impatto maggiore. Sovrapporre le non linearità sulle non lineari ci consente di creare un modello molto complicato relazioni tra gli input e gli output previsti. In breve, ogni livello apprende effettivamente una funzione più complessa di livello superiore rispetto a quella non elaborata di input. Se vuoi avere un'idea più chiara di come funziona, leggi l'ottimo post del blog di Chris Olah.
Funzioni di attivazione comuni
Esistono tre funzioni matematiche comunemente utilizzate come funzioni di attivazione: funzione sigmoidea, tanh e ReLU.
La funzione sigmoidea (esaminata sopra) esegue la seguente trasformazione sull'input $x$, producendo un valore di output compreso tra 0 e 1:
\[F(x)=\frac{1} {1+e^{-x}}\]
Ecco un grafico di questa funzione:
![Figura 4. Traccia della funzione sigmoidea: una curva a S che
si avvicina in modo asintotico all'asse x mentre x si avvicina al valore negativo
all'infinito e a 1 man mano che x si avvicina all'infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=0000&hl=it)
La funzione tanh (abbreviazione di "hyperbolic tangent") trasforma l'input $x$ in producono un valore di output compreso tra -1 e 1:
\[F(x)=tanh(x)\]
Ecco un grafico di questa funzione:
![Figura 5. Traccia della funzione tanh: un valore leggermente
a una curva a S più ripida rispetto alla funzione sigmoidea, che in modo asintotico
si avvicina a -1 se x si avvicina all'infinito negativo e 1 quando si avvicina x.
all'infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=0000&hl=it)
La funzione di attivazione dell'unità lineare rettificata (o ReLU, per trasforma l'output utilizzando il seguente algoritmo:
- Se il valore di input $x$ è minore di 0, restituisce 0.
- Se il valore di input $x$ è maggiore o uguale a 0, restituisce il valore di input.
La funzione ReLU può essere rappresentata matematicamente mediante la funzione max():
Ecco un grafico di questa funzione:
![Immagine 6. Traccia della funzione ReLU: una linea orizzontale
lungo l'asse x dall'infinito negativo a 0, che diventa una linea diagonale
crescente verso l'alto e verso destra con pendenza 1 (y=x) da 0 a infinito.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=0000&hl=it)
La funzione ReLU spesso ha un comportamento migliore rispetto a una funzione di attivazione funzione come sigmoidea o tanh, perché è meno suscettibile problema relativo alla scomparsa del gradiente durante l'addestramento sulla rete neurale. Anche la funzione ReLU è notevolmente più facile di calcolo rispetto a queste funzioni.
Altre funzioni di attivazione
In pratica, qualsiasi funzione matematica può svolgere una funzione di attivazione. Supponiamo che \(\sigma\) rappresenti la nostra funzione di attivazione. Il valore di un nodo nella rete è dato dal seguente calcolo: formula:
Keras offre assistenza immediata per molti funzioni di attivazione. Detto questo, consigliamo comunque di iniziare con la funzione ReLU.
Riepilogo
Il seguente video fornisce un riepilogo di tutto ciò che hai imparato finora su come sono costruite le reti neurali:
Ora il nostro modello ha tutti i componenti standard di ciò che le persone quando si riferiscono a una rete neurale:
- Un insieme di nodi, analoghi ai neuroni, organizzati in strati.
- Un insieme di pesi che rappresentano le connessioni tra ciascuna rete neurale e il livello sottostante. Il livello sottostante può essere un altro strato della rete neurale o qualche altro tipo di strato.
- Un insieme di bias, uno per ogni nodo.
- Una funzione di attivazione che trasforma l'output di ciascun nodo in un livello. Livelli diversi possono avere funzioni di attivazione diverse.
Attenzione: le reti neurali non sono necessariamente sempre migliori di gli incroci di caratteristiche, ma le reti neurali offrono un'alternativa flessibile che funziona bene in molti casi.