Comprendre les transformers en illustrations
(jalammar.github.io)- Explique visuellement la structure et le principe de fonctionnement du modèle Transformer, et montre comment le mécanisme d’attention améliore l’apprentissage parallèle et les performances en traduction
- Le modèle est composé d’une pile d’encodeurs et de décodeurs, et chaque encodeur comprend deux couches : self-attention et réseau de neurones feedforward
- Décrit étape par étape le calcul de la self-attention au niveau des vecteurs et des matrices, puis l’étend avec la multi-head attention afin d’apprendre différents espaces de représentation
- Visualise concrètement les composants clés tels que l’encodage positionnel, les connexions résiduelles, la normalisation de couche et l’attention masquée du décodeur
- Cet article est une ressource de référence pour comprendre facilement les concepts de base des transformers, et il est également utilisé dans des cours et manuels de grandes universités comme le MIT et Stanford
Vue d’ensemble des transformers
- Le transformer est un modèle de traduction automatique neuronale basé sur l’attention, qui affiche sur certaines tâches de meilleures performances que Google Neural Machine Translation
- Son principal avantage est sa facilité de parallélisation, ce qui explique qu’il soit recommandé comme modèle de référence sur Google Cloud TPU
- Le modèle est constitué d’une pile d’encodeurs et de décodeurs, chaque encodeur ayant la même structure mais sans partage de poids
- L’entrée de l’encodeur passe par une couche de self-attention pour intégrer les informations de contexte, puis par un réseau de neurones feedforward
- En plus de la structure de l’encodeur, le décodeur inclut une couche d’attention encodeur-décodeur afin de se concentrer sur les parties pertinentes de la phrase d’entrée
Flux des tenseurs et embeddings
- La phrase d’entrée est convertie en vecteurs de dimension 512 pour chaque mot via un algorithme de word embedding
- Chaque couche de l’encodeur traite en entrée une liste de vecteurs de même taille, et la longueur de la phrase est définie comme hyperparamètre
- Comme la couche feedforward traite indépendamment le vecteur de chaque position, le calcul parallèle est possible
Concept de self-attention
- La self-attention permet à chaque mot de se référer aux autres mots de la phrase afin d’apprendre une meilleure représentation
- Exemple : dans “The animal didn’t cross the street because it was too tired”, “it” est lié à “animal”
- Contrairement aux RNN, qui maintiennent un état caché, le transformer intègre les informations de contexte via la self-attention
Étapes du calcul de la self-attention
- À partir de chaque embedding de mot, on génère des vecteurs Query, Key et Value (dimension 64)
- Le produit scalaire (dot product) entre Query et Key sert à calculer le score de pertinence entre les mots
- Les scores sont divisés par √64 puis passés dans un softmax afin d’être normalisés en distribution de probabilités
- On multiplie chaque vecteur Value par son score softmax, puis on les additionne pour produire la sortie finale de l’attention
- Dans une implémentation réelle, ce processus est effectué via des opérations matricielles pour gagner en efficacité
Multi-head attention
- Plusieurs têtes d’attention (8 par défaut) sont utilisées pour apprendre différents espaces de représentation
- Chaque tête possède ses propres matrices de poids Q/K/V
- Les sorties des différentes têtes sont concaténées (concat) puis combinées via une matrice de poids supplémentaire WO
- Cela permet au modèle de capturer simultanément différents aspects du contexte
Encodage positionnel
- Comme le transformer ne traite pas directement l’ordre, on ajoute à chaque embedding de mot un vecteur de position
- Ce vecteur de position est généré à l’aide des fonctions sinus (sin) et cosinus (cos), et fournit des informations sur la distance relative entre les mots
- Cette méthode peut s’étendre à des phrases plus longues que celles du jeu d’entraînement
- La mise à jour de 2020 présente également une méthode consistant à entrelacer (interleave) les deux signaux
Connexions résiduelles et normalisation
- Chaque sous-couche (self-attention, feedforward) applique une connexion résiduelle (residual connection) et une normalisation de couche (layer normalization)
- Cette structure contribue à éviter la disparition du gradient et à améliorer la stabilité de l’apprentissage
Structure du décodeur
- Le décodeur reçoit les vecteurs Key/Value depuis la sortie de l’encodeur pour effectuer l’attention encodeur-décodeur
- Un masquage (masking) l’empêche de consulter les mots futurs
- À la fin, une couche Linear et une couche Softmax produisent une distribution de probabilité sur les mots
- Par exemple, si la taille du vocabulaire est de 10 000, chaque vecteur de sortie est transformé en distribution de probabilité de dimension 10 000
Apprentissage et fonction de perte
- Pendant l’apprentissage, la distribution de probabilité produite par le modèle est comparée à la distribution correcte (encodage one-hot)
- On calcule l’erreur à l’aide de la cross-entropy ou de la divergence de KL, puis on ajuste les poids par rétropropagation
- Le beam search permet de conserver plusieurs traductions candidates afin d’améliorer la précision
Travaux ultérieurs et ressources de référence
- Articles liés : Attention Is All You Need, Training Tips for the Transformer Model, Self-Attention with Relative Position Representations, etc.
- Ressources d’implémentation : package Tensor2Tensor, guide Harvard NLP PyTorch, Colab Notebook
- Le transformer a ensuite évolué vers une version enrichie sur LLM-book.com (chapitre 3), qui traite de modèles plus récents comme Multi-Query Attention et les embeddings positionnels RoPE
Conclusion
- Le transformer est une architecture basée sur l’attention et parallélisable, devenue un modèle central du deep learning moderne
- Cet article est une ressource de référence qui explique visuellement la structure, les mathématiques et l’intuition des transformers, et il est utilisé comme support dans des cours de grandes universités comme Stanford, MIT et Harvard
1 commentaires
Commentaires sur Hacker News
J’ai lu cet article quand j’apprenais les bases des transformers. Les visualisations m’ont vraiment aidé
Mais dans le travail concret consistant à déployer des LLM, connaître l’architecture des transformers ne m’a presque servi à rien. Cela dit, avoir une vague compréhension de leur fonctionnement interne m’a apporté une certaine tranquillité d’esprit
Essayer d’expliquer le comportement des LLM par leur structure est un piège. Les modèles récents montrent des emergent phenomena imprévisibles, notamment à cause de l’apprentissage par renforcement
Avant, j’étais convaincu que les LLM ne seraient jamais bons en maths ou en code, et j’avais complètement tort. Au final, il y a des limites à déduire les capacités d’un modèle uniquement à partir de son architecture
En ce moment, pendant mes vacances, je révise en implémentant moi-même un transformer en PyTorch. C’est intéressant et amusant
Pour débuter, je recommande les ressources LLMs from Scratch de Sebastian Raschka.
Si quelqu’un a lu le livre de Jay Alammar publié en 2024, je serais curieux de savoir s’il vaut le coup d’après les points de vue les plus récents
Parce que cela donne une intuition des contraintes du modèle. C’est un conseil que j’ai entendu directement de Clem Delangue chez Hugging Face, et après ça j’ai étudié en profondeur l’architecture des LLM, ce qui m’a énormément aidé
Je donne le même conseil aux diplômés de bootcamps de code — on peut tout à fait travailler avec seulement Python et React, mais comprendre l’architecture des ordinateurs et les langages bas niveau fait de vous un développeur bien plus solide à long terme
Les tokens ne sont pas des fragments de mots, et dans le traitement du langage comme des images, ils n’ont de sens qu’à l’étape d’entrée. Je pense que ce malentendu a contribué à sous-estimer le potentiel des transformers
Mais c’est en réalité un phénomène qui améliore la qualité du code. Grâce au positional encoding d’un causal transformer, le modèle peut laisser des tokens temporaires pour raisonner localement, puis les oublier facilement
En d’autres termes, cela fonctionne comme une sorte de bloc-notes jetable. La solution consiste à post-traiter la sortie du LLM, pas à pousser le modèle à réprimer la génération de commentaires
Depuis la sortie de ChatGPT, la proportion de ces trois groupes a à peine changé, et il est rare que des preuves suffisent à convaincre les gens
Les visualisations de l’équipe Transformer Explainer étaient vraiment excellentes.
Voir Transformer Explainer en même temps qu’une vidéo de 3blue1brown permet de vraiment bien comprendre
Dans un commentaire laissé directement par l’auteur Jay Alammar, il présente d’autres bonnes ressources pour apprendre les transformers
Lien connexe
Il y a tellement de ressources explicatives sur les transformers que ça commence à ressembler à des tutoriels sur les monades.
Certains croient avoir eu une illumination, alors qu’en réalité ils sont toujours perdus et cherchent pourtant à diffuser largement cette compréhension
Quand on apprend des concepts de maths ou d’électronique aussi, la première explication est souvent difficile, mais en voyant plusieurs versions, on finit par comprendre plus profondément
Je suis peut-être à la traîne, mais je me demande si les transformers ont complètement remplacé les architectures de deep learning existantes comme U-net
Par exemple, les CNN restent très puissants, et ils sont même plus adaptés pour des tâches de vision spécialisées comme l’imagerie médicale
Pour les modèles invariants à la rotation, les réseaux de neurones sur graphes, les modèles de nuages de points, etc., les transformers peuvent au contraire être inadaptés
Autrement dit, il existe toujours diverses architectures alternatives
Article connexe : CNNs can still do just as well
J’ai ce livre, et quand mon équipe a décidé d’introduire des LLM dans notre système, ça a vraiment été une ressource de survie
Les LLM sont au fond des systèmes synthétiques qui imitent le raisonnement humain, donc même en connaissant leur structure interne, il est difficile de prédire leurs schémas d’erreur
Il est plus important de développer son intuition par l’expérience et l’expérimentation
Je pense que l’intérieur des transformers finira par devenir moins important, comme l’intérieur d’un compilateur.
La plupart des développeurs ne s’intéresseront qu’à “comment les utiliser”, plus qu’à leur implémentation interne
Comme pour les systèmes d’exploitation, les compilateurs ou le matériel type GPU/TPU, les transformers devront continuer à être améliorés, donc le rôle des personnes qui possèdent ce savoir devient au contraire encore plus important
Excellent article, qui semble avoir inspiré le projet récent Illustrated Evo 2
Lien vers le blog NVIDIA Research
Les gens considèrent souvent Key/Query/Value comme des concepts spéciaux, alors qu’en réalité les transformers ne sont qu’une structure étendue de multiplications matricielles
Si une couche de réseau de neurones classique fait
matrix * input, un transformer calculeinput * MatrixA,input * MatrixB,input * MatrixC, puis combine le toutAu final, tout n’est qu’une répétition d’opérations matricielles. Voir le blog PyTorch pour plus de détails
L’attention, elle aussi, est apprise indépendamment de la position, transforme de grandes portions de l’entrée en nouvelles valeurs, et plusieurs têtes apprennent en parallèle des aspects différents. C’est un concept proche des noyaux de convolution
Ce guide est vraiment énorme. L’utiliser avec un outil comme Claude Code pour générer du pseudocode PyTorch aide beaucoup à comprendre visuellement les concepts
C’est une excellente ressource pour apprendre de façon immersive pendant plusieurs heures