Transformer
Un Transformer est un réseau neuronal fondé sur l’auto-attention qui traite une séquence entière en parallèle. Découvre son fonctionnement, ses variantes et son utilisation en vision.
Un Transformer est une architecture de réseau de neurones qui traite une séquence de jetons, tels que des mots ou des régions d’image, en permettant à chaque jeton de puiser des informations dans tous les autres grâce à l’auto-attention. Des chercheurs de Google l’ont présenté en 2017 dans Attention Is All You Need pour la traduction automatique. Les anciens réseaux de neurones récurrents (RNN) lisaient une phrase mot à mot, ce qui empêchait de paralléliser l’entraînement sur les différentes positions. Le Transformer traite toutes les positions simultanément, et son modèle de base a atteint des résultats de pointe en traduction de l’anglais vers l’allemand après 12 heures d’entraînement sur huit GPU. Les Transformers sont aujourd’hui à la base des grands modèles de langage (LLM), des Transformers de vision, de la reconnaissance vocale, ainsi que de nombreux modèles de détection d’objets et de génération d’images.
Fonctionnement des Transformers#
Les jetons d’entrée sont d’abord convertis en plongements, des vecteurs de largeur fixe (512 dans le modèle original). Un Transformer applique ensuite une pile de couches identiques, chacune composée de deux sous-couches :
- Auto-attention multi-têtes : chaque jeton produit un vecteur de requête, un vecteur de clé et un vecteur de valeur. La sortie d’un jeton est une moyenne pondérée de tous les vecteurs de valeur, les poids dépendant de la correspondance entre sa requête et chaque clé, comme l’explique le mécanisme d’attention. Plusieurs têtes s’exécutent en parallèle — huit dans le modèle original — afin de suivre différentes relations.
- Réseau à propagation avant : un réseau à deux couches appliqué séparément à chaque jeton, qui transforme les informations recueillies par l’attention.
Une connexion résiduelle entoure chaque sous-couche et la normalisation de couche stabilise les activations. Le modèle original empilait six de ces couches dans un encodeur, qui lit la phrase source, et six dans un décodeur, qui produit la traduction un jeton à la fois. Chaque couche du décodeur ajoute une étape d’auto-attention masquée, qui cache les jetons futurs, et une étape d’attention croisée, qui lit la sortie de l’encodeur :
L’attention compare les jetons uniquement selon leur contenu : une couche Transformer n’a donc pas de notion d’ordre intégrée. Mélanger les jetons d’entrée ne fait que mélanger les sorties. Les informations de position sont donc ajoutées aux plongements des jetons, au moyen de motifs fixes en sinus et cosinus dans l’article original, de vecteurs de position appris dans BERT et ViT, ou de plongements positionnels rotatifs (RoPE) dans la plupart des LLM actuels. Ce code PyTorch illustre l’effet avec une couche d’encodeur :
import torch
from torch import nn
# Une couche d’encodeur Transformer et une séquence de 5 plongements de jetons
torch.manual_seed(0)
layer = nn.TransformerEncoderLayer(d_model=32, nhead=4, batch_first=True).eval()
tokens = torch.randn(1, 5, 32)
reverse = torch.arange(4, -1, -1)
# L’auto-attention seule ignore l’ordre : inverser l’entrée ne fait qu’inverser la sortie
print(torch.allclose(layer(tokens[:, reverse])[:, reverse], layer(tokens), atol=1e-5))
# L’ajout d’un vecteur appris par position fait dépendre chaque sortie de la position du jeton correspondant
positions = nn.Embedding(5, 32).weight
reordered = layer(tokens[:, reverse] + positions)[:, reverse]
print(torch.allclose(reordered, layer(tokens + positions), atol=1e-5))Le code affiche True, puis False : tant que les vecteurs de position ne sont pas ajoutés, inverser les jetons ne fait qu’inverser les sorties. Ensuite, l’ordre des jetons modifie la sortie de chacun d’eux.
Modèles à encodeur, à décodeur et encodeur-décodeur#
Les trois façons d’utiliser la pile originale répondent à des besoins différents :
- Encodeur seul : chaque jeton prête attention à l’ensemble de l’entrée dans les deux sens, ce qui convient aux tâches de compréhension. BERT pour le texte et ViT pour les images sont des modèles à encodeur seul.
- Décodeur seul : chaque jeton ne prête attention qu’aux jetons qui le précèdent, de sorte que le modèle génère le texte un jeton à la fois. Les modèles GPT et la plupart des LLM actuels utilisent cette conception.
- Encodeur-décodeur : un encodeur lit une séquence et un décodeur en produit une autre tout en prêtant attention à la première, comme dans les modèles de traduction, T5 et le système de reconnaissance vocale Whisper.
Les Transformers en vision par ordinateur#
Le Vision Transformer (ViT) traite une image comme une séquence de régions de 16 × 16 pixels et applique un encodeur Transformer sans modification. Le Swin Transformer limite l’attention à des fenêtres locales afin de passer à l’échelle sur les images haute résolution. DETR reformule la détection comme un problème de prédiction d’ensemble : un décodeur Transformer convertit un ensemble fixe de requêtes d’objets apprises en boîtes, une par requête, ce qui élimine la suppression non maximale (NMS) et les ancres conçues manuellement. Le package Ultralytics exécute le RT-DETR de Baidu, une version temps réel de cette conception. Son encodeur hybride applique une couche d’encodeur Transformer uniquement à la carte de caractéristiques de stride 32 — 400 jetons pour une image de 640 × 640 — et son décodeur à six couches affine 300 requêtes d’objets en détections finales sans NMS. Les Transformers génèrent aussi des images : les Transformers de diffusion ont remplacé le U-Net dans les récents modèles de génération d’images à partir de texte et de vidéo, et les modèles de vision-langage transmettent des jetons d’image à un LLM à décodeur seul.
Transformers et architectures apparentées#
- Réseaux de neurones convolutifs (CNN) : une convolution voit un petit voisinage à l’aide du même filtre à chaque position ; cette hypothèse intégrée est utile avec de petits jeux de données. L’attention peut relier deux positions quelconques au sein d’une couche, mais doit apprendre la structure spatiale à partir des données. Les Transformers ont donc généralement besoin de davantage de données d’entraînement ou d’un préentraînement pour surpasser les CNN.
- RNN et LSTM : ils transmettent un état de taille fixe d’un pas au suivant. La mémoire par jeton reste donc constante, mais l’entraînement est séquentiel. Un Transformer conserve chaque jeton passé à disposition et s’entraîne en parallèle.
- Modèles d’espace d’état : des architectures comme Mamba traitent les séquences avec un état récurrent dont le coût augmente linéairement avec la longueur, et les modèles hybrides les alternent avec des couches d’attention.
L’auto-attention compare chaque jeton à tous les autres : son coût augmente donc avec le carré de la longueur de la séquence. Une séquence de 4 096 jetons comporte environ 16,8 millions de paires requête-clé dans chaque tête de chaque couche. Doubler sa longueur à 8 192 jetons quadruple ce nombre, qui atteint environ 67 millions. FlashAttention réduit le trafic mémoire de ce calcul, tandis que le cache KV stocke les clés et les valeurs des jetons précédents afin que le décodeur ne les calcule qu’une fois pendant la génération.










