In questo articolo Cristiano Malossi, che lavora nel gruppo di Foundations of Cognitive Solutions del centro di ricerca IBM di Zurigo, ci racconta come funzionano le reti neurali, su cui si basano molte delle tecnologie di apprendimento automatico, e come la Matematica può aiutarci a migliorarle.
di Cristiano Malossi
Negli ultimi anni le reti neurali (in inglese più comunemente note come “neural networks”) sono gradualmente entrate a far parte della nostra vita quotidiana. Spesso non ce ne rendiamo conto, eppure diverse applicazioni e giochi presenti sui nostri smartphone, utilizzano modelli a rete neurale per creare effetti o manipolazioni di immagini e suoni. Basti pensare alla videocamera integrata, oggi in grado di riconoscere i volti e gli occhi delle persone, oppure al correttore automatico, in grado di interpretare il significato delle nostre parole, correggere il testo e suggerire cambiamenti.
Le applicazioni di reti neurali sono innumerevoli. Citandone solo alcune troviamo: classificazione di immagini e riconoscimento di oggetti, ricostruzione di immagini a bassa definizione e generazione di modelli, descrizione di immagini o animazioni in video, traduzione e interpretazione del significato di testi e linguaggio parlato, fino ad arrivare a risolvere giochi complessi e superare l’abilità umana in famosi quiz televisivi, come fece nel 2011 IBM Watson sfidando e battendo due tra i più forti campioni di Jeopardy, un famoso quiz televisivo statunitense; l’esperimento fu un successo e dimostrò come Watson fosse non solo in grado di risolvere un problema inverso (i concorrenti di Jeopardy devono infatti formulare la domanda corretta per una data risposta), ma anche di esprimersi utilizzando un linguaggio parlato corretto, il tutto elaborato in poche frazioni di secondo.
Ma come sono fatte le reti neurali? Ogni rete è costituita da diversi strati (in inglese “layers”), ciascuno collegato al successivo. Ogni strato può avere caratteristiche diverse, non solo in termini di dimensione, ma anche come tipologia. Il più classico elemento è un layer di nodi (comunemente chiamati neuroni per analogia – per la verità molto limitata – con la rete neurale celebrale), solitamente usato per problemi di classificazione facili (poche classi e immagini molto diverse tra loro). Per il riconoscimento di oggetti in immagini, layers di convoluzione sono solitamente più efficaci, mentre processare sequenze come testo e musica richiede reti ricorrenti (“recurrent networks”) o i più complessi LSTM (Long-Short Term Memory). Vi sono poi decine di parametri da scegliere per completare il modello.
Creare una rete è piuttosto semplice, tuttavia generare una rete efficace, in grado di funzionare con un’accuratezza pari o superiore a quella umana su un set di dati complesso è tutt’altra storia. Per alcuni dei dataset più semplici disponibili in letteratura, come CIFAR-100, il modello migliore raggiunge infatti livelli di accuratezza al di sotto dell’80% [1]. Questo è dovuto al fatto che il processo di creazione di una rete neurale è completamente empirico: lo sviluppatore, in base alla propria esperienza, sceglie numero, dimensione e tipologia di layers da utilizzare. In seguito, allena la rete e raggiunge un valore di accuratezza solitamente inferiore a quanto desiderato. Questo processo per le reti più grandi può richiedere anche 2 o 3 settimane e deve essere ripetuto decine o più volte per raggiungere valori di accuratezza soddisfacenti. Il risultato finale è in ogni caso sub-ottimale, in quanto basato su un procedimento “prova e correggi” dettato dall’esperienza dello sviluppatore, e non da un algoritmo di ottimizzazione globale.
Per ridurre drasticamente i tempi di creazione di una rete neurale efficiente, al laboratorio di ricerca IBM di Rüschlikon, nei pressi di Zurigo (https://www.zurich.ibm.com), stiamo lavorando su tecniche automatiche di generazione e crescita di reti neurali. A differenza dei principali lavori di riferimento pubblicati in letteratura, basati in gran parte su approcci “forza bruta”, ovvero che provano la maggior parte delle combinazioni possibili scartando via via le peggiori (si veda ad esempio [2]), l’approccio che stiamo seguendo è evolutivo, ovvero basato su graduali piccoli miglioramenti da applicare su una singola rete neurale.
Sebbene infatti un approccio forza bruta possa portare al risultato desiderato, è piuttosto evidente che non è utilizzabile nella pratica quotidiana, in quanto richiede risorse e tempi di calcolo al di fuori delle possibilità della maggior parte degli utilizzatori, e comunque non compatibili con la velocità di ricerca e sviluppo necessaria in campo industriale. Al contrario, un approccio evolutivo [3] è percorribile su un singolo nodo di calcolo ed in tempi ragionevoli, tuttavia richiede che ogni piccola evoluzione vada nella direzione corretta, lasciando meno margine al caso e ad errori. Per fare ciò, quattro quesiti devono trovare risposta: “come?”, “quando?”, “dove?”, e “cosa?”. Più precisamente: come modificare una rete senza dover ripartire da zero (senza azzerarla) aggiungendo o rimuovendo layers di neuroni. Quando è opportuno introdurre una modifica. Dove introdurre la modifica, e cosa modificare.
La matematica può aiutarci a rispondere ad alcune di queste domande: è infatti necessario sviluppare algoritmi di ottimizzazione più complessi del metodo di discesa del gradiente (“gradient descend”) comunemente utilizzato in letteratura, e basati su una più completa comprensione delle reti neurali e sul perché esse funzionino così bene. Tecniche come Bayesian optimization dei parametri della rete, vanno sicuramente in questa direzione; tuttavia scalfiscono appena la superficie di un problema molto complesso e che ultimamente sembra essere passato in secondo piano, data l’apparente facilità di creare una rete neurale funzionante.
Alla base del problema vi è il fatto che nessuno sia ancora riuscito a descrivere e formalizzare a livello teorico il funzionamento delle reti neurali. In altre parole, sebbene le operazioni matematiche dietro ad una qualunque rete siano piuttosto semplici (prodotti matrice-matrice, matrice-vettore, ed una serie di funzioni di attivazione non lineari tra cui esponenziali, arco-tangenti, e logaritmi), non esiste alcun teorema matematico che colleghi la dimensione e la struttura della rete con l’accuratezza/precisione raggiungibile dalla stessa. Nei classici problemi di calcolo scientifico si può ad esempio dimostrare come vi sia un legame tra la dimensione della griglia di calcolo e l’andamento dell’errore. Se riusciremo a colmare questa lacuna, le tecniche basate su reti neurali potranno essere applicate con ancor maggior successo ad un sempre più ampio numero problemi, e continuare così a rivoluzionare la nostra vita quotidiana, la ricerca, e lo sviluppo industriale.
Breve bio autore
Referenze:
[2] E. Real, S. Moore, A. Selle, S. Saxena, Y.L. Suematsu, J. Tan, Q. Le, A. Kurakin, Large-Scale Evolution of Image Classifiers, Neural and Evolutionary Computing, 2017. https://arxiv.org/abs/1703.01041
[3] R. Istrate, A. C. I. Malossi, C. Bekas and D. Nikolopoulos. Incremental Training of Deep Convolutional Neural Networks. In Proceedings of AutoML 2017 @ ECML-PKDD, Skopje, Macedonia, September 22nd, 2017. https://sites.google.com/site/automl2017ecmlpkdd/workshop/accepted-papers