Algoritmi di ottimizzazione

Nei casi più semplici un ottimizzatore ci permette di conoscere il massimo ed il minimo di una funzione: nello specifico quei parametri che passati alla funzione ci permettono di trovarne il suo valore massimo ed il suo valore minimo.

Nel caso di una o due variabili l’individuazione del punto minimo o massimo è abbastanza facile ed intuitiva anche solo guardando la rappresentazione grafica della nostra funzione in un piano a due o tre dimensioni. Ma quando il numero della variabili aumenta difficilmente possiamo concepire una soluzione per il nostro problema: ed è qui che entra in gioco il machine learning.

Gli algoritmi di ottimizzazione ci permettono di individuare i coefficienti ideali che passati alla funzione ci permettono di avvicinarci al più possibile ai valori reali con le nostre previsioni.

Esistono numerosi algoritmi di ottimizzazione con varie caratteristiche che li rendono più o meno adatti a determinati modelli di machine learning.

  • Gradient Descendt
  • ADAM
  • Adadelta
  • Adagrad
  • Adamax
  • RMSprop
  • Stochastic Gradient Descendt

L’algoritmo di ottimizzazione più facile da comprendere ed al tempo stesso molto utilizzato è il Gradiend Descendt: che consiste nell’andare a stimare il punto di minimo della funzione di costo.

Partendo da un punto casuale si calcola la derivata della funzione di costo di quel punto per verificare l’inclinazione della curva alla ricerca del punto di minimo in cui la derivata dovrebbe essere pari a zero.

La derivata di una funzione è pari a zero se la funzione è costante, è negativa se la funzione è decrescente ed è positiva se è crescente.

Per muoverci lungo la funzione dobbiamo scegliere un valore arbitrario alpha chiamato learning rate che indica la velocità (o la grandezza dei passi) con cui dobbiamo spostarci.

Parametri troppo grandi di alpha ci faranno saltare da una parte all’altra della curva facendoci mancare il punto di minimo, mentre parametri troppo piccoli faranno aumentare la quantità di calcoli necessari per raggiungere il minimo.

Gradiente di una funzione

Quanto abbiamo scritto sopra ci ha rinfrescato il concetto di derivata di una funzione ad una variabile utile per risolvere una regressione lineare semplice. Ma nel caso di una regressione lineare multipla con più features come dobbiamo procedere?

Il procedimento è analogo, sarà necessario andare a calcolare le derivate parziali di ogni feature per poi ottenere un gradiente che non è altro che il vettore di tutte le derivate parziali calcolate.

Graficamente in un grafico a tre dimensioni come nell’esempio qui sotto la derivata parziale della funzione f rispetto al piano alla variabile x sarà data dall’inclinazione della retta t1 mentre rispetto alla seconda variabile y sarà data dall’inclinazione della retta t2.

Fonte Wikipedia : https://commons.wikimedia.org/wiki/File:Totalni_diferencial_geom_vyznam.svg

La regressione lineare

Tra i più semplici modelli di apprendimento supervisionati c’è quello basato sulla regressione lineare. Il funzionamento di una semplice regressione lineare è alla base di molto più complessi come le reti neurali artificiali.

In poche parole quello che fa la regressione lineare e stabilire una correlazione tra una variabile dipendente y ed una variabile indipendente x sotto forma di un polinomio di primo grado con tanti termini quante sono le figure del nostro dataset:

Facciamo un semplice esempio: immaginiamo di avere una dataset dove una serie di appartamenti caratterizzati da due variabili quantitative continue come ad esempio il valore in euro e la grandezza in metri quadri. Immaginiamo di voler costruire un modello capace di predire il valore di un appartamento in base alla sua grandezza in metri quadri.

METRI QUADRI VALORE €
100 145.000
120 180.000
60 110.000
130 200.000
80 140.000
190 220.000
200 250.000
140 ???

Un problema di regressione lineare si può ridurre ad individuare la relazione che ci permette di tracciare la funzione f(x) che ad ogni valore di x (variabile indipendente) ci permette di individuare il valore y del nostro target (variabile dipendente), ovvero nel nostro caso ci permette di conoscere il valore di un appartamento partendo dalla sua grandezza in metri quadri.

Considerando il problema da un punto di vista grafico possiamo tracciare in uno scatter plot i vari punti dei nostri appartamenti ponendo nell’asse delle ascisse la grandezza in metri quadri e nell’asse delle ordinate il valore in euro. In questo esempio si rileva che ad un amento dei metri quadri corrisponderà un aumento del valore dell’immobile e possiamo esprimere questa relazione grazie ad una retta di regressione.

La regressione consiste nel tracciare la retta che più si avvicina a tutti i punti del grafico, stabilendo in questo modo una relazione tra la variabile indipendente e quella dipendente. Una retta può essere scritta come una equazione in maniera esplicita dove di y risulta essere il la somma tra il valore q (intercetta della retta con l’asse Y) ed il prodotto della variabile indipendente x con m (il coefficiente angolare che determina l’inclinazione della retta).

I valori q ed m sono quello che la regressione lineare deve ottimizzare per trovare la retta che meglio si adatta i punti del nostro grafico. Nel piano cartesiano possono essere rappresentate rette, per trovare in valori di q ed m che meglio esprimono la relazione tra valore dell’immobile e metri quadri dobbiamo utilizzare una funzione di costo.

La funzione di costo

Una funzione di costo fornisce una distanza tra il nostro modello e quello ideale, ovvero il modello che ritorna sempre il risultato corretto. Serve quindi per confrontare un modello di machine learning con quello idealmente perfetto.

Esistono diversi tipi di funzione di costo ma, per quanto riguarda la regressione lineare di cui abbiamo parlato nell’articolo precedente, la funzione di costo più utilizzata è quella della somma dei quadrati residui chiamata in inglese Sum of the Squared Residual (RRS).

Per calcolare la somma dei quadrati residui dobbiamo andare a calcolare per ogni elemento della nostra osservazione la differenza tra il valore reale ed il valore predetto dalla nostra regressione lineare elevandola al quadrato per poi sommare tutti i valori ottenuti

Minore è il risultato della funzione di costo e maggiore sarà la qualità del nostro modello, questa metrica ci permette di misurare quanto è valido un modello. A questo punto abbiamo bisogno di un metodo che ci permetta di minimizzare la nostra funzione di costo: per questo compito dobbiamo affidarci ad un algoritmo di ottimizzazione a cui dedicheremo il prossimo post..

A cosa serve il machine learning?

Negli ultimi anni si è sentito parlare sempre più spesso di Machine Learning e di Intelligenza Artificiale diventando uno dei temi più attuali. In realtà una prima definizione del Machine Learning è stata fatta nel 1950 da Arthur Samuel, uno dei pionieri dell’intelligenza artificiale, che definiva questa branca dell’informatica in questo modo:

Il machine learning è il “campo di studio che dà ai computer l’abilità di apprendere (a realizzare un compito) senza essere esplicitamente programmati a farlo”.

Arthur Samuel

Nella programmazione classica l’elemento alla base di ogni elaborazione o software è l’algoritmo: un procedimento che viene utilizzato per poter risolvere un determinato problema. Si parte da una serie di input e procedendo in modo sistematico attraverso una serie di passaggi con possibili scelte predeterminate si arriva ad una conclusione che produce un output. Per fare un esempio con la vita reale: la semplice ricetta di una torta è un algoritmo che ci permette di ottenere una calda crostata di mele partendo da alcuni input e processandoli attraverso una serie di elaborazioni.

Alcuni procedimenti possono essere risolti ed elaborati attraverso la creazione di specifici algoritmi che prevedano tutte le possibili scelte e soluzioni, mentre altri problemi sono di una natura tale che la creazione di un algoritmo non è possibile o prevederebbe una così vasta serie di variabili e passaggi da renderne la creazione impossibile.

Riconoscere il contenuto di una fotografia, insegnare un’auto a guidare da sola, creare un metodo efficacie di raccomandazione prodotti o un sistema di fraud detection sono tutti compiti che potrebbero essere risolti sempre con un algoritmo: ma le dimensioni di istruzioni ed il numero delle variabili da creare sarebbe talmente vasto da renderne impossibile la realizzazione.

Ad esempio non è umanamente possibile creare un programma che riconosca se in una fotografia è presente la figura di un cane, di un gatto o di un volto umano attraverso la realizzazione di un algoritmo… qui entra in gioco il Machine Learning!

Il Machine Learning è quella branca dell’informatica che permette ai computer di addestrarsi in modo autonomo: vengono forniti alla macchina una vasta quantità di input ed una serie di ouput lasciando che sia la macchina stessa a determinare l’algoritmo ottimale per risolvere il problema. In sostanza il Machine Learning serve per insegnare alle macchine a realizzare in maniera autonoma degli algoritmi per la soluzione di un problema.

Questo insegnamento nel machine learning supervisionato avviene attraverso due passaggi:

  • L’addestramento: dove vengono forniti una serie numerosa di esempi di input ed output in base alla quale la macchina deve poter generare un proprio algoritmo, che nel mondo del machine learning viene chiamato modello.
  • La Predizione: una volta finito l’addestramento con una mole di dati ed esempio sufficientemente grande è possibile effettuale la predizione degli output semplicemente fornendo degli input (ad esempio mostrando una foto di un cane o un gatto il computer sarà in grado di determinare a quale categoria appartiene il soggetto della foto).
Modello Machine Learning in fase di predizione

Ovviamente esisterà un margine di errore, quello di cui si occupa un Data Scientist nel machine learning è la realizzazione di modelli con margini di errori sempre più ridotti. Nel machine learning classico le tipologie di problemi che bene si adattano ad essere risolti sono quelle che presentano una relazione lineare e che possono essere predetti attraverso l’individuazione di una certa correlazione tra input ed output.

Per modelli più complessi non lineari ci si deve affidare ad altra tecnologia nata verso la fine degli anni ’80: quella delle reti neurali, dove aumentando il livello di attrazione del problema sarà possibile per la macchina andare ad individuare una certa correlazione.

Perchè il machine learning si diffonde solo oggi?

Può sorgere spontanea la domanda: se viene concepito nel 1950 e negli anni ’80 viene migliorato ampliandone il campo di applicazione per che il machine learning si diffonde solo ora?

Principalmente per due motivazioni:

  • la prima è la presenza al giorno d’oggi di una quantità di dati enorme (i Big Data) che si sono creati inseguito alla diffusione di Internet;
  • la seconda è la potenza di calcolo raggiunta dalla macchine moderne che una volta era impensabile. La potenza che teniamo nel palmo di una mano all’interno del nostro smartphone e decisamente superiore dei computer che hanno permesso lo sbarco sulla luna.

Se siete curiosi e volete maggiori informazioni sull’argomento suggeriamo di procedere con calma e leggere l’articolo sulla regressione lineare nel machine learning.