Comment fonctionne un LLM (3/6) : l’attention, ou comment un mot se laisse influencer par ses voisins
Qui a écrit cette série ?
Cette série a été pilotée, critiquée et validée par Alex, qui en a fixé le plan, les règles de sources et le ton. Les textes ont été rédigés en co-écriture avec Claude (Anthropic) : Claude a proposé des plans, des calculs, des sources et des formulations, qu’Alex a relus, corrigés ou refusés. Alex est responsable du contenu publié.
À l’épisode 2, une phrase est restée en suspens : le vecteur d’un mot dépend de son contexte. « Banque » ne désigne pas la même chose dans « la banque du fleuve » et dans « la banque prête de l’argent », et un vecteur fixe ne peut pas le refléter. Nous avons annoncé que le mécanisme responsable, l’attention, ferait l’objet de cet épisode.
Prenons deux phrases. Dans « Le juge, au tribunal, l’avocat… », le mot « avocat » désigne un juriste. Dans « Des fruits, une pomme, l’avocat… », il désigne le fruit. Même mot, voisins différents : comment un vecteur peut-il se modifier selon ses voisins ? La réponse est un calcul, que nous ferons à la main sur de petits nombres.
Une précision d’emblée : ce calcul combine des vecteurs. Il ne « comprend » rien. Ce que représentent les vecteurs est appris pendant l’entraînement.
Ce que vous saurez à la fin
- Le rôle de la requête, de la clé et de la valeur, et ce que chacune représente dans le calcul.
- Comment calculer un score d’attention par produit scalaire, puis le transformer en poids avec la softmax.
- Comment une moyenne pondérée de valeurs donne un nouveau vecteur pour le mot.
- Pourquoi « avocat » reçoit un vecteur différent selon qu’il est entouré de mots juridiques ou de mots de cuisine.
- Ce que l’analogie de la bibliothèque éclaire, et où elle trompe.
1. Une bibliothèque pour un mot
Qu’est-ce que l’attention ? En une phrase : un mot regarde les autres mots de la phrase et décide lesquels comptent le plus pour comprendre son sens. Vous faites la même chose en lisant.
Exemple imaginaire. Lisez : « Le … a plaidé devant la cour, puis il a repris ses notes. » Pour deviner le mot manquant, votre regard va surtout vers « plaidé » et « cour », un peu vers « notes », à peine vers « puis ». Les indices les plus utiles pèsent le plus. L’attention d’un LLM fonctionne de cette façon, à une différence près : vous comprenez la phrase, alors que le calcul ne fait que combiner des nombres.
Imaginez maintenant une bibliothèque. Un mot construit une question : c’est sa requête. Chaque mot voisin porte une étiquette, la clé, qui sert à le trouver, et un contenu, la valeur, que l’on lit une fois le mot trouvé. En langage courant : la requête est la question posée, la clé l’étiquette qui permet de repérer un voisin, la valeur ce qu’il apporte si on le retient. Le calcul compare la requête à chaque clé, puis combine les valeurs en les pondérant selon la ressemblance.
Cette image a une limite, que nous retrouverons à la section 6 : une bibliothèque ne lit pas un peu tous ses livres. Ici, au contraire, chaque voisin contribue, certains davantage que d’autres.
La figure ci-dessous garde les deux voisins de l’exemple A, « juge » et « tribunal », avec des valeurs inventées. Les voisins sont placés avant « avocat » : nous verrons pourquoi à la section 6.
2. Trois vecteurs pour un seul mot
Chaque token (ici, un mot) est d’abord représenté par son vecteur, comme à l’épisode 2. Ce vecteur d’entrée sert à calculer trois autres vecteurs, à l’aide de trois matrices de paramètres : une pour la requête, une pour la clé, une pour la valeur. Ces paramètres sont appris pendant l’entraînement, comme ceux de l’épisode 1 : personne ne les écrit à la main.
Il est tentant de croire que requête, clé et valeur sont trois listes rangées quelque part. Ce sont en fait trois calculs sur le même vecteur d’entrée. Le guide The Illustrated Transformer de Jay Alammar décrit ces trois vecteurs comme obtenus en multipliant le vecteur d’entrée par trois matrices entraînées pendant l’apprentissage (Alammar).
Attention au mot poids, qui peut désigner deux choses. Les poids (ou paramètres) sont les nombres appris par le modèle, comme on le verra à l’épisode 4. Les poids d’attention sont les pourcentages calculés pour chaque voisin, que nous obtiendrons plus bas. Ici, « poids d’attention » désigne toujours les seconds.
3. Le score : un produit scalaire
La requête du mot cherche ; on la compare à la clé de chaque voisin. Le score est le produit scalaire entre les deux. Comme à l’épisode 2 : on multiplie les coordonnées deux à deux, puis on additionne.
Un score élevé signale une clé alignée avec la question. Ce score n’est pas un cosinus : le cosinus ne retenait que la direction, alors que le produit scalaire tient aussi compte de la longueur des vecteurs.
4. De scores à pourcentages : la softmax
Les scores peuvent être n’importe quels nombres. Pour les convertir en poids d’attention, on applique la softmax. C’est une fonction qui transforme une liste de scores en pourcentages positifs, de somme 100 %. Elle procède en trois temps : on calcule l’exponentielle de chaque score (e élevé à la puissance du score, avec e ≈ 2,718), on additionne ces exponentielles, puis on divise chacune par cette somme.
L’exponentielle rend tous les nombres positifs et accentue les écarts : un grand score domine nettement les petits. Bahdanau, Cho et Bengio (2014) l’utilisent pour normaliser des scores d’alignement entre mots, puis Vaswani et al. (2017) la reprennent (Bahdanau et al. ; Vaswani et al.).
Prenons les scores 2 et 1. e² = 7,389 et e¹ = 2,718 ; la somme vaut 10,107. Les poids sont donc 7,389 / 10,107 ≈ 73 % pour le score 2, et 2,718 / 10,107 ≈ 27 % pour le score 1. La figure 3 montre cette transformation.
Pourquoi diviser par √d_k ?
Dans la formule complète, les produits scalaires sont divisés par la racine carrée de la dimension des clés, √d_k. Dans le modèle de 2017 (Vaswani et al.), les vecteurs comptent 512 coordonnées, réparties entre 8 calculs parallèles : d_k = 512 / 8 = 64. Ce sont des valeurs de ce modèle ; les modèles actuels utilisent d’autres dimensions.
Pourquoi cette division ? Vaswani et al. écrivent : « To counteract this effect, we scale the dot products by 1/√d_k » (pour compenser cet effet, on divise les produits scalaires par √d_k). Leur hypothèse : quand d_k est grand, les produits scalaires deviennent grands et poussent la softmax vers des zones où ses gradients (la pente qui guide l’apprentissage) sont extrêmement faibles.
5. La moyenne pondérée des valeurs
La dernière étape est simple. Le nouveau vecteur du mot est la somme des valeurs, chacune multipliée par son poids d’attention. Les poids sont positifs et leur somme vaut 100 % : c’est une moyenne pondérée. Le résultat est un vecteur dans le même espace que les entrées. Il est transmis à l’étape suivante, dont nous ne parlons pas encore.
Exemple A : « Le juge, au tribunal, l’avocat… ». La requête de « avocat » est fixée à q = (2 ; 1). Les valeurs sont inventées.
| Mot voisin | Clé | Score q·k | Valeur |
|---|---|---|---|
| juge | (0 ; 1) | 2 × 0 + 1 × 1 = 1 | (6 ; 1) |
| tribunal | (1 ; 0) | 2 × 1 + 1 × 0 = 2 | (10 ; 0) |
- Softmax (1 ; 2) : e¹ = 2,718 ; e² = 7,389 ; somme 10,107. Poids : juge 26,9 % ; tribunal 73,1 %.
- Sortie : 0,269 × (6 ; 1) + 0,731 × (10 ; 0) = (1,61 + 7,31 ; 0,27) ≈ (8,92 ; 0,27).
Exemple B : « Des fruits, une pomme, l’avocat… ». Même requête, voisins différents. Les valeurs sont inventées.
| Mot voisin | Clé | Score q·k | Valeur |
|---|---|---|---|
| fruits | (0 ; 1) | 2 × 0 + 1 × 1 = 1 | (0 ; 4) |
| pomme | (1 ; 2) | 2 × 1 + 1 × 2 = 4 | (0 ; 10) |
- Softmax (1 ; 4) : e¹ = 2,718 ; e⁴ = 54,598 ; somme 57,316. Poids : fruits 4,7 % ; pomme 95,3 %.
- Sortie : 0,047 × (0 ; 4) + 0,953 × (0 ; 10) = (0 ; 0,19 + 9,53) ≈ (0 ; 9,72).
Lecture : la même requête donne deux sorties très différentes, parce que les voisins diffèrent. Dans l’exemple A, la sortie est presque entièrement sur le premier axe, que nous appelons ici « juridique » ; dans l’exemple B, elle est entièrement sur le second, « cuisine ». Ces noms d’axes sont une convention de l’exemple, pas une propriété du modèle.
Une hypothèse de pédagogie : la requête de « avocat » est fixée à q = (2 ; 1). Dans un vrai modèle, elle dépend aussi du contexte, car les calculs précédents ont déjà modifié le vecteur de « avocat ». Fixer q permet d’isoler l’effet des voisins.
6. Le même mot, deux vecteurs
Revenons à « avocat ». Sa requête est la même dans les deux exemples. Pourtant la sortie change, parce que les voisins changent. C’est la promesse de l’épisode 2 : le vecteur d’un mot dépend de son contexte, et le calcul le montre. La figure 4 reprend les deux phrases, avec des traits dont l’épaisseur suit le poids d’attention.
Pourquoi on ne regarde que vers la gauche ?
Un modèle qui écrit un texte mot après mot ne voit que les mots déjà écrits. C’est pourquoi tous les voisins de nos exemples sont placés avant « avocat ». Si « tribunal » suivait « avocat », un tel modèle ne pourrait pas le regarder au moment de calculer ce vecteur.
Ce filtre s’appelle le masque causal. BERT, présenté à l’épisode 2, regarde au contraire les deux côtés du mot : c’est un autre usage, qui n’est pas celui d’un modèle qui écrit.
Une analogie, ses limites
Une bibliothèque remet le livre demandé, et lui seul. Ici, rien de tel : la softmax donne un poids strictement positif à tous les voisins, même aux moins utiles.
Les contenus des livres ne sont pas des textes lisibles : ce sont des nombres.
Les étiquettes ne sont pas écrites à la main, et personne ne parcourt les fiches une à une.
Attention ≠ explication
Les poids d’attention ne sont pas une explication fiable de la décision du modèle : Jain et Wallace (2019) le soutiennent (arXiv 1902.10186). Clark et al. (2019) observent en revanche que certains calculs d’attention de BERT suivent des relations grammaticales (arXiv 1906.04341). Un poids donne une indication, pas une explication.
7. Trois exercices, avec corrigés
Exercice 1 (softmax). Calculez les poids de la softmax pour les scores 1, 2 et 3. Corrigé : e¹ = 2,718 ; e² = 7,389 ; e³ = 20,086 ; somme 30,193. Poids : 9,0 %, 24,5 % et 66,5 % (total 100 %).
Exercice 2 (sortie complète). Requête q = (1 ; 1). Voisin 1 : clé (2 ; 0), valeur (4 ; 0). Voisin 2 : clé (0 ; 3), valeur (0 ; 4). Calculez la sortie. Corrigé : scores 2 (1 × 2 + 1 × 0) et 3 (1 × 0 + 1 × 3). Softmax (2 ; 3) : e² = 7,389, e³ = 20,086, somme 27,475. Poids 26,9 % et 73,1 %. Sortie : 0,269 × (4 ; 0) + 0,731 × (0 ; 4) = (1,08 ; 2,92).
Exercice 3 (écart de scores). Mêmes voisins, mais les scores sont 10 et 0. Quels poids, et que retient la sortie ? Corrigé : e¹⁰ = 22 026,5 ; e⁰ = 1 ; somme 22 027,5. Poids : 99,995 % et 0,005 %. La sortie est pratiquement la valeur du premier voisin : la softmax peut ne retenir presque qu’un seul voisin.
8. À retenir, et la suite
- Chaque mot construit une requête ; chaque voisin offre une clé et une valeur. Les trois sont des calculs sur le même vecteur, avec des paramètres appris.
- Le score est un produit scalaire ; la softmax le transforme en poids d’attention, positifs et de somme 100 %.
- Le nouveau vecteur du mot est une moyenne pondérée des valeurs : il change avec le contexte.
- Dans un LLM qui écrit, un mot ne regarde que les mots qui le précèdent et lui-même : le masque causal cache les suivants.
Ce calcul n’est qu’une étape. Il est répété, avec d’autres paramètres, dans un bloc lui-même empilé : l’épisode 4 présente une autre somme pondérée, celle du neurone, dont les poids sont appris, et l’épisode 5 assemble le bloc complet du Transformer.
Une question reste ouverte. Dans nos calculs, les nombres des clés et des valeurs ont été choisis à la main. Dans un vrai modèle, personne ne les écrit : comment ces matrices sont-elles réglées, et à partir de quelle information ?
Pour revenir au deuxième épisode, l’article « Comment fonctionne un LLM (2/6) : les vecteurs, quand le sens devient géométrie » pose la géométrie des mots, dont ce calcul fait usage.
Dans cette série
- 1/6 : C’est quoi, au juste ?
- 2/6 : Les vecteurs, quand le sens devient géométrie
- 3/6 : L’attention (vous êtes ici)
- 4/6 : Du neurone artificiel aux réseaux
- 5/6 : Le Transformer en entier
- 6/6 : De la prédiction à la conversation
- Bonus 1 : La chaîne de raisonnement
- Bonus 2 : Le mélange d’experts
- Bonus 3 : Pourquoi des petits modèles
- Bonus 4 : La distillation, ou apprendre d’un professeur
- Bonus 5 : Et demain ?
- Bonus 6 : Pourquoi les LLM sont si bons avec le code informatique ?
- Bonus 7 : La carte comme langage ?
Mini-glossaire
- Requête (query) : vecteur calculé à partir du mot qui cherche, pour interroger les voisins.
- Clé (key) : vecteur calculé pour chaque mot, comparé aux requêtes.
- Valeur (value) : vecteur calculé pour chaque mot, transmis avec son poids d’attention.
- Score d’attention : produit scalaire entre une requête et une clé.
- Softmax : fonction qui transforme une liste de scores en pourcentages positifs, de somme 100 %.
- Exponentielle (ex) : e ≈ 2,718 ; elle rend tout positif et accentue les écarts.
- Poids d’attention : pourcentage calculé à partir des scores, après la softmax. Ne pas le confondre avec les paramètres du modèle.
- Moyenne pondérée : moyenne où chaque valeur compte selon son poids ; les poids sont positifs et somment à 100 %.
- Produit scalaire : rappel de l’épisode 2, somme des produits des coordonnées.
- Masque causal : règle qui interdit à un mot de regarder les mots qui le suivent.
Références
- Vaswani et al., « Attention Is All You Need », 2017 (arXiv 1706.03762), en anglais. Formule de l’attention, facteur 1/√d_k. Dimensions de ce modèle : d_model = 512, 8 calculs parallèles, d_k = 64 (publiées, valables pour le modèle de 2017 seulement).
- Bahdanau, Cho et Bengio, « Neural Machine Translation by Jointly Learning to Align and Translate », 2014 (arXiv 1409.0473), en anglais. Softmax des scores d’alignement, section 3.1.
- Jay Alammar, « The Illustrated Transformer » (jalammar.github.io), en anglais. Explication pédagogique des trois vecteurs produits par des matrices apprises.
- Jain et Wallace, « Attention is not Explanation », NAACL 2019 (arXiv 1902.10186), en anglais.
- Clark, Khandelwal, Levy et Manning, « What Does BERT Look At? », BlackBoxNLP 2019 (arXiv 1906.04341), en anglais.