Home ← Lista articoli Monografia Servizi
IT EN ES
News

Il transformer illustrato — | by Valerio Mannucci | Medium

📅 2026-07-06 ⏱ 3 min lettura logistar.it
Il transformer illustrato — | by Valerio Mannucci | Medium
Self-Attention in generale Non lasciarti ingannare dal fatto che io utilizzi la parola “self-attention” come se fosse un concetto che tutti dovrebbero conoscere. Personalmente, non ero mai venuto a conoscenza di questo concetto prima di leggere l’articolo “Attention is All You Need”. Vediamo come funziona. Supponiamo che la seguente frase sia una frase di input che vogliamo tradurre: “ The animal didn't cross the street because it was too tired " A cosa si riferisce “it” in questa frase? Si riferisce alla strada o all’animale? È una domanda semplice per un essere umano, ma non altrettanto semplice per un algoritmo. Quando il modello elabora la parola “it”, la self-attention gli consente di associare “it” a “animal”. Man mano che il modello elabora ogni parola (ogni posizione nella sequenza di input), la self-attention gli consente di guardare altre posizioni nella sequenza di input per trovare indizi che possano aiutarlo a ottenere una migliore codifica della parola. Se hai familiarità con le reti neurali ricorrenti (RNN), pensa a come mantenere uno stato nascosto consenta a un’RNN di confrontare la rappresentazione delle parole/vettori precedenti che ha elaborato con quella corrente che sta elaborando. La self-attention è il metodo che il Transformer utilizza per confrontare la “comprensione” di parole precedenti con quella che stà elaborando attualmente. Mentre stiamo codificando la parola “it” nell’encoder n. 5 (l’encoder superiore nello stack), parte del meccanismo di attention si stava concentrando su “The animal” e ha incorporato una parte della sua rappresentazione nella codifica di “it”. Di un’occhiata al notebook Tensor2Tensor in cui puoi caricare un modello Transformer e esaminarlo utilizzando questa visualizzazione interattiva. Self-Attention in Dettaglio Iniziamo guardando come calcolare la self-attention utilizzando vettori e successivamente vedremo come viene effettivamente implementata — utilizzando le matrici. Il primo passo per calcolare la self-attention è quello di creare tre vettori da ciascun vettore di input dell’encoder (in questo caso, l’embedding di ogni parola). Quindi, per ogni parola, creiamo un vettore di Query, un vettore di Key e un vettore di Value. Questi vettori vengono creati moltiplicando l’embedding per tre matrici che abbiamo addestrato durante il processo di training. Nota che questi nuovi vettori sono di dimensioni più piccole rispetto al vettore di embedding. La loro dimensionalità è di 64, mentre l’embedding e i vettori di input/output dell’encoder hanno una dimensionalità di 512. Non è obbligatorio che siano più piccoli, è una scelta architetturale per rendere il calcolo della multiheaded attention (in gran parte) costante. Press enter or click to view image in full size Moltiplicando x1 per la matrice dei pesi WQ otteniamo q1, il vettore “query” associato a quella parola. Allo stesso modo creiamo, “key” e “value” (con matrici differenti), per ogni parola nella frase di input. Cosa sono i vettori “query”, “key” e “value”? Sono astrazioni utili per calcolare e comprendere l’attention. Una volta conclusa la lettura che segue su come viene calcolata l’attention, saprai praticamente tutto sul ruolo che ciascuno di questi vettori svolge. Il secondo passo della self-attention è calcolare uno score. Immaginiamo di applicare la self-attention alla prima parola in questo esempio, “Thinking”. Dobbiamo valutare ogni parola della frase di input rispetto a questa parola. Lo score determinerà quanto focalizzare le altre parti della frase di input durante la codifica della parola considerata. Lo score viene calcolato facendo il prodotto scalare tra il vettore di query della parola che stiamo considerando, con il vettore di key della parola con cui la vogliamo confrontare. Quindi, se stiamo elaborando la self-attention per la parola in posizione #1, il primo score sarebbe il prodotto scalare tra q1 e k1. Il secondo score sarebbe il prodotto scalare tra q1 e k2. Press enter or click to view image in full size Il terzo e quarto passaggio consistono nel dividere i punteggi per 8 (la radice quadrata della dimensione dei vettori key utilizzati nell’articolo, ossia 64). Questo per ottenere gradienti più stabili. Potremmo utilizzare altri valori ma questo è quello predefinito. Successivamente viene applicata la softmax al risultato, quest’ultima normalizza i punteggi in modo che siano tutti positivi e la loro somma sia uguale a 1. Press enter or click to view image in full size Il punteggio della softmax determina quanto ogni parola sarà correlata a questa posizione. Chiaramente, la parola in questa posizione avrà il punteggio softmax più alto.