L’intelligenza artificiale spiegata ai giovani con l’aiuto dei gatti.
Sottotitolo scherzoso… ma il contenuto di questo post è serio essendo stato ispirato da una delle prime applicazioni IA portata nel mondo della robotica industriale.
Mentre “bighellonavo” per una libreria del centro di Perugia ho notato in un angolino nascoso di uno scaffale un libro piccino piccino che tratta un tema grandino grandino.
Ho agito d’istinto togliendo il libricino dall’angolo per collocarlo in bella vista al centro del ripiano dove meglio lo si poteva vedere.
Così, “Intelligenza Artificiale: ultima chiamata. Il sistema Italia alla prova del futuro” forse troverà più facilmente un lettore, magari ispirerà qualcuno e poi chissà…
La giornata dedicata al bighellonare (andare in giro senza una meta; gironzolare) è un rito personale che mi concedo ogni volta che porto a termine un progetto.
Puta caso, il tema del progetto questa volta aveva riguardato proprio l’utilizzo della cosiddetta ”intelligenza artificiale” applicata al mondo della robotica industriale.
Per questa ragione quando ho visto quel libricino buttato in un angolo mi sono detto; ma una roba che si è dimostrata essere così concretamente utile per realizzare ciò che prima si considerava irrealizzabile… perché ha bisogno del sollecito di un “ultima chiamata”?
Purtroppo, devo dire che, al di là delle chiacchiere, stringi stringi, sono ancora pochissime le aziende di tecnologia che utilizzano realmente IA con il fine di proporre ai propri clienti soluzioni efficaci, in grado di incidere positivamente sul fattore competitività.
Un’illuminazione! Che il problema sia proprio il nome, intelligenza artificiale che utilizziamo per identificare questa “nuova” generazione di framework di elaborazione dati?
Bello “intelligenza artificiale”, stupendo! …ma noi siamo un’azienda, mica siamo la NASA. Roba da scienziati!
Tranquilli! Tutto il contrario!
La componente propriamente riconducibile a intelligenza presente nei framework di elaborazione del genere IA è solamente quella riferita al cervello (biologico) dei progettisti e sviluppatori, i quali hanno prima pensato e poi realizzato questo nuovo, tutto sommato abbastanza intuitivo, genere di elaborazione dati.
- Il robot si muove con un sistema di intelligenza artificiale… Wow! …ma non sarà complicato? Terminator in fasce?
- La verità. Il robot si muove grazie a un modello di elaborazione dati la cui complessità, mascherata all’utilizzatore, si basa su una rete di unit di calcolo fra loro interconnesse e preventivamente alimentate con dati (addestrate) così da poter identificare in maniera molto veloce gli oggetti presenti in un frame d’immagine. Forse è meno Wow! Però questo è.
Nessun spavento. E’ roba di tutti i giorni interagire con sistemi la cui complessità è mascherata all’utilizzatore. Se preparo una slide con PowerPoint mi concentro sui comandi da utilizzare, mica vado a pensare come sono fatte le funzioni grafiche che mi permettono di disegnare un cerchio.
La verità è che l’intelligenza artificiale, quella dura (come la chiamavamo un tempo), ancora non esiste. Difficile fare reverse engineering del motore di un auto semplicemente appoggiando la mano sopra il cofano così da capire dove si trovano le zone più calde, non avendo però idea di cosa sia e come funzioni un motore. Questa è più o meno la nozione che abbiamo riguardo a come funziona un cervello biologico.
Dal Wow!! Alla pratica. Ovvero, trovare il gatto nel cespuglio.
Messo da parte l’effetto Wow! La sintesi è la seguente: oggi è disponibile un “nuovo” modello di elaborazione dati che deve il suo nome di genere “rete neurale”, semplicemente al fatto di essere stato in origine ispirato (verso gli anni 60) dalla struttura reticolare che interconnette i neuroni di un cervello biologico. Specificatamente il cervello dei gatti. Ma qui finisce la somiglianza.
Chi si occupa di framework basati sulle “reti neurali” preferisce riferirsi a questo genere di organizzazione dei dati a schema reticolare semplicemente usando il termine “network” (rete). Preferendo inoltre sostituire il termine neurone, con il temine “unit”. Precisazione doverosa questa, ma alla fine, semplicemente per ragioni storiche, tutti utilizziamo la sigla CNN (Convolutional Neural Network) per individuare questo genere di framework.
Una rete CNN non è nulla di esoterico. Grazie alle caratteristiche di questi framework che si prestano ad essere eseguiti sui kernel paralleli resi disponibili dalle moderne GPU (schede grafiche), utilizzando una CNN è possibile “replicare” alcune delle funzionalità sensoriali dell’automa umano, come la vista e l’udito. (e.g. non per fare il precisino, ma sta roba si chiamerebbe cibernetica. L’IA abita al piano sopra, ascensore a destra).
Non è poco, ma da questo a ricavarne un comportamento intelligente avoglia ancora quanti “tastamenti del cofano del motore” dovremo fare prima di capirci qualcosa 😊
Qualche dettaglio in più
Come funziona una CNN? Perché saper utilizzare questi sistemi è un’opportunità, sia per chi ne apprenderà le tecniche di “programmazione”, sia per gli utenti finali.
Proverò ad esporre un parallelo storico che ritengo concettualmente valido.
Avete presente il database relazionale RDBMS? Oggi tutti usano il modello del database relazionale per organizzare/elaborare i dati al fine di estrarre le informazioni desiderate.
Il compito di un database relazionale è nascondere al programmatore e all’utente che poi utilizzerà il software applicativo, la complessità del motore RDBMS grazie al quale i dati vengono gestiti.
La comunicazione con il motore del database avviene tramite un semplice linguaggio denominato SQL (Structured Query Language) molto facile da apprendere.
Quando si installa un database relazionale è come aprire un nuovo foglio Excel. Tabelle vuote. Tutto da impostare in base a ciò che si intende fare.
E’ compito dell’utilizzatore del database stabilire come organizzare i dati; tabelle, colonne, etc… seguendo le “best practices” che permettono di normalizzare la struttura così da sfruttare al meglio questo sistema.
Ma non è che i computer sono nati assieme al database relazionale. C’è stato un tempo in cui questo strumento non esisteva e ci sono voluti diversi anni prima che la forma relazionale di organizzazione dei dati divenisse uno standard de facto. Si trattò di un passaggio storico fondamentale nell’evoluzione dell’informatica. All’inizio c’erano pochissimi ardimentosi sostenitori dei sistemi RDBMS e moltissimi detrattori.
Con le reti CNN la storia probabilmente si ripeterà in modo simile. Basta non farsi spaventare dall’ “intelligenza artificiale”.
Rispetto a un RDBMS una rete CNN ha un potenziale campo di applicazione enormemente più vasto dato che la sua peculiarità si traduce nel poter elaborare a scopo di classificazione i dati non strutturati (immagini, video, suoni, testi, time series, etc…).
Un database relazionale eseguendo una query SQL sa cosa si sta cercando grazie alle clausole FROM e WHERE. Per questa ragione un RDBMS risponendo a una query è in grado di emettere un giudizio vero/falso; Vero: la query restituisce dei dati. Falso: la query non restituisce dei dati.
Con una CNN la “query” è costituita da un dataset di input (ad esempio un immagine). L’output reso da una CNN è costituito da una deduzione di classificazione esposta secondo un peso di probabilità. Non esiste un vero/falso. Esiste una scala di probabilità della verità, la cui attendibilità dipende da come preventivamente si è provveduto ad addestrare la rete con dei dataset di esempio opportunamente organizzati.
La codifica di un’ immagine a colori avviene tramite una matrice di pixel a tre dimensioni. Un layer per ogni colore RGB (Red, Green, Blu). La profondità del colore di ogni pixel è definita tramite un Byte che come noto permette di codificare un numero da 0 a 255.
Come si popola il “database” di una CNN?
La prima attività cui deve essere sottoposta una CNN si chiama addestramento.
Una rete CNN è concettualmente organizzata in livelli. Ogni livello della rete è composto da un insieme di entità dette unit a loro volta interconnesse con le unit del livello seguente. In questo modo il dataset di training (ad esempio, una collezione di immagini di gatti), grazie alle funzionalità del framework CNN, viene scomposto in sub-strutture elementari che alimentano le unit che formano la struttura a livelli della rete, così da sintetizzarne le feature dei dati in input (le foto dei gatti).
Le unit di una CNN possono essere disposte su numerosi livelli. Le CNN dotate di molti livelli di unit sono definite “deep learning”.
Sintetizzando all’osso, esistono due macro-generi di modelli di reti: le CNN e le R-CNN (R sta per Region).
Le reti CNN sono idonee per rispondere a problemi di classificazione.
Esempio: dispongo di un album di foto e voglio dividere tutte le immagini che contengono gatti da quelle senza gatti. Questo è un processo di classificazione.
Ci sono dei casi, ad esempio le applicazioni di robotica, dove non è sufficiente sapere se nell’immagine c’è probabilmente un gatto. Occorre sapere esattamente dove si trova l’insieme di pixel che individua i mici eventualmente presenti nell’immagine.
Per risolvere questo genere di problemi è stato ideato il modello R-CNN (estensione di una CNN), il quale permette, una volta addestrato, la localizzazione delle istanze di oggetti presenti all’interno del dataset di input.
Ad esempio, sottoponendo a una R-CNN la foto di una cucina, con un micio che dorme su una seggiola e un altro che guarda la padrona mentre prepara il pranzo… con lo sguardo di quest’ultimo micio che dice “state tranquilli, controllo io che alle salsicce non accada nulla…”) . Ecco, una R-CNN è in grado di restituire l’insieme di pixel che identificano e localizzano il micio_01 e il micio_02. Questo processo si chiama segmentazione delle istanze ed è la chiave di volta che rende una R-CNN estremamente efficace nel mondo della robotica e in un’infinità di altri settori, non ultimo dei quali… tenere sott’occhio i gatti in cucina.
Facciamo un esperimento con una rete CNN preventivamente addestrata.
Passiamo come query l’immagine di un gatto. Ricordiamoci che per una rete l’immagine fornita come input null’altro è che una matrice di pixel, e… perfetto! (figura a sinistra, click per ingrandire) Il micio è stato individuato con un buon score di probabilità.
Classificazione riuscita! Questa foto può andare nell’ album “foto di gatti”.
E se il micio si nasconde in un cespuglio? I gatti sono imprevedibili.
Gulp! Il micio che si vede nella foto sopra è stato riconosciuto dalla CNN come essere (poco) probabilmente una farfalla!! Diavolo di un gatto! Come sono capaci di infrascarsi loro nelle siepi…
Buttiamo via tutto?
Sta roba non funziona?
Se il micio s’ infrasca l’ intelligenza artificiale collassa?
No! Proprio qui sta l’opportunità per la nuova professione che noi “veci” lasceremo come testimone ai giovani.
La nuova professione si chiamerà “modellatore-addestratore di reti”. Lo so, fa molto circense, ma addestrare le reti e meglio che addestrare le tigri.
Analizziamo meglio il responso dato dalla rete in merito alla foto con il micio infrascato nel cespuglio.
A ben leggere, la probabilità che nella foto sia presente una farfalla ha un peso molto basso. Questo è il modo con cui una CNN ci comunica “vedi un poco tu…”
La probabilità di trovare il micio nel cespuglio può essere aumentata rivedendo il criterio utilizzato per l’addestramento della rete. In questo punto sta l’ingrediente segreto dello chef.
Più dati si forniscono alla rete in fase di addestramento, migliore sarà il risultato prodotto dalla CNN.
Questa tecnica di pre-processing del dataset di input si chiama “data augmentation”. Si tratta della versione tecnologica della parabola della moltiplicazione dei pesci in chiave CNN.
Prendi un’immagine. Pre-processala, come ad esempio si vede nella gatto-foto sopra… e quello scaltro di un micio dovrà faticare di più per nascondersi così da non essere beccato dalla CNN.
Lasciamo i mici al loro mondo. Però… se ad essere addestrata correttamente sarà una R-CNN, magari… il robot che prima “sbarellava” dopo come un falco scenderà dritto al punto di picking dell’oggetto 😊
Conclusione
Giovini! Inventare nuove applicazioni che sappiano avvantaggiarsi di questi fantastici strumenti è la vostra sfida generazionale. La nuova opportunità che vi sta offrendo il mondo della “computer science”.
In Bocca al Lupo! … o anche al Gatto!
Alcune fonti: