Il Deep Learning rappresenta una tecnica di Machine Learning che utilizza algoritmi in grado di simulare il cervello umano. In particolare questi algoritmi si basano sullo sviluppo di reti neurali per apprendere e svolgere una determinata attività.
In questo articolo vedremo:
- Cos’è una rete neurale artificiale.
- Come impara una rete neurale artificiale.
- Cosa si intende per Deep Learning.
- Principali applicazioni di Deep Learning nel mondo reale.
Cos’è una Rete Neurale Artificiale?
Quando parliamo di rete neurale intendiamo sia le reti neurali biologiche sia le reti neurali artificiali.
Le reti neurali biologiche si riferiscono a ogni gruppo connesso di cellule nervose incluse nel nostro cervello mentre le reti neurali artificiali sono costrutti matematici, inizialmente progettati per approssimare i neuroni biologici del cervello.
In questo articolo ci concentremo solo su questo secondo tipo di rete neurale.
La più semplice definizione di rete rete neurale artificiale (Artificial Neural Network, ANN), è fornita dal professore Robert Hecht-Nielsen che definisce una rete neurale come:
“… un sistema di elaborazione costituito da una serie di elementi di elaborazione semplici e altamente interconnessi, che elaborano le informazioni mediante la loro risposta di stato dinamica agli input esterni.”
In parole semplici una rete neurale artificiale rappresenta un sofware che cerca di imitare come funziona il cervello umano.
Gli elementi di elaborazione semplici e altamente interconnessi sono i neuroni, definiti anche nodi o unità della rete neurale. I neuroni vengono solitamente dislocati in livelli, che possono essere di tre tipi:
1) Livello di Ingresso (Input Layer): livello progettato per ricevere le informazioni provenienti dall’esterno al fine di imparare riconoscere e processare le stesse informazioni ricevute.
2) Livello Nascosto (Hidden Layer): collegano il livello di ingresso con quello di uscita e aiutano la rete neurale ad imparare le relazioni complesse analizzate dai dati. Spesso i livelli nascosti sono più di uno.
3) Livello di Uscita (Output Layer): livello finale che mostra il risultato di quanto il programma è riuscito a imparare.

Ogni livello è formato da centinaia, se non migliaia di neuroni artificiali (sono i pallini nell’immagine sopra) che si interconnettono tra i vari livelli (attraverso le frecce).
La maggior parte delle reti neurali sono completamente connesse, cioè ogni neurone appartenente al livello nascosto risulta connesso con ogni neurone del livello di uscita.
Ad ogni connessione tra neuroni è associato un peso che determina l’importanza del valore di input. I pesi iniziali sono impostati casualmente. Ogni neurone, invece, ha una funzione di attivazione che risulta difficile da capire senza ragionamenti matematici.
In poche parole, questa funzione permette di definire un output per un neurone dato una serie di dati di input da esso analizzati.
Una volta che una serie di dati di ingresso ha attraversato tutti gli strati della rete neurale, restituisce i dati di output attraverso il livello di uscita.
Ci sono molte varianti delle reti neurali e negli ultimi anni le ricerche nelle scienze computazionali sono aumentate esponenzialmente.
L’esempio più semplice di rete neurale consiste nella Rete FeedForward. In questa rete, il flusso delle informazioni è monodirezionale: quando si impara (attraverso l’addestramento) o quando si opera in condizioni normali (dopo essere stati addestrati) le informazioni schematizzate sono alimentate nella rete dal livello di input. Successivamente sono “sparate” nei livelli nascosti e infine arrivano al livello di uscita.
Ogni livello nascosto riceve i neuroni dalla sua sinistra, e gli input sono moltiplicati per il peso delle connessioni che percorrono.
Ogni livello somma tutti gli input ricevuti in questo modo e se la somma è superiore a un certo valore di soglia, il livello “spara” e attiva il livello connesso alla sua destra.
Come impara una rete neurale artificiale
La parte complessa di una rete neurale è il suo apprendimento. L’apprendimento di una rete neurale avviene quando c’è un qualche tipo di feedback, ossia una risposta che permette di verificare se si appreso quello che si sta imparando.
In realtà tutti noi utilizziamo nella vita reale un feedback, per vedere se abbiamo imparato qualcosa. Immagina la prima volta che hai giocato a biliardo (o un altro gioco che poi hai praticato). Molto probabilmente ti sei sentito impacciato siccome eri insicuro e non sapevi come tenere la stecca in mano.
Quindi per imparare hai osservato prima gli altri e poi hai provato a tirare. Al tuo turno, mentre ti concentri nel tiro, il tuo cervello guarda il movimento della stecca che colpisce la palla e la traiettoria che compie, e nota se riesce a colpire la palla da mettere in buca.

Nei turni successivi, dopo che hai preso un po’ la mano, ti concentrerai su cosa hai sbagliato il turno precedente, e proverai a modificare i tuoi movimenti, sperando di colpire la palla ancora meglio.
Stai in questo caso comparando la mossa eseguita con il risultato che speravi di raggiungere (mettere la palla colorata in buca).
Una volta scoperta la differenza tra i due risultati, cercherai di modificare le tue mosse, evitando gli errori già compiuti.
Questo processo ti permette di comprendere e cambiare quello che farai al prossimo turno (“devo colpire la palla più angolata”, “devo dare maggiore potenza”, “devo prima calcolare la giusta traiettoria”, “devo studiare i possibili casi per scegliere la palla più semplice da mettere in buca”, e così via). Maggiore è la differenza tra il risultato ottenuto e quello sperato, e più radicale dovrà essere la modifica delle tue mosse.
Le reti neurali sono programmate per imparare allo stesso modo: utilizzano un algoritmo chiamato Backpropagation.
Esso prevede di confrontare il risultato ottenuto da una rete con l’output che si vuole in realtà ottenere: usando la differenza tra i due risultati prevede di modificare i pesi delle connessioni tra i livelli della rete partendo dal livello output.
Dopodiché procedendo a ritroso prevede di modificare i pesi dei livelli nascosti e infine quelli dei livelli di input. Per fare ciò sviluppa una funzione di costo appropriata al problema che si vuole risolvere.
Cosa si intende per Deep Learning
Si è iniziato a parlare di un approccio profondo “Deep” solamente nel 2006 quando Geoffrey Hinton (pioniere del campo delle reti neurali artificiali e il coautore del libro che spiega il funzionamento dell’algoritmo del backpropagation) e i suoi colleghi si sono imbattuti a descrivere la creazione di una rete neurale con molti più livelli di quanto precedentemente era solito.
Successivamente nel 2009 fu sviluppata una prima reale applicazione di successo (il riconoscimento vocale) di questo nuovo trend che fu intitolato “Deep Learning”.
Il Deep Learning può essere definito una rete neurale artificiale che è composta da almeno 2 livelli nascosti. In realtà le applicazioni di Deep Learning contengono molti più livelli (ad esempio 10 o 20 livelli nascosti).

Lo sviluppo del Deep Learning in questo periodo è certamente dipeso da:
- Aumento esponenziale dei dati (big data): maggiore è il quantitativo di dati che può analizzare il software maggiore è il livello di apprendimento e quindi di avere prestazioni maggiori rispetto ad algoritmi più datati.

- Aumento delle performance dei computer che ha migliorato i risultati ottenibili e ridotto notevolmente i tempi di calcolo.
Mostro ora un video che spiega brevemente cos’è il Deep Learning:
Applicazioni più diffuse di Deep Learning
Il Deep Learning si sta espandendo molto negli ultimi anni. Le principali applicazioni che sono state sviluppate recentemente sono le seguenti:
1) Macchine Automatiche di traduzione: Questa è un’attività in cui parole e frasi in una lingua vengono tradotte automaticamente in un’altra lingua. Sebbene le traduzioni automatiche ci siano già da un po’ di tempo, algoritmi di Deep Learning migliorano l’apprendimento delle relazioni tra più parole e la loro mappatura in una nuova lingua.
Un esempio è quello di Google Neural Machine Translation che si pone l’obiettivo di colmare il divario con le traduzioni degli esseri umani del 55-85%.
2) Colorazione automatica di immagini in bianco e nero: Gli algoritmi di Deep Learning possono capire il contesto delle immagini in bianco e nero e iniziare a inserire il colore dove necessario.
Sfruttando l’architettura della rete neurale, il software AI può attraversare un elevato numero di immagini su un database (es. Imagenet) per trovare il tono giusto per adattarsi a qualsiasi immagine. Questo approccio potrebbe essere utilizzato per colorare fotogrammi fissi di film in bianco e nero, filmati di sorveglianza o qualsiasi numero di immagini.
3) Aggiunta di suoni ai video muti: altro modello di Deep Learning che associa i fotogrammi video a un database di suoni pre-registrati per selezionare un suono da riprodurre che corrisponda al meglio a ciò che accade nella scena del video. Puoi vedere un esempio qua.
4) Classificazione di oggetti: sono stati sviluppati algoritmi in grado di classificare gli oggetti di una fotografia come uno di un insieme di oggetti precedentemente noti.
Una variante più complessa di questa attività chiamata rilevamento oggetti comporta l’identificazione specifica di uno o più oggetti all’interno della fotografia e il disegno di un riquadro attorno ad essi. Ecco un esempio di immagine ricavata dal blog di Google:

5) Generazione automatica della scrittura a mano: in questo caso, dopo avere fornito un insieme di esempi di scrittura a mano la rete neurale genera nuova grafia per una determinata parola o frase. Da questi esempi si apprende la relazione tra il movimento della penna e le lettere permettendo di generare nuove grafie ad hoc.
6) Generazione automatica di didascalie di immagini: Nel 2014 ci fu un’esplosione di algoritmi di deep learning che ottennero risultati molto interessanti su questo problema, sfruttando il lavoro dei migliori modelli per la classificazione e il rilevamento degli oggetti nelle fotografie.
Una volta che è possibile rilevare e generare etichette per tali oggetti nelle fotografie, è possibile utilizzarle per creare una didascalia dell’immagine. Queste tecniche sono state poi introdotte anche nei video.
7) Generazione di linguaggio naturale: applicazione che produce voce umana da una macchina. Un esempio è Wavenet che è in grado di generare un discorso che imita qualsiasi voce umana e che suona più naturale dei migliori sistemi di sintesi vocale esistenti, riducendo il divario con le prestazioni umane di oltre il 50%.
8) Lettura delle labbra: altra applicazione sviluppata recentemente che permette di comprendere le parole leggendo i movimenti delle labbra.
In questo video puoi vedere come l’università di Washington ha creato un software per copiare i movimenti delle labbra dell’ex presidente americano Obama: i risultati sono sorprendenti.
Al di là delle applicazioni sviluppate, che ce ne saranno sicuramente altre, mi interessa sottolineare che i risultati ottenuti oggi con algoritmi di Deep Learning sono indubbiamente straordinari: tra non molto è probabile che le utilizzeremo tutti quanti quotidianamente e soprattutto si creeranno nuovi business e trend di mercato relativi allo sviluppo di codeste applicazioni.
Per maggiori informazioni sulle reti neurali e Deep Learning puoi vedere i seguenti link:
- Guida veloce alle reti neurali per chiunque
- Cosa sono le reti neurali (italiano)
- Reti neurali una breve definizione
- Perchè oggi devi imparare qualcosa sull’apprendimento profondo (italiano)
- Applicazioni di DL
Mi auguro l’articolo ti sia piaciuto. Se hai qualche domanda, ti invito a chiedere sotto nei commenti.