Loading
Trois matrices, un produit scalaire, un softmax. La ligne somme toujours à 1 — une contrainte que le modèle doit satisfaire, pas un résultat qu'il rapporte.
Ouvrir l'instrumentL'attention s'explique toujours par des métaphores : le modèle « regarde » un mot, « se concentre » sur un groupe, « décide de ce qui compte ». Chacun de ces verbes fait entrer en contrebande une intention qui n'existe pas.
Voici le mécanisme entier, sans rien emprunter à la psychologie.
L'idée décisive : l'attention est une moyenne pondérée. Les poids viennent d'un produit scalaire et d'un softmax, et le softmax garantit qu'ils somment à 1, qu'il y ait ou non quelque chose à moyenner.
Chaque token arrive dans une tête sous forme de vecteur de 256 nombres. La tête en fabrique aussitôt trois versions différentes, en le multipliant par trois matrices apprises :
Query et key forment le couple d'appariement ; value est la cargaison. Dans bert-mini, chaque tête travaille en 64 dimensions : le flux de 256 est découpé en quatre, pour que quatre têtes puissent se spécialiser indépendamment.
Le score entre le token i et le token j est le produit scalaire de la query de i par la key de j, divisé par 8 — la racine carrée de 64. Cette division n'est pas décorative. Sans elle, les produits scalaires croissent avec la dimension, le softmax sature et les gradients s'évanouissent à l'entraînement.
Chaque ligne de scores passe ensuite par un softmax, qui exponentie et normalise. Et c'est cette étape qui mérite qu'on s'y arrête.
Une ligne qui somme à 1 est une contrainte, pas un résultat. Le modèle doit répartir exactement une unité d'attention quelque part, même quand il n'a rien d'utile à dire.
Poids réels issus de la passe avant livrée. Choisissez un mot : la ligne affichée est son attention sur la phrase — elle somme toujours à 1, car un softmax ne peut rien faire d'autre.
Le softmax ne peut pas produire « rien ici ». Il prend les scores qu'on lui donne et renvoie une distribution : tout positif, de somme exactement 1.
Donc, quand vous voyez une ligne d'attention répartir du poids sur neuf mots, vous ne voyez pas le modèle rapporter neuf relations. Vous le voyez s'acquitter d'une obligation. Il avait une unité d'attention à distribuer et aucune possibilité de s'abstenir.
C'est pourquoi « le modèle attribue 0,499 à keys » est plus faible qu'il n'y paraît. La bonne question n'est jamais combien, mais combien par rapport à ce que serait la ligne si la tête n'avait rien à dire.
Cette comparaison a un nom ici. Divisez le poids maximal par la part uniforme, 1/n. Un ratio de 1,0 signifie que le gagnant ne vaut pas mieux qu'un tirage au sort. Sur une phrase de neuf mots, l'uniforme vaut 0,111 : ce pic de 0,499 vaut donc 4,5× l'uniforme — une préférence réelle. Le même mot lu via le rollout moyenné culmine à 0,141, soit 1,27× l'uniforme : du bruit déguisé en classement.
Le même mot, lu par deux têtes différentes. Le ratio est le poids maximal divisé par la part uniforme : 1,0 signifie que la ligne ne dit rien, 9 qu'un mot prend presque tout.
Changez de tête dans la figure ci-dessus et la réponse change du tout au tout. C'est la partie qui surprend, et c'est le fait structurel le plus important des transformeurs.
Il n'y a pas une attention. Il y en a seize dans ce modèle — quatre têtes dans chacune des quatre couches — et rien ne les a entraînées à s'accorder. Chaque tête possède ses propres matrices query, key et value : chacune pose donc une question différente sur la même phrase. L'une répondra fidèlement « le mot juste après ». Une autre trouvera le sujet d'un verbe situé quatre positions plus tôt.
Quand une visualisation vous montre « l'attention » d'une phrase, elle a discrètement choisi parmi seize réponses, ou les a moyennées en une seule. Les deux sont des interprétations. Aucune n'est fausse, mais vous devriez savoir laquelle vous regardez — et le prochain article montre à quel point ce choix tourne mal si on le fait sur la seule confiance.
Le mécanisme ci-dessus, c'est une centaine de lignes d'arithmétique. Trois multiplications matricielles pour obtenir Q, K et V, une de plus pour scorer chaque paire, un softmax par ligne, puis une somme pondérée des vecteurs value.
Pas de mémoire. Pas de recherche. Pas de décision. La sortie d'un token est un mélange des vecteurs value de tous les tokens, dans des proportions calculées à partir de produits scalaires.
Tout ce que les transformeurs réussissent émerge de l'empilement de cette opération et de l'apprentissage des matrices. Ce qui est réellement remarquable — et remarquable parce que la primitive est aussi simple, non malgré cela.
La lecture honnête d'un poids d'attention est étroite. Il vous dit dans quelle proportion le vecteur value d'une position est entré dans la sortie d'une autre position, dans une tête, à une couche. Il ne vous dit pas que le modèle a compris une relation, ni que ce poids a compté dans la réponse finale.
Ce dernier écart — entre l'attention portée et la contribution effective — se mesure, et la partie 9 le mesure.
Ensuite : seize têtes, et pourquoi cinq d'entre elles ne disent jamais que « le mot suivant ».
Plus à lire
Neuf entrées du vocabulaire ne survivaient pas à la frappe. Le bug est resté invisible des semaines : la sortie semblait parfaitement raisonnable.
Choisir la tête la plus confiante sélectionnait une tête positionnelle à chaque fois. Elle rapportait « it → was, 0,962 » — la réponse qu'elle donne pour chaque mot de chaque phrase.
L'int8 naïf plafonnait la parité d'attention à 2,97e-2 — trente fois pire que la barre. Où dépenser la précision : voilà toute l'ingénierie.