Ultimamente va molto di moda parlare di intelligenza artificiale e dei suoi probabili sviluppi futuri, ma è molto meno nota la teoria su cui si basa. L’insieme di tecniche che permettono di rendere in qualche modo intelligenti i computer si chiama machine learning, o apprendimento automatico per gli italiani. L’idea fondamentale è la seguente: grazie a un insieme di conoscenze pregresse si pone l’obiettivo di fare delle previsioni accurate su eventi futuri e incerti. In altre parole si cerca una sorta di schema che permetta di prendere delle decisioni su fatti di cui non si ha piena conoscenza. Un esempio chiarirà meglio il concetto: se camminando per la strada incontrate un cane che non avete mai visto, riuscite comunque a dire con certezza che quell’animale è un cane. Questo perché il vostro cervello è stato allenato ad associare un determinato insieme di caratteristiche al concetto cane e questa cosa funziona bene anche in presenza di variazioni casuali di queste caratteristiche (non potete aver visto tutti i cani del mondo), come ad esempio la lunghezza delle orecchie, il colore del pelo e la taglia.

Ok ma come funziona questo allenamento? Per spiegarlo ci limiteremo ad una tra le tecniche più semplici del machine learning e dovremo utilizzare un po’ di matematica (non troppa, tranquilli).

Binary Classification

Quello che sto per spiegare è un modello molto semplificato di quello utilizzato nella realtà da moltissime aziende, tra cui quelle che offrono contenuti online e vogliono proporre cose nuove basate sui gusti degli utenti, come Spotify, Netflix, Amazon, etc. Ipotizziamo di voler allenare il modello che gira sui server di Netflix e che ci suggerisce i prossimi film da vedere in base ai nostri gusti. Innanzitutto è necessario definire un dominio X i cui elementi sono vettori m-dimensionali. Ogni vettore rappresenta un film e ognuna delle componenti del vettore identifica una caratteristica del film: durata, genere, quantità delle scene d’azione, quantità delle scene romantiche, etc. Ora ci serve un codominio Y, chiamato label set, i cui valori possono essere soltanto {-1,+1}. Quando guardiamo un film stiamo dicendo a Netflix che quel film in qualche modo ci piace, quindi questa preziosa informazione viene salvata andando a creare quello che viene definito training set S: coppie di elementi di X e Y. Ad esempio, dopo aver visto il film Guardiani della Galassia, la coppia corrispondente sarà (x,+1) se il film ci è piaciuto oppure (x,-1) se non ci è piaciuto, con x vettore m-dimensionale con le caratteristiche specifiche del film in questione. Dopo aver visto n film, il training set sarà composto quindi di n coppie: a Netflix serve un modo per sfruttare questa conoscenza e predire il futuro consigliandoci i prossimi film da vedere.

Tutto quello che ci serve è una funzione h, chiamata classificatore, tale che h: X→Y, cioè quando h riceve in ingresso un vettore che rappresenta un film, restituisce il valore +1 se il film rispetta i nostri gusti e -1 se invece il film non è di nostro gradimento. Questa tecnica viene chiamata binary classification.

Questa è l’unica parte complicata del processo: trovare una h buona, cioè che riesca a predire bene i nostri gusti. Come si può fare? L’idea in realtà è abbastanza semplice: sfruttiamo l’ERM (Empirical Risk Minimization) per trovare la h ottima. In pratica si ipotizza una h ragionevole basata sui dati contenuti nel training set e si fa una cosa particolare: si prendono tutti i film del training set, si danno in input a h e si osservano gli output, cioè le previsioni prodotte. Questa procedura apparentemente strana ha un senso: se h fa schifo, probabilmente non riuscirà a classificare correttamente nemmeno i film utilizzati per definirla, quindi men che meno riuscirà a farlo con film casuali. Se invece riesce a classificare in modo accurato quelli già presenti nel training set, ci sono buone probabilità che riesca a farlo con film mai visti prima. Quindi da una h buona ci aspettiamo che, data una coppia (x,y) nel training set, h(x) produca come output proprio y. Se questo accade, l’errore associato alla coppia (x,y) è 0, mentre in caso di classificazione errata l’errore associato sarà 1/m. Dopo aver testato h su tutte le coppie disponibili, si sommano tutti gli errori prodotti e si fa una valutazione: questa somma, chiamata Empirical Risk, assume valori nell’intervallo [0,1]. Più il valore è prossimo a 0, migliore è h. La tecnica ERM sfrutta proprio questo concetto: si cerca la h che minimizza l’ER, cioè quella che fa previsioni più accurate.

Dopo aver trovato la h che stavamo cercando potremmo avere ancora qualche dubbio sulle sue capacità di previsione, quindi dobbiamo trovare un modo per testarla. Ecco che viene in nostro aiuto un ulteriore dataset, denominato test set: ha la stessa struttura del training set, cioè è un insieme di coppie (x,y), ma è composto da coppie totalmente nuove e che quindi non hanno contribuito alla scelta di h. Questo particolare garantisce una sorta di casualità in grado di simulare quello che avverrà durante l’utilizzo effettivo del modello. L’unica cosa da fare è calcolare l’errore sulle previsioni fatte da h sul test set, cioè la stessa cosa fatta per calcolare l’ER, che in questo caso si chiama Generalization Error. L’idea è la stessa di prima: più il GE è prossimo a 0, migliore è h. Questo significa che per avere un buon modello sia l’ER sia il GE devono essere molto vicini a 0.

A questo punto sorge un problema: cosa succede se ci facciamo prendere la mano e creiamo un modello troppo complesso? Un modello del genere si adatta fin troppo bene al training set e produce un ER bassissimo, praticamente 0, ma in questo modo perde di generalità e capacità di adattamento. Infatti quando si calcola il GE si trovano valori molto vicini a 1, il che dimostra che il modello è pessimo. Questo fenomeno è noto come overfitting: se imparo a riconoscere un cane dal colore del pelo e mi convinco che questo può presentarsi solo come sfumature di grigio, quando mi capita un cane marrone non lo riconosco come cane. Per evitare questo problema si sfrutta una tecnica chiamata regolarizzazione: viene introdotto un parametro nell’ERM che limita la complessità del modello permettendo di limitare l’overfitting.

Oltre il punto critico l’ER continua a diminuire mentre il GE cresce: overfitting.

Come dicevo, questa tecnica è molto semplice ma offre una buona base da cui partire per comprendere il funzionamento di teorie molto più complesse e interessanti di cui parleremo in altri articoli futuri. In effetti Netflix utilizza questa tecnica combinata a molte altre (regressione + regolarizzazione, reti neurali, SVM, etc.) per avere delle previsioni molto più attendibili, ma di queste parleremo in articoli futuri.