Alla ricerca dell’intelligenza… con una manopola o due…

Questo articolo fa parte di una serie di approfondimenti sull’AI — il link conduce a un indice aggiornato.

Sono debitore per i contenuti di questo post a Alejandro Piad Morffis, computer scientist dell’Università dell’Avana, in particolare per i grafici e la demo per illustrare il ruolo dei parametri Temperatura e Top P.


A proposito dell’architettura dei Generative Pre-trained Transformer (GPT) avevamo discusso della “temperatura”, parametro [1] sbarazzino che ci aveva fatto ricordare l’effetto di un buon bicchiere di vino. Sbarazzino ma cruciale per la tanto decantata generatività del sistema.

In realtà i chatbot disponibili in rete non consentono di intervenire su temperatura o altri parametri. Questi sono sistemi aggiustati con valori intermedi per l’utente generico, che non ha tempo e voglia di imparare a tarare la macchina. Sono quindi proposti con valori intermedi, che non possono certo essere ottimali per tutte le circostanze. Tuttavia i chatbot possono essere guidati attraverso il prompt engineering, l’arte di fare domande, che dobbiamo ancora discutere. Quindi perché occuparsi di questi parametri? Per due motivi: da un lato per capire meglio il funzionamento dei chatbot, quindi per imparare a prenderli per quello che sono, dall’altro perché i Large Language Model (LLM) possono essere usati non solo attraverso i chatbot direttamente accessibili in rete ma anche da altre applicazioni; modalità che può interessare le organizzazioni, ad esempio le scuole, come vedremo in seguito.

L’architettura dei modelli è molto complicata e in continua evoluzione ma in essenza serve a fare una sola cosa: dato un qualsivoglia frammento di testo continuarlo con la prossima parola plausibile.

Nell’articolo sui transformer abbiamo visto che ogni volta che questi processano un frammento di testo viene prodotta una distribuzione di pesi estesa a tutti i token disponibili nel vocabolario del modello (qualcosa come 200’000-300’000) dove ogni peso è proporzionale alla probabilità che il token ad esso associato sia quello idoneo a proseguire la frase.

La distribuzione di probabilità viene usata così: il prossimo token viene selezionato a caso ma con una frequenza proporzionale alla barra corrispondente. Quindi, se per esempio il secondo token a sinistra nel grafico ha un peso pari a 4/5 del primo, esso verrà selezionato i 4/5 delle volte rispetto all’altro. Si tratta di un meccanismo che rende più rara la selezione di token con pesi piccoli ma, si badi bene, non impossibile! Nulla vieta che, magari una volta su cento, venga selezionata una voce remota che però non c’entra nulla con il contesto, un’allucinazione appunto. D’altro canto, una certa libertà di selezionare voci un po’ meno probabili è desiderabile, anzi essenziale affinché il sistema possa essere detto generativo. Ovviamente si desidererebbe un meccanismo in grado di raggiungere parole improbabili ma pertinenti, escludendo senz’altro quelle che sono estranee al contesto. Ma se una tale semplice discriminazione fosse possibile non vi sarebbe alcun bisogno della statistica che invece serve proprio a operare decisioni controverse, in base a un qualche criterio del minor danno possibile fra due opposte e contraddittorie tendenze. E delle volte, bisogna ricorrere a vere e proprie “manopole”, manovrando le quali si cerca di domare il sistema a seconda del contesto. Qui ne consideriamo due: il già citato parametro della “temperatura” e quello del “Top-P”.

La temperatura è un valore numerico positivo che in principio può assumere valori fra 0 e infinito ma del quale in pratica si usano valori fra 0 e 1, al massimo 1.5. Esso viene usato per alterare i pesi della distribuzione dei token. Con temperatura uguale a 1 la distribuzione rimane inalterata. Con valori di temperatura maggiori di 1 la distribuzione tende ad appiattirsi:

Se si usano valori più vicini a 0, al contrario, i valori a sinistra risultano ancora maggiori rispetto agli altri. Al limite, per T=0 il sistema diventa deterministico perché la distribuzione si riduce solo al primo token, dato che i pesi di tutti gli altri si annullano.

Invece la distribuzione più piatta che si ottiene con valori T>1 aumenta la libertà di selezionare token meno scontati ma al prezzo di introdurre qualche token estraneo al contesto: la “creatività” può così divenire follia. Qui entra in gioco l’altro parametro, Top P, con il quale si può limitare l’insieme dei token papabili a quelli più probabili:

Il parametro Top P è una probabilità, quindi compresa fra 0 e 1, e rappresenta la somma delle probabilità dei token ai quali vogliamo restringere la selezione. Per esempio se Top P = 0.7 vuol dire che si usano i token più “pesanti” la cui somma però non superi il valore di 0.7, e tutti gli altri vengono esclusi. L’operazione di limitare la rosa di token papabili prende il nome di nucleus sampling. Vi sono altri metodi del genere, per esempio si può stabilire una soglia data non dalla probabilità cumulativa ma dal numero massimo di token che vogliamo includere, il parametro in tal caso si chiama Top K. Qui proseguiamo con Top P, perfettamente adeguato per i nostri scopi.

Vediamo gli effetti di questi parametri in un caso concreto. Lo possiamo fare facilmente grazie a una demo realizzata da Alejandro Piad Morffis che consiste in un chatbot “fatto in casa” in grado di replicare più volte simultaneamente la stessa domanda, al fine di studiare la variabilità delle risposte del sistema. La demo utilizza un modello fornito da Mistral.ai, una giovane azienda molto attiva nell’arena AI [2]. Mistral.ai distribuisce i propri modelli come open source, consentendo quindi a chiunque di sviluppare le proprie applicazioni. La crescita esplosiva delle applicazioni di AI è in buona parte dovuta alla proliferazione di tali varianti open source, in una misura che non si era mai vista prima.

Mistral.ai produce vari modelli diversi per dimensioni e orientamento. La demo impiega il modello Mistral 8x7B, in grado di lavorare anche in italiano, francese, tedesco e spagnolo, oltre che in inglese. Il modello ha 45 milioni di parametri, molti meno degli 1.8 miliardi di GPT 4 o dei 180 milioni di GPT 3.5, ma è più che adeguato per i nostri scopi. Anzi, potremmo dire che toccare più facilmente i limiti del sistema può aiutare a capire meglio i concetti che ci interessano.

Chiediamo dunque di dare tre risposte successive alla seguente richiesta:

scrivimi una poesia su un robot solitario

Partiamo con questi valori: T=1, Top P=0.90

Clicca l’immagine per leggere

Sono non poco diverse queste storie, per contenuto, forma e, addirittura lingua! Viene da pensare che se avessimo posto la domanda in inglese al sistema non sarebbe “nemmeno venuto in mente” di rispondere in altre lingue. Invece in italiano sì. Torneremo su questo tema. Potremmo riformulare la domanda ponendo dei vincoli, fra cui quello di usare solo l’italiano. Lo faremo in altri esperimenti, ora ci interessa capire il ruolo dei parametri T e Top P.

Possiamo provare a ridurre la creatività, riducendo la temperatura con T=0.5, Top P=0.90

Clicca l’immagine per leggere

Le risposte sono più uniformi ma rimane la questione della lingua. Proviamo allora a esagerare, portando la temperatura a 0: T=0.0, Top P=1.0 [3]

Clicca l’immagine per leggere

Effettivamente si verifica che così il sistema è diventato deterministico: le tre risposte sono identiche, e ci siamo così liberati dell’inglese. Proviamo allora a incrementare cautamente la temperatura sperando di rendere il sistema un po’ più brillante ma senza diversioni linguistiche:

T=0.1, Top P=0.9

Clicca l’immagine per leggere

È interessante vedere come le divergenze compaiano progressivamente. Gli incipit sono eguali poi le prime divergenze ne causano delle altre, sempre più divaricate. Questo è proprio il comportamento tipico dei transformer, che aggiungono ogni parola tenendo conto del contesto creato dalle precedenti.

Siamo inoltre riusciti a rimanere sull’italiano. Proviamo allora a spingere l’acceleratore un altro po’ con T=0.2, Top P=0.9

Clicca l’immagine per leggere

Ecco, è riapparso l’inglese. Lasciamo ora perdere la questione della lingua e proviamo ad esplorare l’altro estremo, con T=1.5, Top P=0.9

Qui siamo finiti nell’allucinazione conclamata, con storpiature varie. Proviamo a ridurre le vaghezze lessicali agendo sul nucleus sampling, vale a dire riducendo il numero di token entro i quali scegliere i prossimi, con T=1.5, Top P=0.5

Clicca l’immagine per leggere

Ci siamo riusciti ma ci siamo persi addirittura l’italiano! Riaggiustiamo un po’ con T=1.5, Top P=0.75

Clicca l’immagine per leggere

Un po’ meglio ma ci fermiamo qui, forse con un po’ di confusione in testa — è quello che volevamo: abbiamo alzato il cofano e abbiamo provato a giocare un po’ con un paio di manopole sul motore, per constatare quanto poco ci metta il sistema a perdere la bussola. Ecco, se questo scherzo ha reso il lettore un po’ più prudente nel parlare con disinvoltura di intelligenza, allora abbiamo colto nel segno. Più prudenti, come gli studiosi che ci lavorano, che delle volte usano quasi con pudore la parola intelligenza.


[1] Usiamo genericamente il termine parametri per non appesantire il testo ma va tenuta a mente la differenza fra parametri e iperparametri. I parametri sono valori numerici determinati mediante la fase di addestramento del modello. Per esempio i valori di soglia degli ingressi di ciascun nodo. Sono i più numerosi, fino a circa 180 miliardi in GPT 4. Invece temperatura, Top P, Top K, ma anche numero di livelli nascosti ecc. sono gli iperparametri che vengono regolati per modulare il comportamenteo del modello.
Torna al testo

[2] Mistral.ai è un’azienda francese specializzata in prodotti di intelligenza artificiale (AI). Fondata nell’aprile del 2023 da ex dipendenti di Meta Platforms e Google DeepMind, l’azienda ha rapidamente conquistato una posizione di rilievo nello scenario dell’AI. L’azienda si concentra sulla produzione di LLM open source, con enfasi sull’idea di software libero e open-source, in contrapposizione ai modelli proprietari. Mistral AI mira a “democratizzare” l’IA concentrandosi sull’innovazione open source.
Torna al testo

[3] Il lettore attento avrò visto che con T=0 abbiamo anche posto Top P=1.0 (prima era 0.9). Ciò è dovuto al fatto che la demo si rifiuta di girare con Top P=0.9 perché quando T=0 in realtà c’è un solo token da scegliere e quindi non ha senso determinare una rosa su cui operare la scelta.
Torna al testo

5 pensieri riguardo “Alla ricerca dell’intelligenza… con una manopola o due…”

  1. Grazie Andreas, come futura utente generica apprezzo la possibilità di intuire la complessità del sistema e di comprendere che siamo nelle mani di chi ci fornirà lo strumento (come è sempre stato) e che quindi fondamentale sarà riuscire a mantenere un pensiero critico e direi sospettoso cercando di valutare le finalità sottese. Sto leggendo l’edizione italiana di Scientific American (Le Scienze) del mese di giugno dedicata al tema “Imparare dall’IA” che propone tre articoli divulgativi interessanti (per me). Tanti spunti ma uno in particolare sulle lingue mi ha fatto riflettere e collegare con quanto succede nel tue esperimento riguardo l’uso dell’italiano e dell’inglese. l’articolo “Una macchina davvero intelligente” di George Musser dice così “Nel 2021 Ryota Kanai, neuroscienziato e fondatore […] e Rufin VanRullen, dell’università di Tolosa hanno proposto un modo in cui le reti neurali artificiali potevano fare la traduzione. […] tra i risultati più notevoli raggiunti dall’IA fino ad oggi: riescono a funzionare senza che nessuno dica loro, per esempio, che la parola “love” in inglese corrisponde alla parola “amour” in francese; al contrario, imparano ciascuna delle due lingue in modo isolato e poi deducono quale parola in francese abbia lo stesso ruolo […]. Immaginiamo di addestrare due reti neurali per l’inglese e per il francese. Ciascuna impara la struttura della sua lingua e ne sviluppa una rappresentazione interna chiamata spazio latente. In pratica si tratta di una nuvola di parole, una mappa di tutte le associazioni tra le parole di quella lingua, costruita collocando le parole simili vicine tra loro e le parole non collegate lontane tra loro. Questa nuvola ha una forma peculiare, che però di fatto è la stessa per entrambe le lingue perché, al di là di tutte le differenze, in fin dei conti entrambe si riferiscono allo stesso mondo reale. Di conseguenza basta far ruotare la nuvola di parole dell’inglese e quella del francese fino ad allinearle e a quel punto scopriremo che “love” è allineato con “amour”. <<Senza un dizionario, guardando solo le costellazioni di tutte le parole presenti nello spazio latente di ciascuna lingua, basta trovare la rotazione giusta per allineare tutti i puntini>> dice Kanai.

    Ecco … macchine che “vedono” il mondo attraverso le lingue … forse la barriera della lingua che ci confina per queste macchine potrebbe non esistere.

    1. Che piacere Martina risentirti. Grazie per questo interessante commento. La questione delle lingue è una di quelle che voglio affrontare perché interessante per vari aspetti. Questi articoli che sto scrivendo sono preparatori anche per affrontare questo tema. La descrizione che riporti si attaglia comunque molto bene alla visione che mi sono fatto della questione, per ora…

      A presto!

Vengono pubblicati solo commenti che recano nome e cognome

Scopri di più da Andreas Formiconi

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continua a leggere