Per machine learning si suole riferirsi ad un campo di studi il cui intento è fornire ai computer l’abilità di imparare senza essere esplicitamente programmati.
Arthur Samuel, 1959.
La missione di oggi è semplice: fare chiarezza, e comprendere le basi teoriche del machine learning.
Non sarà semplice.
Molti concetti da interiorizzare, e concretizzare in qualcosa di visibile.
Ma insieme, io e te, porteremo a termine questa missione. Siamo pronti?
Ricorda, non lo facciamo perché è semplice. Lo facciamo perché è difficile.
Domande
La curiosità umana genera molte domande, utili a capire un nuovo argomento. In questo post risponderemo a:
- Perché (è utile, e lo usiamo rispetto ad altre soluzioni)
- Cosa (è il machine lerning)
Soluzione a nuovi problemi: il perché!
Prima di sviscerare la definizione che abbiamo letto poco fa, svilupperemo una comprensione intuitiva del machine learning e delle sue potenzialità.
Risponderemo al perché, e implicitamente ad un cosa intutitivo.
Un problema tradizionale: lampadina domotica
In camera mia ho una scheda Arduino, assimilabile ad un micro-computer, dotato di un sensore di luce ambientale.
Pretendo che la scheda accenda la luce, quando la luminosità è bassa.
Semplificando, il sensore genera un numero tra 0 (luce assente) e 1023 (luce del sole).
Usando il costrutto logico if/else definisco una regola molto semplice:
//controllo se il valore di luce è maggiore di 500 if(light_val > 500){ //in questo caso spengo la luce digitalWrite(light, LOW); }else{ //altrimenti se il valore è minore o uguale a 500 la accendo digitalWrite(light, HIHG); }
Con questo codice programmiamo esplicitamente il computer (la scheda Arduino) ad eseguire un task specifico: accendere o spegnere la luce.
Definito il problema (accendere la luce), abbiamo individuato i nostri dati (valore luce ambientale), che hanno un valore minimo e massimo definito (0, 1023) e stabilito una regola (luce > 500 spegni, altrimenti accendi) che produce un risultato (luce accesa, luce spenta)
Così abbiamo trovato la soluzione.
Un approccio del genere è possibile perché conosco la regola con la quale gestire il problema: il valore della luminosità ambientale determina l’accensione o spegnimento della luce.
E sopratutto perché i valori dei miei dati sono confinati in un intervallo preciso, quindi conosco tutti i possibili casi. Creo uno spartiacque (la soglia di 500) e il gioco è fatto.
Cosa succede però quando voglio risolvere un problema di cui non conosco le regole?
Un problema nuovo: previsioni di vendita
Mia madre è una fiorista, crea e vende composizioni floreali.
Spesso si trova a dover gettare fiori e piante ormai appassite o troppo deperite per essere vendute.
Questo succede perché cerca di trovare l’equilibrio tra l’avere abbastanza fiori per soddisfare la clientela ed evitare che le materie prime si rovinino perché invendute.
L’equilibrio però varia di mese in mese.
Gestire la domanda propondendo la giusta offerta, contenendo alcontempo le perdite è un difficile problema di managing.
Ora, i computer sono nati per semplificare le nostre vite.
Quindi perché non creare un programma che preveda le vendite stimate così da ridurre le perdite e massimizzare il profitto?
Definito il problema, troviamo la soluzione!
Che dati abbiamo?
- tipologia di fiore (tempo di deperimento, costo)
- stagione (temperatura, umidità, vacanze)
- domanda (bouquet, corone di laurea, mazzi di rose, etc..)
- […]
Ci troviamo difronte ad un bel problema.
Per distinguere i casi tra loro dovremmo definire un enorme numero di soglie, usando valori che non conosciamo, per stabilire delle regole che ignoriamo e sperare di risolvere il problema.
Inoltre, se mai dovesse esserci un caso che non abbiamo previsto, il programma non potrebbe prevedere le vendite di quel particolare fiore.
Prima abbiamo mangiato una bistecca con la forchetta, e ora stiamo consumando una zuppa con la stessa posata.
Ci serve un nuovo utensile, abbiamo bisogno del cucchiaio.
Un problema strano
Il nostro è un problema strano: non conosciamo la regola, ma presumiamo che esista.
Facciamolo risolvere al computer.
Usando la metafora di prima, il nostro cucchiaio è un sistema capace di apprendere da solo la regola che correla i dati delle vendite passate, per costruire un modello di realtà sulla base di risposte esistenti.
Questo modello di realtà sarà approssimativo, ma è proprio quello di cui abbiamo bisogno.
Il nostro intento è avere del margine di elasticità: quando affronteremo una situazione mai vista prima, sarà proprio questo modello approssimativo a trovare una soluzione.
Scriveremo il codice per leggere i dati ed elaborarli.
Ma sarà il computer a trovare la regola nascosta in quei dati. Infine un’altra parte di codice interrogherà il modello per chiedergli la venidta stimata in base a determinati valori.
Quindi è il computer che impara a risolvere un problema senza essere esplicitamente programmato per farlo.
E il flusso sarà simile a questo:
“E’ il 10 febbraio, la prossima settimana è previsto cielo sereno, ci sono 4 negozi nelle vicinanze, ho 10 ordini per mazzi da 3 rose, quante rose potrò vendere?”
“Elborazione…”
“Vendita stimata 230 rose”
Definizione: il cosa!
Ora svisceriamo la definizione di Arthur Samuel, pioniere nel campo delle Intelligenze Artificiali:
“Per machine learning si suole riferirsi ad un campo di studi il cui intento è fornire ai computer l’abilità di imparare senza essere esplicitamente programmati.“
Il machine learning è quindi un campo di studi perché coinvolge statistica, matematica e programmazione prendendo spunto da questi mondi per sviluppare nuovi strumenti.
Questi strumenti forniscono ai computer l’abilità di imparare sviluppando modelli di realtà, ovvero approssimazioni. Imparano nel senso che facciamo vedere loro il punto di partenza A e quello di arrivo B, affidando a loro la creazione del percorso.
Il percorso è generato autonomamente attarverso l’ausilio di algoritmi, quindi il sistema raggiunge un’obiettivo (collegare A e B) senza essere esplicitamente progammato.
Conclusione: le risposte del machine learning
Machine learning:
- è un campo di studi che fornisce ai sistemi l’abilità di imparare senza essere esplicitamente programmati per farlo.
- lo usiamo perché possiamo risolvere problemi troppo complessi per un approccio tradizionale o perché privi di un algoritmo conosciuto (è il cucchiaio per consumare la minestra)
Nei prossimi post ne capiremo il funzionamento e le tipologie. stay tuned!
Un caldo abbraccio, Andrea.