Transformeur
Un transformeur (ou modèle auto-attentif) est un modèle d'apprentissage profond introduit en 2017, utilisé principalement dans le domaine du traitement automatique des langues (TAL). Dès 2020, les transformeurs commencent aussi à trouver une application en matière de vision par ordinateur par la création des vision transformers (ViT).

À l'instar des réseaux de neurones récurrents (RNN pour  en anglais), les transformeurs sont conçus pour gérer des données séquentielles, telles que le langage naturel, pour des tâches telles que la traduction et la synthèse de texte. Cependant, contrairement aux RNN, les transformeurs n'exigent pas que les données séquentielles soient traitées dans l'ordre. Par exemple, si les données d'entrée sont une phrase en langage naturel, le transformeur n'a pas besoin d'en traiter le début avant la fin. Grâce à cette fonctionnalité, le transformeur permet une parallélisation beaucoup plus importante que les RNN et donc des temps d'entraînement réduits. 

Les transformeurs sont rapidement devenus le modèle de choix pour les problèmes de TAL, remplaçant les anciens modèles de réseaux de neurones récurrents tels que le  (Long Short-Term Memory). Étant donné que le modèle transformeur facilite davantage la parallélisation pendant l'entraînement, celui-ci peut s'effectuer sur des ensembles de données plus volumineux qu'il n'était possible avant son introduction. Cela a conduit au développement de systèmes pré-entraînés tels que BERT (Bidirectional Encoder Representations from Transformers) et GPT (Generative Pre-Trained Transformer), qui ont été formés avec d'énormes ensembles de données de texte général, tels que Wikipedia Corpus, et peuvent être affinés pour réaliser des tâches linguistiques spécifiques.

Contexte 
Avant l'introduction des transformeurs, la majorité des systèmes de traitement automatique des langues (TAL) reposaient sur des réseaux de neurones récurrents (RNN) chainés, tels que les LSTMs et les GRUs (Gated recurrent units en anglais), enrichis avec des mécanismes d'attention . Le transformeur s'appuie sur ces techniques d'attention sans utiliser de structure RNN, mettant ainsi en évidence que les mécanismes d'attention seuls sont suffisamment puissants pour réaliser les performances des RNNs avec attention.

Réseaux de neurones récurrents 
Les RNNs chainés traitent les jetons (tokens en anglais) séquentiellement, en maintenant un vecteur d'état qui contient une représentation des données vues après chaque jeton. Pour traiter le n-ième jeton, le modèle combine l'état représentant la séquence d'entrée jusqu'au (n-1)-ième jeton avec l'information du nouveau jeton pour créer un nouvel état représentant la séquence d'entrée jusqu'au n-ième jeton. Théoriquement, l'information d'un jeton peut se propager loin vers le début de la séquence d'entrée, si à chaque point l'état continue à encoder de l'information relative au jeton. Mais en pratique, ce mécanisme est imparfait : à cause du problème de l'évanescence du gradient, l'état du modèle à la fin du traitement d'une longue séquence d'entrée n'arrive pas à se rappeler d'information précise à propos des premiers jetons.

Mécanisme d'attention 
Ce problème fut résolu par l'introduction des mécanismes d'attention. Ces mécanismes permettent à un modèle de regarder directement, et d'extraire, l'état de n'importe quel jeton précédent dans la séquence. La couche d'attention peut accéder à tous les précédents états et leur donner un poids selon leur pertinence par rapport au jeton courant, fournissant ainsi une information saillante sur les jetons éloignés.

Un exemple remarquable de l'utilité de l'attention est la traduction. Dans un système de traduction d'une phrase en anglais vers une phrase équivalente en français, le premier mot français de la séquence de sortie dépend le plus probablement du début de la séquence d'entrée. Cependant, dans un modèle classique d'encodeur-décodeur à base de LSTMs, dans le but de produire le premier mot de la séquence de mots en français, le modèle reçoit seulement le vecteur d'état du dernier mot en anglais. Théoriquement, ce vecteur peut encoder l'information de toute la phrase en anglais, donnant ainsi au modèle toute la connaissance nécessaire, mais en pratique cette information n'est souvent pas bien préservée. En introduisant un mécanisme d'attention, le modèle peut à la place apprendre des états liés aux jetons anglais précédents lorsqu'il produit le début d'une sortie en français, donnant ainsi une meilleure compréhension de ce qu'il traduit.

Garder l'attention en se débarrassant des RNNs 
Ajoutés aux RNNs, les mécanismes d'attention ont amené de larges gains de performance. L'introduction du transformeur a mis en lumière le fait que les mécanismes d'attention étaient suffisamment puissants pour se suffire à eux-mêmes, sans nécessiter de RNNs avec attention. Le transformeur utilise un mécanisme d'attention sans RNN et traite tous les jetons en même temps en calculant les poids d'attention liés entre eux. Le fait que les transformeurs ne s'appuient pas sur un traitement séquentiel, et qu'ils permettent de mettre facilement en œuvre de la parallélisation, permet aux transformeurs d'être entrainés plus efficacement sur de grands jeux de données.

Architecture 
Comme les modèles précédemment inventés pour le traitement d'une séquence de taille variable en une autre séquence de taille variable, le transformeur utilise une architecture d'encodeur-décodeur. L'encodeur consiste en un ensemble de couches d'encodage qui traitent la séquence d'entrée itérativement couche après couche et le décodeur consiste en un ensemble de couches de décodage qui effectue la même chose sur la séquence de sortie de l'encodeur.

La fonction de chaque encodeur est de traiter sa séquence d'entrée pour générer des encodages contenant de l'information sur les entrées qui sont pertinentes entre elles. Il passe son ensemble d'encodages à l'encodeur suivant. Chaque décodeur réalise l'opération inverse, en prenant et traitant tous les encodages, puis en utilisant l'information contextuelle qui y est présente pour générer la séquence de sortie. A cette fin, chaque encodeur et décodeur utilisent un mécanisme d'attention, qui, pondère la pertinence de chaque jeton de l'entrée par rapport à chaque autre jeton de l'entrée et en élabore de l'information en conséquence pour produire la sortie . Chaque couche du décodeur met aussi en œuvre un mécanisme d'attention qui extrait de l'information des sorties des précédents décodeurs, avant que la couche du décodeur n'extraie de l'information des flux encodés. L'encodeur et le décodeur contiennent tous les deux un réseau de neurones à propagation avant pour un traitement additionnel des sorties, des connexions résiduelles, ainsi qu'une couche de normalisation.

L'opération matricielle d'attention 
Les modules élémentaires d'un transformeur sont les unités d'un produit matriciel pondéré. Lorsqu'une séquence est fournie au modèle transformeur, les poids d'attention sont calculés entre eux simultanément. L'unité d'attention fournit des enchâssements (embeddings) pour chaque jeton qui contiennent non seulement de l'information sur le jeton courant lui-même, mais aussi une information pondérée des autres jetons pertinents.

Concrètement, pour chaque unité d'attention, le transformeur apprend trois matrices de poids ; les poids de la requête (query) , les poids de la clé (key) , et les poids de la valeur (value)  . Pour chaque jeton  de la séquence d'entrée, le vecteur d'enchâssement du mot (word embedding)  est multiplié avec chacune des trois matrices pour produire un vecteur de requête , un vecteur de clé , et un vecteur de valeur . 

Les poids d'attention sont calculés en utilisant les vecteurs de requête et de clé : le poids d'attention  du jeton  sur le jeton  est la résultante du produit matriciel entre  et . Les poids d'attention sont divisés par la racine carrée de la dimension des vecteurs clé, , ce qui stabilise les gradients durant l'entrainement, puis passent à travers une fonction softmax qui normalise les poids de manière que leur somme soit égale à . Le fait que  et  soient des matrices différentes permet à l'attention d'être non symétrique: si un jeton  affecte un autre jeton  (i.e. que  soit grand), cela n'implique pas forcément que le jeton  affecte le jeton  (i.e.  est grand). La sortie de l'unité d'attention pour le jeton  est la somme pondérée des vecteurs de valeurs de tous les jetons, pondérée par , l'attention du jeton  sur chaque autre jeton.

Le calcul d'attention pour l'ensemble des jetons peut être exprimé comme un calcul d'une grande matrice, ce qui est utile pour l'entrainement car les optimisations de calcul dans les opérations matricielles rendent l'opération rapide.

L'attention multi-têtes
Un ensemble composé des matrices  est appelé une tête d'attention. L'initialisation de la valeur des poids de ces matrices étant aléatoire, certaines valeurs initiales peuvent déstabiliser le processus d'apprentissage. D'où l'utilisation de plusieurs têtes d'attention dans chaque couche d'un transformeur pour rendre plus robuste l'apprentissage.  

Étant donné que les transformeurs possèdent plusieurs têtes d'attention, ils ont la possibilité d'être traités en parallèle, ce qui rend le traitement de la séquence d'entrée rapide. Les multiples sorties de l'attention multi-tête sont ensuite concaténées pour être passées aux couches de réseaux de neurones à propagation avant.

Pré-entraînement 

La grande majorité des transformeurs performants sont pré-entrainés sur de grands ensembles de données, avant d'être affinés sur le problème visé ("fine-tuning"). Ce pré-entrainement est ainsi en général effectué sur des problèmes d'apprentissage auto-supervisé pour ne pas être limité par le besoin de données labellisées.

En vision, la première proposition à démontrer ce que peuvent apporter les transformeurs par rapport aux réseaux convolutifs, est une application directe de l'encodeur d'un transformeur classique sur une séquence de morceaux des images. Ce réseau, baptisé ViT, a pu dépasser la performance atteinte par les CNNs (Convolutional Neural Networks en anglais) de l'époque. Il a été pré-entrainé avec un jeu de données propriétaire de Google, JFT-3B, contenant quelques 3 milliards d'images.

Voir aussi

Notes et références 

Réseau de neurones artificiels
Traitement automatique du langage naturel