Attention Q/K/V : des projections à la sortie causale

Calculer une attention complète : W_Q, W_K, W_V, scores, √d_head, masque causal, softmax, mélange des valeurs, multi-têtes et projection de sortie.

Applied AI · advanced · Session 12

Contrat de la séance

  • Distinguer requête, clé et valeur.
  • Exécuter une trace numérique complète.
  • Relier préfill, décodage et cache KV.

Carte du mécanisme

  Maya             livre            Elle
 x_Maya           x_livre          x_Elle       chaque token projette
    │                │                │         SES propres q, k, v
    ▼                ▼                ▼         (W_Q, W_K, W_V partagées)
 k_Maya=[1,1]     k_livre=[0,2]    q=[2,1]
 v_Maya=[1,0]     v_livre=[0,1]       │
    │                │                │
    └────────────────┴───────┬────────┘
                             ▼
        q(Elle)·k → scores bruts : 3 (Maya) et 2 (livre)
                             │
                    ┌─────────────────┐  d_head = 4 ; vecteurs
                    │ ÷ √d_head : √4=2│  affichés en 2 dim
                    └────────┬────────┘  (illustration tronquée)
                             ▼   1,5  et  1,0
                    ┌─────────────────┐
                    │  masque causal  │  positions futures ← −∞
                    └────────┬────────┘
                             ▼
                softmax → A = [0,62 ; 0,38]
                             ▼
        O = 0,62·v_Maya + 0,38·v_livre = [0,62 ; 0,38]
                             ▼
              Concat(tête₁…tête_h) ──▶ W_O
          (en décodage : K/V lus depuis le cache)

1. Trois projections apprises

Chaque représentation x produit q=xW_Q, k=xW_K et v=xW_V. La requête exprime ce que la position cherche ; la clé décrit comment elle peut être retrouvée ; la valeur porte l’information à mélanger.

Q=XW_Q, K=XW_K, V=XW_V

Contrôle — Trois projections apprises

q, k et v sortent tous du même x via W_Q, W_K et W_V. Si l’on impose W_Q = W_K, que devient le score d’une position avec elle-même, et pourquoi cela appauvrit-il la tête ?

2. Compatibilité requête-clé

Le produit scalaire q·k mesure l’alignement. Dans « Maya posa le livre… Elle le reprit », une tête peut apprendre que la requête de « Elle » s’aligne avec la clé de « Maya ».

Contrôle — Compatibilité requête-clé

Avec q = [2,1], on obtient q·k_Maya = 3 et q·k_livre = 2. Construisez une clé qui ferait ignorer complètement « Maya » par « Elle », et justifiez géométriquement.

3. Mise à l’échelle

Quand d_head augmente, les produits scalaires peuvent devenir grands et saturer la softmax. Diviser par √d_head maintient une échelle plus stable.

S=QKᵀ/√d_head

Contrôle — Mise à l’échelle

Ici d_head = 4, donc on divise par 2 : les scores 3 et 2 deviennent 1,5 et 1,0. Recalculez la softmax SANS division et chiffrez de combien le poids du premier token augmente.

4. Masque causal et softmax

Avant softmax, les positions futures reçoivent −∞. La softmax transforme chaque ligne autorisée en poids positifs qui somment à 1.

A=softmax(S+causal mask)

Contrôle — Masque causal et softmax

À la position de « Maya », première du contexte, quelles clés le masque autorise-t-il ? Donnez la ligne de softmax obtenue et expliquez pourquoi elle ne dépend d’aucun poids appris.

5. Mélange pondéré des valeurs

La sortie est AV : les poids choisissent combien de chaque valeur passe. Les scores ne sont pas eux-mêmes le contenu récupéré.

O=AV

Contrôle — Mélange pondéré des valeurs

Avec A = [0,62 ; 0,38], v_Maya = [1,0] et v_livre = [0,1], calculez O. Pourquoi O n’est-il égal à aucune des deux valeurs stockées, et que cela dit-il sur « récupérer » un token ?

6. Multi-têtes, projection et cache

Plusieurs têtes calculent des relations différentes, leurs sorties sont concaténées puis projetées par W_O. En décodage, les K/V passés sont mis en cache ; la nouvelle requête lit ce cache sans recalculer tout le préfixe.

MHA(X)=Concat(head₁…head_h)W_O

Contrôle — Multi-têtes, projection et cache

En décodage, le nouveau token ajoute 1 clé et 1 valeur par tête. Pour 32 têtes et 2 000 tokens déjà en cache, dites précisément ce qui est recalculé, ce qui est seulement relu, et où passe le temps.

Cas guidé — données

Trace réduite : q=[2,1], clés k_Maya=[1,1], k_livre=[0,2]. La tête réelle a d_head=4 ; nos vecteurs n’affichent que 2 coordonnées (illustration tronquée), mais la mise à l’échelle garde la vraie dimension. Scores bruts : 3 et 2 ; division par √4=2 donne 1,5 et 1. Softmax ≈ [0,62;0,38]. La sortie mélange 62 % de v_Maya et 38 % de v_livre. Pour une position antérieure, le masque causal supprimerait toute clé future.

Cas guidé — trace complète

q = [2,1]   k_Maya = [1,1]   k_livre = [0,2]   v_Maya = [1,0]   v_livre = [0,1]

produits scalaires : q·k_Maya = 2·1 + 1·1 = 3      q·k_livre = 2·0 + 1·2 = 2
mise à l’échelle   : d_head = 4 (tête réelle ; vecteurs affichés tronqués à
                     2 dim), √4 = 2  →  S = [1,5 ; 1,0]

softmax : e^1,5 = 4,482   e^1,0 = 2,718   Σ = 7,200
  A = [0,622 ; 0,378]      (somme = 1,000 ✅)
O = A·V = 0,622·[1,0] + 0,378·[0,1] = [0,622 ; 0,378]   ✅

SANS la division par √d_head : softmax(3 ; 2) = [0,731 ; 0,269]
  ❌ distribution nettement plus piquée pour la même géométrie de vecteurs

MASQUE CAUSAL, position de « Maya » (première du contexte)
  (illustration : on donne à q_Maya les mêmes valeurs numériques [2,1])
  scores autorisés = [q_Maya·k_Maya] = [3] ; k_livre ← −∞ → A = [1,000]
  ✅ O = v_Maya = [1,0]
  masque oublié → A = [0,622 ; 0,378] : la position lit un token FUTUR   ❌

CONTRÔLE DE FORME : q(1×2) · Kᵀ(2×2) → S(1×2) ; A(1×2) · V(2×2) → O(1×2).
Multi-têtes : h têtes × d_head = 4 → Concat(1×4h) puis W_O(4h × d_model).

Préfill contre décodage avec cache KV

Critère Préfill (n tokens d’un coup) Décodage (1 token, cache KV)
Q, K, V calculés n requêtes, n clés, n valeurs 1 requête, 1 clé, 1 valeur ajoutées
Matrice de scores n × n, triangulaire par le masque 1 × (n+1), une seule ligne
Facteur limitant Calcul (matmuls denses) Bande passante mémoire (relecture du cache)
Rôle du masque causal Indispensable : triangle futur mis à −∞ avant softmax Implicite : le cache ne contient que le passé

Laboratoire causal

Prédire → modifier une variable → exécuter → expliquer l’écart

/interactives/curriculum/qkv-attention.html?lang=fr

Erreur fréquente 1

« Le score d’attention le plus élevé désigne le mot que le modèle a récupéré. »

Le score 3 désigne une adresse, pas un contenu. La sortie est O = A·V = [0,622 ; 0,378], qui n’est ni v_Maya = [1,0] ni v_livre = [0,1] : le modèle lit un mélange, jamais un token.

Erreur fréquente 2

« Diviser par √d_head est une astuce numérique cosmétique. »

Elle change la distribution effective : les mêmes vecteurs donnent [0,62 ; 0,38] avec la division et [0,73 ; 0,27] sans. À d_head grand, la softmax sature, les gradients s’annulent et la tête cesse d’apprendre.

Frontière de validité

Les cartes d’attention ne prouvent pas à elles seules une explication causale du comportement global du modèle.

Statut de preuve

Mécanismes établis ; les simplifications numériques sont pédagogiques.

Sources à vérifier

  • Vaswani et al., “Attention Is All You Need”, NeurIPS (2017).
  • Dossier source fourni par le propriétaire; les détails sur des produits nommés restent attribués à cette source jusqu’à vérification primaire.

Défi de transfert

Passez la même phrase de 2 à 3 clés : ajoutez k_chat = [1,0] et v_chat = [0,5 ; 0,5] au contexte.

  1. Avant tout calcul, prédisez si le poids de Maya monte ou descend.
  2. Recalculez scores (÷ √4), softmax et O.
  3. Comparez au cas à 2 clés : que dit ce déplacement sur l’idée « l’attention se dilue » ?

Synthèse

  • Trois projections apprises
  • Compatibilité requête-clé
  • Mise à l’échelle
  • Masque causal et softmax
  • Mélange pondéré des valeurs
  • Multi-têtes, projection et cache

Ticket de sortie

Mécanisme · trace · observation · frontière · preuve · prochaine expérience

Notes formateur: Poser le problème avant de nommer le mécanisme. Recueillir une prédiction initiale et la conserver pour le ticket de sortie.

Notes formateur: Ces objectifs sont observables : trace, calcul, comparaison. Une définition récitée ne clôt aucun objectif.

Notes formateur: Faire relier chaque étape à la suivante par un verbe causal. Signaler toute flèche purement décorative.

Notes formateur: Faire jouer les trois rôles physiquement : trois apprenants tiennent q, k et v de la même position et annoncent à quoi sert leur vecteur. Les rôles ne s’oublient plus une fois incarnés.

Notes formateur: Réponse : le score d’une position avec elle-même devient q·q = ‖q‖² ≥ 0, systématiquement favorable : la tête se regarde elle-même et perd la liberté de chercher ce qui ne lui ressemble pas (la compatibilité devient symétrique). Erreur attendue : « rien ne change, ce sont deux matrices apprises ».

Notes formateur: Faire calculer q·k_Maya et q·k_livre avant d’afficher 3 et 2, puis demander de prédire quel token sera dominant. Le vote préalable rend la softmax lisible.

Notes formateur: Réponse : une clé fortement anti-alignée avec q = [2,1], p. ex. k_Maya = [−4,−2] : q·k = −10 et le poids devient négligeable après softmax. Nuance à faire émerger : une clé orthogonale (q·k = 0) ne suffit PAS à annuler le poids — elle cesse seulement de le favoriser.

Notes formateur: Afficher côte à côte [0,62 ; 0,38] et [0,73 ; 0,27] sans dire lequel est lequel, et faire deviner. La question « quelle version a divisé ? » ancre le rôle de √d_head mieux qu’une justification statistique.

Notes formateur: Réponse : softmax(3 ; 2) = [0,731 ; 0,269] contre [0,622 ; 0,378] avec division : le premier poids monte de +0,11. Erreur attendue : croire que l’ordre des tokens change — il ne change pas, seule la netteté de la distribution augmente.

Notes formateur: Dessiner la matrice n × n et faire hachurer le triangle supérieur par la salle. Puis demander quelle valeur y mettre : « 0 » est la réponse fréquente et fausse — c’est −∞ AVANT softmax.

Notes formateur: Réponse : seule k_Maya est autorisée → ligne softmax [1,000], indépendante de tout poids appris — une seule entrée non-(−∞) donne toujours 1 après normalisation. Erreur attendue : [0,62 ; 0,38], c’est-à-dire la ligne SANS masque, celle qui lit le futur.

Notes formateur: Faire calculer O au tableau, puis demander à voix haute : « quel mot le modèle a-t-il récupéré ? » Laisser quelqu’un répondre « Maya », puis confronter au vecteur [0,622 ; 0,378]. Ce moment porte la séance.

Notes formateur: Réponse : O = [0,622 ; 0,378] — une combinaison qui n’est ni v_Maya ni v_livre : « récupérer » est toujours un mélange pondéré, jamais une copie de token. Erreur attendue : annoncer v_Maya parce que son poids domine. Renvoyer à l’erreur fréquente 1.

Notes formateur: Faire estimer la taille du cache KV pour 32 têtes, d_head = 128 et 2 000 tokens avant de parler d’optimisation. Le chiffre obtenu justifie à lui seul MQA, GQA et la quantisation du cache.

Notes formateur: Réponse : recalculé = q, k, v du seul nouveau token, plus une ligne de scores 1×2001 par tête ; seulement relu = les 2 000 paires k/v × 32 têtes depuis le cache ; le temps part en bande passante mémoire, pas en calcul. Erreur attendue : « tout le préfixe est recalculé à chaque token ».

Notes formateur: Masquer le résultat final. Faire annoncer le signe, la forme et l’ordre de grandeur avant chaque opération.

Notes formateur: Dérouler ligne par ligne. Une incohérence se localise à la première étape fautive, pas seulement sur la dernière ligne.

Notes formateur: Faire remplir la dernière ligne par les apprenants avant de la révéler : c’est le compromis qui décide en production.

Notes formateur: Conserver les valeurs initiales et finales. Interdire les changements simultanés qui rendent l’écart impossible à attribuer.

Notes formateur: Faire produire le contre-exemple minimal par le groupe avant de donner la correction.

Notes formateur: Faire produire le contre-exemple minimal par le groupe avant de donner la correction.

Notes formateur: La limite n’est pas une note de bas de page : elle définit les cas où le mécanisme ne suffit plus.

Notes formateur: Séparer mécanisme vérifiable, choix d’implémentation rapporté et résultat expérimental. La précision de la preuve doit suivre celle de l’affirmation.

Notes formateur: Attribuer chaque choix de produit au dossier fourni et conserver le statut rapporté tant qu’aucune source primaire indépendante ne le confirme.

Notes formateur: Réponses : scores mis à l’échelle [1,5 ; 1,0 ; 1,0] → A ≈ [0,452 ; 0,274 ; 0,274] : le poids de Maya tombe de 0,622 à 0,452 sans qu’aucun vecteur de Maya n’ait changé — chaque nouvelle clé prend sa part du budget softmax (somme = 1). O ≈ [0,59 ; 0,41]. Idée fausse à récolter : « ajouter un token n’affecte que ce token ». 6 à 8 minutes, binômes.

Notes formateur: Faire reconstruire la chaîne sans regarder les slides. Réouvrir uniquement le premier point de rupture.

Notes formateur: Six lignes maximum. Comparer à la prédiction initiale et nommer ce qui a réellement changé. Citer une trace conservée qui permet à un pair de vérifier la conclusion.