Intelligenza artificiale

RETI NEURALI E DEEP LEARNING (PARTE 1)

Questo è il primo di una serie di articoli dedicati al Deep Learning e le Reti Neurali.

Intelligenza artificiale, modelli di predizione, classificazione, regressione lineare, tensori, Machine Learning, cross-entropia. Sembrano termini presi in prestito da Isaac Asimov, vera e propria fantascienza. In realtà è tutto molto concreto ed attuale e si tratta di matematica e statistica, diciamo (per anticipare un po’ il discorso) una combinazione lineare di queste due materie.

Nelle applicazioni nel campo del Software Engineering, dove per applicazione si intende un insieme di algoritmi e direttive che permettono di risolvere un problema per mezzo di un calcolatore (definizione un po’ a largo spettro e generalista forse, ma penso idonea per il tema che si vuole trattare), si sente sempre più spesso l’esigenza di “prevedere il futuro”, talvolta per ottimizzare risorse e/o costi, altre volte per anticipare qualche evento, o più semplicemente per analizzare determinati comportamenti e trarne delle conclusioni (che comportetanno delle conseguenze). Tutto questo processo, predire, anticipare, prevedere, evolvere,  ricade nell’ambito del Machine Learning e, nella sua “forma più evoluta e complessa” , del Deep Learning. Fondamentalmente, il Machine Learning ci permette di fare una cosa semplicissima: partendo da alcuni dati (a volte già precedentemente supervisionati , altre volte no), si analizzano le caratteristiche di questi dati e, da questa analisi, si stila un modello che in qualche maniera metta in correlazione tra di loro queste caratteristiche, ricavando appunto una “funzione” che sia in grado, una volta che il modello è ben allenato, di effettuare predizioni sulla base di casi analoghi, occupandosi talvolta di classificare, altre volte invece di stabilire e consigliare un placement idoneo del dato in una determinata “fascia” o “livello”.

Sembra semplice, in effetti creare un modello di predizione non è complicatissimo, allenarlo al fine di comunicarci delle buone predizioni è un po’ più difficile.

Vedremo prima come svolgere il primo task, quando avremo sufficiente conoscenza per passare avanti passeremo a come ottimizzare il sistema.

Esempio pratico:

Supponiamo che il nostro compito, il nostro problema da risolvere, sia quello di vendere la nostra casa ad un prezzo che risulti giusto, adeguato. La prima cosa che potremmo fare sarebbe quella di andare da qualcuno che ha già venduto precedentemente la sua casa e chiedergli a quanto l’ha venduta. Così però avremmo solo un numero, che per come ci viene dato non ci è assolutamente utile – da solo – per trovare la soluzione al nostro problema. Quello che ci manca è quindi un “qualcosa” che sia in grado di correlare il prezzo di vendita della mia casa, al prezzo di vendita della casa del vicino, al prezzo di vendita della casa di un amico etc.etc.

Mi manca qualcosa che mi permetta di dire: “Rispetto a questa caratteristica della mia casa, ho deciso un prezzo di vendita pari a X”. Ottenuta questa informazione, abbiamo fatto un passo in avanti nella risoluzione del nostro problema: abbiamo due variabili in grado di essere correlate tra di loro. Ma ci manca ancora un pezzo: dobbiamo capire come esse sono correlate tra di loro, qual è la relazione che intercorre tra la caratteristica X e il prezzo di vendita Y della mia casa. Innanzitutto bisogna trovarla, questa caratteristica. In realtà potrebbero esserci (e quasi sempre è così) più caratteristiche, ma per iniziare ci accontenteremo di trovarne una, che potrebbe ad esempio essere la metratura della casa. Potremmo chiedere al nostro vicino, di quanti metri quadri è la superficie della sua ex casa ed a quanto denaro l’ha venduta. Abbiamo fatto un altro passo in avanti. Adesso ripetiamo l’operazione per amici, parenti, amici di amici e quant’altro, che abbiano venduto la propria casa (si, immaginiamoci un mondo dove lo sport nazionale è “vendere la propria casa”, al di la facili battute politiche sarebbe un vero smacco per il calcio, in Italia!) e, alla fine di questo procedimento, saremo in possesso di una raccolta di dati su cui metter mano per l’analisi, che definiamo Dataframe. Supponiamo per ora di aver raccolto solamente 4 casi. Volendo stilare un’analisi di correlazione tra la variabile “m2” (metri quadri) e la variabile “prezzo”, potremmo creare una tabella del genere:

Proviamo adesso a visualizzare graficamente questi dati, in particolare visualizziamo su degli assi cartesiani la variabile dipendente “prezzo” rispetto alla variabile indipendente“m2”:

Abbiamo dei test cases, li stiamo supervisionando. Questo è l’inizio di un “Learning Supervisionato“, ovvero abbiamo a portata di mano, nel nostro Dataframe, sia le caratteristiche che le etichette. Definiremo con caratteristiche le features grazie all’analisi delle quali saremo in grado di effettuare le nostre previsioni, le quali definiamo invece come etichette, appunto. Nel nostro esempio conosciamo già le etichette, questo Dataframe quindi è un ottimo candidato al fine di rappresentare la base di dati necessaria per allenare il nostro modello di predizione, che una volta allenato ci permetterà di sapere a quanto dovremmo vendere la nostra casa (i Dataframe di test sono in realtà enormi moli di test cases, con 4 entries saremmo ben lontani dall’avere precisione di training del nostro modello, ma è semplicemente per capire come funziona il tutto). In pratica, nel Learning Supervisionato partiamo da una base di dati di cui conosciamo già le etichette rispetto alle features.

In questa prima parte ci limitiamo ad osservare il tutto ad un livello molto esterno, agnostico da qualsiasi codice o metalinguaggio. Analizzando tutto in questa maniera ci verrà molto più facile, dopo, sporcarci le mani con il codice, tenendo bene a mente però come funziona il tutto “sotto il cofano del motore”.

La prima cosa da fare con un Dataframe è quella di osservare come sono distribuiti i dati. Dando una sommaria occhiata al plot poco più sopra, possiamo osservare come vi sia un Trend, ovvero un “andamento” più o meno uniforme, che correla i nostri “dots” nel grafico. Geometricamente, la soluzione del nostro problema (ovvero trovare la correlazione tra le nostre due variabili) coincide nel trovare una funzione che rappresenti al meglio, che abbia maggiormente  “a che fare”, con tutti i casi raccolti nella nostra base di dati. Vedremo in seguito che non si dovrà trovare la “funzione di correlazione migliore”, ma la “meno peggiore”. Il Trend con cui abbiamo a che fare è lineare, ovvero unendo i punti del nostro grafico possiamo tracciare una linea. Ci verrebbe allora da pensare: “Basta unire i punti, come sulla settimana enigmistica, e calcolare l’equazione della spezzata trovata”. Questo ci porterebbe inesorabilmente ad incorrere in ciò che in gergo si definisce “Overfitting” , ovvero (sempre analizzando il tutto ad altissimo livello) il nostro modello sarebbe perfetto per i nostri test cases, ma fallirebbe quasi sempre nelle nuove predizioni. Questo ci fa capire un po’ meglio il Non vogliamo il migliore, ma il “meno peggiore” di prima.

Si tratta quindi di trovare questo “meno peggiore”, che nel nostro caso equivale a trovare una linea retta che risulti il più possibile interna a tutti i punti del grafico.

È giunto il tempo di riaprire il vecchio libro di Matematica del liceo (è stata dura all’epoca, resistere alla tentazione di barattarlo con il nuovo album dei Nirvana, ma abbiamo fatto bene!) e di realizzare che abbiamo una formula che definisce l’equazione della retta:

Y è la nostra funzione da trovare, quindi il nostro modello. X è la nostra variabile indipendente, ovvero la nostra caratteristica. “m” e “b”, che geometricamente rappresentano il coefficiente angolare e l’intercetta della nostra retta, sono le variabili che determineranno il grado di accuratezza del nostro modello e quindi delle nostre predizioni ed in gergo statistico prendono il nome rispettivamente di “variazione” e “bias”.

In pratica, si tratta di trovare i valori di “m” e di “b” per i quali la nostra retta risulti essere il più possibile interna a tutti i punti del grafico.

(Fine parte 1)

RETI NEURALI E DEEP LEARNING (PARTE 1) ultima modifica: 2017-11-11T14:19:05+00:00 da Mr Bildo
RETI NEURALI E DEEP LEARNING (PARTE 1) ultima modifica: 2017-11-11T14:19:05+00:00 da Mr Bildo

Lascia un commento