07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 217
Introduzione al machine learning
7
Concetti chiave • Definizione del paradigma machine learning e in che cosa differisce dai paradigmi di programmazione tradizionale • Predizioni, classificazioni, riconoscimenti, generazioni e decisioni con il machine learning • Tassonomia delle tecniche di machine learning: supervised, unsupervised, semi-supervised, transfer e reinforcement learning • Che cos’è il deep learning e in che cosa consistono le “feature” • Che cosa è una rete neurale e il suo componente costitutivo fondamentale: il perceptron • Come si addestra una rete neurale • Le principali architetture di deep learning
7.1 Introduzione Anche se l’umanità ha conosciuto probabilmente solo due grandi rivoluzioni, l’agricoltura e la rivoluzione industriale, non si esagera se si afferma che il Machine Learning (ML) e in generale l’intelligenza artificiale (Artificial Intelligence, AI) è una rivoluzione nell’ambito delle scienze informatiche. Come mostreremo, il nuovo paradigma del ML non solo si aggiunge alla programmazione come la conosciamo, ma la affianca ed è possibile che, in futuro, la sostituisca. Per capire come questo possa avvenire consideriamo la Figura 7.1. Nella programmazione tradizionale, a sinistra nella figura, un programmatore scrive un algoritmo, cioè una funzione, f, che trasforma un ingresso, a, in una uscita, b, eventualmente facendo riferimento a una qualche forma di struttura dati, DB.
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 218
218 / Capitolo 7
Figura 7.1 Confronto tra programmazione tradizionale e machine learning. a a
f
b
M
fθ b
DB
Dataset
Modelli
Dataset
La funzione f è, dunque, scritta da un essere umano che mette insieme le istruzioni di un qualche linguaggio di programmazione (Python, C o altro) per trasformare a in b. Viceversa, nell’approccio ML, a destra nella figura, a partire da un Dataseti, il programmatore sceglie un modello di computazione M per produrre automaticamente una funzione f che trasforma a in b.1 Il programmatore non scrive più la funzione (algoritmo) usando direttamente le istruzioni di un linguaggio di programmazione, ma la fa calcolare a un altro algoritmo, M, che “impara” dai dati contenuti nel Dataset. L’algoritmo M è detto, nel gergo del ML, modello. Un modello può essere una rete neurale convoluzionale che impara da un dataset di immagini a riconoscere se in un’immagine è presente un “gatto”. In linea di principio il programmatore può scriversi il modello M, cioè lo può creare/programmare istruzione per istruzione, ma più di frequente il programmatore invocherà una o più funzioni/servizi da una libreria scritta da altri, come TensorFlow, una piattaforma open source per l’apprendimento automatico. La rivoluzione è tutta qui: il programmatore non scrive più funzioni ma le fa calcolare a partire da un insieme di dati! Si capisce, però, che questa rivoluzione è molto grande perché, in linea di principio, e sta già avvenendo, con questo approccio non si trovano solo “gatti” in un’immagine ma si possono ricalcolare le funzioni matematiche, gli esponenziali e i logaritmi e persino generare nuovi modelli a partire da vecchi modelli. È dunque vero che, potenzialmente, con l’AI si possono costruire robot in grado di produrre altri robot autonomamente.
7.2 Tipiche funzioni calcolate con il ML In linea di principio, con il ML si può calcolare qualsiasi funzione; per fare un esempio, si è calcolata la funzione di moto delle proteine che mostra come ca-
Si noti l’uso del pedice nella denominazione della funzione, f. Questo pedice sta a indicare che la funzione è approssimata attraverso la valorizzazione e, come vedremo, l’ottimizzazione di un insieme di parametri .
1
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 219
Introduzione al machine learning / 219
tene di aminoacidi si possano spazialmente strutturare dato un certo ambiente, funzione questa importantissima per trovare nuove medicine o enzimi che possano eliminare il CO2 dall’atmosfera. Alcune tipiche funzioni calcolate sono le seguenti. •
•
•
•
•
Predizione, cioè funzioni che stimano il valore futuro di una certa variabile. Si può predire il consumo d’acqua giornaliero di una famiglia dati i consumi di quella famiglia negli ultimi tre anni. Classificazione, per esempio si può calcolare una funzione che, data un’immagine, la classifica come contenente una faccia umana. I dataset per questo tipo di classificazione sono immagini che contengono facce. Riconoscimento; spingendo agli estremi il concetto di classificazione si possono effettuare riconoscimenti individuali. Si può stabilire che una certa faccia è di Andrea o Alessandro. Anche per il riconoscimento occorrono dataset coerenti a quanto si vuol riconoscere, per esempio facce generiche e versioni della faccia individuale. Generazione, per la creazione di immagini, video o, più in generale, entità. Si possono generare facce inesistenti ma che sembrano vere, video i cui protagonisti sono “taroccati” o semplicemente sequenze di dati relativi a condizioni atmosferiche che non si sono mai presentate in realtà ma potrebbero esserlo. I dataset per la generazione, di solito, partono da campioni (piuttosto numerosi) dell’entità che si vuole generare. Decisione, cioè si possono calcolare funzioni che ci dicono in ogni momento qual è la miglior decisione da prendere. Si può stabilire che cosa debba fare un’auto quando si trova di fronte a un ostacolo imprevisto quale un ciclista. Anche in questo caso i dataset per calcolare queste funzioni devono contenere un’ampia casistica di come, per esempio, una vettura può schivare un ostacolo.
Naturalmente, per ogni tipo di funzione calcolata, oltre al corrispondente dataset, occorrerà anche un opportuno modello che sappia costruire la funzione a partire dai dati del dataset, come nei seguenti esempi. • •
• •
Per la predizione a partire da sequenze di dati temporali si potrà usare una rete neurale di tipo LSTM (Long-Short Term Memory). Per la classificazione si potrà usare un classificatore Bayesiano, per stabilire il genere di un libro, o una rete neuronale convoluzionale (Convolutional Neural Network, CNN), per stabilire in quali “frame” di un video c’è una pistola. Per la generazione si userà una StyleGAN per trasformare un “selfie” in un ritratto di Leonardo da Vinci. Per la decisione si userà una tecnica di Deep Reinforcement Learning, di cui parleremo più avanti, per vincere a un videogioco con capacità “super human”.
Modelli e dataset vanno di pari passo. Ogni modello vuole il suo tipo di dataset e ogni dataset ha il modello che lo sa sfruttare meglio. Questa è un’altra caratteristica distintiva del ML: dataset e modelli contano moltissimo.
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 220
220 / Capitolo 7
7.3 Tipi di machine learning
Tecniche di ML
Il programmatore, tra modelli e tipi di dataset, ha a disposizione molte tecniche di ML. Il numero di modelli a disposizione è elevato, dell’ordine delle migliaia, anche se i dataset, spesso, non sono un fattore di scelta ma piuttosto un vincolo. Non sempre, infatti, i dati sono disponibili, oppure sono disponibili in numero adeguato o sono lacunosi e, per qualche aspetto, difettosi. Il programmatore di ML si trova nella non facile condizione di dover disporre, da una parte, di una solida competenza teorica dei modelli, in quanto scegliere il modello sbagliato significa non estrarre nulla dai dati, e dall’altra deve avere una significativa esperienza pratica per valutare la qualità dei dati a disposizione e, se possibile, porre rimedio alle mancanze. Il programmatore di ML deve possedere sia la teoria sia la pratica. Solo con la teoria o solo con la pratica il fallimento è quasi certo. È allora prezioso qualsiasi criterio di classificazione delle tecniche di ML, perché, attraverso questi criteri, il programmatore può scegliere e, se non altro, formarsi degli schemi mentali per scegliere. Una classificazione classica dei tipi di tecniche di ML distingue tra: • • • • •
supervised learning; unsupervised learning; semi-supervised learning; transfer learning; reinforcement learning.
Passiamoli brevemente in rassegna.
7.3.1 Supervised learning
Label
Questo è il metodo più semplice di istruire una “macchina”. Ogni dato del dataset contiene tutti i dati di ingresso e anche il dato di uscita che si dovrebbe ottenere (target). Per esempio, in ingresso si mettono immagini e come uscita si precisa se l’immagine contiene un cane o un gatto. Questo dataset serve per creare una classica funzione di classificazione che, data un’immagine che non appartiene al dataset, cioè che non è mai stata usata per istruire la “macchina”, risponde come uscita “gatto” o “cane” a seconda di quello che si trova nell’immagine (Figura 7.2). Un problema analogo potrebbe essere quello di stabilire l’età di una persona dalla sua faccia. Questo problema è detto di regressione. Nella classificazione le uscite sono valori discreti, come “cane” e “gatto”, mentre nella regressione le uscite sono valori continui, come l’età (Figura 7.3). Il supervised learning richiede che per ogni dato del dataset si indichino i valori dell’ingresso e il corrispondente risultato in uscita. Si chiede, allora, al modello di imparare da questi “esempi” per creare una funzione in grado di risolvere anche i casi nuovi, cioè non previsti dal dataset. Il valore di uscita corrispondente ai valori di ingresso di ogni dato del dataset è detto label. Di solito questa label è inserita attraverso un qualche processo manuale. Potremmo avere in un dataset radiografie polmonari e come label la diagnosi (bronchite, polmonite, pleurite o
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 221
Introduzione al machine learning / 221
Figura 7.2 Un classico classificatore con supervised learning. Cane
Gatto ?
“Cane”
Cane
Gatto
esito negativo) effettuata da un medico. La necessità di un intervento umano rende la costruzione di dataset per il supervised learning più costosa in termini temporali ed economici.
7.3.2 Unsupervised learning Nell’unsupervised learning i dati del dataset hanno soltanto i dati di input e non hanno bisogno di label. Il corrispondente modello penserà da solo a trovare una qualche forma di struttura nei dati e a costruire delle categorie (Figura 7.4). Un tipico esempio di modello che si basa sull’unsupervised learning è il clustering. Il clustering è una tecnica che, come dice lo stesso nome, individua dei gruppi denominati cluster a partire da dati non etichettati. La tecnica di clustering può servire per identificare gruppi di persone che abitano vicine in una certa area. Infatti uno dei modi per individuare un cluster è stabilire una distanza tra i dati e raggruppare quelli che si trovano più vicini tra loro. Un dataset per l’unsupervised learning non richiede etichettatura umana, quindi è meno costoso del dataset per il supervised learning. Occorre notare che le tecniche di unsupervised learning sono usate anche per l’estrazione di feature, cioè di pattern distintivi e ricorrenti, in dati non strutturati, o meglio con una struttura piuttosto lasca come le immagini. L’unsupervised learning viene usato anche in alcuni sistemi generativi come gli AutoEncoder, descritti in dettaglio nel Capitolo 11. Per esempio, in input si mettono delle immagini e si vede se in output la rete è stata in grado di riprodurre quell’input. Una volta acquisita la capacità di riprodurre le immagini in input, la
Cluster
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 222
222 / Capitolo 7
Figura 7.3 Regressione con supervised learning. 89 anni
18 anni ?
32 anni
58 anni
Figura 7.4 Unsupervised learning.
35 anni
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 223
Introduzione al machine learning / 223
rete impara e, in teoria, è pronta a generare altre immagini di quel tipo anche se non fanno parte del dataset usato per l’addestramento. Si capisce come le tecniche di unsupervised learning, in cui un’entità è confrontata con sé stessa, eliminano la necessità di label rendendo molto più facile la costruzione di dataset.
7.3.3 Semi-supervised learning Il semi-supervised learning è una tecnica mista in cui in un dataset si inseriscono dati con etichetta e senza etichetta. I dati senza etichetta servono per estrarre feature o per creare dei cluster, mentre i dati con etichette servono per classificare. La tecnica del semi-supervised learning è di fatto la più usata soprattutto nelle tecniche di ML note come deep learning. In senso più generale, può essere definito semi-supervised learning ciò che non è propriamente supervised learning o unsupervised learning, ma che gli assomiglia. Questo concetto sarà esemplificato nelle reti generative di tipo GAN (Capitolo 11).
7.3.4 Transfer learning Il transfer learning è una tecnica di ML molto interessante che risolve brillantemente il problema della cronica mancanza di dati necessari a formare un dataset di qualità. Il principio generale di funzionamento è piuttosto intuitivo. Se voglio addestrare un modello, per esempio una CNN, per riconoscere camion e ho solo poche immagini di camion a disposizione, mentre ho numerose immagini di auto, potrei prima istruire la mia CNN con le auto e poi, solo alla fine, inserire le poche immagini di camion per scoprire che così facendo si è ottenuto un ottimo riconoscitore di camion! Questo trasferimento di conoscenza è possibile perché il modello, come una CNN, impara dal dataset delle auto una serie di caratteristiche dette feature, quali colori, linee, rotondità, spigoli, ombreggiature ecc., che sono un’ottima approssimazione anche per identificare i camion. Queste feature, in realtà, corrispondono alla valorizzazione dei parametri della rete. La tecnica del transfer learning è stata usata per pre-addestrare modelli su centinaia di miliardi di parole (in questo caso si possono valorizzare anche miliardi di parametri). Questi modelli si possono raffinare con un ulteriore passo di addestramento anche disponendo di un dataset limitato. In questo modo si possono realizzare riconoscitori di linguaggio naturale in qualunque lingua con poco sforzo.
Addestramento
7.3.5 Reinforcement learning La tecnica di Reinforcement Learning (RL) è diversa da tutte le precedenti ed è tra le più avanzate in ambito AI perché consente di prendere una decisione in ogni circostanza, anche la più difficile. Il RL presuppone l’esistenza di un agente che si muove in un ambiente in cui deve decidere che azioni fare in ogni momento. La migliore azione da intraprendere è nel RL quella che dà maggiore guadagno (reward), anche se a priori l’agente non sa dove sta il massimo guadagno e deve imparare dall’esperienza in
Reward
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 224
224 / Capitolo 7
che direzione muoversi. A differenza delle altre tecniche di ML, il RL non parte da un dataset fisso, etichettato o non etichettato, ma si costruisce dinamicamente il dataset dei tentativi che ha fatto e dei risultati che ha ottenuto o che non ha ottenuto. In pratica, a forza di tentare, sbagliare e ritentare, il RL trova la migliore strada possibile per un agente. Se l’agente è nel mezzo di un labirinto con trappole, il RL lo farà uscire dopo un congruo numero di tentativi. Le tecniche di RL sono state usate con successo nei giochi al computer dove l’agente interpreta il ruolo di giocatore e vince con capacità super human, cioè non esiste giocatore umano più capace di un agente RL. Il RL usa una vasta gamma di tecniche probabilistiche e di ML per affrontare i casi più difficili in cui un agente si muove in un ambiente di cui conosce, inizialmente, poco o nulla, per esempio l’agente potrebbe non conoscere gli stati che l’ambiente attraversa. Uno dei campi di maggior interesse e in cui si sono ottenuti risultati concreti straordinari è il Deep Reinforcement Learning (DRL), dove il RL fa uso in modo piuttosto originale delle classiche tecniche di deep learning.
7.3.6 Deep learning I principali avanzamenti dell’informatica (veicoli a guida autonoma, nuovi farmaci e sistemi di medicina diagnostica, arte generata al computer) sono dovuti alle tecniche di Deep Learning (DL). Il DL è un sottoinsieme del ML che calcola una funzione attraverso reti neurali, le quali sono configurate attraverso la scoperta di gerarchie di feature nel dataset (Figura 7.5). Che cosa si intende per feature e, soprattutto, che cos'è una rete neurale?
7.4 Feature
Pattern
Un concetto fondamentale del DL, che di fatto ha resuscitato l’AI dopo un lungo “inverno”,2 è quello di feature. Come già anticipato, per feature si intende un qualsiasi schema (pattern) riconoscibile all’interno di un insieme di dati, come un’immagine. In generale, qualsiasi tipo di segnale (un segnale radio, un suono, un video) ha una parte di informazione e una di rumore (di vari tipi di rumore) che offusca il contenuto informativo. Una feature, allora, può essere interpretata come un frammento di informazione contenuto in un insieme di dati più grande. Il DL ha esteso i primi algoritmi di ML basati su reti neurali semplici introducendo architetture più complesse in cui la scoperta delle feature in un dataset è usata per calcolare una funzione di classificazione o riconoscimento o predizione o altro.
2
L’AI ha attraversato numerosi e lunghi “AI winter”. Per esempio, dal 1995 (circa) fino al 2015 l’AI era considerata poco più di una elucubrazione per accademici, e anche in ambito accademico le ricerche di AI erano poco considerate. Dal 2015 in poi, invece, il “disgelo” è stato potente, e ora la situazione si è ribaltata. Ciò che non tratta di AI è considerato a tutti i livelli – accademico e industriale – poco più che marginale.
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 225
Introduzione al machine learning / 225
©fizkes/Shutterstock
Figura 7.5 Deep learning.
Output layer
©all_is_magic/Shutterstock
Input layer
Hidden layer 1
Hidden layer 2
Hidden layer 3
Se si usano tecniche di ML per stabilire se in un’immagine ci sia la rappresentazione di un gatto, il DL cerca di estrarre dall’immagine tutte le feature possibili, tutti gli elementi utili di informazione, inclusi quelli del gatto (gli orecchi a punta, il nasino, gli occhi ecc.). In questa operazione di estrazione delle feature, tuttavia, il programmatore ha poco controllo (se non nessuno). A priori usando un algoritmo di DL non possiamo sapere di preciso quali feature saranno estratte e quante saranno estratte. Sappiamo solo che più andiamo nel profondo (deep) più feature saranno estratte e più la funzione calcolata sarà accurata nello svolgere il suo compito.
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 226
226 / Capitolo 7
Figura 7.6 Il numero otto scritto a mano. Che cosa vede il computer
Non è semplice rendersi conto di che cosa sia una feature, prima di tutto perché noi umani percepiamo un'immagine in modo completamente diverso rispetto a un computer (Figura 7.6). Il DL esplora, dunque, feature che sono, in generale, pattern di numeri che non sempre hanno un corrispettivo intuitivo ai nostri sensi come gli occhi. Più il DL va in profondità più estrae feature sempre più sofisticate e, al nostro occhio, contro intuitive (Figura 7.7). Questa capacità di estrazione delle feature in profondità fa intuire alcune caratteristiche tipiche del DL: •
la necessità di grandi dataset (più immagini ho di gatti più ho un universo di feature di gatto!); il grande sforzo computazionale (non basterà una semplice CPU ma occorreranno GPU3); la sostanziale perdita di controllo (il programmatore non sa a priori né quali né quante siano le feature e, conseguentemente, non può agire direttamente sulle feature).
• •
Figura 7.7 Estrazione di feature per livello. Low-level features
Mid-level features
High-level features
©Chepko Danil Vitalevich/ Shutterstock
Raw data
3
Le GPU (Graphics Processing Unit) sono processori nati inizialmente per gestire la grafica nei videogiochi, successivamente sono diventate processori a elevatissime prestazioni su cui viene effettuato l’addestramento per l'utilizzo di una rete neurale. Le GPU di oggi non hanno neppure le interfacce hardware per connettersi al video!
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 227
Introduzione al machine learning / 227
Il DL, in un certo senso, prende il controllo e il programmatore, in base all’esperienza (come anticipato), valuta i risultati ottenuti e decide quanto andare in profondità. Questa perdita di controllo, rispetto alla programmazione tradizionale, è un effetto diretto del componente base di ogni architettura DL, cioè le reti neurali.
7.5 Le reti neurali Le reti neurali (Artificial Neural Network, ANN) sono algoritmi che usano strutture a rete che si ispirano ai neuroni e alle sinapsi (collegamenti tra neuroni) del cervello umano (Figura 7.8). La rete neurale è lo strumento attraverso cui viene costruita una funzione a partire da un dataset iniziale. Supponiamo di voler costruire un classificatore di immagini, cioè una funzione che in ingresso prende i pixel di un’immagine e in uscita restituisce una di due categorie – cane e gatto – per indicare che, rispettivamente, l’immagine in ingresso contiene o un cane o un gatto (Figura 7.9). Per il momento ci basti dire che: • •
•
•
il dataset iniziale di addestramento contiene un insieme di immagini di cani e gatti con label, cioè immagini già classificate; l’input layer, il primo livello di “neuroni” della rete neurale, servirà per acquisire in ingresso un’immagine pixel per pixel, così che a ogni neurone dell’input layer corrisponderà un pixel; l’output layer ha solo due nodi, uno corrispondente a “cane” e l’altro a “gatto”. La rete neurale rappresenterà correttamente la funzione di classificazione se, data un’immagine in input di un gatto, risponderà “gatto” e se, data in input l’immagine di un cane, risponderà “cane”; i layer che stanno tra l’input e l’output layer, detti hidden layer, sono costituiti da neuroni, detti perceptron, che svolgono la computazione.
Per capire come si costruisce questa funzione occorre mostrare la struttura interna di un perceptron e capire come venga opportunamente configurato attraverso il processo di learning, cioè di addestramento.
7.6 Perceptron Sono perceptron tutti i neuroni della ANN eccetto quelli dell’input layer, che hanno il solo scopo di memorizzare, come in una variabile di ingresso di una funzione, i valori di input. La struttura generale di un perceptron è rappresentata nella Figura 7.10. Un perceptron ha più ingressi, x1, x2, …, xm, e una sola uscita, ŷ. A ogni ingresso xi è associato un peso wi e un peso costante, w0, detto bias. Il perceptron
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 228
228 / Capitolo 7
Figura 7.8 Artificial Neural Network (ANN).
©Jacky Co/Shutterstock
Nucleo
Rami dendritici Dendrite Corpo cellulare
Terminale assonale
Cono d’emergenza
Telodendri Assone Guaina mielinica Neurone multipolare
Output layer
Input layer
Hidden layer Una rete neurale
non fa altro che sommare i valori pesati in ingresso, aggiungere il bias e applicare una funzione non lineare g, detta funzione di attivazione: yˆ = g(w0 + w1x1 + w2 x 2 + + wm xm ) La funzione di attivazione permette al perceptron di effettuare una computazione non lineare, quindi consente all’intera rete neurale di approssimare una funzione non lineare.4
4
Esiste un teorema denominato “teorema dell’approssimazione universale” che dimostra come con una rete di perceptron si possa calcolare qualsiasi funzione, lineare o non lineare.
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 229
Introduzione al machine learning / 229
Figura 7.9 Un classificatore cane-gatto basato su rete neurale. Label
Image
Input layer
Hidden layer 1
Hidden layer 2
Hidden layer 3
Output layer
Gatto
Cane
Tipiche funzioni di attivazione di un perceptron sono: • • •
la sigmoide; la tangente iperbolica, tanh; la ReLU o una sua variante.5
La tipica funzione di attivazione dei perceptron dell’output layer è invece, tipicamente, una funzione softmax che consente di rilasciare il risultato della funzione computata dall’intera rete. Se la rete è un classificatore che avrà come uniche uscite “cane” e “gatto”, la softmax restituirà un vettore [1,0] per indicare “cane” e [0,1] per indicare “gatto”. In generale, però, la funzione non sarà così precisa, Figura 7.10 Struttura generale di un perceptron.
1 w0 x1
m
∑
∫
5
∑x w i
i =1
w3
Weights Sum
yˆ = g w0 +
ŷ
Funzione di attivazione non lineare
xm
Inputs
Combinazione lineare degli input
w1 w2
x2
Output
Non-Linearity Output
Oggi si usano solo ReLU o una sua variante (LeakyReLU, ELU).
Bias
i
Softmax
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 230
230 / Capitolo 7
ma restituirà valori intermedi come [0.5, 0.5], “non so se è un cane o un gatto”, oppure [0, 6, 0.4], “è più cane che gatto”. Quello che occorre per avere maggiore accuratezza è addestrare la rete neurale.
7.7 Learning Scopo primario del ML è calcolare una funzione dai dati. Più nello specifico, trattando di ANN, i dati dovranno consentire di calcolare i valori dei pesi wi della rete in modo che il risultato finale sia coerente con le label del dataset di partenza (supervised learning). E come avviene questo calcolo dei pesi in una ANN? Tipicamente avviene quanto segue (Figura 7.11). • • Forward e backward propagation
•
Inizialmente i pesi wi sono definiti a caso, oppure usando qualche tecnica più sofisticata come He-et-al. Successivamente si osserva che risultati danno i pesi così calcolati (forward propagation, detta anche semplicemente forward) e si effettua una stima dell’errore confrontando i valori calcolati con quelli attesi nelle label. Se la rete è il classificatore cane-gatto e si mette in input l’immagine di un cane, ci si aspetta di ottenere come risultato [1,0]. Se, invece si ottiene un risultato diverso, come [0.6,0.4], allora si calcolerà l’errore con opportuno algoritmo (per esempio, usando la funzione di cross-entropy loss, che non interessa in questo contesto). Infine si procede al contrario (backward propagation, detta anche back-propagation) per aggiustare i pesi wi in modo da minimizzare, o possibilmente annullare, l’errore tra ciò che si calcola e ciò che ci si aspetta.
Figura 7.11 Addestramento di una ANN.
1 Forward propagation
Stima dell’errore
2 Output layer
Input layer
Hidden layer
Backward propagation 3
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 231
Introduzione al machine learning / 231
Per effettuare il riaggiustamento dei pesi in back-propagation si usa, tipicamente, la tecnica detta chain rule. In altre parole, per addestrare (learning) una ANN bisogna fare varie passate sui dati del dataset in modo da ottenere una configurazione ottimale dei pesi. Più in generale, all’atto pratico, il dataset viene diviso nei seguenti tre sottoinsiemi. • • •
Training set, l’insieme dei dati usati per configurare la “macchina”. Validation set, l’insieme dei dati necessari per la verifica che l’addestramento sia stato effettuato correttamente, senza introdurre overfitting.6 Test set, per misurare quanto la funzione addestrata e validata sia davvero accurata.
Il training set è a sua volta suddiviso in batch, cioè in sottogruppi, per motivi essenzialmente di prestazioni, e il training della ANN è svolto effettuando l’addestramento più volte passando in rassegna ogni batch.7 Ogni ciclo completo di addestramento (forward e back-propagation) di ogni batch del training set è detto epoch. Epoch è uno dei tanti hyperparameter (iper–parametro) che il programmatore di ML deve decidere (numero di layer, di nodi ecc.) per computare una funzione approssimata.
Iper-parametro
7.8 Architetture di deep learning Con una ANN da sola si riescono a calcolare funzioni molto approssimative. Se si dà in pasto a una ANN un’immagine e si pretende di classificarla, come con il classico cane-gatto, difficilmente otterremo livelli di precisione (accuracy) superiori all’85%. In altre parole, date 100 immagini di cani saranno riconosciute correttamente solo 85 volte: un livello di classificazione insufficiente per quasi tutte le applicazioni. Per ovviare a questo inconveniente sono state introdotte delle “architetture di deep learning”, cioè delle strutture più complesse rispetto a una semplice ANN che fanno uso al loro interno di una o più ANN, ma che sfruttano altre caratteristiche, come quella di estrarre le feature da un’immagine. Un tipico esempio di queste architetture sono le Convolutional Neural Network (CNN), introdotte nella forma attuale nel 1989 da Yann LeCun. Le CNN dapprima estraggono le feature di un’immagine usando la convoluzione, poi istruiscono una ANN, non con i pixel dell’immagine, ma con le feature estratte. In questo modo si ottengono livelli di precisione molto più alti, e il nostro classificatore cane-gatto può superare piuttosto agevolmente il 95% dei riconoscimenti. 6
Si ha overfitting quando la rete è “troppo” addestrata sui dati del training set: classifica bene i dati del training set ma sbaglia quando si classificano altri dati al di fuori del training set. Il validation set serve, insieme a opportuni algoritmi, a capire se la rete ha avuto un addestramento equilibrato e non eccessivo. 7 Addestrare una ANN è come spremere un’arancia con lo spremiagrumi: non basta un solo passaggio per tirar fuori tutti il succo!
Convolutional Neural Network (CNN)
07txtI.qxp_Layout 1 01/12/21 20:55 Pagina 232
232 / Capitolo 7
Le principali architetture di deep learning sono: • • •
le CNN, tipicamente per il trattamento di immagini (ma non solo); le Recurrent Neural Networks (RNN), in particolare nella versione di LSTM per la costruzione di funzioni di predizioni a partire da serie temporali di dati; le Generative Adversarial Networks (GAN) per la generazione di dati, immagini e video (DeepFakes) a partire da un dataset di dati campione.
Queste tre architetture sono molto interessanti, e verranno approfondite nei prossimi capitoli.
Verifica le conoscenze 1. Quali sono le differenze fondamentali tra programmazione tradizionale e machine learning? 2. Quali sono le tipiche funzioni svolte dalle funzioni calcolate attraverso il machine learning? 3. Quali sono le principali categorie di machine learning? 4. Che differenza c’è tra supervised e unsupervised learning? 5. In che senso il reinforcement learning è diverso da tutti gli altri tipi di machine learning? 6. Che cosa si intende per “deep learning”? 7. Che cos’è una “feature”? È possibile controllare il tipo e il numero di “feature” estratte da un modello di machine learning? 8. Che cos’è una rete neurale? 9. Quali sono le funzionalità base di un perceptron? 10. In che cosa consistono “forward” e “backward propagation” di una rete neurale? 11. Quali sono le principali architetture di “deep learning”? In che cosa consistono e quali sono le differenze?
Applica le abilità Soluzioni sul sito web www.mheducation.it
1. Immagina di costruire un programma in Python che realizzi una semplice rete neurale di tipo “multi-layer perceptron”. Quali sono le principali strutture dati e le principali funzioni che progetteresti?