Intelligenza Artificiale

Dentro la Testa di un Modello di Intelligenza Artificiale: Come Funziona un Transformer

Dentro la Testa di un Modello di Intelligenza Artificiale: Come Funziona un Transformer
LT
Luca Terribili
Autore

Immagina di voler insegnare a una macchina a capire il linguaggio umano. Non puoi semplicemente scriverle “ciao, come va?” e aspettarti che capisca come un essere umano. Le parole, per lei, non esistono. Quello che esiste sono solo numeri. Tutto parte da lì. Un modello non sa niente di semantica o grammatica. Ma se gli dai i numeri giusti, quelli che hanno senso per lui, inizia a tirare fuori cose assurde: risposte, riepiloghi, traduzioni, battute pessime. Ecco perché dobbiamo iniziare dagli embedding.

Embedding

Gli embedding sono il modo con cui una parola, un pezzo di parola o una sillaba viene trasformata in un insieme di numeri. Pensa di avere la parola “cane”. Un modello non sa cosa vuol dire, ma la può rappresentare con 768 numeri. Tipo una lista lunghissima del tipo [0.23, -0.45, 0.12, ...]. Ogni parola ha il suo vettore. E la cosa figa è che parole simili stanno vicine nello spazio. “Cane” sarà vicino a “gatto”, ma lontano da “frigorifero”. Se disegnassimo tutto su una mappa, sembrerebbe una città fatta di parole, con quartieri semantici: animali da una parte, frutta da un'altra, parolacce tutte in periferia.

Positional Encoding

Ma attenzione: questi numeri non dicono niente sull’ordine delle parole. E quindi, per un modello, “mangia il cane” e “il cane mangia” sono la stessa cosa. E qui arriva il positional encoding, il trucco per dare un senso temporale. Ogni parola riceve un’indicazione sulla sua posizione nella frase. Non è tipo “prima”, “seconda”, “terza”, ma sono altri numeri, con funzioni sinusoidali o valori imparati, che vengono sommati all’embedding. Così “cane” in posizione 2 è diverso da “cane” in posizione 4. È come dire che non solo ti dico chi sei, ma anche dove sei e cosa stavi facendo.

Encoder

A questo punto hai una sequenza di vettori che rappresentano le parole, ognuna con il suo significato e la sua posizione. Ma tutto questo non basta. Serve un cervello. Qualcosa che guardi la frase e capisca cosa sta succedendo. Questo è l’encoder.

L’encoder è come un interprete che prende tutta la frase in input e cerca di capire come ogni parola si relaziona alle altre. Lo fa usando un meccanismo chiamato self-attention. In pratica, ogni parola guarda tutte le altre e chiede: “quanto sei importante per me?”. Se leggi “il cane mangia l’osso”, la parola “mangia” si concentra su “cane” e “osso” perché sono le più rilevanti. Il modello calcola pesi, fa moltiplicazioni, aggiustamenti, normalizzazioni, e sputa fuori un nuovo set di vettori, ma stavolta contestualizzati. La parola “cane” non è più solo “animale quadrupede”, è “il soggetto che compie l’azione di mangiare”.

Encoder Layer

Questo processo viene ripetuto in più strati. Ogni strato è un encoder layer, una scatola nera che rifà lo stesso procedimento ma con input sempre più raffinati. Più strati hai, più il modello diventa profondo, e più è capace di cogliere sfumature. È come leggere una frase dieci volte: la prima capisci il senso generale, la decima cogli ironia, tono e contesto.

Quando hai finito con l’encoder, se il tuo obiettivo è classificare o rispondere sì o no, ti fermi. Ma se vuoi generare qualcosa, tipo tradurre, continuare una frase o scrivere un post su Facebook, ti serve un altro pezzo: il decoder.

Decoder

Il decoder è come uno scrittore che parte da un’idea e comincia a costruire una frase. Però ha bisogno di sapere due cose: cosa ha scritto finora e cosa gli ha detto l’encoder. Prende i token già generati e li guarda con la masked self-attention, che gli impedisce di sbirciare nel futuro. Non puoi scrivere una parola basandoti su una che ancora non esiste, altrimenti il modello barerebbe.

Poi usa la cross-attention per guardare cosa ha prodotto l’encoder. È come se dicesse: “ok, io sto scrivendo una frase, ma fammi vedere cosa c’era nell’input, così posso essere coerente”. E da lì in poi, un token alla volta, genera la risposta. Ogni parola generata viene data in pasto al decoder per generare quella dopo. Questo è il motivo per cui a volte i modelli sembrano pensare piano: generano una parola alla volta, in sequenza, con ogni passaggio che dipende dai precedenti.

Differenze tra varie architetture di modelli

Non tutti i modelli hanno encoder e decoder. BERT, per esempio, ha solo encoder. Viene usato per capire e analizzare, non per generare. GPT ha solo decoder: prende un prompt e scrive. T5 ha entrambi: legge e genera, come un traduttore universale. LSTM invece, i vecchi modelli, funzionano in modo sequenziale, parola per parola, senza positional encoding, ma con memoria temporale incorporata. Sono più lenti e meno potenti, ma ancora usati in contesti più semplici o leggeri.

Tutti questi componenti – embedding, positional encoding, encoder, decoder – sono come pezzi di una macchina da scrivere aliena. Ognuno fa una cosa precisa, ognuno trasforma l’informazione in modo diverso. E messi insieme fanno magie. Non perché capiscano davvero, ma perché statisticamente sanno quali parole vanno con quali altre, in quale ordine, con quale peso. Alla fine il risultato sembra intelligenza ma sotto c'è solo matematica.

Domande Frequenti
Che cos'è un embedding?
Un embedding è il modo con cui una parola, un pezzo di parola o una sillaba viene trasformata in un insieme di numeri. Per esempio, la parola "cane" può essere rappresentata con 768 numeri, creando un vettore numerico. Parole simili hanno vettori vicini nello spazio.
A cosa serve un embedding?
Gli embedding permettono di rappresentare le parole come numeri, permettendo ai modelli di elaborarle. Permette di creare relazioni tra parole simili, rappresentandoli come punti vicini in uno spazio vettoriale.
Che cos'è il positional encoding?
Il positional encoding è un meccanismo che aggiunge informazioni sulla posizione di ogni parola nella frase al suo embedding. Questo permette al modello di distinguere tra frasi con lo stesso insieme di parole ma ordine diverso, come "mangia il cane" e "il cane mangia".
A cosa serve il positional encoding?
Il positional encoding fornisce al modello informazioni sull'ordine delle parole in una frase, permettendogli di comprendere la struttura sintattica e il significato corretto.
Che cos'è l'encoder?
L'encoder è una componente del modello che elabora la frase in input, cercando di capire come ogni parola si relaziona alle altre tramite il meccanismo di self-attention.
A cosa serve l'encoder?
L'encoder elabora la frase e determina le relazioni tra le parole, generando vettori contestualizzati che tengono conto del significato di ogni parola nel contesto della frase.
Che cos'è la self-attention?
La self-attention è un meccanismo utilizzato dall'encoder dove ogni parola "guarda" tutte le altre parole nella frase per determinare la loro importanza reciproca nel contesto.
Che cos'è un encoder layer?
Un encoder layer è uno strato ripetuto all'interno dell'encoder che ripete il processo di elaborazione della frase, raffinando sempre più i vettori e permettendo al modello di cogliere sfumature più complesse.
Che cos'è il decoder?
Il decoder è la componente del modello che genera una risposta o una traduzione, basandosi sull'output dell'encoder e sui token già generati.
A cosa serve il decoder?
Il decoder genera una sequenza di parole in output, basandosi sulle informazioni fornite dall'encoder e sui token precedentemente generati. Viene utilizzato per attività come la traduzione, la generazione di testo e la continuazione di frasi.
Che cos'è la masked self-attention?
La masked self-attention è un meccanismo utilizzato dal decoder che impedisce al modello di "sbirciare" nel futuro, evitando che basi la generazione di una parola su parole che non sono ancora state generate.
Che cos'è la cross-attention?
La cross-attention è un meccanismo utilizzato dal decoder per accedere alle informazioni elaborate dall'encoder, permettendo al modello di rimanere coerente con l'input.
Quali sono le differenze tra BERT, GPT e T5?
BERT ha solo un encoder (analisi e comprensione), GPT ha solo un decoder (generazione di testo), T5 ha entrambi (lettura e generazione).
Come funzionano gli LSTM?
Gli LSTM sono modelli più vecchi che funzionano in modo sequenziale, parola per parola, senza positional encoding ma con memoria temporale incorporata. Sono più lenti e meno potenti di modelli più recenti.