Le Transformer et l'attention¶
Le mécanisme qui permet à un jeton de « regarder » tous les précédents — et la facture quadratique qui va avec.
Le problème à résoudre¶
Reprenons la prédiction du chapitre précédent :
Le rapport que Marie a rédigé hier soir était
Pour choisir entre « excellent » et « excellente », le modèle doit savoir que l'adjectif s'accorde avec « rapport » (masculin), sept mots plus tôt, et non avec « Marie ». Il lui faut donc un mécanisme qui, en traitant le dernier jeton, va chercher l'information au bon endroit dans le passé.
C'est exactement ce que fait l'attention.
L'intuition : requêtes, clés, valeurs¶
L'image classique est celle d'une recherche documentaire.
Chaque jeton produit trois vecteurs :
| Vecteur | Rôle | Analogie |
|---|---|---|
| Requête (\(\mathbf{q}\)) | ce que ce jeton cherche | la question posée au moteur de recherche |
| Clé (\(\mathbf{k}\)) | ce que ce jeton offre | le titre du document indexé |
| Valeur (\(\mathbf{v}\)) | l'information à transmettre | le contenu du document |
Pour traiter le jeton « était », le modèle compare sa requête à la clé de chaque jeton précédent. Les clés qui répondent bien à la requête reçoivent un poids fort ; les autres, un poids faible. Puis il fait la moyenne des valeurs, pondérée par ces poids.
Le résultat est un vecteur qui contient, agrégée, l'information des jetons pertinents.
La formule¶
Définition de chaque symbole :
| Symbole | Signification | Dimensions |
|---|---|---|
| \(n\) | nombre de jetons dans la séquence | scalaire |
| \(d_k\) | dimension d'une tête d'attention | scalaire (256 ici) |
| \(Q\) | matrice des requêtes | \(n \times d_k\) |
| \(K\) | matrice des clés | \(n \times d_k\) |
| \(V\) | matrice des valeurs | \(n \times d_v\) |
| \(Q K^{\top}\) | scores de compatibilité | \(n \times n\) |
| \(\operatorname{softmax}\) | normalise chaque ligne en probabilités | — |
Lecture pas à pas :
- \(Q K^{\top}\) produit une matrice \(n \times n\) : la case \((i,j)\) dit à quel point le jeton \(i\) s'intéresse au jeton \(j\).
- La division par \(\sqrt{d_k}\) empêche les scores de devenir énormes quand \(d_k\) est grand, ce qui écraserait le softmax vers un pic unique.
- Le softmax transforme chaque ligne en distribution de probabilités : les poids sont positifs et somment à 1.
- La multiplication par \(V\) effectue la moyenne pondérée des valeurs.
Le masque causal
Un modèle qui génère du texte ne doit pas voir le futur. On force donc à \(-\infty\) toutes les cases \((i,j)\) avec \(j > i\) avant le softmax, ce qui leur donne un poids nul. Chaque jeton ne regarde que son passé.
Les têtes multiples¶
Une seule attention capte un type de relation. On en fait tourner plusieurs en parallèle — les têtes — chacune avec ses propres projections apprises, puis on concatène les résultats.
Pour Qwen3.8-Max, config.json donne :
"num_attention_heads": 64,
"num_key_value_heads": 4,
"head_dim": 256
Soit 64 têtes de requête de dimension 256, mais seulement 4 têtes de clé-valeur.
Cette dissymétrie porte un nom : l'attention à requêtes groupées (Grouped Query Attention, GQA). Seize têtes de requête se partagent le même couple clé-valeur.
Pourquoi GQA existe
Ce ne sont pas les requêtes qu'il faut stocker, ce sont les clés et les valeurs — elles doivent rester disponibles pour tous les jetons futurs. En passant de 64 à 4 têtes clé-valeur, on divise par 16 la mémoire du cache sans perdre grand-chose en qualité. C'est l'optimisation la plus rentable de la décennie, et tous les modèles récents l'utilisent.
Détail du calcul au chapitre 05.
Le bloc Transformer complet¶
Une couche de Transformer, c'est deux sous-blocs :
entrée
│
├─→ normalisation → ATTENTION ──→ (+) ──┐
│ ↑ │
└──────────────────────────────────┘ │
│
┌───────────────────────────────────────┘
│
├─→ normalisation → RÉSEAU DENSE ──→ (+) ──→ sortie
│ ↑
└─────────────────────────────────────┘
- L'attention mélange l'information entre les jetons.
- Le réseau dense (feed-forward) transforme chaque jeton indépendamment — c'est là que réside l'essentiel des paramètres.
- Les connexions résiduelles (les
(+)) ajoutent l'entrée à la sortie, ce qui permet d'empiler des dizaines de couches sans que le signal se dégrade.
Dans Qwen3.8-Max, ce réseau dense est remplacé par un bloc Mixture-of-Experts — voir le chapitre 04. Et le mécanisme d'attention est remplacé, dans trois couches sur quatre, par une attention linéaire — voir le chapitre 03.
Le défaut : le coût quadratique¶
Reprenons la matrice \(Q K^{\top}\). Elle est de taille \(n \times n\).
| Longueur \(n\) | Cases dans la matrice |
|---|---|
| 1 000 | 1 million |
| 32 000 | 1,02 milliard |
| 262 144 | 68,7 milliards |
| 1 010 000 | 1 020 milliards |
Le coût du calcul croît comme \(n^2\). Doubler la longueur du texte quadruple le travail.
C'est le mur du contexte long
À un million de jetons, une seule couche d'attention complète demande de l'ordre de mille milliards d'opérations de produit scalaire. Multiplié par 92 couches, c'est hors de portée.
Les techniques modernes — FlashAttention et ses successeurs — évitent de stocker cette matrice, ce qui règle le problème de mémoire. Elles ne règlent pas le problème de calcul : il reste quadratique.
C'est précisément ce mur qui motive l'architecture de Qwen3.8-Max.
À retenir¶
Ce chapitre en cinq points
- L'attention permet à chaque jeton d'agréger l'information des jetons précédents, pondérée par la pertinence.
- La formule est \(\operatorname{softmax}(QK^{\top}/\sqrt{d_k})\,V\), où \(Q\), \(K\) et \(V\) sont requêtes, clés et valeurs.
- Qwen3.8-Max utilise 64 têtes de requête et 4 têtes clé-valeur (GQA), ce qui divise par 16 la mémoire du cache.
- Une couche = attention + réseau dense, chacun avec une connexion résiduelle.
- Le coût de l'attention croît en \(n^2\). C'est le mur que l'architecture de Qwen3.8-Max est conçue pour contourner.
Chapitre suivant : L'attention linéaire et DeltaNet — comment ramener ce coût à \(n\).