Comprendre les vecteurs Q, K, V dans les modèles Transformer
Dans l'intelligence artificielle moderne, en particulier dans le traitement du langage naturel, l'architecture Transformer est devenue l'épine dorsale de modèles comme GPT, BERT et bien d'autres. Au cœur de cette architecture se trouve le mécanisme d'attention, qui repose sur trois vecteurs clés : Query (Q), Key (K) et Value (V). Cet article expliquera comment ces vecteurs sont dérivés des tokens, comment ils sont utilisés lors du traitement des prompts, et comment fonctionnent l'attention multi-tête et les opérations all-reduce pour produire la sortie finale.
Des mots aux tokens et aux embeddings
La première étape du traitement du texte consiste à convertir chaque mot (ou sous-mot) en un token. Le vocabulaire du modèle contient un ensemble fixe de tokens, chacun avec un identifiant entier unique. Une fois la phrase d'entrée divisée en tokens, chaque token est mappé à un vecteur dense appelé embedding. Cet embedding est une représentation de haute dimension (par exemple, 512 ou 768 dimensions) qui capture la signification sémantique du token. Ces embeddings sont appris pendant l'entraînement et stockés dans une matrice d'embeddings.
Dérivation des vecteurs Query, Key et Value
Pour activer le mécanisme d'attention, l'embedding de chaque token est transformé en trois vecteurs différents : Query, Key et Value. Cela se fait en multipliant le vecteur d'embedding par trois matrices de poids apprises : Wq, Wk et Wv. Ces matrices sont des paramètres du modèle, mis à jour pendant l'entraînement. Les vecteurs résultants ont une dimension plus petite (souvent appelée d_k) par rapport à la dimension d'embedding originale, ce qui facilite un calcul efficace.
Le vecteur Query (Q) représente ce que le token 'cherche' dans le contexte. Le vecteur Key (K) représente ce que le token 'offre' comme étiquette. Le vecteur Value (V) contient l'information réelle qui sera agrégée. Le mécanisme d'attention détermine combien chaque token doit prêter attention aux autres en comparant les requêtes avec les clés.
| Symbole | Dimensions | Description |
|---|---|---|
| Embedding | d_model | Représentation du token d'entrée |
| Wq | d_model x d_k | Matrice de poids Query |
| Wk | d_model x d_k | Matrice de poids Key |
| Wv | d_model x d_v | Matrice de poids Value |
| Q | d_k | Vecteur Query pour un token |
| K | d_k | Vecteur Key pour un token |
| V | d_v | Vecteur Value pour un token |
Le mécanisme d'auto-attention
Une fois que nous avons Q, K et V pour chaque token de la séquence, le mécanisme d'auto-attention calcule les scores d'attention. Pour un token donné, sa query est multipliée (produit scalaire) avec les keys de tous les tokens de la séquence. Les scores résultants indiquent la pertinence de chaque token pour le token actuel. Ces scores sont ensuite mis à l'échelle en divisant par la racine carrée de la dimension des keys (d_k) pour stabiliser les gradients. Ensuite, une fonction softmax est appliquée pour convertir les scores en probabilités qui totalisent 1. Enfin, les probabilités sont utilisées pour calculer une somme pondérée des vecteurs value, produisant un nouveau vecteur contextuel pour le token.
Ce processus est effectué en parallèle pour tous les tokens de la séquence, ce qui le rend très efficace. Les nouveaux vecteurs sont ensuite transmis à travers un réseau neuronal feed-forward et des couches supplémentaires, construisant progressivement une représentation riche de l'entrée.
| Étape | Opération | Résultat |
|---|---|---|
| 1 | Calculer Q, K, V à partir des embeddings | Vecteurs pour chaque token |
| 2 | Produit scalaire de Q avec tous les K | Scores d'attention (bruts) |
| 3 | Mettre à l'échelle les scores par sqrt(d_k) | Scores mis à l'échelle |
| 4 | Appliquer softmax | Poids d'attention (probabilités) |
| 5 | Somme pondérée des vecteurs V | Nouveau vecteur de contexte |
Traitement des prompts et calcul couche par couche
Lors du traitement des prompts (le codage initial de l'entrée), la séquence entière de tokens est traitée simultanément. Les embeddings sont transformés en Q, K, V et l'auto-attention est calculée pour chaque token. Cela est répété à travers toutes les couches (généralement 12, 24 ou plus) du Transformer. Chaque couche affine les représentations, permettant au modèle de capturer des dépendances complexes telles que les relations à longue portée, la syntaxe et la sémantique. La sortie de la dernière couche fournit un embedding contextualisé pour chaque token.
Inférence : ajout d'un nouveau token
Lors de la génération de texte (inférence), le modèle produit un token à la fois. Pour le nouveau token, seul son embedding est calculé. Ensuite, sa Query est dérivée. Pour calculer l'attention, le modèle a besoin des Keys et des Values de tous les tokens précédents. Ceux-ci sont stockés dans une structure appelée cache KV, qui évite de les recalculer. La Query du nouveau token est multipliée par toutes les Keys mises en cache, le softmax est appliqué, et la somme pondérée des Values mises en cache est calculée. Cela produit un nouveau vecteur de contexte pour le nouveau token, qui est ensuite transmis à travers les couches restantes et enfin une couche de classification (softmax sur le vocabulaire) pour sélectionner le mot suivant.
Cette approche incrémentale est efficace car les calculs lourds pour les tokens précédents sont réutilisés. Le cache KV est mis à jour avec la Key et la Value du nouveau token après chaque étape de génération.
Attention multi-tête et All-Reduce
Pour capturer différents types de relations (par exemple, syntaxiques, sémantiques, référentielles) simultanément, les Transformers utilisent l'attention multi-tête. Au lieu d'effectuer une seule opération d'attention, le modèle divise les vecteurs Q, K et V en plusieurs têtes plus petites (généralement 8, 12 ou 16). Chaque tête apprend à se concentrer sur différents aspects de l'entrée. Les têtes travaillent en parallèle, chacune calculant son propre mécanisme d'attention sur un sous-espace des vecteurs.
Après que chaque tête a produit sa sortie, les sorties sont concaténées en un seul vecteur de la dimension d'origine. Ce vecteur concaténé est ensuite multiplié par une matrice de projection de sortie (souvent appelée Wo) pour combiner les informations de toutes les têtes. Cette dernière étape équivaut à une opération all-reduce : elle fusionne les calculs parallèles en une représentation unifiée. L'all-reduce garantit que le modèle bénéficie de l'apprentissage distribué à travers les têtes tout en maintenant une seule sortie cohérente pour la couche suivante.
| Aspect | Tête unique | Multi-têtes |
|---|---|---|
| Nombre de calculs d'attention | 1 | H (nombre de têtes) |
| Relations capturées | Un type par couche | Plusieurs types simultanément |
| Dimension de sortie | d_v | H * d_v (puis projeté à d_model) |
| Coût de calcul | Plus faible | Plus élevé mais parallélisable |
| Expressivité | Limitée | Représentations plus riches |
Conclusion
Les vecteurs Query, Key et Value sont fondamentaux pour le mécanisme d'attention dans les Transformers. Ils permettent au modèle de pondérer dynamiquement l'importance de chaque token dans le contexte, permettant une compréhension et une génération de langage puissantes. Le processus de dérivation de ces vecteurs, de calcul de l'attention et d'utilisation de la parallélisation multi-tête avec all-reduce est ce qui rend les modèles d'IA modernes si efficaces. Comprendre ces concepts est essentiel pour quiconque travaille ou étudie les grands modèles de langage.
Travaillons ensemble
Vous avez besoin de plus d'informations, d'aide pour votre projet ou pour développer une idée?
Qu'il s'agisse d'une question simple, d'un doute rapide ou d'une discussion de 5 minutes, envoyez-moi un message—cela ne coûte rien et je suis toujours prêt à vous aider. J'aime comprendre un problème, être créatif dans les solutions et me concentrer sur des idées simples, fiables et faciles à réaliser rapidement.
Me contacter →