Nell’articolo precedente, Deep learning: introduzione, abbiamo visto come le tecniche di machine learning vengono utilizzate nelle nostre attività quotidiane. Nell’esempio del riconoscimento della parala chiave, abbiamo descritto un set di dati composto da frammenti audio ed etichette binarie e abbiamo dato un’idea di come potremmo addestrare un modello per approssimare una mappatura dai frammenti alle classificazioni. Questo tipo di problema, in cui si cerca di prevedere un’etichetta sconosciuta designata sulla base di input noti, dati da un insieme di esempi per i quali le etichette sono note, è chiamato apprendimento supervisionato. Questo è solo uno dei tanti tipi di problemi di apprendimento automatico.
Quali sono, allora, i concetti base che stanno alla base di tutte le tecniche di machine learning indipendentemente dal tipo di problema che affrontiamo? Ecco i quattro pilastri su cui si basa tutto ciò che vedremo in questa serie di articoli:
• I dati da cui possiamo imparare
• Un modello di trasformazione dei dati
• Una funzione obiettivo che quantifica quanto bene (o male) sta facendo il modello
• Un algoritmo che regola i parametri del modello per ottimizzare una funzione obiettivo
I dati
È superfluo dire che non si può fare scienza dei dati senza dati. In generale, in questo ambito, ci occupiamo di gestire una collezione di esempi. Per poter lavorare con questi esempi in modo utile ed efficienti, è necessario trovare una rappresentazione adeguata, di solito numerica. Ogni esempio (chiamato anche istanza di dati, campione) consiste tipicamente in un insieme di attributi chiamati caratteristiche (chiamate anche covariate o input), in base alle quali il modello deve fare le sue previsioni. Nei problemi di apprendimento supervisionato, l’obiettivo è prevedere il valore di un attributo speciale, chiamato etichetta (o target), che non fa parte degli input del modello.
Se stiamo lavorando con dati di immagini, ogni esempio potrebbe essere costituito da una singola fotografia (le caratteristiche) e da un numero che indica la categoria a cui la fotografia appartiene (l’etichetta). La fotografia verrebbe rappresentata numericamente come tre griglie di valori numerici che rappresentano la luminosità della luce rossa, verde e blu in ogni posizione dei pixel. Ad esempio, una fotografia 100 X 100 pixel a colori consisterebbe in 100 X 100 X 3= 30000 valori numerici.
In alternativa, potremmo lavorare con i dati delle cartelle cliniche elettroniche e affrontare il compito di prevedere la probabilità che un determinato paziente sopravviva nei 30 giorni successivi. In questo caso, le nostre caratteristiche potrebbero consistere in una collezione di attributi prontamente disponibili e di misure registrate frequentemente, come ad esempio l’età, i segni vitali, le comorbidità, i farmaci attuali e le procedure recenti. L’etichetta disponibile per l’addestramento sarebbe un valore binario che indica se ogni paziente nei dati storici è sopravvissuto entro la finestra di 30 giorni.
In questi casi, quando ogni esempio è caratterizzato dallo stesso numero di caratteristiche, diciamo che gli input sono vettori a lunghezza fissa e chiamiamo la lunghezza dei vettori la dimensionalità dei dati. Come si può immaginare, gli input a lunghezza fissa possono essere molto comodi, in quanto semplificano il problema. Tuttavia, non tutti i dati possono essere facilmente rappresentati come vettori di lunghezza fissa. Ad esempio, mentre ci aspettiamo che le immagini cliniche prodotte da un laboratorio arrivino da un preciso microscopio con una risoluzione ben specifica, non possiamo aspettarci che le immagini estratte da Internet abbiano tutte la stessa risoluzione o forma. Per le immagini, potremmo pensare di ritagliarle in base a una dimensione standard, ma questa strategia ci porterà a perdere sicuramente delle informazioni rilevanti. I dati testuali sono un capitolo a parte. Questi non possono essere minimamente rappresentati da vettori a lunghezza fissa. Basti pensare alle recensioni dei clienti lasciate su siti di e-commerce come Amazon, IMDb e TripAdvisor. Alcune sono brevi e magari poco informative, altre sono lunghissime e prolisse. Uno dei principali vantaggi del deep learning rispetto ai metodi tradizionali è la grazia comparativa con cui i modelli moderni possono gestire dati di lunghezza variabile.
In generale, più dati abbiamo a disposizione, più facile diventa il nostro lavoro. Quando abbiamo più dati, possiamo addestrare modelli più potenti e fare meno affidamento su ipotesi preconcette.
Infine, non basta avere molti dati ed elaborarli in modo intelligente. Occorre avere i dati giusti. Se i dati sono pieni di errori o se le caratteristiche scelte non sono predittive della grandezza di interesse, l’apprendimento è destinato a fallire. La situazione è ben rappresentata dal cliché: garbage in, garbage out. Inoltre, le scarse prestazioni predittive non sono l’unica conseguenza potenziale. Nelle applicazioni sensibili dell’apprendimento automatico, come la polizia predittiva, lo screening dei curriculum e i modelli di rischio utilizzati per i prestiti e le assicurazioni, dobbiamo essere particolarmente attenti alle conseguenze dei dati spazzatura. Un errore predittivo comunemente riscontrato riguarda i datasets in cui alcuni gruppi di persone non sono rappresentati nei dati di addestramento. Immaginate di applicare un sistema di riconoscimento del cancro della pelle che non ha mai visto la pelle nera. Il sistema potrebbe sbagliare su questa sottocategoria di soggetti.
Gli errori predittivi possono verificarsi anche quando i dati sono molto orientati a rappresentare una determinata realtà. Per esempio, se le decisioni di assunzione vengono utilizzate per addestrare un modello predittivo che sarà usato per vagliare i curriculum, i modelli di apprendimento automatico potrebbero inavvertitamente catturare e automatizzare delle assunzioni errate basate su preconcetti. Si noti che tutto ciò può accadere senza che lo l’analista dei dati sia consapevole.
I modelli
Per modello intendiamo una macchina computazionale che ingerisce dati di un certo tipo e fornisce previsioni in un determinato formato. Ad esempio, potremmo voler costruire un sistema che acquisisce foto e predice la presenza di persone. Diversamente, potremmo voler acquisire una serie di letture da sensori ambientali e identificare la presenza di anomalie nelle letture.
Esistono diversi modelli. Ad esempio, i modelli semplici, come quelli statistici, sono perfettamente in grado di affrontare problemi adeguatamente semplici, Diversamente, gli approcci di deep learning consistono in molte trasformazioni successive dei dati che vengono concatenate dall’alto verso il basso.
Funzioni obiettivo
In precedenza, abbiamo introdotto l’apprendimento automatico come apprendimento dall’esperienza. Per apprendimento si intende il miglioramento di un compito. Ma come facciamo ad affermare che vi è stato un miglioramento? Ovviamente la quantificazione del miglioramento e delle prestazioni del nostro modello non può essere soggettiva. Per questo motivo, abbiamo bisogno di misure formali di quanto siano buoni (o cattivi) i nostri modelli. Nell’apprendimento automatico, e più in generale nell’ottimizzazione, chiamiamo queste misure funzioni obiettivo. Per convenzione, di solito definiamo le funzioni obiettivo in modo che più basso è il valore ritornato meglio è. Questa è solo una convenzione e poiché scegliamo che il valore più basso sia migliore, queste funzioni sono talvolta chiamate funzioni di perdita.
Quando si cerca di prevedere valori numerici, la funzione di perdita più comune è l’errore quadratico, cioè il quadrato della differenza tra la previsione e il valore corretto. Per la classificazione, l’obiettivo più comune è quello di minimizzare il tasso di errore, cioè la frazione di esempi in cui le nostre previsioni sono in disaccordo con la verità. Alcuni obiettivi (ad esempio, l’errore quadratico) sono facili da ottimizzare, mentre altri (ad esempio, il tasso di errore) sono difficili da ottimizzare direttamente, a causa della non differenziabilità o di altre complicazioni. In questi casi, è comune ottimizzare un obiettivo surrogato.
Durante l’ottimizzazione, consideriamo la perdita come una funzione dei parametri del modello e trattiamo il set di dati di addestramento come una costante. Impariamo i valori migliori dei parametri del nostro modello minimizzando la perdita subita su un insieme costituito da un certo numero di esempi raccolti per l’addestramento. Tuttavia, un buon risultato sui dati di addestramento non garantisce un buon risultato sui dati non visti. Per questo motivo, in genere si desidera dividere i dati disponibili in due partizioni: il set di dati di addestramento (o training set), per l’apprendimento dei parametri del modello, e il set di dati di prova (o test set), che viene utilizzato per la valutazione. Anche se i risultati ottenuti sono incoraggianti, ciò non garantisce un successo sui dati non visti. Quando un modello si comporta bene sul set di allenamento ma non riesce a generalizzarsi ai dati non visti, si dice che si sta adattando troppo ai dati di allenamento.
Algoritmi di ottimizzazione
Una volta ottenuta una sorgente dati, una loro rappresentazione opportuna, un modello e una funzione obiettivo ben definita, occorre un algoritmo in grado di cercare i migliori parametri possibili per minimizzare la funzione di perdita. Gli algoritmi di ottimizzazione più diffusi per il deep learning si basano su un approccio chiamato discesa del gradiente. In breve, a ogni passo questo metodo verifica, per ogni parametro, come cambierebbe la perdita sul set di addestramento al variare di quel parametro. Quindi aggiorna il parametro nella direzione che riduce la perdita.