Reti neurali: funzioni di attivazione

Nell'esercizio precedente abbiamo visto che aggiungere semplicemente livelli nascosti alla nostra rete non era sufficiente a rappresentare le non linearità. Le operazioni lineari eseguite su operazioni lineari sono comunque lineari.

Come si può configurare una rete neurale per apprendere relazioni non lineari tra valori? Abbiamo bisogno di un modo per inserire operazioni matematiche non lineari in un modello.

Se questo vi sembra un po' familiare, è perché in precedenza nel corso abbiamo applicato operazioni matematiche non lineari all'output di un modello lineare. Nel modulo sulla regressione logistica , abbiamo adattato un modello di regressione lineare per ottenere un valore continuo da 0 a 1 (che rappresenta una probabilità) passando l'output del modello attraverso una funzione sigmoide .

Possiamo applicare lo stesso principio alla nostra rete neurale. Riprendiamo il modello dell'Esercizio 2 precedente, ma questa volta, prima di restituire il valore di ciascun nodo, applicheremo la funzione sigmoide:

Prova a scorrere i calcoli di ciascun nodo cliccando sul pulsante >| (a destra del pulsante di riproduzione). Esamina le operazioni matematiche eseguite per calcolare il valore di ciascun nodo nel pannello "Calcoli" sotto il grafico. Nota che l'output di ciascun nodo è ora una trasformata sigmoide della combinazione lineare dei nodi nel livello precedente e che i valori di output sono tutti compressi tra 0 e 1.

In questo caso, la sigmoide funge da 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 ai calcoli del livello successivo della rete neurale.

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 complesse tra gli input e gli output previsti. In breve, ogni livello apprende di fatto una funzione più complessa e di livello superiore a partire dagli input grezzi. Per approfondire il funzionamento di questo approccio, consulta l'eccellente articolo di Chris Olah .

Funzioni di attivazione comuni

Tre funzioni matematiche comunemente utilizzate come funzioni di attivazione sono sigmoide, tanh e ReLU.

La funzione sigmoide (discussa 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. Grafico della funzione sigmoide: una curva a forma di S che si avvicina asintoticamente all'asse x quando x si avvicina a meno infinito e a 1 quando x si avvicina a infinito.
Figura 4. Grafico della funzione sigmoide.

La funzione tanh (abbreviazione di "tangente iperbolica") trasforma l'input $x$ per produrre un valore di output compreso tra –1 e 1:

\[F(x)=tanh(x)\]

Ecco un grafico di questa funzione:

Figura 5. Grafico della funzione tanh: una curva a S leggermente più ripida della funzione sigmoide, che asintoticamente si avvicina a –1 quando x si avvicina a meno infinito e a 1 quando x si avvicina a infinito.
Figura 5. Grafico della funzione tanh.

La funzione di attivazione dell'unità lineare rettificata (o ReLU , in breve) 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.

ReLU può essere rappresentato matematicamente utilizzando la funzione max():

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

Ecco un grafico di questa funzione:

Figura 6. Grafico della funzione ReLU: una linea orizzontale lungo l'asse x da meno infinito a 0, che diventa una linea diagonale che sale verso destra con pendenza 1 (y=x) da 0 a infinito.
Figura 6. Grafico della funzione ReLU.

ReLU spesso funziona leggermente meglio come funzione di attivazione rispetto a una funzione regolare come sigmoide o tanh, perché è meno suscettibile al problema del gradiente nullo durante l'addestramento delle reti neurali . ReLU è anche significativamente più facile da calcolare rispetto a queste funzioni.

Altre funzioni di attivazione

In pratica, qualsiasi funzione matematica può fungere da funzione di attivazione. Supponiamo che \(\sigma\) rappresenta la nostra funzione di attivazione. Il valore di un nodo nella rete è dato dalla seguente formula:

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

Keras offre supporto immediato per molte funzioni di attivazione . Detto questo, consigliamo comunque di iniziare con ReLU.

Riepilogo

Il seguente video riassume 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 intendono solitamente quando si riferiscono a una rete neurale:

  • Un insieme di nodi, analoghi ai neuroni, organizzati in strati.
  • Un insieme di pesi e bias appresi che rappresentano le connessioni tra ogni strato della rete neurale e lo strato sottostante. Lo strato sottostante può essere un altro strato della rete neurale o un altro tipo di strato.
  • Una funzione di attivazione che trasforma l'output di ciascun nodo in un layer. Layer diversi possono avere funzioni di attivazione diverse.

Una precisazione: le reti neurali non sono necessariamente sempre migliori degli incroci di funzionalità, ma offrono un'alternativa flessibile che funziona bene in molti casi.