Dispositivi come auto automatiche e case intelligenti sono ormai entrati nel gergo quotidiano. Rendere una macchina ‘intelligente’ è comunque una sfida complessa; di recente, però, c'è stato un notevole balzo in avanti, legato sia all'introduzione del GPGPU, che ha aumentato le potenzialità dei nostri calcolatori, sia a notevoli avanzamenti nel campo del machine learning, che hanno reso possibile emulare il ragionamento umano. In questo articolo, parleremo di questo, illustrando il perché stia raccogliendo le attenzioni dei ricercatori e dell’industria.
Dal Turco a Turing
La comprensione dei meccanismi di apprendimento ed inferenza di conoscenza del cervello umano è complessa, ma attira numerose attenzioni (e ricerche) da ormai molto tempo. I primi esperimenti in tal senso sono riconducibili alla fine del diciottesimo secolo quando, in alcune corti nobiliari tedesche, si poteva trovare un esemplare del Turco di von Kempelen, una 'macchina' in grado di giocare a scacchi, e battere, un essere umano. Ovviamente, un automa del genere non poteva esistere a quel tempo: e, infatti, il Turco era un guscio vuoto, adatto ad ospitare, al suo interno, una persona di bassa statura.
Nella prima metà del secolo scorso, però, le cose iniziarono a farsi serie: Turing formulò il suo test, che definisce intelligente una macchina in grado di ingannare, in una conversazione, un interlocutore, facendogli credere di trovarsi di fronte ad un altro essere umano. Per dovere di cronaca, il test di Turing non è ancora stato superato (o, forse, sì, ma l'argomento è oggetto di controversie). In seguito, nel 1956, durante una serie di conferenze tenutesi a Dartmouth, furono definiti i concetti di intelligenza artificiale generale (general AI), propria di macchine in grado di replicare in maniera completa i comportamenti umani (come Terminator, o C-3PO), e di intelligenza artificiale ristretta (narrow AI), focalizzata su uno specifico ambito di conoscenza; ed è qui che si iniziò a definire il moderno campo dell'intelligenza artificiale; per ulteriori dettagli 'storici', vi rimandiamo a un nostro articolo precedente.
Macchine che apprendono
Poniamoci una domanda, che esuli dalle definizioni formali: quali sono le macchine che, al giorno d'oggi, definiamo 'intelligenti'? In generale, possiamo definire come 'intelligente' una macchina in grado di riconoscere lo stato in cui si trova, ed agire di conseguenza. Ad esempio, una self-driving car deve agire in base alle condizioni della strada, dei pedoni e delle altre auto, mentre un macchinario industriale esegue ciclicamente una serie di operazioni, interrompendole in determinate situazioni (ad esempio, un essere umano nel raggio di azione, un incendio, e così via).
Consideriamo una self-driving car. L'idea più semplice sarebbe modellarne il comportamento mediante una macchina a stati, considerando magari un mondo semplificato, nel quale l'auto può solo accelerare e sterzare, ed è in grado di distinguere tra semaforo verde e rosso; mapperemo quindi tutte le possibili coppie stato/azione in una LUT:
- Accelera fino ad arrivare alla velocità di crociera.
- Se trovi un semaforo, ed è verde verde, prosegui.
- Se trovi un semaforo, ed è rosso, fermati. Al verde, torna ad uno.
- Se il percorso prevede una svolta, gira nella direzione opportuna.
Semplice, giusto? Ma cosa succede se teniamo in conto i pedoni? Ovviamente, dovremo rivedere lo schema precedente, inserendo almeno un nuovo stato:
- ...
- Se trovi un pedone, fermati. Quando il pedone è fuori dal campo visivo, torna ad 1.
- …
E cosa accade se occorre evitare un'altra auto, la cui posizione e velocità variano in maniera dinamica? Ovviamente, occorre modificare di nuovo la macchina a stati. E i possibili stati aumentano esponenzialmente con all'aumento delle variabili considerate, fino a rendere questo approccio 'hard-coded' ingestibile: ed è qui che entra in gioco il concetto di machine learning, ossia di macchine in grado di apprendere, e rispondere autonomamente a stimoli esterni.
Per illustrare i vantaggi di una macchina che apprende automaticamente, analizziamo nello specifico uno dei problemi che devono essere risolti dalla nostra self-driving car, ossia il riconoscimento dei segnali stradali. L'auto deve riconoscere segnali di diverso tipo (obblighi, precedenze, etc.), in differenti condizioni (inquadratura perfetta, fenomeni occlusivi, nebbia, inquadrature di lato, etc.); per farlo, esistono vari metodi, a partire da quelli supervisionati, che sfruttano la conoscenza di un esperto, il quale individua un insieme di 'caratteristiche', o feature, che permettono di distinguere ciascun segnale dagli altri (ad esempio, forma, colore e scritta); queste sono utilizzate per addestrare un classificatore, il quale sarà in grado di determinare la classe di un segnale mai visto in precedenza. Gli approcci supervisionati, però, hanno dei limiti: alle volte non è semplice trovare un insieme di feature sufficientemente discriminative, ed è probabile che si scelga un insieme sub-ottimo, andando quindi a considerare caratteristiche inadatte ai fini della classificazione (ad esempio, lo spessore dei segnali stradali, o la loro distanza dal suolo). Di conseguenza, nel corso degli anni sono stati sviluppati diversi approcci non supervisionati, tra i quali i più conosciuti sono le artificial neural network (ANN), di cui abbiamo già accennato in un nostro precedente articolo.
Emulare il cervello umano
Le ANN (più comunemente note come reti neurali) si ispirano al cervello umano, il quale è composto da un elevato numero di neuroni (compreso tra i 10 ed i 100 miliardi), fittamente interconnessi. Ovviamente, una struttura che riproduca fedelmente un cervello umano non è, con la tecnologia attuale, realizzabile; di conseguenza, le ANN sono organizzate in strati, o layer, successivi di neuroni; ogni neurone è connesso esclusivamente a tutti i neuroni degli strati immediatamente precedente e successivo, definendo una direzione di propagazione dei dati, ed agisce da sommatore, pesando l'ingresso in funzione del peso assegnato a ciascuna connessione con i neuroni dello strato precedente; tali pesi rappresentano l'affinità tra i neuroni di strati successivi: nel nostro caso, immaginando che i neuroni dello strato 1 si attivino in base al colore del segnale stradale, e quelli dello strato 2 in base alla forma dello stesso, è probabile che i neuroni fortemente attivi in caso di segnale blu abbiano connessioni molto forti con i neuroni attivi in caso di segnale di forma circolare o rettangolare, mentre le connessioni con i neuroni attivi in caso di forma triangolare abbiano minor rilevanza.
[...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2521 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
L’intelligenza artificiale conquisterà parecchi settori industriali, da capire se “conquisterà” anche noi 🙂
Assolutamente sì, ed un po’ di cose si muovono (vedi i personal assistant come Google Home o Amazon Alexa). Inoltre, se in campo industriale è relativamente semplice ‘istruire’ una IA a massimizzare una funzione obiettivo, è estremamente interessante pensare a come ‘indirizzare’ i loro comportamenti nell’ambito quotidiano, e questo è un argomento di vivo interesse nella comunità scientifica (in tal senso, suggerisco di dare un’occhiata all’intervento di Nick Bostrom al TED-Talk, facilmente reperibile su YouTube).
Articolo molto interessante e attuale. Vista la tua esperienza in materia, vorrei chiederti 2 ragguagli su come procedere nello studio di questa interessante materia. Parto subito col dirti che io sarei interessato a usare la Raspberry PI per testare reti neurali di questo tipo. Dopo avere googlato 1 po’, ho visto che TensorFlow e’ un’ottima partenza, Mi chiedevo se dovessi poi spostarmi necessariamente su verticalizzazioni quali Keras o simili. Io sono interessato soprattutto alla parte matematica del machine learning e deep learning. Mi puoi consigliare qualche buon testo? Grazie 1000 per il supporto.
Buongiorno Riccardo, e grazie a te per la domanda. Hai detto bene: TensorFlow è, di fatto, diventato lo standard per tutto ciò che riguarda il deep learning. Ed hai anche ragione su Keras: essendo stato integrato direttamente nelle API a partire dalla 1.8, è pienamente supportato da TensorFlow, e permette di astrarti da alcune sue ‘complicazioni’ che, almeno all’inizio, potrebbero renderti la vita un po’ più complessa. Per quello che riguarda un buon libro di testo, poi, mi sento di consigliarti Deep Learning di Ian Goodfellow, che ti offre una panoramica completa (ed estremamente approfondita) delle principali tematiche della materia.
Grazie Angelo delle dritte. Avevo visto il libro di Goddfellow e sicuramente lo prendero’ a breve. Detto questo, il mio amore per le ANN risale a 20 anni fa, quando ancora facevi tutto a mano in C++, aggiustandoti i pesi e allenando la rete per conto tuo.
Attualmente vedo che le cose sono cambiate solo nel senso di avere delle librerie che fanno questo per te. Ad esempio nel Deep Learning relativo ad ANN, vedo che non c’e’ molto piu’ di 20 anni fa, feedforward, backpropagation e simili. Essendo io un Matematico di estrazione e di lavoro, forse continua a interessarmi di piu’ la parte a basso livello. Ma uno studio dei “tempi moderni” non puo’ che aiutare, magari anche solo per il curriculum. Grazie ancora.