Negli ultimi tempi molte voci autorevoli hanno messo in guardia contro i presunti pericoli dell’Intelligenza Artificiale (IA) e del machine learning (ML), o “apprendimento automatico”. In particolare, hanno destato scalpore le dichiarazioni di Elon Musk, che sostiene che l’IA sia più pericolosa delle bombe nucleari, e quelle di Stephen Hawking, che ha recentemente affermato che la IA potrebbe essere “la cosa migliore o peggiore mai capitata nella storia dell’umanità”. Una lunga lista di scienziati ha scritto una lettera aperta dove si propone di prestare particolare attenzione alla sicurezza dell’IA e alle sue implicazioni economiche e sociali; questa lettera è stata firmata tra gli altri da Yann LeCun, Geoffrey Hinton, e Yoshua Bengio, tre tra i ricercatori più influenti nel campo delle reti neurali e del deep learning — un po’ come se Planck, Schrödinger e Heisenberg avessero fatto una petizione sui pericoli della meccanica quantistica.

Eppure, l’IA non è un’invenzione recente, così come non lo sono le reti neurali. Di cosa abbiamo paura? Forse di vedere algoritmi magari extracomunitari rubare il nostro lavoro, di diventare animali da compagnia di macchine super intelligenti come sostiene Steve Wozniak, o ancora dell’apparizione dei primi robot che dichiarano di voler distruggere gli umani?


La spiegazione che cercherò di fornirvi in queste righe è molto più razionale e va ricercata nella natura della branca dell’intelligenza artificiale oggi dominante nelle aziende e nelle università: il deep learning (DL), o “apprendimento profondo”. Il DL, infatti, ha due aspetti fondamentali che possono incutere timore: primo, è basato sulle reti neurali, un algoritmo di apprendimento automatico che di per sé è di difficile interpretazione; secondo, è una branca del representation learning, traducibile grezzamente come “apprendimento della rappresentazione” o “apprendimento rappresentativo”, una tecnica di apprendimento automatico dove, in parole povere, l’algoritmo non viene istruito su come deve imparare a eseguire il suo compito.

Per capire questi concetti è necessario fare un passo indietro: immaginiamo di essere un programmatore che deve classificare automaticamente la sottospecie di un fiore. In particolare, il nostro algoritmo dovrà decidere se l’Iris ricevuto in input è un Iris Setosa, un Iris Versicolor, o un Iris Virginica. Per farlo, abbiamo a disposizione un database con molti fiori già accuratamente descritti e classificati — e dato che il problema degli Iris è uno dei più classici esempi di machine learning, questo database è realmente disponibile.

Un Iris Verisicolor (da https://commons.wikimedia.org/wiki/File:Iris_versicolor_AF.jpg)

La soluzione più banale è quella di guardare migliaia e migliaia di fiori e cercare di individuare delle caratteristiche che ci aiutano a discriminare tra le tre specie. Per esempio, dopo aver guardato un po’ di descrizioni di fiori nel nostro database, potremmo accorgerci che solo gli Iris Setosa hanno un petalo più corto di 2,5 cm. Ci basterà quindi scrivere un programma che contiene un’istruzione che dice “se l’esemplare ha un petalo con lunghezza minore a 2,5cm, allora è un Iris Setosa”. Andando avanti con la nostra analisi, individueremo nuove caratteristiche che ci permetteranno di discriminare anche tra Iris Versicolor e Iris Virginica. Il programma risultante conterrà una serie di istruzioni, facilmente leggibili e comprensibili, che corrispondono a delle decisioni prese da noi.

Naturalmente, analizzare migliaia di fiori cercando di trovare delle ricorrenze da tradurre poi in istruzioni per il computer è un lavoro lungo e snervante, ed è quindi molto più comodo se a farlo è un algoritmo di machine learning.

Per esempio, un albero di decisione è un algoritmo di ML relativamente semplice, che funziona prendendo una serie di decisioni a partire dalle proprietà (in inglese feature) dell’oggetto da classificare. Scegliendo come proprietà la larghezza e la lunghezza dei petali e dei sepali, si può allenare un semplice albero di decisione che usando tali proprietà è in grado di capire a quale delle tre sottospecie appartiene un Iris con precisione quasi assoluta. Tutto quello che dovremo fare sarà dare le misure di petali e sepali dei nostri fiori contenute nel nostro database all’algoritmo, e lui capirà automaticamente come usarle per assegnare la specie corretta a ogni fiore.

Ma cosa sono petali e sepali?

Per esempio, se un Iris ha un petalo lungo meno di 2,45 cm, il nostro albero deciderà che è un Iris Setosa; oppure, se ha un petalo più lungo di 4,85 cm e più largo di 1,75 cm sarà un Iris Virginica; e così via, come si può vedere nell’immagine qua sotto.

Immagine adattata da http://scikit-learn.org/stable/modules/tree.html

Come si intuisce da questo esempio, una classificazione effettuata da questo algoritmo è analizzabile senza troppe difficoltà, perché si basa su proprietà determinate da noi (larghezza e altezza di petalo e sepalo), che vengono usate dall’albero per apprendere in maniera facilmente comprensibile. In fondo, il modo di ragionare dell’albero di decisione è simile a quello che abbiamo usato quando abbiamo preso manualmente le decisioni su come classificare i fiori, e funziona bene in molti altri casi: se la nostra temperatura è maggiore di 37°C, abbiamo la febbre; se un animale ha otto zampe, è un aracnide; se in cielo c’è il sole, allora è giorno; e così via.


Una rete neurale funziona molto diversamente. Contrariamente a un albero di decisione, che ad ogni passo prende una decisione basata su un solo valore, in una rete neurale solitamente tutte le proprietà vengono fornite a più neuroni contemporaneamente, che le combinano usando una funzione differenziabile (per esempio, la tangente iperbolica o la funzione logistica). Il valore ritornato da questi neuroni viene passato a un altro gruppo di neuroni, che lo analizzano in maniera simile ai precedenti e lo passano a un altro gruppo; e così via, fino a raggiungere il gruppo dei neuroni di output. Nella figura sotto, vediamo una rete neurale con quattro gruppi (detti livelli). Ogni pallina rappresenta un neurone, e ogni linea rappresenta una trasmissione di informazione da un neurone all’altro; ciò che le reti neurali apprendono è proprio il peso assegnato a ognuna di queste connessioni.

Un esempio di architettura di rete neurale utilizzabile per il problema degli Iris.

Se a questo punto vi siete persi, è normale. Vi basta sapere che, per capire se il nostro Iris è un setosa, un versicolor o un virginica ci basta leggere il valore calcolato dai neuroni dell’ultimo livello (quello violetto). Il neurone con il valore più alto dei tre “vince” e la rete assegna all’immagine in input la specie corrispondente. Purtroppo, capire perché la rete ha scelto proprio quella specie non è facile. Nel nostro semplice esempio ci sono meno di cinquanta connessioni, e già in una rete così piccola non è facile determinare l’influenza (per esempio) della lunghezza del petalo nella decisione di classificare un fiore come un Iris setosa, come invece potevamo fare banalmente guardando la “cima” del nostro albero di decisione.

Comunque sia, sappiamo che la rete è partita dalle informazioni che gli abbiamo dato su petali e sepali per prendere una decisione, anche se non sappiamo come ha combinato questi dati. Naturalmente, sono stati sviluppati alcuni algoritmi che cercano di spiegare come le proprietà date in input a una rete neurale vengono processate, ma spesso i loro risultati sono insoddisfacenti, anche per reti così piccole. L’incapacità di spiegare le decisioni è il primo problema degli algoritmi di Deep Learning e, sfortunatamente, è un problema che viene pesantemente esacerbato dalla seconda caratteristica di questi algoritmi.

Se usassimo le moderne tecniche di DL per il problema degli Iris, infatti, l’input della nostra rete non sarebbe composto dal nostro database con le descrizioni dei fiori (come per esempio larghezza e lunghezza di petali e sepali), ma sarebbe semplicemente una foto della pianta da classificare. Starebbe poi alla rete capire quali caratteristiche della pianta guardare per classificarla correttamente. Forse, senza nemmeno sapere cosa sono, imparerebbe a usare proprio larghezza e lunghezza di petalo e sepalo, o magari guarderebbe qualcos’altro: le sfumature del colore, striature particolari, o una forma più o meno rotonda del petalo. Il punto è che noi non spieghiamo a un algoritmo di deep learning come imparare: deve fare tutto da solo, a partire dai dati “grezzi” che gli forniamo in input.


Questa tecnica di apprendimento, chiamata come anticipato representation learning, opera a un livello di astrazione superiore rispetto a un algoritmo di apprendimento automatico che non ne fa uso. Per capire come funziona, facciamo un altro esempio: immaginiamo di dover progettare un robot che cerca di giocare a tris. Nel caso “classico”, non è difficile progettare delle regole da far seguire al nostro robot: per esempio, come nel caso degli Iris, basta scrivere una regola che dice “quando l’avversario ha due caselle sulla stessa riga, se la terza casella è disponibile, prendila tu” (vedi immagine sotto).

Immagine adattata da https://commons.wikimedia.org/wiki/File:Tictactoe-cgt-star.svg

Se il nostro robot, invece, apprendesse usando tecniche di representation learning, tutto ciò non sarebbe necessario. Basterebbe far guardare al robot centinaia o migliaia di partite e lui sarebbe in grado di inferire automaticamente le regole del gioco.

Secondo molti ricercatori, queste tecniche non funzionano diversamente da come alcuni psicologi cognitivi credono funzioni la nostra mente. Per esempio, è acclarato che le reti neurali profonde addestrate per il riconoscimento di oggetti costruiscono diversi livelli di rappresentazione che gli permettono di effettuare astrazioni via via più complesse, riconoscendo prima i bordi, poi le forme, e poi le parti dei vari oggetti (vedi figura sotto). Oppure, similmente al nostro cervello, queste reti sono capaci di riconoscere un oggetto da più angolazioni (come nel principio dell’invarianza della psicologia della Gestalt).

Immagine da http://www.deeplearningbook.org/contents/intro.html

Naturalmente, quando usiamo reti neurali con milioni o miliardi di neuroni e un gran numero di livelli, come nel caso del deep learning, è praticamente inutile cercare di capire come funziona una rete solo analizzandone la struttura e i valori che ha imparato.

Questo è il secondo problema. Se nelle reti neurali usate fino al volgere del secolo non sapevamo come decidevano ma almeno sapevamo in base a cosa, negli algoritmi di apprendimento profondo moderni anche questo aspetto viene a cadere. Per esempio, se vogliamo istruire a un algoritmo di apprendimento automatico “classico” a considerare una certa proprietà per imparare, è facile: se nel caso degli Iris vogliamo che l’algoritmo consideri anche il diametro dello stelo, basta fornigli anche quel valore. Al contrario, se non vogliamo che tenga conto della larghezza del petalo, basta non inserirla tra le proprietà da analizzare. Invece, fare lo stesso con una rete neurale profonda è molto più difficile. Per questa ragione, quando parliamo di algoritmi di deep learning è purtroppo molto difficile capire perché sbagliano, perché prima ancora non siamo del tutto certi di come funzionano.

Per fortuna, non tutto è perduto: così come la psicologia cognitiva studia come il nostro cervello elabora le informazioni, sta nascendo una branca della ricerca che si occupa specificatamente di capire come le reti neurali apprendano e di spiegare le loro decisioni.

Immagine da https://openreview.net/pdf?id=BJ5UeU9xx

Un esempio di queste tecniche è mostrato nell’immagine qua sopra, che mostra una “heat map” che identifica le aree che una rete neurale ha utilizzato per identificare l’oggetto nell’immagine. L’area blu indica le aree che la rete usa a supporto della decisione; le aree rosse sono quelle contrarie alla decisione presa. Questa rete ha correttamente classificato l’animale nell’immagine come un cacatua, usando come informazioni a supporto di questa decisione la cresta, le ali e le zampe. Al contrario, il corpo dell’uccello la confonde, facendola propendere verso il “lupo bianco”.

Dei ricercatori dell’Istituto Max Planck di Saarbrücken hanno invece sviluppato una tecnica che fa “parlare” una rete neurale: per esempio, in un’immagine di una partita di baseball, la rete riconosce il gioco spiegando che il motivo è che c’è “una persona che regge una mazza”.

Oppure, in un’immagine simile a quella mostrata sopra, il loro algoritmo è in grado di riconoscere che il soggetto della foto è la “danza caraibica”, perché “la ragazza veste un vestito caraibico e sta ballando di fronte a un gruppo”.


Nonostante lo sviluppo delle tecniche per capire le decisioni delle reti neurali sia ancora agli albori bisogna sottolineare che i risultati ottenuti dal deep learning sono comunque strabilianti se solo comparati a quello che si pensava possibile una decina di anni fa. Grazie all’invenzione di nuove architetture di rete e all’avanzamento della tecnologie delle schede video, le reti neurali — che fino a qualche anno fa erano state dimenticate proprio per la loro difficoltà di interpretazione — sono tornate prepotentemente di moda. Senza il deep learning non avremmo il pilota automatico sulle automobili Tesla, Siri sarebbe molto meno utile, le traduzioni di Google non sarebbero così precise, e Netflix non riuscirebbe a tenerci incollati sempre sul divano proponendoci sempre la puntata giusta da guardare.

Certo, queste tecnologie non sono perfette. Però, mentre se Siri non trascrive bene il messaggio che abbiamo dettato non succede niente, quando un’auto autonoma ha un incidente è bene capire esattamente perché è successo. Ha confuso un semaforo rosso con uno verde? Credeva di avere la precedenza? Pensava che l’altra automobile si fermasse?

Come abbiamo visto, al momento non siamo in grado di avere facilmente queste risposte, e questo è ciò che spaventa. Pensiamo alle armi automatiche: cosa succederebbe se al posto di colpire il bersaglio designato un missile autonomo colpisse una scuola, o un ospedale? Saremmo abbastanza sicuri che un’eventualità del genere non potrebbe succedere? In caso contrario, dato che un algoritmo di DL non ha una programmazione esplicita sul come prendere le decisioni, su chi cadrebbe la colpa? Infine, soprattutto, saremmo in grado di accettare gli “errori umani” che inevitabilmente faranno le macchine, o pretenderemo da loro la precisione assoluta?

Un esempio calzante è il mondo della medicina. Quando, nel 2015, i ricercatori dell’ospedale Mount Sinai di New York hanno sviluppato Deep Patient, un software per la diagnostica basato sull’apprendimento profondo, si sono ritrovati fra le mani un sistema in grado di predire l’emersione di disturbi psichiatrici nei pazienti meglio dei medici. Per esempio, Deep Patient è in grado di riconoscere l’emergenza della schizofrenia, un disturbo notoriamente difficile da diagnosticare, prima e meglio degli psichiatri. Anche in questo caso, però, gli sviluppatori del sistema non sono in grado di stabilire perché diagnostichi correttamente queste malattie. Saremmo quindi in grado di vivere in un mondo dove i computer ci dicono che tra un anno svilupperemo una certa malattia, senza spiegarci perché? Ci sarebbero pazienti — o sistemi sanitari — disposti a iniziare complesse e costose cure in base a decisioni che nessuno sa spiegare? E quando saremo in grado di capire le decisioni di un sistema come Deep Patient, saremo pronti ad accettarle — moralmente e giuridicamente?

Al momento, non siamo pronti per rispondere a tutte queste domande. Per fortuna, visto lo stato dell’arte dell’intelligenza artificiale non è ancora abbastanza avanzato da capire esattamente il funzionamento delle reti neurali, è estremamente difficile che vedremo a breve — a parere di chi scrive, entro i prossimi cinque anni — una diffusione di massa sistemi completamente autonomi basati su queste tecnologie. Piuttosto, sarà più comune vedere l’intelligenza artificiale lavorare a supporto delle decisioni umane: per esempio, l’Autopilot di Tesla non è veramente un pilota automatico, visto che richiede la nostra costante attenzione sulla strada, e tecnologie come Deep Patient potrebbero indicare le possibili malattie di un paziente, che il medico dovrebbe poi approfondire “manualmente” e su cui l’umano avrà sempre l’ultima parola.

Attenzione, però: quando la tecnologia sarà abbastanza matura per essere completamente autonoma, noi dovremo essere abbastanza maturi da conviverci. Abbiamo già accettato che, in molti campi, le macchine sono operai migliori e più efficienti degli umani. Saremo in grado di accettare e convivere con un mondo dove le macchine saranno piloti migliori, medici migliori e, perché no, soldati migliori? Un medico avrà il coraggio di contraddire la diagnosi di un algoritmo? E tutti noi, avremo ancora il coraggio di guidare, sapendo che la nostra macchina sarebbe in grado di farlo meglio da sola? Peggio ancora: nel malaugurato caso di un incidente, la nostra assicurazione ci pagherà se scoprirà che a guidare eravamo noi, anziché la macchina?

A sinistra un immagine a bassa risoluzione, a destra l’immagine corrispondente a risoluzione normale, al centro l’immagine ricostruita dal sistema sviluppato da Google. Da https://arxiv.org/pdf/1702.00783.pdf

Ai posteri l’ardua sentenza. Intanto, accontentiamoci delle reti neurali che realizzano il sogno di CSI: ovvero, lo zoom infinito. In Google, infatti, hanno sviluppato un sistema che, da foto di soli 8x8 pixel — ovvero una frazione infinitesimale della risoluzione della fotocamera del vostro cellulare — riesce a restituire un’immagine da cui è possibile riconoscere un volto. Chissà se qualche giudice accetterebbe i risultati di questo sistema in un processo…