Guide
L'auto-attention depuis zéro
Construis une tête d'attention à la main — query, key, value, produit scalaire mis à l'échelle, masque causal, softmax. Avec des visualisations exécutables.
L'auto-attention est le mécanisme qui permet à chaque token d'une séquence de regarder tous les autres. C'est l'opération centrale de tous les modèles de langage modernes. Ce guide construit une tête d'attention depuis zéro — query, key, value, produit scalaire mis à l'échelle, masque causal, softmax — et renvoie vers le chapitre qui le fait de façon interactive.
1. L'intuition
Un modèle qui traite les tokens un par un (comme un RNN) doit compresser tout le passé dans un état caché de taille fixe. L'auto-attention supprime cette compression : à chaque position, chaque token peut aller chercher directement de l'information chez tous les autres.
Toute la subtilité est dans le combien. C'est ça que l'auto-attention apprend.
2. Query, Key, Value
Pour chaque token d'entrée, trois projections linéaires produisent trois vecteurs :
- Query (Q) : ce que ce token cherche.
- Key (K) : ce que ce token représente pour les autres.
- Value (V) : ce que ce token apportera s'il est retenu.
Pour une séquence de longueur T et une dimension d'embedding d, on calcule :
Q, K, V ∈ ℝ^(T × d_head)
Trois projections, trois matrices, toutes apprenables.
3. Attention par produit scalaire mis à l'échelle
Le score d'attention du token i vers le token j est le produit scalaire de Q[i] avec K[j], divisé par √d_head :
score[i, j] = (Q[i] · K[j]) / √d_head
Calcule-les pour toutes les paires et tu obtiens une matrice T × T de scores bruts.
Le chapitre 8 visualise cette matrice à chaque étape.
4. Le masque causal
Pour un modèle de langage décodeur seul, le token i n'a pas le droit de regarder les tokens j > i : ça reviendrait à laisser le modèle tricher pendant l'entraînement en lisant la réponse.
La solution : mettre ces scores de positions futures à moins l'infini avant le softmax. Après softmax, ils valent zéro.
score[i, j] = -inf si j > i
5. Softmax et somme pondérée
On applique le softmax ligne par ligne aux scores (masqués) pour en faire une distribution de probabilité sur les tokens :
A = softmax(score) # T × T, chaque ligne somme à 1
La sortie de chaque token est alors une somme pondérée des values :
output = A · V # T × d_head
Voilà une tête d'attention. De bout en bout :
A = softmax((Q · Kᵀ) / √d_head + masque_causal)
output = A · V
6. L'attention multi-têtes
Une seule tête ne peut apprendre qu'un motif de routage. L'attention multi-têtes en lance plusieurs en parallèle, chacune avec ses propres projections Q/K/V, puis concatène leurs sorties et les reprojette à travers une matrice apprise W_O.
Avec n_heads têtes de dimension d_head chacune, la sortie concaténée a pour dimension n_heads × d_head = d_model.
Le chapitre 9 implémente tout ça et montre les visualisations d'attention tête par tête.
7. Où ça s'inscrit
L'attention n'est qu'une pièce du bloc Transformer. Les autres — résidus, LayerNorm, feed-forward — l'entourent et rendent la pile entraînable en profondeur.
- Le chapitre 10 — le bloc Transformer complet assemble toutes les pièces dans le bloc que GPT empile N fois.
- Construire un Transformer depuis zéro donne la même visite à l'échelle du bloc.
- Construire un GPT depuis zéro emmène l'attention jusqu'à un modèle entraîné à l'échelle de GPT-2.
Questions fréquentes
Qu'est-ce que l'auto-attention, en clair ?
Un moyen pour chaque token de regarder tous les autres tokens de la séquence et de décider lesquels comptent. Chaque token produit un vecteur query, un vecteur key et un vecteur value ; l'attention est une somme pondérée des values, pondérée par la correspondance entre queries et keys.
Pourquoi diviser le score d'attention par √d_k ?
Sans ça, les produits scalaires grandissent avec la dimension et poussent le softmax dans sa zone de saturation, où presque toute la probabilité se concentre sur un seul token. Diviser par √d_k maintient la variance à peu près constante et garde les gradients en bonne santé.
À quoi sert le masque causal ?
Il empêche chaque token de regarder les tokens futurs. On met les scores des positions futures à moins l'infini avant le softmax, donc ils finissent à probabilité zéro. C'est ce qui fait d'un Transformer un décodeur.
Quelle différence entre une tête et le multi-têtes ?
Une tête apprend un seul motif d'attention. Le multi-têtes en lance plusieurs en parallèle avec des projections Q/K/V différentes, ce qui laisse chaque tête se spécialiser sur un motif distinct (syntaxe, identité, longue portée) avant que leurs sorties ne soient recombinées.