Una fetta sempre più ampia delle nostre attività si svolgono con l’ausilio dei sistemi digitali: computer fissi e portatili, telefoni cellulari, orologi “smart”, televisori connessi, assistenti vocali. Tutti questi oggetti – e le reti che li collegano tra loro – hanno in comune una cosa: al loro fondamento c’è una trattazione digitale dell’informazione, ovvero che si tratti di fotografie, comandi vocali, videochiamate, film, messaggi o musica, questi vengono tutti rappresentati come una serie di numeri. Appositi programmi (anche loro, in fondo, nient’altro che sequenze numeriche) istruiscono il dispositivo sulle azioni da intraprendere.
William Phillips e il suo computer analogico: breve storia di un economista sfortunato
Computazione analogica e digitale
Agli albori dell’informatica, prima che il calcolatore digitale si imponesse come “la” piattaforma per il trattamento dell’informazione su scala planetaria, c’era però uno sfidante: il computer analogico. A differenza del computer digitale, che esegue operazioni su numeri, ovvero delle grandezze discrete, il computer analogico elabora grandezze continue. La differenza è quella che passa fra il volante dell’automobile e il suo cambio: nel primo, io potrei idealmente posizionare le ruote ad un angolo qualsiasi fra “tutto a sinistra” e “tutto a destra”, agendo con continuità sullo sterzo. La stessa cosa non è possibile per il cambio: fra le seconda e la terza marcia non è possibile innestare una marcia intermedia, la marcia “2,5” per dire. In questo senso potremmo dire che il volante è uno strumento analogico, mentre il cambio è digitale.
Esempi di computer analogici del secolo scorso
Nel secolo scorso sono stati creati molti esempi di computer analogici, ad esempio in ambito militare per il controllo delle batterie navali, come sistemi di puntamento sui bombardieri, per risolvere equazioni integrali, fino ad un computer analogico che usa liquidi colorati per mostrare le interazioni delle grandezze economiche del modello keynesiano[1].
Uno dei limiti che caratterizzano i computer analogici è la loro scarsa adattabilità. I computer analogici, infatti, sono progettati per riprodurre o simulare uno specifico tipo di fenomeno, a differenza dei computer digitali che, semplicemente cambiando programma, possono essere usati per eseguire le funzioni più disparate.
Anche in virtù della loro scarsa flessibilità, questo tipo di sistemi è stato progressivamente abbandonato a partire degli anni ’50, quando la crescente disponibilità di valvole prima e transistor poi rese estremamente più vantaggioso l’uso di sistemi elettronici digitali.
Le reti neurali: matematizzazione di un sistema analogico
Negli scorsi venti anni abbiamo assistito al successo crescente di una particolare incarnazione dell’intelligenza artificiale, le reti neurali. Si tratta di sistemi ispirati ad alcune cellule che costituiscono il cervello, non solo quello umano: i neuroni. Le reti neurali tentano, con successo, di utilizzare strutture ispirate al cervello animale – ovvero aggregati di neuroni interconnessi – per riprodurre alcune delle funzioni associate all’intelligenza: il riconoscimento di forme, l’identificazione di caratteristiche comuni, la generalizzazione ed altre ancora.
Ma come funziona un neurone artificiale? Si tratta di un sistema estremamente semplice, composto di connessioni in ingresso e connessioni in uscita. Al centro siede una funzione di attivazione, che si limita ad inviare un segnale sui suoi collegamenti in uscita, qualora la somma dei segnali in ingresso (somma dei prodotti dei segnali ricevuti su ciascuna connessione di ingresso, moltiplicati per il peso della connessione stessa, rappresentati dalle grandezze ai in figura) superi una certa soglia.
Come si vede, il neurone può essere rappresentato con una somma, ma in realtà si tratta di un sistema a soglia come quelli che troviamo e utilizziamo spesso: si pensi ad un semplice termostato: se la temperatura scende sotto un certo limite impostato, il termostato scatta accendendo il riscaldamento. Quando l’ambiente è caldo a sufficienza, la temperatura fa scattare nuovamente il termostato spegnendo la caldaia. Il tutto avviene senza la necessità di un sistema di calcolo.
Le reti neurali attuali però sono realizzate da algoritmi, programmi eseguiti dai classici calcolatori di digitali di Von Neumann, quelli con una (o più) sistemi di calcolo centrale, le CPU, e banchi di memoria dove risiedono sia i dati sia l’algoritmo stesso. In un computer digitale, i pesi delle connessioni sono rappresentati da numeri, così come sono numeri i valori di attivazione dei neuroni. Benché le operazioni da eseguire per il singolo neurone siano semplici, lo scambio di dati tra la memoria (dove risiedono i “pesi” dei collegamenti, nonché gli “stati di attivazione” di tutti i neuroni) e la CPU diventa molto rapidamente un collo di bottiglia al crescere delle dimensioni della rete neurale, ovvero all’aumentare del numero di neuroni e del numero di interconnessioni di ciascun neurone. La soluzione sin qui adottata è stata di usare computer con un numero crescente di processori, o di utilizzare processori specificatamente progettati per gestire il tipo di calcoli tipici di una rete neurale, i cosiddetti “neural engine” che si trovano nei telefonini delle generazioni più recenti.
In entrambi i casi però si tratta pur sempre di CPU, che non superano quindi i limiti imposti da un sistema di calcolo “classico”. In pratica quindi, le reti neurali odierne sono “simulazioni digitali” di reti di neuroni artificiali, in cui la necessità del continuo passaggio di numeri dalla memoria centrale verso la (le) CPU e viceversa, rende il calcolo inefficiente.
Computazione analogica per le reti neurali
Un approccio innovativo è stato sperimentato nel 2014 da IBM, utilizzando delle memorie non volatili (NVM) di tipo crossbar.
Benché esistano diversi tipi di memoria NVM, tutte memorizzano il dato (un bit) in uno spazio all’incrocio tra una coppia di linee conduttive orizzontali, dette wordline, e una coppia di linee conduttive verticali, dette bitline. I dati vengono “recuperati” attivando una delle linee wordline, e leggendo sulle bitline i bit che compongono una particolare cella di memoria. Questo perché, a seconda dell’entità della resistenza in ciascun incrocio, rappresentante il bit memorizzato, la corrispondente bitline sarà “attiva” (bassa resistenza, la corrente fluisce dalla wordline alla bitline) o “disattiva” (alta resistenza, la corrente della wordline non viene trasferita sulla bitline). I valori delle bitline, che in una memoria tradizionale rappresentano degli “0” e degli “1”, vengono poi trasferiti a chi ne ha fatto richiesta, tipicamente la CPU.
I ricercatori hanno notato che questo particolare tipo di memoria, che immagazzina i dati negli spazi fra coppie di conduttori perpendicolari, con piccole modifiche si presta ad essere utilizzato per computare direttamente in memoria il risultato dell’attivazione di un particolare neurone, senza bisogno di ricorrere alla CPU.
Se al termine di ogni bitline poniamo un condensatore, questo di volta in volta accumulerà le cariche fornite da ciascuna corrente Ii, cariche che per la legge di Coulomb dipendono dall’intensità della corrente e dalla durata della stessa, quindi di fatto eseguendo la funzione di somma dei valori forniti dai vari neuroni in ingresso.
Poiché la durata della tensione applicata è proporzionale al valore di attivazione del neurone, il risultato è che questo sistema può computare direttamente in memoria le somme e moltiplicazioni richieste dai neuroni artificiali[2].
I ricercatori hanno dimostrato che un sistema con 1024×1024 “pesi”, la memoria (o computer analogico) può eseguire l’equivalente di 65.000 miliardi di operazioni al secondo, consumando l’equivalente di 10 femto-Joule di energia[3], il che lo rende 100 volte più efficiente dei sistemi tradizionali, e 10 volte più efficiente di sistemi studiati appositamente per il risparmio energetico.
Benché i risultati siano incoraggianti, restano ancora dei problemi da affrontare.
Il primo riguarda la necessità di concatenare più sistemi di questo tipo, per poter costruire reti neurali con più strati di neuroni. Ma questo significa che l’output di ciascun sistema deve essere usato come input di un sistema analogo in cascata. Al momento questo richiede ulteriori componenti elettronici, che finiscono per dimezzare l’efficienza energetica teorica.
Un secondo problema è legato alla codifica dei pesi delle connessioni nelle resistenze. I fenomeni fisici utilizzati per realizzare le resistenze sono infatti molto “rumorosi”, e questo rumore può creare errori nel funzionamento della rete neurale.
Conclusioni
Questi sistemi analogici possono essere utilizzati anche nella fase di apprendimento, utilizzando l’algoritmo di backpropagation. Ricordiamo che l’algoritmo di backpropagation funziona computando il risultato di un’inferenza con la rete neurale, e poi confrontando l’output ottenuto con l’output atteso. A questo punto, procedendo al contrario (dall’ultimo strato di neuroni verso i primi), si modificano i pesi delle connessioni “avvicinandoli” al valore che avrebbero dovuto avere per fornire un risultato corretto. Nel caso delle NVM, questo aggiornamento dei pesi (delle resistenze) può essere teoricamente eseguito ancora in maniera analogica, ma diverse limitazioni inerenti alla fisica del dispositivo per ora limitano rendono non praticabile questo approccio, consigliando di effettuare l’apprendimento in maniera più tradizionale, ad esempio computando i pesi con un computer digitale, per poi codificare i pesi così calcolati nelle resistenze della NVM, che pertanto viene utilizzata solo nella fase di inferenza.
Si tratta insomma di sistemi che indicano una possibile direzione di sviluppo per rendere le reti neurali energicamente più efficienti, ma che richiedono ancora un significativo sforzo di ricerca da parte di ingegneri, matematici, fisici ed esperti di reti neurali per trovare una soluzione ai problemi che la tecnologia presenta ancora oggi. Tenendo però conto che anche le altre direzioni di ricerca tese a cercare di aumentare l’efficienza energetica delle reti neurali artificiali, non sembrano aver ancora identificato nessun “proiettile d’argento”, è possibile che in futuro qualche forma di computazione analogica possa farsi strada nei sistemi pensati per realizzare reti neurali.
Il MONIAC (Monetary National Income Analogue Computer) , creato nel 1949 dall’economista neozelandese Bill Phillips ↑
Burr G W., Abu S., Takashi A., Wilfried H, “The Femtojoule Promise of Analog AI”, IEEE Spectrum, Novembre 2021 ↑
Un femto-Joule equivale a 10-15 Joule. ↑