Self-Attention (Auto-Attention)
| Propriete | Detail |
|---|---|
| Categorie | Mecanisme de deep learning |
| Introduit par | Vaswani et al. (2017), « Attention Is All You Need » |
| Formule | SelfAttn(X) = softmax(XW_Q (XW_K)^T / sqrt(d_k)) XW_V |
| Complexite | O(n^2) en memoire et calcul (n = longueur de sequence) |
| Distinction cle | Q, K et V proviennent de la meme source (contrairement a la cross-attention) |
| Utilise dans | LLMs, Vision Transformers, modeles de diffusion |
Fonctionnement detaille
Dans la self-attention, une seule sequence d’entree X (composee de n vecteurs de dimension d_model) est projetee en trois representations distinctes via des matrices de poids apprenables. La matrice W_Q produit les Queries (ce que chaque token « cherche »), la matrice W_K produit les Keys (ce que chaque token « offre » comme index), et la matrice W_V produit les Values (le contenu informatif de chaque token).
Concretement, pour une phrase comme « Le chat mange le poisson », le token « mange » genere une Query qui, apres multiplication avec les Keys de tous les tokens, produit des scores d’attention elevees pour « chat » (le sujet) et « poisson » (l’objet). Ces scores, normalises par softmax, ponderent les Values correspondantes. Le resultat est un nouveau vecteur pour « mange » qui encode son contexte grammatical et semantique.
La division par sqrt(d_k) est un facteur de normalisation essentiel. Sans lui, les produits scalaires croissent avec la dimension, poussant le softmax dans des regions saturees ou les gradients deviennent negligeables. Ce scaling maintient la variance des scores d’attention dans une plage raisonnable, assurant un entrainement stable.
Self-attention vs cross-attention
La distinction fondamentale entre self-attention et cross-attention tient a la source des trois matrices. En self-attention, Q, K et V sont toutes derivees de la meme sequence : le modele « s’attend a lui-meme ». En cross-attention, les Queries proviennent d’une sequence et les Keys/Values d’une sequence differente : le modele « attend a une source externe ».
Par exemple, dans un modele de diffusion conditionne par du texte, le denoising network utilise la self-attention pour que chaque patch de l’image integre l’information des autres patchs, puis la cross-attention pour integrer l’information du prompt textuel. Les deux mecanismes collaborent mais ont des roles differents : la self-attention assure la coherence interne de l’image, la cross-attention assure l’alignement avec le texte.
Dans les LLMs decoder-only comme GPT ou Claude, seule la self-attention (en version causale/masquee) est utilisee. Il n’y a pas de cross-attention car il n’y a pas de sequence source separee. L’ensemble de l’entree (prompt + tokens generes) est traite comme une sequence unique.
Self-attention causale (masquee)
Pour les modeles autoregressifs qui generent du texte token par token, la self-attention standard pose un probleme : chaque token « verrait » les tokens futurs, ce qui constitue une fuite d’information. La self-attention causale resout cela en appliquant un masque triangulaire inferieur a la matrice d’attention.
Le masque met a -infini tous les scores d’attention pour les positions j > i (positions futures par rapport a la position courante i). Apres le softmax, ces scores deviennent zero, empechant tout flux d’information du futur vers le passe. Chaque token ne peut « voir » que les tokens precedents et lui-meme.
Ce masquage est crucial pour l’entrainement parallele des LLMs. Sans lui, on devrait generer les tokens un par un pendant l’entrainement (comme les RNNs). Avec le masque causal, tous les tokens sont traites simultanement en un seul forward pass, les predictions a chaque position etant independantes des positions futures. C’est ce qui rend l’entrainement des Transformers massivement parallelisable sur GPU.
Multi-head self-attention
En pratique, la self-attention est toujours implementee en version multi-head : au lieu d’un seul calcul d’attention, le modele effectue h calculs d’attention paralleles, chacun avec ses propres matrices de projection W_Q, W_K, W_V. Les resultats des h tetes sont concatenes puis projetes lineairement.
Chaque tete opere dans un sous-espace de dimension d_model/h. Si d_model = 768 et h = 12 (comme dans BERT-base), chaque tete travaille dans un espace de dimension 64. Le cout computationnel total est identique a une seule attention de dimension 768, mais la capacite representationnelle est superieure.
Les tetes se specialisent naturellement pendant l’entrainement. Des etudes de visualisation ont montre que certaines tetes capturent les relations syntaxiques (dependances sujet-verbe), d’autres les coreferences (pronoms pointant vers des noms), d’autres les relations positionnelles (mots adjacents), et d’autres des patterns semantiques a longue distance. Cette specialisation emerge sans supervision explicite.
Optimisations modernes
Grouped Query Attention (GQA)
GQA, introduite dans Llama 2 et utilisee par la plupart des LLMs recents (Llama 3, Mistral, Gemini), partage les Keys et Values entre des groupes de tetes de Query. Par exemple, avec 32 tetes de Query et 8 groupes KV, chaque jeu de K/V est partage par 4 tetes Q. Cela reduit la taille du KV-cache (memoire necessaire pour stocker les K/V pendant l’inference) d’un facteur 4, avec un impact minimal sur la qualite.
Multi-Query Attention (MQA)
MQA est le cas extreme de GQA : toutes les tetes de Query partagent un seul jeu de Keys et Values. La reduction du KV-cache est maximale, mais la qualite peut legerement diminuer. Certains modeles comme Falcon et PaLM 2 utilisent MQA.
Flash Attention
Flash Attention (Dao et al., 2022, 2023) est une implementation optimisee de l’attention exacte qui exploite la hierarchie memoire des GPUs. Au lieu de materialiser la matrice d’attention n x n complete en memoire HBM (lente), Flash Attention calcule l’attention par blocs dans la SRAM (rapide), reduisant les transferts memoire. Le resultat mathematique est identique, mais le calcul est 2 a 4 fois plus rapide et utilise beaucoup moins de memoire GPU.
Flash Attention 2 a ameliore le parallelisme, Flash Attention 3 (2024) exploite les Tensor Cores de nouvelle generation et l’asynchronisme hardware. Ces optimisations sont devenues un standard de l’industrie, integrees dans PyTorch, JAX, et tous les frameworks d’inference modernes comme vLLM et TGI.
KV-Cache et paged attention
Pendant l’inference autoregrssive, les Keys et Values des tokens deja traites sont stockees en cache (KV-cache) pour eviter leur recalcul. Pour un modele de 70B de parametres avec une fenetre de contexte de 128K tokens, le KV-cache peut atteindre des dizaines de Go. Paged Attention (utilise par vLLM) gere ce cache comme un systeme de memoire virtuelle paginee, evitant la fragmentation et permettant le partage entre requetes.
Self-attention en vision
Le Vision Transformer (ViT) decoupe une image en patches (typiquement 16×16 pixels) et traite chaque patch comme un token. La self-attention permet a chaque patch de « voir » tous les autres, capturant des relations spatiales a longue distance que les CNNs (avec leurs champs recepteurs locaux) ne captent qu’en empilant de nombreuses couches.
Dans les modeles de diffusion, la self-attention dans les couches intermediaires du U-Net (ou dans le DiT) permet a chaque region de l’image de prendre en compte le contexte global. C’est ce qui donne aux modeles de diffusion leur capacite a generer des images globalement coherentes, avec des relations spatiales correctes entre les objets.
Des architectures comme Swin Transformer limitent la self-attention a des fenetres locales (window attention) puis decalent ces fenetres (shifted window), reduisant la complexite a O(n) tout en maintenant une connexion globale via le decalage. Cette approche est tres utilisee en detection d’objets et en segmentation.
Interpretabilite de la self-attention
Les poids d’attention offrent une forme d’interpretabilite : on peut visualiser « ou le modele regarde » pour chaque token. Des outils comme BertViz permettent d’explorer ces patterns couche par couche et tete par tete. Cependant, l’interpretabilite des poids d’attention a des limites : les poids ne representent qu’une partie du calcul (les Values et les transformations lineaires jouent aussi un role), et il n’est pas toujours correct d’interpreter un poids d’attention eleve comme « le modele utilise cette information ».
La recherche en interpretabilite des LLMs utilise des techniques plus avancees comme les sparse autoencoders (SAE) appliques aux activations intermediaires, les probes lineaires, et l’analyse des circuits (circuit analysis) pour comprendre comment l’information circule a travers les couches d’attention.
Limites de la self-attention
La complexite quadratique O(n^2) reste le defi principal. Pour une sequence de 1M de tokens, la matrice d’attention contiendrait 10^12 elements, ce qui est impraticable sans les optimisations mentionnees. Les approches lineaires (Linear Attention, RWKV, Mamba/State Space Models) tentent de reduire cette complexite a O(n), mais avec des compromis sur la qualite. En 2026, les architectures hybrides qui combinent attention locale et mecanismes subquadratiques sont un domaine de recherche actif.
La self-attention est egalement insensible a l’ordre des tokens sans positional encoding : le calcul QK^T est une operation ensembliste, pas sequentielle. L’information d’ordre doit etre injectee explicitement via des encodages positionnels (sinusoidaux, RoPE, ALiBi).
Questions frequentes
Quelle est la difference entre self-attention et attention classique ?
L’attention classique (Bahdanau, 2014) calculait l’attention d’une sequence de sortie par rapport a une sequence d’entree distincte (encodeur vers decodeur). La self-attention calcule l’attention d’une sequence par rapport a elle-meme : chaque element attend a tous les autres elements de la meme sequence, capturant les dependances internes.
Pourquoi la self-attention est-elle meilleure que les RNNs ?
La self-attention offre trois avantages majeurs sur les RNNs. Elle capture directement les dependances a longue distance (sans degradation sur la distance). Elle est massivement parallelisable (tous les tokens sont traites simultanement, pas sequentiellement). Et elle evite le probleme de vanishing gradient qui limitait les RNNs sur les longues sequences.
Qu’est-ce que la self-attention causale ?
La self-attention causale (ou masquee) empeche chaque token de « voir » les tokens qui viennent apres lui dans la sequence. Un masque triangulaire inferieur est applique pour mettre a zero les scores d’attention futurs. C’est obligatoire pour les LLMs autoregressifs comme GPT et Claude, qui predisent le token suivant sans acces aux tokens futurs.
Combien de tetes d’attention utilisent les LLMs modernes ?
Cela depend de la taille du modele. BERT-base utilise 12 tetes, GPT-3 utilise 96 tetes, Llama 3 70B utilise 64 tetes de Query avec 8 groupes KV (GQA). La tendance est a l’augmentation du nombre de tetes Q avec reduction des tetes KV via Grouped Query Attention pour optimiser le KV-cache.
La self-attention peut-elle remplacer les CNNs pour la vision ?
Oui, les Vision Transformers (ViT) basees sur la self-attention egalent ou depassent les CNNs pour la classification d’images et d’autres taches de vision, a condition d’avoir suffisamment de donnees d’entrainement. Des variantes comme Swin Transformer sont aussi performantes que les CNNs pour la detection d’objets et la segmentation.