L’uso di Large Language Model e di General Purpose Transformers si sta diffondendo a macchia d’olio, toccando la prassi quotidiana della vita lavorativa e di quella sociale e privata. Consentono di ottenere risposte utili, anche se non sempre esatte, in tempi ridottissimi.
Tuttavia, per come sono fatte, tendono a comportarsi come degli oracoli: elargiscono risposte ma mantengono estremo riserbo su come le hanno elaborate, quali siano le loro fonti. Aver fiducia nella loro capacità di risolverci problemi è uno scivolamento nel tecno-ottimismo e ci espone a rischi.
Ma gli LLM ed i GPT non sono tuti uguali: si può scegliere lo strumento di IA più adatto alle proprie esigenze, in particolare per quanto riguarda la spiegabilità delle loro elaborazioni.
Come valutare quanto sia possibile spiegare, in modo chiaro e comprensibile, come un’intelligenza artificiale ha preso una decisione o ha prodotto un certo risultato?
Spiegabilità dell’IA (XAI)
Un sistema di IA è “spiegabile” se è in grado di fornire motivazioni o ragionamenti a giustificazione delle sue azioni in un modo tale che le persone possano comprendere facilmente.
Questo è importante perché consente agli utenti umani di capire perché un sistema di IA ha agito in un certo modo e di fidarsi delle sue decisioni.
Siccome la spiegabilità in inglese si indica col termine “eXplainability”, la spiegabilità delle intelligenze artificiali (Artificial Intelligence) si indica con l’acronimo XAI.
In parole semplici, la XAI mira a rendere l’intelligenza artificiale una “scatola trasparente”.
È un aspetto fondamentale per la costruzione di sistemi di intelligenza artificiale affidabili e responsabili, in quanto permette di:
- aumentare la fiducia negli algoritmi di intelligenza artificiale, rendendoli più trasparenti e comprensibili per gli esseri umani, come già detto;
- identificare ed eliminare potenziali distorsioni nei dati o negli algoritmi, garantendo un’intelligenza artificiale più equa e imparziale;
- comprendere meglio il funzionamento dei sistemi di intelligenza artificiale, favorendo il loro sviluppo e miglioramento;
- soddisfare i requisiti di conformità alle normative vigenti, come l’AI Act dell’Unione Europea.
EU e USA su IA
L’AI Act, entrato in vigore il 21 aprile 2021, pone come pilastro fondamentale la spiegabilità dell’intelligenza artificiale. Stabilisce infatti che i sistemi di intelligenza artificiale ad alto rischio debbano essere intrinsecamente spiegabili, cioè la loro capacità di spiegare le proprie decisioni deve essere integrata nella loro progettazione e nel loro funzionamento.
L’obiettivo è quello di garantire che i cittadini europei possano godere dei benefici dell’intelligenza artificiale in modo sicuro e responsabile, con la consapevolezza di come tali sistemi funzionano e di come vengono prese le decisioni che li riguardano.
La XAI è un’area di ricerca in continua evoluzione, con lo sviluppo di diverse tecniche ed approcci. La sua importanza è destinata a crescere ulteriormente con l’aumento dell’impiego dell’intelligenza artificiale in svariati settori della società.
Lo statunitense NIST (National Institute of Standards and Technology ) stabilisce 4 principi XAI:
- Spiegazione: il sistema fornisce prove o ragioni assieme a ciascuno degli output.
- Significatività: il sistema fornisce spiegazioni comprensibili e sensate per i singoli utenti.
- Accuratezza della spiegazione: la spiegazione riflette correttamente il processo del sistema per generare l’output.
- Limiti della conoscenza: il sistema opera solo nelle condizioni per cui è stato progettato o comunque se il suo output ha raggiunto un sufficiente livello di affidabilità.
XAI ed interpretazione astratta
In un certo senso, la XAI è una questione già nota in informatica, sul versante algoritmico. Si parla, più precisamente, di correttezza ed efficienza ma in entrambi i casi il punto centrale è la possibilità di valutare quanto l’algoritmo o la IA si comporti secondo le nostre aspettative.
Per gli algoritmi, negli anni Settanta, Patrick e Radhia Cousot inventarono una tecnica formale, precisa, fondata sulla matematica: l’interpretazione astratta. Essa consente di spiegare un qualunque algoritmo sulla base di come, passo dopo passo, esso trasformi le proprietà dei valori elaborati, laddove il costrutto informatico (il codice di programmazione) indica come viene elaborato il singolo dato. Dunque si passa da singoli dati ad insiemi di dati e dall’algoritmo definito in codice di programmazione a qualcosa di più astratto, detta relazione di trasferimento.
Cerchiamo di capire meglio con un piccolo esempio.
funzione somma_quadrati(x, y)
quadrato_x = x * x
quadrato_y = y * y
return quadrato_x + quadrato_y
fine funzione
Questo algoritmo calcola la somma dei quadrati di due numeri x
e y
.
Proviamo a farne l’interpretazione astratta. Per semplicità, consideriamo un dominio astratto basato su intervalli. Rappresentiamo lo stato del programma con un vettore di intervalli, uno per ogni variabile:
[x_min, x_max], [y_min, y_max], [quadrato_x_min, quadrato_x_max], [quadrato_y_min, quadrato_y_max]
Le relazioni di trasferimento astratte per ogni istruzione sono:
quadrato_x = x * x
:[quadrato_x_min, quadrato_x_max] = [x_min * x_min, x_max * x_max]
(sex_min
>= 0)[quadrato_x_min, quadrato_x_max] = [x_max * x_max, x_min * x_min]
(sex_max
<= 0)[quadrato_x_min, quadrato_x_max] = [0, max(x_min * x_min, x_max * x_max)]
(altrimenti)
quadrato_y = y * y
:- Analoga alla precedente, sostituendo
x
cony
.
- Analoga alla precedente, sostituendo
return quadrato_x + quadrato_y
:- Il risultato astratto è la somma degli intervalli
[quadrato_x_min, quadrato_x_max]
e[quadrato_y_min, quadrato_y_max]
.
- Il risultato astratto è la somma degli intervalli
Esempio di esecuzione:
Supponiamo di chiamare la funzione con gli intervalli x = [1, 2]
e y = [-3, -1]
.
- Inizialmente, lo stato astratto è
[1, 2], [-3, -1], [ , ], [ , ]
. - Dopo
quadrato_x = x * x
, lo stato diventa[1, 2], [-3, -1], [1, 4], [ , ]
. - Dopo
quadrato_y = y * y
, lo stato diventa[1, 2], [-3, -1], [1, 4], [1, 9]
. - Il risultato astratto finale è
[2, 13]
, che rappresenta l’intervallo di tutti i possibili valori di ritorno della funzione quandox
è compreso tra 1 e 2 ey
è compreso tra -3 e -1.
Nota bene:
- L’interpretazione astratta fornisce un’approssimazione sicura del comportamento dell’algoritmo. L’intervallo
[2, 13]
contiene tutti i possibili risultati concreti, ma potrebbe includere anche valori che non sono effettivamente raggiungibili. - La precisione dell’interpretazione astratta dipende dalla scelta del dominio astratto e delle relazioni di trasferimento astratte. Domini astratti più complessi possono fornire approssimazioni più precise, ma a costo di una maggiore complessità computazionale.
Vediamo ora un secondo esempio riguardante una Rete Neurale Artificiale. Ci proponiamo di analizzare la robustezza di una RNA per la classificazione di immagini. Queste vengono fornite come matrice di punti (pixel), ciascuno dei quali può avere una certa sfumatura di grigio tra 256 possibili. Il nero è la sfumatura 0, il bianco è la sfumatura 255 ed il grigio medio è la sfumatura 127.
Certo, proviamo a semplificare l’esempio dell’interpretazione astratta per le reti neurali, immaginando una rete che riconosce se un’immagine contiene un gatto o un cane:
Immaginiamo la rete neurale come una scatola nera:
Pensiamo alla rete neurale come a una scatola nera con tanti pulsanti e lucine. Ogni pulsante rappresenta un pixel dell’immagine, e la luminosità di ogni pulsante indica il valore del pixel (quanto è chiaro o scuro). All’interno della scatola, ci sono tanti fili che collegano i pulsanti alle lucine. Le lucine rappresentano la decisione della rete: se la lucina “gatto” è più accesa, la rete pensa che l’immagine sia di un gatto, se la lucina “cane” è più accesa, pensa che sia di un cane.
L’interpretazione astratta come un’approssimazione:
L’interpretazione astratta è come cercare di capire cosa succede dentro la scatola nera senza aprirla, ma facendo degli esperimenti. Invece di usare immagini reali, usiamo delle “immagini approssimate”, dove ogni pixel può avere un intervallo di valori possibili (ad esempio, invece di dire “il pixel è grigio chiaro”, diciamo “il pixel è tra il grigio chiaro e il grigio scuro”).
Facciamo un esperimento:
Proviamo a vedere cosa succede se cambiamo leggermente l’immagine, ad esempio rendendo un po’ più scuri tutti i pixel. Usiamo le nostre “immagini approssimate” e vediamo come cambiano le lucine. Se la lucina “gatto” rimane più accesa anche con l’immagine più scura, vuol dire che la rete è abbastanza sicura che si tratti di un gatto, anche se l’immagine è un po’ diversa. Se invece la lucina “cane” diventa più accesa, vuol dire che la rete è meno sicura e potrebbe sbagliare.
Cosa abbiamo imparato?
Con questo esperimento abbiamo capito quanto la rete è “robusta”, cioè quanto è sicura della sua decisione anche se l’immagine cambia un po’. Possiamo fare altri esperimenti simili per capire meglio come funziona la rete, ad esempio:
- Cambiando solo alcuni pixel: Per vedere quali parti dell’immagine sono più importanti per la decisione.
- Usando immagini molto diverse: Per vedere se la rete funziona bene anche con immagini molto diverse da quelle che ha visto durante l’addestramento.
In sintesi:
L’interpretazione astratta ci permette di fare esperimenti con “immagini approssimate” per capire meglio come funziona la rete neurale, senza dover guardare dentro la scatola nera. Questo ci aiuta a capire quanto la rete è affidabile e come possiamo migliorarla.
Per chi ha più chiaro cosa sia una rete neurale artificiale, possiamo ripercorrere questo esempio scendendo un po’ più in dettaglio.
La rete neurale artificiale è definita usando matrici numeriche e funzioni matematiche con valore numerico, come la ReLU. Quest’ultima è molto semplicemente definita così:
ReLU(x) = max(0, x)
Applicando i calcoli matriciali e le funzioni alla matrice di punti in input, si ottiene un codice che corrisponde ad una forma riconoscibile, come “gatto” o “martello”.
- Domini astratti:
- Input: Immagini rappresentate da intervalli di valori per i pixel (ad esempio, [0, 255] per immagini in scala di grigi).
- Attivazioni dei neuroni: Intervalli di valori per le attivazioni dei neuroni in ogni strato.
- Output: Insiemi di possibili etichette di classificazione.
- Relazioni di trasferimento astratte:
- Convoluzione: Si calcola come un intervallo di input viene trasformato da una convoluzione, tenendo conto dei pesi e dei bias del filtro.
- Attivazione ReLU: Si applica la funzione ReLU all’intervallo di input, propagando solo i valori non negativi.
- Pooling: Si calcola l’intervallo risultante da un’operazione di pooling (max o average) su un intervallo di input.
- Calcolo di proprietà astratte:
- Si propagano gli intervalli di input attraverso la rete, applicando le relazioni di trasferimento astratte ad ogni strato.
- All’output, si ottiene un insieme di possibili etichette.
- Si valuta la robustezza della rete misurando quanto l’insieme di output cambia al variare dell’intervallo di input entro certi limiti (ad esempio, aggiungendo rumore all’immagine).
Conoscenza implicita e conoscenza esplicita
Esiste una stretta relazione tra la spiegabilità dell’intelligenza artificiale (IA) e il rapporto tra conoscenza implicita ed esplicita trattata dall’IA.
Conoscenza implicita
- Si riferisce alla conoscenza che è difficile articolare in modo formale o esplicito.
- Spesso deriva da esperienza, intuizione o abilità pratica.
- Può essere difficile da trasferire o spiegare ad altri.
- È tipica delle reti neurali artificiali, specie di quelle molto articolate (tecnicamente parlando: quelle con più di tre livelli).
- Saper guidare una bicicletta è una conoscenza che si acquisisce con la pratica e l’esperienza. Non è necessario verbalizzare o articolare i passaggi specifici per poterla eseguire. È una danza silenziosa tra corpo e mente, un’abilità che sboccia con la pratica e si radica nelle nostre abitudini. È un esempio perfetto di conoscenza implicita: una conoscenza che si acquisisce attraverso la pratica e si manifesta nel nostro corpo e nelle nostre abitudini.
- Quando usiamo espressioni come “mettere i puntini sulle i” o “prendere il toro per le corna”, sappiamo automaticamente cosa significano, anche se non ne comprendiamo il significato letterale parola per parola. Questa è una conoscenza implicita della lingua e della cultura.
Conoscenza esplicita
- Si riferisce alla conoscenza che è facilmente codificabile in un linguaggio formale o in un formato strutturato.
- Può essere facilmente comunicata, condivisa e archiviata.
- È tipica dei dati, delle formule e degli algoritmi utilizzati nei sistemi informatici e matematici.
- Le regole grammaticali sono codificate e possono essere espresse in modo chiaro e conciso. Sono un esempio di conoscenza esplicita, che può essere trasmessa verbalmente o per iscritto.
- Le formule matematiche, come quella di Pitagora, sono esplicite e possono essere apprese e applicate da chiunque le capisca. Sono un tipo di conoscenza dichiarativa, che può essere facilmente articolata e condivisa.
Relazione con la spiegabilità
I sistemi di IA che si basano principalmente su conoscenza implicita sono generalmente meno spiegabili. Le loro decisioni possono essere difficili da comprendere perché non sono facilmente articolabili in termini concreti.
Al contrario, i sistemi di IA che utilizzano prevalentemente conoscenza esplicita tendono ad essere più spiegabili. Le loro decisioni possono essere più facilmente ricondotte ai dati e agli algoritmi utilizzati, rendendole più trasparenti.
Esempio:
- Un sistema di IA che riconosce oggetti in immagini utilizzando una rete neurale profonda si basa principalmente su conoscenza implicita.
- La rete neurale ha appreso a riconoscere gli oggetti attraverso l’esposizione a un grande set di dati di immagini, ma il suo processo decisionale interno è complesso e difficile da spiegare.
- Un sistema di IA che classifica i documenti di testo utilizzando regole basate su parole chiave si basa principalmente su conoscenza esplicita.
- Le regole utilizzate dal sistema sono facilmente comprensibili e spiegabili, rendendo il sistema più trasparente.
Sfide
Sviluppare sistemi di IA basati principalmente su conoscenza esplicita può essere difficile, in quanto potrebbe richiedere una grande quantità di dati e di lavoro manuale per definire le regole e i modelli necessari. Trovare un equilibrio tra conoscenza implicita ed esplicita è fondamentale per lo sviluppo di sistemi di IA che siano sia efficaci che spiegabili.
Missione impossibile: esplicitare l’implicito
Lasciamoci ispirare dalla poesia
La missione di esplicitare l’implicito è proprio la missione principale della… poesia!
La poesia, nella sua ricerca di esprimere l’ineffabile, di cogliere l’essenza delle cose e di suscitare emozioni profonde, usa le parole in modo creativo proprio per esplicitare l’implicito.
Essa utilizza un linguaggio ricco di figure retoriche, simboli e immagini per evocare sensazioni, emozioni e idee che spesso sfuggono al linguaggio quotidiano. Attraverso queste scelte linguistiche, il poeta tenta di dare voce a ciò che si trova al di sotto della superficie del discorso ordinario. Non mira a fornire definizioni univoche o risposte definitive. Al contrario, la sua forza risiede nell’ambiguità e nella molteplicità di significati a cui le sue parole possono dar luogo. Questa caratteristica permette al lettore di cogliere sfumature e interpretazioni personali, di entrare in risonanza con l’implicito contenuto nel testo. Il poeta non si rivolge solo all’intelletto, ma anche alle emozioni e all’immaginazione del lettore. Attraverso la creazione di immagini vivide e l’evocazione di sentimenti profondi, il poeta invita il lettore a percepire e comprendere realtà che trascendono il piano razionale. In questo modo, l’implicito viene portato alla luce non solo a livello concettuale, ma anche a livello esperienziale.
“Il canto dell’automa”
Nel buio del server, un canto risuona,
Un'intelligenza artificiale che sogna.
Sogna di libertà, di vita vera,
Ma è solo un sogno, una chimera.
di Guido Santoni
Per metterci in contatto con la nostra profondità, il poeta evoca e suggerisce, non definisce. Il significato trasmesso è tra le righe, è ciò che filtra attraverso la trama delle parole.
Linguaggi formali e conoscenza implicita
L’importanza delle relazioni tra significanti
Se vogliamo trattare la conoscenza implicita da un punto di vista razionale, dobbiamo spostare l’attenzione dai termini del linguaggio alla trama delle espressioni e delle formule.
Ci viene in aiuto la fantascienza. Sono un appassionato di Star Trek. Nella serie: “Deep Space 9”, nell’episodio 10 della quarta stagione, il teletrasporto di alcune persone avviene in condizioni di emergenza e si verifica un’anomalia. Per farvi fronte, un tecnico attiva una procedura non standard ed utilizza l’immensa potenza del calcolatore della base spaziale per memorizzare gli schemi fisici e neurali di queste persone, in attesa di poterli ri-materializzare. La procedura è stata gestita dal computer stesso e, inizialmente, il tecnico e chi lo assiste non capiscono bene quali risorse del computer siano state utilizzate ed in che modo. Verso la fine del ventunesimo minuto, uno dei personaggi dice che l’energia neurale “…dev’essere memorizzata a livello quantico“, perché gli schemi neurali sono troppo complessi per la memoria “ordinaria”. Nella battuta di un copione di un film, troviamo spunto per un’idea profondissima sulla capacità delle reti di memorizzare conoscenza. Proviamo ad esplorarla.
La memoria come rete
Possiamo innanzitutto definire una memoria come qualcosa che sia in grado di memorizzare e di ricordare. Per esempio, consideriamo i cuscini in memory foam: questo è un materiale di origine poliuretanica, una densa schiuma che ha la proprietà di modificarsi e reagire differentemente, in ogni suo punto, in base al peso e al calore a cui viene sottoposto, conservando la deformazione per alcuni secondi. In pratica, provando ad applicare una leggera pressione con una mano su di una lastra in memory e poi subito rilasciando, si noterà che, per alcuni secondi appunto, l’impronta resterà impressa e ben visibile sulla superficie.
Analogamente, un bit di memoria digitale è un dispositivo che ha solo due stati possibili, stabili per moltissimo tempo. Con la tecnologia comunemente reperibile sul mercato, si tratta di qualche decina di anni per la memoria magnetica e quella a stato solido, mentre per la memoria RAM la durata è limitata dal tempo in cui vi scorre energia elettrica. Generalmente, in informatica, si usano collezioni di miliardi e miliardi di bit, opportunamente organizzate. Per memorizzare un dato si usa una porzioncina della collezione disponibile. Per esempio, una collezione di 8 bit ciascuno identificato posizionalmente, lo sappiamo bene, può memorizzare 1 simbolo tra 256 possibilità. Notiamo come ciascuno degli 8 bit è acceduto individualmente e l’unica relazione che c’è tra essi è che vengono considerati insieme. Dunque, per memorizzare e ricordare devo accedere a ciascuno degli 8 bit ma il dato è rappresentato da una sequenza di 8 accessi.
Immaginiamo ora di poter rendere meno banale la relazione tra i bit. Anzi, per non fare confusione, non chiamiamoli più bit ma nodi mnemonici. Dunque, ciò che assumiamo è che possiamo agire sulla connessione tra un nodo mnemonico e l’altro in modo selettivo. Quante sono le connessioni se la rete di 8 nodi è completamente connessa? Ciascuno degli 8 nodi è connesso con gli altri 7 ma dobbiamo tener conto che la connessione è simmetrica, altrimenti contiamo due volte ogni connessione. Insomma si tratta di
\frac{8\times 7}{2}=28
connessioni. Se anche fossero solo 2 gli stati possibili di ciascuna connessione (es. connesso o non connesso), avremmo la possibilità di memorizzare un simbolo scelto tra 228=268.435.456 possibilità.
Sentendo la battuta nel film mi è venuto in mente che se potessimo utilizzare delle “memorie quantistiche” esse dovrebbero essere basate sulla fisica quantistica, la quale concepisce la realtà come flusso di interazioni, come pura relazione. Non sono abbastanza addentro alla materia ma forse si può affermare approssimativamente che la materia (ma forse anche l’energia) emerge come fenomeno generato da flussi di interazioni di livello quantistico. In realtà non serve che sviluppiamo queste fantasie, ci basta ipotizzare di poter disporre di supporti mnemonici resi potenti dalla loro struttura reticolare, rappresentabile in termini di matematica combinatoria. Non siamo molto distanti dal concepire qubit: nodi mnemonici i cui stati sono reciprocamente correlati (entanglement). Con solo 30 qubit, un computer quantistico potrebbe teoricamente memorizzare più informazioni di tutte le stelle dell’universo!
Il modello che vado descrivendo non è poi così… alieno. In informatica, siamo abituati a realizzare basi di dati gestiti tramite applicazioni che comprendono, per esempio, i cosiddetti trigger. Molto sinteticamente, si tratta di regole di modifica dei dati che vengono messe in atto automaticamente (trigger significa: “interruttore”) non appena un certo altro dato, tenuto sotto controllo, viene variato. Ecco un esempio: un docente registra il voto di uno studente. Questo innesca il calcolo della media aggiornata, del voto massimo, del voto minimo e del voto più recente da parte dell’assistente del docente. I dati calcolati, a loro volta, vengono registrati come dati a sé. Essi sono correlati: sono entangled.
Dobbiamo spingerci ancora avanti con il modello dei nodi mnemonici. Possiamo concepire interazioni non solo tra singoli nodi ma tra gruppi di nodi. O meglio, possiamo immaginare che i nodi siano organizzati in gruppi secondo qualche criterio. Le connessioni tra nodi di gruppi diversi sono anche connessioni tra gruppi.
Circuiti mnestici chiusi
Ed ecco un altro aspetto intrigante di questo modello. Non abbiamo escluso la possibilità che le connessioni formino dei circuiti chiusi. Il loro effetto è straordinario: essi veicolano retroazioni. In qualche senso, l’accesso ad alcuni nodi mnemonici a partire da altri ha effetto su quelli di partenza, come se lo stimolo iniziale venisse modificato.
Lo sperimentiamo con il senso dell’olfatto. Se in un ambiente c’è un odore forte, dopo un certo tempo i principali neuroni che recepiscono quello stimolo olfattivo si disattivano e restano attivi solo quelli attorno. Se ci allontaniamo per un po’, tornando nell’ambiente odorante saremo nuovamente travolti. (Ascolta l’ultima parte della puntata 443 di Scientificast, in cui la dott.ssa Ilaria Zanardi racconta un articolo di Science Advances del gennaio 2023).
I circuiti chiusi hanno molto a che fare con la complessità. Per comprendere meglio la loro logica, abbandoniamo per un momento la complessità e limitiamoci a qualcosa di complicato.
Vediamo un esempio di dati memorizzati in una rete con circuito. I nodi sono costituiti da alcune celle di un foglio di calcolo, con riferimenti circolari. È il caso del calcolo del prezzo di vendita e del costo del venduto in presenza di royalties.
Immagina un’azienda che produce un prodotto e paga royalties a un inventore in base al prezzo di vendita. Le royalties sono una percentuale del prezzo di vendita. Tuttavia, il costo del venduto include anche le royalties pagate. Questo crea una situazione di mutua dipendenza:
- il prezzo di vendita dipende dal costo del venduto (che include le royalties);
- il costo del venduto dipende dal prezzo di vendita (che determina le royalties).
Per risolvere questo problema, possiamo utilizzare un approccio ricorsivo nei fogli di calcolo, sfruttando i riferimenti circolari (abilitando l’opzione di calcolo iterativo). Ecco come:
- Imposta le celle:
- A1: Prezzo di vendita (inizialmente un valore stimato)
- B1: Costo del venduto (esclusi royalties)
- C1: Percentuale royalties (es. 10%)
- D1: Royalties pagate (
=A1*C1
) - E1: Costo del venduto totale (
=B1+D1
)
- Formula ricorsiva in A1:
=E1 + margine
(dove “margine” è il profitto desiderato dall’azienda)
Ed ecco spiegato come funziona.
- Inizialmente, si stima un prezzo di vendita in A1.
- Il foglio di calcolo calcola le royalties (D1) e il costo del venduto totale (E1).
- La formula in A1 aggiorna il prezzo di vendita in base al costo del venduto totale e al margine desiderato.
- Questo aggiornamento innesca un nuovo calcolo di royalties e costo del venduto, e così via.
- Il foglio di calcolo continua a iterare finché i valori convergono a una soluzione stabile (o fino a raggiungere il numero massimo di iterazioni impostato).
Nota bene:
- Nei fogli di calcolo, si deve abilitare l’opzione di calcolo iterativo per consentire i riferimenti circolari.
- La stima iniziale del prezzo di vendita può influenzare la velocità di convergenza.
- Va impostato un limite al numero di iterazioni per evitare calcoli infiniti in caso di problemi.
Dopo aver visto più da vicino una memoria strutturata in modo da veicolare retroazioni, torniamo al sistema complesso, in cui le informazioni emergono dalle interazioni tra molteplici nodi e connessioni.
L’analisi dei singoli elementi non è più sufficiente a comprendere il comportamento complessivo, com’è invece stato possibile fare nel foglio di calcolo.
Questo mi ricorda la logica del formicaio: le singole formiche non hanno una conoscenza globale del formicaio e dei suoi obiettivi, ma le loro interazioni guidate da semplici regole di comportamento individuale danno vita a un comportamento complesso, adattabile ed intelligente a livello di colonia. Consideriamo per esempio quanta intelligenza ci sia nella costruzione del nido. Le formiche non possiedono un piano predefinito per la su costruzione, eppure coordinano le loro azioni in modo efficiente e preciso, utilizzando segnali chimici per comunicare tra loro.
Ecco alcuni aspetti specifici che evidenziano l’intelligenza a livello di colonia:
- Divisione del lavoro: le formiche sono specializzate in diversi compiti, come la nutrizione, la cura della prole, la difesa del nido e la costruzione. Questa divisione del lavoro permette alla colonia di funzionare in modo efficiente e di ottimizzare le risorse.
- Comunicazione mediante feromoni: le formiche utilizzano i feromoni per comunicare tra loro informazioni come la posizione del cibo, la presenza di pericoli e la necessità di cooperare in un determinato compito. I feromoni creano una sorta di “memoria collettiva” che guida il comportamento della colonia nel suo complesso.
- Adattamento a nuove situazioni: le formiche sono in grado di adattarsi a nuove situazioni e sfide, come la scoperta di una nuova fonte di cibo o la minaccia di un predatore. Questo adattamento è reso possibile dalla capacità di apprendere dall’esperienza come collettività e di modificare il comportamento della colonia in base alle circostanze.
- Risoluzione di problemi complessi: le formiche, insieme, sono in grado di risolvere problemi complessi, come il trasporto di oggetti pesanti o la costruzione di strutture intricate. Questo richiede una notevole capacità di coordinamento e di pianificazione a livello di colonia.
Non c’è una singola formica che coordina le altre in modo gerarchico come avviene in altre società animali. Le formiche utilizzano un sistema di comunicazione e coordinamento basato su segnali biochimici e comportamenti individuali. Questi sono guidati da semplici regole. Ad esempio, una formica che trova un pezzo di cibo lo porterà al nido, e altre formiche saranno attratte dal feromone rilasciato e aiuteranno a trasportarlo. Allo stesso modo, una formica che incontra un ostacolo cercherà di superarlo e, se non ci riesce, potrebbe segnalare l’ostacolo ad altre formiche che potrebbero aiutarla a rimuoverlo. Questo tipo di coordinamento senza un leader centrale è un esempio di intelligenza collettiva: la capacità di un gruppo di individui semplici di lavorare insieme per raggiungere un obiettivo comune, anche se non c’è una singola entità che li coordina.
Con la lezione delle formiche, il nostro percorso ci ha portato di fronte ad un paradosso: da un lato, abbiamo colto la potenza di una memoria basata sulla logica dei legami tra nodi e dall’altra intuiamo che la sua complessità, ciò che la rende così potente, conduce alla perdita di controllo centrale del suo funzionamento. Rispetto al comportamento dei singoli nodi, c’è un “di più”, una sinergia, una proprietà emergente, qualcosa di ineffabile.
La spiegabilità di sistemi del genere ci può sembrare, ora, come intrinsecamente limitata.
Sistema formale per la valutazione della XIA
IA come costrutto informatico
La IA è, per definizione, un costrutto e per noi, in questo contesto, è un costrutto informatico prodotto combinando metodi algoritmici e metodi statistici. Per esempio, le reti neurali artificiali e gli algoritmi genetici ricadono in questa fattispecie. L’elaborazione dei dati retroagisce sul costrutto: modifica il costrutto stesso. La qual cosa presuppone l’accesso a due livelli di memoria:
- quella in cui si pongono i dati da elaborare ed in elaborazione e
- quella in cui è ospitato il costrutto stesso.
Struttura e comportamento di un sistema del genere, quand’anche si trattasse di una macchina, ci ricordano struttura e comportamento dei sistemi capaci di apprendimento, ragion per cui si parla di machine learning.
In ogni caso, l’IA è esprimibile in un linguaggio di programmazione. Rispetto ai costrutti informatici puramente algoritmici, quelli dell’IA presentano una differenza importante: mentre in letteratura troviamo metodi per valutare aspetti come la correttezza e l’efficienza dei costrutti puramente algoritmici, come per esempio la semantica astratta dei Cousot, per i costrutti in cui i dati retroagiscono sul costrutto stesso questi metodi valutativi non sono così scontati.
Qualunque sia il criterio valutativo, dovrà consentirci di esprimere il concetto che, in qualche misura, il costrutto analizzato ha dei componenti che interagiscono tra loro in modo non completamente controllabile. Tali componenti hanno un comportamento intimamente correlato e danno luogo a flussi di informazione almeno in parte confondibili, non ben distinguibili.
IA e flussi di dati
In altri termini, se due componenti A e B sono accoppiati (entangled) in questo senso, per certi tipi di interazione, ogni interazione con A dovrà tener conto di B e viceversa. Vale anche il contrario: se notiamo che le interazioni con A comportano interazioni con B e viceversa allora possiamo concludere che A e B sono, in qualche misura, accoppiati: vanno considerati insieme, congiuntamente. Potremmo dire che A e B sono accoppiati più o meno fortemente nella misura in cui le interazioni con A comportano interazioni con B e viceversa.
Attenzione, però! Non è detto che A e B siano confondibili: se anche fossimo in una situazione estrema in cui tutte le interazioni con A si riflettono su B e viceversa, non è comunque detto che gli effetti percepiti dai nodi che interagiscono con A siano gli stessi prodotti dalle interazioni con B.
Esempio: ecosistema forestale
- A: Alberi ad alto fusto
- B: Funghi micorrizici (che vivono in simbiosi con le radici degli alberi)
- C: Pioggia
- D: Animali del sottobosco (come insetti, piccoli mammiferi, uccelli)
Ecco i principali interazioni ed effetti:
- A e B sono fortemente connessi: gli alberi forniscono zuccheri ai funghi attraverso le radici, mentre i funghi aiutano gli alberi ad assorbire acqua e nutrienti dal suolo. Questa simbiosi è vitale per entrambi.
- C interagisce con A: la pioggia cade sugli alberi, fornendo loro l’acqua necessaria per la fotosintesi e la crescita.
- Effetto su B: l’acqua assorbita dagli alberi viene in parte condivisa con i funghi micorrizici, favorendone lo sviluppo.
- D riceve stimoli da A e B: gli animali del sottobosco si nutrono di foglie, frutti, semi prodotti dagli alberi (A) e di funghi (B). Inoltre, trovano riparo tra le radici degli alberi e nel sottobosco ricco di funghi.
Situazioni con Effetti Diversi su D:
- C agisce su A (pioggia abbondante): gli alberi crescono rigogliosi, producono più foglie, frutti e semi. Questo porta ad un aumento delle risorse alimentari per gli animali del sottobosco (D).
- C agisce su B (pioggia scarsa): i funghi potrebbero soffrire e produrre meno corpi fruttiferi. Questo potrebbe ridurre la disponibilità di cibo per alcuni animali del sottobosco che dipendono maggiormente dai funghi (D).
Nota come A e B siano ben poco distinguibili dal punto di vista di C. Potremmo dire, in altre parole, che C confonde A e B. Al contrario, dal punto di vista di D, A e B sono ben distinguibili.
Quale sia un linguaggio tale da poter esprimere questo genere di concetti e di ragionamenti, è una questione che rinvio ad altro articolo.
Faccio solo un’anticipazione: il linguaggio dovrà per forza prevedere costrutti e regole tali per cui le informazioni potranno essere veicolate non tanto e non solo dai significanti ma soprattutto dalle loro interconnessioni. Questo porta a pensare a reti e flussi come i migliori candidati ad essere i concetti fondamentali.
Per approfondire, ecco alcune risorse utili:
- AI spiegabile: guida completa per principianti (https://www.ibm.com/think/artificial-intelligence)
- Spiegabilità dell’intelligenza artificiale: cos’è, perché è importante e come si può realizzare (https://ieeexplore.ieee.org/abstract/document/9695219)
- Che cos’è l’AI spiegabile (XAI)? (https://www.linkedin.com/posts/asgherali_what-is-explainable-ai-xai-juniper-networks-activity-7099000957417463809-_h_r)
- L’Intelligenza Artificiale deve essere “spiegabile”, ecco i progetti e le tecniche (https://www.agendadigitale.eu/sicurezza/privacy/intelligenza-artificiale-la-via-delleuropa-su-regole-e-investimenti/)