Introduzione al Deep Learning
Il Deep Learning è quella “branchia” dell’Intelligenza Artificiale (AI) e del Machine Learning (ML) basata su reti neurali artificiali. Quest’ultime sono organizzate in strati e ciascun strato ha il compito di calcolare i valori necessari per lo strato successivo, affinchè l’informazione venga eleborata in maniera sempre più completa. A tal proposito, ci si avvale di algoritmi che “imparano” dai dati.
Rete Neurale Artificiale
Una rete neurale artificiale nasce con l’obiettivo di imitare il compartamento del cervello umano, attraverso programmi o macchine. Come quello biologico, anche quello artificiale è formato da:
- assone (che nella rete neurale artificiale rappresenta la linea di uscita dell’informazione dal nodo);
- soma (che nella rete neurale artificiale rappresenta un nodo della rete);
- dendrite (che nella rete neurale artificiale rappresenta la linea di entrata dell’informazione al nodo).
Combinandoli insieme, si possono ottenere i seguenti livelli:
- Input layer (che è il primo strato della rete, da cui “partono” le informazioni e si propagano verso gli strati più interni);
- Hidden layer (che rappresenta lo strato intermedio tra quello di input e quello di output);
- Output layer (che rappresenta lo strato finale della rete, da cui si estrapolano i risultati delle elaborazioni).
In base alla tipologia del problema, è possibile combinare i layer tra di loro, per ottenere differenti topologie di reti neurali, che possono essere riassunte nella seguente immagine (rif. link).
In soldoni, le reti neurali sono strutture non-lineari di dati statistici organizzate come strumenti di modellazione. Esse possono essere utilizzate per simulare relazioni complesse tra ingressi ed uscite, che altre funzioni analitiche non riescono a rappresentare (Wikipedia).
Algoritmi di Training e Activation Function
Quando si lavora con le reti neurali, in genere, si parla di Forward Propagation, Backpropagation e di Activation Function. Combinandoli insieme in modo adeguato, si ottiene un algoritmo di training completo. Prima di entrare nel dettaglio dell’algoritmo di training, è necessario conoscere questi tre concetti:
Forward Propagation
è il processo in cui le informazioni passano da un layer all’altro, seguendo la direzione naturale di propagazione: cioè dall’input verso l’output (vedi immagine sotto). All’interno della rete, ogni dato ha un peso. Un buon modo di processare le informazioni è quello di mappare la somma dei pesi, in uno spazio non lineare, attraverso una Activation Function (spiegata di seguito).
Facendo riferimento alla precedente figura:
- X: rappresenta il valore di ingresso della rete neurale artificiale;
- Z : rappresenta il valore dei nodi per ciascun layer;
- w: rappresenta il valore dei pesi che impattano sul ciascun nodo;
- b: rappresenta il bias, che agisce su ciascun nodo. Il valore di bias è una costante che non dipende nè dall’input nè dall’output; è sostanzialmente una configurazione dell’activation function e può essere impostato manualmente in fase di definizione dell’algoritmo;
- a: rappresenta il valore in uscita da ciascun nodo.
l’obiettivo è quello di calcolare il valore finale a2.
Si noti che i valori presenti sulle frecce sono rappresentati con una lettera minuscola, vengono chiamati pesi degli archi. Mentre i valori presenti nei nodi sono rappresentati con una lettera maiuscola, vengono chiamati pesi dei nodi. La figura nel complesso, cioè l’insieme di nodi e archi, viene propriamente chiamata “grafo”.
Per comprendere meglio il concetto di Forward Propagation, si analizza a livello numerico la rete neurale definita sopra, considerando:
- Z come:
(Nota bene: per il primo Hidden Layer, subito dopo all’Input Layer, a assume il valore di X, cioè a =X)
- a come una sigmoid function:
A quel punto, si procede a calcolare il valore di a2, come nella seguente figura:
Backpropagation
è un algoritmo per l’allenamento di reti neurali artificiali supervisionate, attraverso cui si cerca di minimizzare il gradiente di perdita della funzione (aggiustando in modo iterativo i pesi w e i bias b tra le varie connessioni di un rete), al fine di minimizzare la differenza tra il risultato ottenuto e quello desiderato. Anche qui, per consolidare il concetto, ho riportato un esempio. Considerando l’errore di un singolo nodo come:
(dove Ti è il valore desiderato e ai è il risultato ottenuto), i pesi w’ e i bias b’ possono essere calcolati come:
dove eta è il learning rate — velocità di apprendimento e dE/dw è la derivata parziale dell’errore rispetto al parametro w e:
dove dE/db è la derivata parziale dell’errore rispetto al parametro b.
Utilizzando i dati di w5 e b2 calcolati con il Forward Propagation e considerando T = 0.25 ed eta = 0.4, si procede al calcolo dei pesi e dei bias come segue (vedi figura).
Activation Function
è una funzione di attivazione dei nodi che gioca un ruolo fondamentale per il processo di apprendimento di una rete neurale e la scelta sbagliata della funzione può causare degli effetti di Vanishing Gradient, che porta alla scomparsa del gradiente di errore nel Backpropagation. Tale effetto crea un apprendimento differenziato tra le zone vicino all’output (in cui gli hidden layers apprendono molto bene) e le zone vicino all’input (in cui gli hidden layers non apprendono). Nelle Sigmoid Functions e nell’Hyperbolic Tangent Functions, tale fenomeno è presente quando il valore di z cade fuori da un certo intervallo, in cui il gradiente della funzione è nullo. Per aggirare il problema, si può ricorrere alla Rectified Linear Unit (ReLU) Function, che non attiva contemporaneamente tutti i nodi della rete allo stesso tempo. Infatti, quando z cade nell’intervallo dei numeri negativi, il valore di a = 0 e il nodo non si attiva.
Tra le activation function abbiamo:
1. Binary Step Function;
2. Linear Function;
3. Sigmoid Function;
4. Hyperbolic Tangent Function;
5. Rectified Linear Unit (ReLU);
6. Leaky ReLU;
7. Softmax Function.
Le più popolari sono: Sigmoid Function, Hyperbolic Tangent Function, Rectified Linear Unit e la Softmax Function. Il loro andamento è visibile al seguente link.
Get Suan Suan Alessandra Chen’s stories in your inbox
Join Medium for free to get updates from this writer.
Come suddetto, la loro combinazione permette di ottenere un’ algoritmo di training completo:
Librerie del Deep Learning
Le tre librerie più utilizzate per il Deep Learning sono:
- Keras: grazie alla sintassi molto semplice, è perfetta per chi vuole avvicinarsi al campo del Deep Learning o per chi vuole creare dei modelli molto semplici e rapidi da analizzare, in quando API di alto livello. Però, per poterla utilizzare, è necessario installare TensorFlow.
- TensorFlow: rispetto a Keras, TensorFlow è una libreria di basso livello, quindi più complessa da utilizzare ma permette di avere più controllo (ed una maggiore comprensione) dei nodi o dei layers della rete.
- PyTorch: è equivalente a TensorFlow, ma gli algoritmi girano sulla GPU (unità di elaborazione grafica). E’ molto diffuso in campo accademico (ricerca). Sia TensorFlow che PyTorch richiedono competenze più specifiche rispetto a Keras.
Applicazioni
Alcune delle applicazioni pratiche del Deep Learing:
- Color Restoration (processo in cui si “colorano” le immagini in B/N);
- Speech Reenactment (processo in cui si sincronizza il movimento labiale all’audio di un clip);
- Automatic Handwriting Generation (processo in cui si riproduce la scrittura a mano);
- Object Classification and Detection in Image (processo in cui si classificano gli oggetti e si identificano le immagini);
- Self-Driving Cars.






