Questo articolo fa parte di una serie di approfondimenti sull’AI — il link conduce a un indice aggiornato. Allo stesso tempo fa parte di una trilogia dedicata al Transformer:
Transformer 1: il cavallo di battaglia dell’AI (questo articolo)
Un’introduzione moderatamente tecnica
Transformer 2: genesi e qualche domanda
Giusto la storia, facile da leggere
Transformer 3: Come funziona?
Un tentativo di guardare dentro al Transformer, per i più curiosi
Nella storia dell’intelligenza artificiale si alternano fasi di progressivo miglioramento di metodi apparentemente consolidati con accelerazioni dirompenti che stravolgono lo scenario in pochi mesi. È il caso dei transformer, di cui avevamo accennato precedentemente. Apparsi nel 2017, già dal 2019 in poi hanno soppiantato le reti neurali ricorrenti RNN (Recurrent Neural Network) che animavano tutte le applicazioni di natural language processing. Il successo di questa architettura ha investito anche altri campi dell’AI come la predizione della struttura tridimensionale delle proteine o la trasformazione di descrizioni testuali in immagini.
Si tratta di una rivoluzione che ha dato luogo ad un ennesimo cambio di paradigma, denominato foundation model, che supera e comprende i precedenti machine learning, deep learning, pre-trained model, self-supervised model, language model, attraverso una progressiva generalizzazione caratterizzata da sempre maggiore “emergenza” e “omogeneizzazione”. Due attributi che si alimentano l’un con l’altro: l’emergenza di caratteristiche non solo non progettate con il sistema ma neanche immaginate da un lato e l’applicazione degli stessi modelli a categorie sempre più ampie di problemi. Un processo che sembra rendere inevitabili sviluppi affascinanti ma anche rischi non indifferenti, dei quali ragioneremo successivamente.
Cerchiamo ora di farci un’idea di cosa siano i transformer. L’architettura è composta da due componenti principali: reti feed-forward e moduli di auto-attenzione ( and self-attention).
Le reti feed-forward sono le reti neurali di base, di cui abbiamo visto un semplice esempio nell’articolo sulla discesa del gradiente. L’attributo feed-forward sta a significare che la rete viene percorsa in una sola direzione a partire dal primo strato di input per poi attraversare i vari strati nascosti e giungere allo strato di output. Da questa sono state derivate le varianti più complesse e utilizzate come le reti convoluzionali (Convolutional Neural Network) e quelle ricorrenti (Recurrent Neural Network), le prime principalmente (ma non solo) alla base dell’image processing e le seconde del natural language processing. Niente di nuovo (per dire) quindi.
La novità sta nella self-attention, proposta nel 2017 (Ashish et al, Attention is all you need, Computation and Launguage, Arxiv, 2017). In pratica un modulo di self-attention riceve in ingresso i token relativi al testo e li rende in pari numero ma trasformati. Per ogni token in ingresso, esegue le seguenti operazioni:
- confronta il token con tutti gli altri token presenti nel testo
- calcola un “valore di attenzione” per ogni possibile coppia di token nel testo
- pesa ogni token in output con una media ponderata dei valori di attenzione verso tutti gli altri token
Il meccanismo della self-attention esprime quindi le affinità fra token diversi all’interno di un testo.
Il transformer, rappresentato con un blocco grigio nella figura successiva, può essere composto da più strati successivi di reti feed-forward e moduli di self-attention. In realtà vi sono anche altre componenti e altri meccanismi ma per ora ci limitiamo al minimo che consenta di afferrare il concetto fondamentale.
Il transformer è il protagonista del compito di base del Natural Language Processing che consiste nell’indovinare il prossimo token una volta noti tutti i precedenti che compongono il testo esaminato. È su questo task elementare che le reti NPL vengono addestrate e poi usate per qualsiasi altro scopo. Il processo riproduce quello che noi esperiamo quando leggiamo una frase, dove il significato va perfezionandosi col procedere della lettura. Come abbiamo già accennato, fino a circa il 2019 lo strumento fondamentale per riprodurre la sequenzialità nella comprensione del testo era la Recurrent Neural Network che aveva però difficoltà a “ricordare” le parole più lontane. Con il tempo sono stati individuati accorgimenti efficaci per ovviare a questo problema ma con l’avvento dei transformer il progresso ha cambiato marcia. Vediamo i singoli passaggi con un esempio, sempre semplificando molto.

- In questo esempio il processo parte da una frase composta da tre parole scritte in formato testo: “AI is cool”. Formato testo codificato nel modo usuale, per esempio con la codifica ASCII o Unicode. Niente di nuovo: sequenze di bit invece di simboli grafici.
- Le parole vengono trasformate in token mediante il processo di tokenization. Questi corrispondono a parole o parti di esse. Abbiamo visto le motivazioni di tale operazione ma ci torneremo a proposito della questione linguistica. I token sono gli atomi sui cui lavorano gli algoritmi NPL, per questo li abbiamo incasellati. Ogni modello dispone di un vocabolario fisso; in GPT-4 il vocabolario consta di 250’400 token. La codifica non cambia, è la stessa di quella usata per le parole.
- I token vengono trasformati in vettori nello spazio semantico mediante il processo di embedding. Abbiamo cercato di farcene un’idea quando ci siamo domandati cosa succeda alle parole nell’A. Nel caso di GPT-4 ogni token diventa un vettore con 16’384 componenti. Abbiamo visto come grazie a molteplici dimensioni si possa tener conto delle diverse affinità che una parola può avere con tante altre. Le parentesi quadre stanno a ricordarci che si tratta appunto di vettori e non delle loro rappresentazioni simboliche in lettere.
- Il transformer opera sulla sequenza di vettori così ottenuta per costruire la matrice di self-attention — tre in questo esempio ma in realtà possono essere molti di più. In GPT-4 la lunghezza massima delle sequenze elaborate è di 4096 token.
- La sequenza resa dal transformer è composta dallo stesso numero di vettori ricevuti. Questa è una regola generale: n vettori in ingresso, n vettori in uscita. Ma non sono gli stessi! Abbiamo già detto cosa sono: ogni vettore in uscita contiene l’informazione ponderata di tutti i valori di attenzione calcolati fra tutte le coppie di vettori presenti nel testo. Teniamo presente cosa abbiamo in mano in questo stadio: un numero di vettori pari a quelli ricevuti in input, dove ciascuno di essi è caratterizzato dalle sue 16’384 componenti (nel caso di GPT-4).
- A questo punto i vettori così trasformati vengono passati in una rete feed-forward che ha il compito di generare valori, detti logit, per tutto il vocabolario del modello (250’400 token).
- I valori di logit vengono poi trasformati in probabilità da assegnare a ciascun token del vocabolario la probabilità di essere quella giusta.
Dalla figura che rappresenta schematicamente tale distribuzione sembrerebbe facile determinare il prossimo token selezionando semplicemente quello con la probabilità più alta. Avremmo potuto trascurare questo particolare, fra i tanti che omettiamo per non perderci, ma rappresenta bene il mondo dell’AI, oltre che essere divertente. Sì, perché scegliendo senz’altro il token più probabile l’algoritmo sarebbe troppo sobrio, senza fantasia, non generativo! Si sa, un bicchiere di vino facilita le relazioni, ma troppi possono anche rovinarle. Anche la qualità del vino può influire, a seconda delle circostanze. Anche il transformer ha i suoi vini. Si tratta di piccoli accorgimenti volti a confondere un po’ le acque fra i valori più probabili. Sono quattro quelli che vanno per la maggiore. Ad uno di questi bene si attaglia la nostra metafora, quello della temperatura. Si tratta di un semplice coefficiente che, introdotto nella formula di calcolo della distribuzione, la rende più o meno piatta. Tanto maggiore il suo valore quanto più fantasioso l’algoritmo!
Quest’ultimo particolare è utile per enfatizzare la natura stocastica dei sistemi di AI. Ciò significa che il sistema può fornire risultati diversi operando volte successive a parità di tutte le altre condizioni. Ma non è solo colpa della “temperatura” o di altri “vini informatici”. Avevamo già accennato alle gioie e ai dolori dello scientific computing, ragionando di machine learning. Il grafico nella figura è descrittivo ma anche fuorviante nella sua semplicità, rappresentando solo quattro elementi. Nella realtà (di GPT-4) il grafico comprende oltre 250’000 valori, molti dei quali possono facilmente essere assai vicini fra loro. Poiché la precisione con cui vengono rappresentati i numeri digitali — circa sette cifre decimali nel formato a 32 bit, float32, comunemente usato — le inevitabili approssimazioni possono essere influenti, specialmente in sistemi come quelli delle reti neurali in cui i dati vanno incontro a innumerevoli passaggi, dove errori minimi possono amplificarsi enormemente. Ma nell’AI non è completamente un difetto perché creatività e determinismo non vanno d’accordo. La questione sta tutta nell’azzeccare una quantità di delicate regolazioni.
Ricapitoliamo i fatti essenziali. Il primo è per l’appunto l’attributo generative in GPT, che abbiamo appena commentato.
Altro elemento essenziale è il ruolo del contesto. La distribuzione delle probabilità di occorrenza del prossimo token risente non solo delle probabilità a priori nel vocabolario perché i vettori usciti dal transformer, in virtù del meccanismo della self-attention, contengono pesi dipendenti dalle relazioni fra le parole presenti nel testo. Si dice infatti che i modelli tipo GPT operano in-context. Le prestazioni sorprendenti di questo tipo di modelli è largamente dovuta al ruolo del contesto nell’analisi dei testi ed ha generato il fenomeno dell’emergenza di aspetti imprevisti, che non erano stati in alcun modo progettati. Qualcosa che ricorda l’emergenza del nuovo nei sistemi biologici complessi quando vengono superate determinate masse critiche.
Il ruolo centrale del contesto, va ricordato, è reso possibile anche dall’operazione di embedding dei token in vettori di spazi ad alta dimensione. Come abbiamo visto precedentemente tali spazi consentono di rappresentare virtualmente illimitate quantità di relazioni semantiche.
Tale cambio di marcia rende ragione anche del termine pre-trained presente nell’acronimo. L’efficacia dei modelli GPT ha consentito di ottenere risultati più che accettabili in una quantità di circostanze che non erano state tenute in conto inducendo i progettisti a realizzare un addestramento di base su un corpus di conoscenze ampio e generale. Dopo questa fase di pre-traning il sistema è già in grado di affrontare una grande quantità di problemi. Le performance possono essere poi ulteriormente migliorate mediante successive fasi di fine-tuning focalizzate su campi specifici.
Sarebbe interessante entrare un poco più addentro al meccanismo della self-attention, ma è difficile farlo in assenza di qualche minima conoscenza di algebra lineare. In attesa di trovare una chiave narrativa adeguata, gli elementi che abbiamo esplorato fino ad ora possono essere sufficienti a descrivere alcuni dei principali problemi che caratterizzano i sistemi di AI.
6 pensieri riguardo “Transformer 1: il cavallo di battaglia dell’AI”