Machine Learning reso intuitivo

'Machine Learning intuitivo'

ML: tutto ciò che devi sapere senza matematica complicata

Ciò che potresti pensare che sia ML... (Foto scattata da Justin Cheigh a Billund, Danimarca)

Cos’è il Machine Learning?

Sicuramente, la teoria effettiva di modelli come ChatGPT è ammettiamolo molto difficile, ma l’intuizione sottostante al Machine Learning (ML) è, beh, intuitiva! Quindi, cos’è il ML?

Il Machine Learning permette ai computer di apprendere utilizzando i dati.

Ma cosa significa? Come utilizzano i computer i dati? Cosa significa per un computer apprendere? E prima di tutto, a chi interessa? Iniziamo con l’ultima domanda.

Oggi, i dati sono ovunque. Quindi è sempre più importante utilizzare strumenti come il ML, in quanto può aiutare a trovare modelli significativi nei dati senza essere mai esplicitamente programmati per farlo! In altre parole, utilizzando il ML siamo in grado di applicare algoritmi generici a una vasta gamma di problemi con successo.

Esistono alcune categorie principali di Machine Learning, con alcuni dei principali tipi che sono apprendimento supervisionato (SL), apprendimento non supervisionato (UL) e apprendimento per rinforzo (RL). Oggi descriverò solo l’apprendimento supervisionato, anche se nei post successivi spero di approfondire ulteriormente l’apprendimento non supervisionato e l’apprendimento per rinforzo.

1 Minuto per l’apprendimento supervisionato

Guarda, capisco che potresti non voler leggere tutto questo articolo. In questa sezione ti insegnerò le basi (che per molte persone è tutto ciò che devi sapere!) prima di approfondire nelle sezioni successive.

L’apprendimento supervisionato consiste nell’apprendere come prevedere una determinata etichetta utilizzando diverse caratteristiche.

Immagina che stai cercando di capire un modo per prevedere il prezzo dei diamanti utilizzando caratteristiche come carati, taglio, purezza e altro. Qui, l’obiettivo è quello di apprendere una funzione che, dati in input le caratteristiche di un diamante specifico, restituisca il prezzo associato.

Come gli esseri umani imparano tramite esempi, in questo caso i computer faranno lo stesso. Per poter imparare una regola di previsione, quest’agente di ML ha bisogno di “esempi etichettati” di diamanti, comprese sia le loro caratteristiche che il loro prezzo. La supervisione arriva dal momento in cui viene fornita l’etichetta (prezzo). In realtà, è importante considerare che i tuoi esempi etichettati siano effettivamente veri, poiché è un’assunzione dell’apprendimento supervisionato che gli esempi etichettati siano “verità fondamentale”.

Ora che abbiamo esaminato le basi più fondamentali, possiamo approfondire un po’ di più sull’intero processo di scienza dei dati/ML.

Configurazione del problema

Utilizziamo un esempio estremamente relazionabile, ispirato a questo libro di testo. Immagina di essere bloccato su un’isola, dove l’unico cibo disponibile è un frutto raro conosciuto come “Justin-Melon”. Anche se non hai mai mangiato il Justin-Melon in particolare, hai mangiato un sacco di altri frutti e sai che non vuoi mangiare frutta andata a male. Sai anche che di solito puoi capire se un frutto è andato a male osservando il colore e la consistenza del frutto, quindi fai un’ipotesi e assumi che questo valga anche per il Justin-Melon.

In termini di ML, hai utilizzato conoscenze pregresse del settore per determinare due caratteristiche (colore, consistenza) che ritieni prevedano accuratamente l’etichetta (se il Justin-Melon è andato a male o no).

Ma come saprai quale colore e quale consistenza corrispondono al frutto andato a male? Chi lo sa? Devi solo provarci. In termini di ML, abbiamo bisogno di dati. Più specificamente, abbiamo bisogno di un dataset etichettato composto da veri Justin-Melon e la loro etichetta associata.

Raccolta/Elaborazione dei dati

Quindi trascorri i prossimi giorni mangiando meloni e registrando il colore, la consistenza e se il melone era andato a male o no. Dopo alcuni giorni dolorosi di mangiare costantemente meloni andati a male, hai il seguente dataset etichettato:

Codice di Justin Cheigh

Ogni riga rappresenta un melone specifico, e ogni colonna rappresenta il valore dell’attributo/etichetta per il melone corrispondente. Ma notate che abbiamo delle parole, poiché le caratteristiche sono categoriche anziché numeriche.

In realtà abbiamo bisogno di numeri affinché il nostro computer possa elaborarli. Ci sono diverse tecniche per convertire le caratteristiche categoriche in caratteristiche numeriche, che vanno dall’encoding one-hot agli embeddings e oltre.

La cosa più semplice che possiamo fare è trasformare la colonna “Etichetta” in una colonna “Buono”, che assume valore 1 se il melone è buono e 0 se è cattivo. Per ora, assumiamo che esista una metodologia per trasformare colore e consistenza in una scala da -10 a 10, in modo sensato. Per punti bonus, riflettete sulle ipotesi di mettere una caratteristica categorica come il colore su una scala del genere. Dopo questa fase di pre-elaborazione, il nostro dataset potrebbe apparire così:

Codice di Justin Cheigh

Ora abbiamo un dataset etichettato, il che significa che possiamo utilizzare un algoritmo di apprendimento supervisionato. Il nostro algoritmo deve essere un algoritmo di classificazione, poiché stiamo prevedendo una categoria buono (1) o cattivo (0). La classificazione è in opposizione agli algoritmi di regressione, che prevedono un valore continuo come il prezzo di un diamante.

Analisi dei dati esplorativa

Ma quale algoritmo? Ci sono diversi algoritmi di classificazione supervisionata, che vanno dalla semplice regressione logistica a complessi algoritmi di deep learning. Beh, cominciamo col dare un’occhiata ai nostri dati facendo un’analisi dei dati esplorativa (EDA):

Codice di Justin Cheigh

L’immagine sopra è un grafico dello spazio delle caratteristiche; abbiamo due caratteristiche, e semplicemente mettiamo ogni esempio su un grafico con i due assi corrispondenti alle due caratteristiche. Inoltre, rendiamo i punti viola se il melone associato è buono, e gialli se è cattivo. Chiaramente, con un po’ di EDA, c’è una risposta ovvia!

Codice di Justin Cheigh

Dovremmo probabilmente classificare tutti i punti all’interno del cerchio rosso come meloni buoni, mentre quelli al di fuori del cerchio dovrebbero essere classificati come meloni cattivi. Intuitivamente, questo ha senso! Ad esempio, non si desidera un melone che sia duro come una roccia, ma non si desidera nemmeno che sia troppo molle. Piuttosto, si desidera qualcosa di intermedio, e lo stesso probabilmente vale anche per il colore.

Abbiamo stabilito che vorremmo un confine di decisione che sia un cerchio, ma questo era basato solo su una visualizzazione preliminare dei dati. Come determineremmo questo in modo sistematico? Questo è particolarmente rilevante in problemi più complessi, dove la risposta non è così semplice. Immaginate centinaia di caratteristiche. Non c’è modo di visualizzare lo spazio delle caratteristiche a 100 dimensioni in modo ragionevole.

Cosa stiamo apprendendo?

Il primo passo è definire il nostro modello. Ci sono tonnellate di modelli di classificazione. Poiché ognuno ha le proprie assunzioni, è importante cercare di fare una buona scelta. Per sottolineare questo, comincerò facendo una scelta davvero sbagliata.

Un’idea intuitiva è fare una previsione pesando ciascuno dei fattori:

Formula di Justin Cheigh usando Embed Fun

Ad esempio, supponiamo che i nostri parametri w1 e w2 siano rispettivamente 2 e 1. Assumiamo anche che il nostro input Justin Melon abbia Colore = 4 e Consistenza = 6. Allora la nostra previsione Buono = (2 x 4) + (1 x 6) = 14.

La nostra classificazione (14) non è nemmeno una delle opzioni valide (0 o 1). Questo perché in realtà si tratta di un algoritmo di regressione. Infatti, è un semplice caso del più semplice algoritmo di regressione: la regressione lineare.

Quindi, trasformiamo questo in un algoritmo di classificazione. Un modo semplice potrebbe essere questo: utilizzare la regressione lineare e classificare come 1 se l’output è maggiore di un termine di bias b. In realtà, possiamo semplificare aggiungendo un termine costante al nostro modello in modo tale da classificare come 1 se l’output è maggiore di 0.

Nella matematica, supponiamo che PRED = w1 * Colore + w2 * Fermezza + b. Quindi otteniamo:

Formula di Justin Cheigh usando Funzione di Incorporamento

Questo è sicuramente migliore, poiché stiamo almeno eseguendo una classificazione, ma facciamo un grafico di PRED sull’asse x e la nostra classificazione sull’asse y:

Codice di Justin Cheigh

Questo è un po’ estremo. Una leggera modifica di PRED potrebbe cambiare completamente la classificazione. Una soluzione è che l’output del nostro modello rappresenti la probabilità che il Justin-Melon sia buono, il che possiamo fare levigando la curva:

Codice di Justin Cheigh

Questa è una curva sigmoide (o una curva logistica). Quindi, invece di prendere PRED e applicare questa attivazione a tratti (Buono se PRED ≥ 0), possiamo applicare questa funzione di attivazione sigmoide per ottenere una curva levigata come quella sopra. Nel complesso, il nostro modello logistico assomiglia a questo:

Formula di Justin Cheigh usando Funzione di Incorporamento

Qui, sigma rappresenta la funzione di attivazione sigmoide. Fantastico, quindi abbiamo il nostro modello e dobbiamo solo capire quali pesi e bias sono i migliori! Questo processo è noto come addestramento.

Addestramento del Modello

Grande, quindi tutto ciò che dobbiamo fare è capire quali pesi e bias sono i migliori! Ma questo è molto più facile a dirsi che a farsi. Ci sono un numero infinito di possibilità e cosa significa “migliore”?

Cominciamo con l’ultima domanda: cosa è meglio? Ecco un modo semplice ma potente: i pesi più ottimali sono quelli che ottengono la massima precisione sul nostro set di addestramento.

Quindi, dobbiamo solo trovare un algoritmo che massimizzi la precisione. Tuttavia, matematicamente è più facile minimizzare qualcosa. In parole povere, anziché definire una funzione di valore, dove un valore più alto è “migliore”, preferiamo definire una funzione di perdita, dove una perdita più bassa è migliore. Sebbene le persone di solito utilizzino qualcosa come l’entropia incrociata binaria per la perdita della classificazione (binaria), utilizzeremo un esempio semplice: minimizzare il numero di punti classificati in modo errato.

Per fare ciò, utilizziamo un algoritmo noto come discesa del gradiente. A un livello molto alto, la discesa del gradiente funziona come uno sciatore miope che cerca di scendere da una montagna. Una proprietà importante di una buona funzione di perdita (e una che la nostra funzione di perdita grossolana manca effettivamente) è la levigatezza. Se tracciate lo spazio dei parametri (valori dei parametri e perdita associata sullo stesso grafico), il grafico sembrerebbe una montagna.

Quindi, iniziamo con parametri casuali e quindi probabilmente iniziamo con una perdita scarsa. Come uno sciatore che cerca di scendere dalla montagna il più velocemente possibile, l’algoritmo guarda in tutte le direzioni, cercando di individuare la strada più ripida da percorrere (cioè come modificare i parametri per ridurre al massimo la perdita). Ma lo sciatore è miope, quindi guarda solo un po’ in ogni direzione. Iteriamo questo processo finché non arriviamo in fondo (le persone molto attente potrebbero notare che potremmo finire effettivamente in un minimo locale). A questo punto, i parametri con cui finiamo sono i nostri parametri addestrati.

Una volta addestrato il modello di regressione logistica, ti rendi conto che le tue prestazioni sono ancora molto scarse e che la tua precisione è solo intorno al 60% (appena migliore del caso casuale!). Questo perché stiamo violando una delle assunzioni del modello. La regressione logistica matematicamente può solo produrre un confine di decisione lineare, ma sapevamo dalla nostra EDA che il confine di decisione dovrebbe essere circolare!

Con questo in mente, provi modelli diversi e più complessi e ne ottieni uno che raggiunge il 95% di precisione! Ora hai un classificatore completamente addestrato in grado di differenziare tra buoni Justin-Melons e cattivi Justin-Melons, e puoi finalmente mangiare tutta la frutta gustosa che desideri!

Conclusione

Facciamo un passo indietro. In circa 10 minuti hai imparato molto sull’apprendimento automatico, compreso ciò che è essenzialmente l’intero processo di apprendimento supervisionato. Quindi, qual è il prossimo passo?

Bene, spetta a te decidere! Per alcuni, questo articolo è sufficiente per avere un’idea generale di cosa sia effettivamente l’IA. Per altri, questo articolo potrebbe lasciare molte domande senza risposta. E questo è fantastico! Forse questa curiosità ti permetterà di esplorare ulteriormente questo argomento.

Per esempio, nella fase di raccolta dati abbiamo ipotizzato che tu mangiassi solo un sacco di meloni per alcuni giorni, senza prendere in considerazione alcuna caratteristica specifica. Questo non ha senso. Se mangiassi un melone verde e molliccio di Justin e ti facesse ammalare violentemente, probabilmente ti allontaneresti da quei meloni. In realtà, impareresti attraverso l’esperienza, aggiornando le tue convinzioni man mano che vai avanti. Questo framework è più simile all’apprendimento per rinforzo.

E se sapessi che un solo cattivo melone di Justin potrebbe ucciderti istantaneamente, e che fosse troppo rischioso provarne uno senza esserne sicuri? Senza queste etichette, non potresti eseguire l’apprendimento supervisionato. Ma forse c’è ancora un modo per ottenere informazioni senza etichette. Questo framework è più simile all’apprendimento non supervisionato.

Nelle prossime pubblicazioni del blog, spero di espandere analogamente sull’apprendimento per rinforzo e sull’apprendimento non supervisionato.

Grazie per la lettura!