“Une salle de réunion où chaque mot décide à quels autres mots il prête l'oreille.”
Le problème que résout l'attention
Prenez la phrase : « Le trophée ne rentrait pas dans la valise marron parce qu'il était trop grand. » À quoi renvoie « il » ? Évidemment au trophée. Retournez-la : « …parce qu'il était trop petit. » Maintenant « il » renvoie à la valise. Pour résoudre « il », il faut regarder le reste de la phrase et décider ce qui compte.
Les architectures précédentes (RNN, LSTM) traitaient le texte de gauche à droite, mot par mot, en espérant que le contexte pertinent survive dans un état caché jusqu'à ce que « il » arrive. Elles étaient lentes, difficiles à entraîner et oubliaient souvent. Le transformeur (2017) a dit : oubliez la gauche-à-droite. Laissez chaque mot regarder chaque autre mot, *en même temps*, et décider de ce qu'il pondère. C'est l'attention.
L'auto-attention, conceptuellement
Chaque jeton joue trois rôles incarnés par trois vecteurs dérivés de son plongement : une requête (« que cherché-je ? »), une clé (« à quoi est-ce que je correspond ? »), et une valeur (« que contribué-je si on me trouve ? »).
Pour un jeton donné, comparez sa requête à la clé de chaque autre jeton (un produit scalaire donne un score de similarité). Appliquez la softmax sur ces scores pour obtenir une distribution de probabilités sur tous les jetons. Sommez maintenant la valeur de chaque jeton, pondérée par son score. Le résultat est une nouvelle représentation pour ce jeton, mélangée à partir des parties de la phrase qu'il a jugées pertinentes.
Faites cela pour chaque jeton en parallèle. Toute la couche est une grande multiplication matricielle. Elle s'exécute sur un GPU en quelques millisecondes même pour des milliers de jetons.
Têtes multiples, conversations multiples
Une couche d'attention apprend une seule « façon de regarder ». Mais une phrase comporte simultanément de nombreuses structures — syntaxique, sémantique, coréférence, sentiment. Les transformeurs exécutent donc l'attention en parallèle plusieurs fois par couche (les « têtes »), chacune avec ses propres projections Q/K/V apprises. Une tête peut suivre « quel est le sujet de ce verbe ? » Une autre peut suivre « à quoi renvoie ce pronom ? » Une autre encore peut suivre « est-ce une question ? »
La plupart des transformeurs de production ont entre 16 et 128 têtes d'attention par couche, et entre 30 et 120 couches empilées. La quantité totale de « regards portés autour » que le modèle effectue pour un seul jeton est stupéfiante.
Le bloc transformeur complet
Un transformeur est une pile de blocs identiques. Chaque bloc fait deux choses :
- Couche d'auto-attention — chaque jeton prête attention à chaque autre jeton et met à jour sa représentation.
- Couche à réseau dense — la représentation de chaque jeton passe par un petit réseau de neurones privé (le même réseau pour chaque jeton, appliqué indépendamment). C'est là que réside la plupart des « connaissances » brutes du modèle, en termes de paramètres.
Les deux couches ont des connexions résiduelles (l'entrée est ajoutée à la sortie) et une étape de normalisation. La connexion résiduelle est ce qui permet d'empiler 100 couches et plus sans que le signal se dégrade. Sans elle, les transformeurs profonds ne s'entraînent pas.
# one transformer block, conceptually
def block(x):
x = x + multi_head_attention(layer_norm(x))
x = x + feed_forward(layer_norm(x))
return x
D'où vient la position ?
L'attention elle-même est invariante par permutation — elle ne sait pas quel mot est venu en premier. Les phrases se soucient clairement de l'ordre (« le chien mord l'homme » contre « l'homme mord le chien »). Les transformeurs ajoutent donc un encodage positionnel au plongement de chaque jeton à l'entrée. Soit un schéma sinusoïdal fixe (article original de 2017), soit, plus récemment, des plongements positionnels rotatifs appris (RoPE). Le modèle apprend à utiliser ce signal pour encoder l'ordre.
Le masquage causal — en faire un modèle de langage
Un modèle de langage prédit le prochain jeton à partir des jetons précédents. Lors du calcul de l'attention pour le jeton *t*, il ne doit pas être autorisé à voir les jetons *t+1, t+2…* — ce serait tricher. La correction est un masque causal : mettre à zéro les scores d'attention de chaque jeton vers tous les jetons futurs. Le modèle est contraint à prédire uniquement depuis le passé.
C'est la différence entre les modèles de la famille GPT (causaux, décodeur uniquement) et les modèles de la famille BERT (bidirectionnels, encodeur uniquement, sans masque). GPT génère du texte ; BERT comprend du texte. La plupart des LLM modernes sont décodeur uniquement, car générer s'avère subsumer comprendre.
Pourquoi ça passe si bien à l'échelle
Chaque jeton qui prête attention à chaque autre jeton est en O(n²) selon la longueur de séquence. Pour n=4 000 jetons, cela représente 16 millions de produits scalaires par tête par couche. C'est beaucoup — mais trivialement parallélisable sur un GPU. Le schéma de calcul du transformeur (massives multiplications matricielles) est exactement ce pour quoi les accélérateurs modernes sont conçus. C'est pourquoi il absorbe bien le calcul et pourquoi les lois d'échelle continuent de tenir.
Le coût quadratique explique aussi pourquoi les fenêtres de contexte sont difficiles à agrandir. La majeure partie de l'effort d'ingénierie derrière les modèles à « contexte de 1 M de jetons » porte sur des approximations ingénieuses : attention sparse, fenêtres glissantes, cache KV, variantes à attention linéaire.
En une ligne chacun
- L'auto-attention permet à chaque jeton de décider des autres jetons qui l'intéressent — en parallèle, en une seule passe.
- L'attention multi-tête exécute de nombreuses « façons de regarder » en parallèle ; les couches à réseau dense stockent la plupart des connaissances brutes.
- Les connexions résiduelles et la normalisation de couche sont ce qui rend les transformeurs de 100 couches et plus entraînables.
- La position est injectée séparément car l'attention seule n'a aucune notion d'ordre ; le cache KV est ce qui rend la génération économique.
Où aller ensuite