Sei sulla pagina 1di 5

Reti neurali artificiali

Una rete neurale artificiale (ANN) è un algoritmo di machine learning che prende ispirazione dalle reti
neurali biologiche degli esseri viventi.
In biologia un neurone è una cellula composta da tre parti:
 il corpo cellulare dove risiede il nucleo della cellula;
 delle estensioni chiamate dendriti, preposte alla ricezione di impulsi sinaptici (segnali) da parte di
altri neuroni;
 una lunga estensione chiama assone che si divide dall’estremità in diverse terminazione chiamate
sinapsi, preposte alla trasmissione di impulsi sinaptici.
Quando un neurone riceve una quantità sufficiente di impulsi sinaptici in un breve lasso di tempo (pochi
millisecondi) questo emette a sua volta un impulso sinaptico.

Questi neuroni presi singolarmente possono apparire come dei sistemi


semplici, ma collegati ad altri neuroni in una rete neurale complessa riescono
a compiere operazioni molto elaborate. Un neurone biologico può essere
schematizzato matematicamente come un sistema che accetta in ingresso n
variabili effettua una loro somma pesata, la quale verrà elaborata da una
funzione di attivazione che restituirà un valore in output. Indicando con g la
funzione di attivazione possiamo scrivere: ^y =g (wT ∙ x +b)

Dove w sono i pesi delle connessioni (ogni peso è relativo ad una connessione) e b è il bias e del relativo
solo al neurone. Il primo a creare una ANN fu Frank Rosenblatt nel 1957, il quale l'idea del nome di
percettrone: un percettrone è una rete neurale composta da uno strato di neuroni.
Il percettrone ai tempi conteneva dei neuroni che
utilizzavano come funzione di attivazione il gradino
1 ⇒ z ≥0
{0 altrove
unitario: g ( z )=u ( z )=

Questo primo neurone prendeva il nome di threshold logic unit (TLU) o linear threshold unit(LTU). Il
problema di questo ANN è che un singolo percettrone è in grado di risolvere i problemi di classificazione
solo nel caso in cui le classi siano linearmente separabili (non è in grado, ad esempio, di risolvere lo xor), il
che portò ad un rallentamento della ricerca sulle ANN in favore di algoritmi di machine learning. Col tempo
si scoprì che la maggior parte delle limitazioni legate ai percettroni possono essere superate creando
strutture a più strati (layer) che prendono il nome di multi layer perceptron (MLP).
Una MLP è in generale composta da:

 input layer: è un livello artefatto che serve per collegare gli input di neuroni del primo hidden layer;
 uno o più hidden layer: sono dei layer intermedi che servono ad aggiungere non linearità al
modello;
 un output layer: e la strada che trasforma l’output dell'ultimo hidden layer nell’output finale su
della rete.

Si noti che gli input layer non contano come layer della rete. Prendiamo come riferimento la seguente
struttura:

A due layer di cui:


 un hidden layer con due neuroni;
 un output layer con un neurone;

Quando un layer e completamente interconnesso con quello precedente, questo prende il nome layer
denso. Possiamo esprimere questa struttura in termini materiali:

x1 W 11 W 21

x3() ( ) ( )
[1]

W 13
[ 1]

W 23
[1 ] W 1[ 1] T
x= x 2 ; W 1 = W 12 ; W 2 = W 22 ⇒ W = [ 1]T
W2 ( )
b[11 ] W 1[2] [ 2]
( )
b[ i]=
b[21 ]
;W [2]
( )
=
W 2[2]
;b

Per fare predizioni la rete accetta in input le feature dei campioni, le quali vengono elaborate layer per
layer fino ad arrivare ad un risultato in output: il processo di propagazione dell’input verso l’output prende
il nome di forward propagation. Vediamo come funziona la forward propagation nell’esempio precedente:

Z[11]=W 1[1] T ∙ a[ 0 ] + b[11 ] ⇒a1[ 1] =g ( Z [11] ) a1[ 1]


x=a ⇒
[ 0]

{ Z[21]=W 2[1] T ∙ a[ 0 ] + b[21 ] ⇒a2[ 1] =g ( Z [21] )


→a =
[1]
[ ]
a2 [ 1 ]

Z [ 2] =W [ 1]T ∙ a [ 1] + b[ 2 ] ⇒ ^y =a[ 2 ] =g ( Z [ 2 ] )
È necessario utilizzare delle funzioni di attivazione non lineari perché altrimenti l'output sarebbe a sua volta
una funzione lineare. Dimostriamo quanto appena detto:

[ ]
g ( z )=z ⇒ ^y =g ( Z [ 2 ] )=Z[2 ]=W [2 ]T ∙ a[ 1 ] +b [ 2 ]=W [ 2 ] T ∙ z [ 1] +b[ 2 ] =W [ 2] T ∙ ( W [ 1 ] ∙ x+ b[11 ] ) + b[ 2 ] =( W [ 2] T ∙W [ 1 ] ) ∙ x ∙+ ( W [ 2] T ∙b [ 1] +

Per anni i ricercatori hanno cercato di individuare un algoritmo in grado di addestrare le MLP senza
successo, nel 1986 David Rumelhart, Geoffry Hinton e Ronald Williams pubblicarono un paper che
introduceva la back propagation, un algoritmo di training ancora in uso oggi.
In breve, questo è un gradiente discendente che usa una tecnica efficiente per eseguire i gradienti
automaticamente: in due passaggi attraverso la rete, uno in avanti e l'altro all'indietro, la back propagation
è capace di calcolare il gradiente dell'errore della rete rispetto ad ogni singolo parametro. In altre parole,
può trovare quanto ogni peso e ogni bias debbano essere modificati per ridurre l'errore. Una volta trovati i
gradienti, l'algoritmo esegue semplicemente il gradiente discendente, il processo e ripetuto finché
l'algoritmo non converge a qualche soluzione. Il calcolo automatico dei gradienti viene chiamato
differenziazione automatica (Autodiff) , la back propagation è invece una tecnica di differenziazione
automatica.

Perché questo algoritmo funzioni, è necessario cambiare la funzione di attivazione dei neuroni, passando
dal gradino unitario alla sigmoide, mentre la funzione logistica è derivabile in tutti i punti. L'algoritmo segue
i seguenti passi:

1. Divide il training set in minibatch, i quali vengono utilizzati ad ogni epoca di addestramento. Il
x [1] T
minibatch è possibile grazie all’algebra lineare: Z=x ∙ W +b con x = ⋮ ;
x[ m] T [ ]
2. Ogni mini-batch di ogni epoca attraversa l'intera rete, questo prende il nome di forward pass , la
differenza rispetto ad una semplice previsione è che i risultati per ogni neurone di ogni layer
vengono salvati temporaneamente;
3. A questo punto l'algoritmo misura l'errore in output alla rete usando una funzione di costo;
4. Successivamente si calcola l'influenza di ogni connessione sul risultato; questo viene fatto
automaticamente usando la regola della catena, il che rende questo passaggio veloce e preciso;
5. L'algoritmo poi misura quanto di questi contributi di errore dipendono da ogni connessione del
layer precedente e così fino ad arrivare all’input layer (si propaga l'errore all'indietro, per questo si
chiama back propagation);
6. Infine, si utilizza il gradiente discendente per modificare i pesi sulle connessioni nella rete.

La funzione di loss che si usa con una funzione logistica è la cross-entropia. Supponendo di lavorare con un
δL 1− y y
mini-batch di dimensione unitaria: ( ^p , v )= −
δ ^p 1− ^p ^p

δL δL δ ^p δL δ a[ 1 ] δL ( [ 2 ] )
Facciamo un passo indietro nella rete: = ∙ [ 2] = [ 2] ∙ [2 ] =
( [2 ])
[ 2 ] δ Z ( 1−δ Z ) .
δZ [2 ]
δ p
^ δZ δα δ Z δα
La δ ( Z [ 2 ] ) è stata già calcolata nel forward pass.

Torniamo indietro di pesi che hanno generato l’output:

δL δL δ Z [ 2] δL Z [ 2] =W 1[ 2] ∙ a1[ 1] + W [22 ] ∙ a2 +b

{ [2 ]
= [ 2]
∙ [2 ]
= [ 2] ∙ a[11 ]
δ W1 δ Z δ W1 δ Z
δ Z [2 ] [2 ]
[1 ] δ Z [1 ]
δL δL δ Z [ 2] δL =a ; [ 2 ] =a2
[2 ]
= [ 2]
∙ [2 ]
= [ 2] ∙ a[21 ] δ W1 [ 2] 1
δ W2
δ W2 δ Z δ W2 δ Z
δL δL δ Z [ 2] δL δ Z[ 2 ]
= ∙ = =1
δ b [ 2] δ Z [ 2 ] δ b [ 2] δ Z [ 2 ] δ b [ 2]
A questo punto abbiamo calcolato il gradiente dei pesi del penultimo layer della rete, andiamo indietro:
δL δL δ Z [ 2] δL δL

{
= ∙ = ∙W [11] Da qui in avanti possiamo calcolare e così via
δ a1[ 1] δ Z [ 2 ] δ a [11] δ Z [ 2 ] δ Z[ 2 ]
fino all’input layer .
δL δL δ Z [ 2] δL
[1 ]
= [ 2]
∙ [2 ]
= [ 2] ∙ W [21 ]
δ a2 δ Z δ W 2 δ Z
È importante che tutte le connessioni vengono inizializzate randomicamente perché se fossero tutte uguali,
un layer funzionerebbe come un solo neurone (è necessario rompere la simmetria):
Per quanto riguarda la classificazione, le MLP possono essere usate per realizzare tutti i tipi di classificatori
(binari, multiclasse, multiclasse-multietichetta), cambiando semplicemente il numero di neuroni in output e
la funzione di attivazione, per multiclasse si usa la softmax.
Per quanto riguarda la regressione le funzioni utilizzate nella classificazione non sono più adatte, definiamo
quindi delle nuove funzioni che sono:
Nota sull’asse delle ascisse abbiamo z mentre sulle ordinate la f(z) in questione.
 Rectified Linear Unit (Relu):

ReLU ( Z )=Max ( 0 , Z ) Questa è una delle funzioni di attivazione più


semplici da calcolare, permettendo un
addestramento rapido della rete, rendendola la più
utilizzata. Ha però il difetto che se il bias assume un
valore negativo elevato, il neurone non risponderà
più agli input (Dead relu problem).

 Leaky Relu:

Leak_ ReLU ( Z )=Max ( αZ , Z ) ; α ≪1 Questa funzione risolve il problema del Dead relu
problem ma può generare inconsistenza perché la
sua parte negativa non è limitata.

 Exponential Linear Unit (ELU):

Leak_ ReLU ( Z )=Max ( αZ , Z ) ; α ≪1 Questa funzione unisce i vantaggi i vantaggi delle


z per z ≥ 0 prime due, col difetto però di essere
{ α ( e z−1 ) per z <0
computazionalmente più onerosa.
Perciò nella regressione si può usare:

 Relu se si vogliono valori positivi;


 Una funzione lineare se ^y può assumere qualunque valore;
 Una funzione logistica o una tangente iperbolica ______ se si vuole l’output in un certo range.

La funzione di perdita da usare in questo caso può essere uno tra MSE, RMSE e MDE.