Attention Mechanism
Un mécanisme d’attention pondère les caractéristiques d’entrée selon leur pertinence à l’aide de requêtes, de clés et de valeurs. Présentation des mathématiques, des types d’attention et de la comparaison entre attention et convolution.
Un mécanisme d’attention est une opération de réseau neuronal qui construit chaque sortie comme une moyenne pondérée des caractéristiques d’entrée, les poids étant calculés en fonction de la pertinence de chaque entrée pour l’élément traité. La pertinence est évaluée en comparant un vecteur de requête aux vecteurs clés, puis les scores obtenus pondèrent les vecteurs de valeurs correspondants. L’attention a été introduite en 2014 pour la traduction automatique, permettant à un décodeur de réseau neuronal récurrent (RNN) de consulter chaque mot source au lieu de condenser toute la phrase en un vecteur de longueur fixe. Le Transformer de 2017 a bâti une architecture entière autour de l’attention, qui est aujourd’hui l’opération centrale des grands modèles de langage, des Transformers de vision et de nombreux modèles de détection d’objets.
Fonctionnement de l’attention#
L’attention utilise trois projections linéaires apprises de son entrée. La requête (Q) décrit ce que recherche le jeton courant, chaque clé (K) décrit ce qu’un jeton apporte, et chaque valeur (V) contient le contenu transmis. Le modèle compare la requête à chaque clé, transforme les scores de comparaison en poids et renvoie la somme pondérée des valeurs. Lorsqu’un modèle de traduction produit « noir » pour « The black cat », la requête de cette étape obtient son score le plus élevé avec la clé de « black », même si, en français, l’adjectif se place après le nom.
L’attention à têtes multiples exécute plusieurs de ces calculs en parallèle, chacun sur ses propres projections de dimension inférieure, puis concatène les résultats. Les différentes têtes peuvent ainsi se spécialiser dans des relations distinctes au sein d’une même couche.
Attention à produit scalaire mis à l’échelle#
L’attention du Transformer s’écrit Attention(Q, K, V) = softmax(QKᵀ / √d_k) V. Chaque requête est comparée à chaque clé par produit scalaire, et les scores sont divisés par la racine carrée de la dimension des clés d_k afin qu’ils n’augmentent pas avec la taille des vecteurs et ne saturent pas le softmax. Le softmax transforme les scores de chaque requête en poids dont la somme vaut 1, et la sortie est la somme pondérée des vecteurs de valeurs.
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Requêtes, clés et valeurs pour une séquence de 4 jetons, chacun de dimension 8
q, k, v = torch.randn(3, 4, 8).unbind(0)
# Calculer le score de chaque requête par rapport à chaque clé, appliquer la mise à l’échelle sqrt(d_k), puis normaliser chaque ligne avec softmax
weights = (q @ k.T / k.shape[-1] ** 0.5).softmax(dim=-1)
# Chaque jeton de sortie est une moyenne pondérée des vecteurs de valeurs
output = weights @ v
print("Attention weights of token 0:", [round(w, 3) for w in weights[0].tolist()])
print("Matches PyTorch SDPA:", torch.allclose(output, F.scaled_dot_product_attention(q, k, v), atol=1e-6))Le code affiche [0.121, 0.741, 0.106, 0.032] et True : le jeton 0 tire 74 % de sa sortie du vecteur de valeurs du jeton 1, ses quatre poids totalisent 1, et le résultat calculé manuellement correspond à l’opération fusionnée scaled_dot_product_attention de PyTorch, qui fait appel à des noyaux efficaces en mémoire tels que FlashAttention sur les GPU pris en charge.
Types d’attention#
- Auto-attention : les requêtes, les clés et les valeurs proviennent toutes de la même séquence, de sorte que chaque jeton récupère le contexte de tous les autres. C’est le mécanisme d’attention utilisé dans les encodeurs Transformer et les ViT.
- Attention croisée : les requêtes proviennent d’une séquence, et les clés et les valeurs d’une autre. Un décodeur de traduction porte son attention sur la phrase source, un modèle de diffusion texte-image sur l’invite, et les requêtes d’objets d’un décodeur DETR sur les caractéristiques de l’image.
- Attention causale : un masque empêche chaque jeton de prêter attention aux jetons suivants ; un modèle de langage génère ainsi le texte de gauche à droite, et les clés et valeurs des jetons précédents peuvent être stockées dans un cache KV.
- Attention efficace : l’attention éparse, à fenêtre glissante et linéaire réduit le coût quadratique de la comparaison de chaque jeton avec tous les autres, tandis que l’attention déformable échantillonne seulement quelques points appris autour de chaque position de référence.
- Attention par canal dans les CNN : les réseaux Squeeze-and-Excitation repondèrent les canaux d’une carte de caractéristiques à partir de sa moyenne globale, une forme d’attention peu coûteuse qui a servi de base à la meilleure soumission de classification d’ILSVRC 2017.
Attention et convolution#
Une convolution applique le même petit filtre à chaque position, de sorte que chaque sortie observe une fenêtre locale fixe et que ses poids ne dépendent pas de l’image. L’attention calcule ses poids à partir du contenu et peut relier n’importe quelles deux positions au sein d’une même couche. Son coût augmente toutefois avec le carré du nombre de jetons. Une image de 640×640 avec un pas de 32 donne une grille de 20×20, soit 400 jetons et 160 000 paires requête-clé ; la grille de pas 8 de la même image compte 6 400 jetons et près de 41 millions de paires. YOLO26 place donc ses blocs d’attention au bon endroit : le bloc C2PSA qui termine le backbone et un bloc C3k2 avec attention dans le neck exécutent tous deux une auto-attention à têtes multiples sur la carte de caractéristiques de 20×20 au pas 32, tandis que toutes les couches de résolution supérieure restent convolutionnelles.










