Transformeur

Page d’aide sur l’homonymie

Pour les articles homonymes, voir transformer.

Schéma représentant l'architecture générale d'un transformeur.

Un transformeur (ou modèle auto-attentif) est une architecture d'apprentissage profond introduite en 2017[1]. Elle est principalement utilisée dans le domaine du traitement automatique des langues (TAL) en servant de base aux grands modèles de langage[2], mais peut aussi servir à traiter d'autres modalités comme les images[3], les vidéos ou le son, parfois simultanément[4].

À l'instar des réseaux de neurones récurrents (RNN pour recurrent neural network 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 LSTMLong_short-term_memory (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[5]. 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 RNN avec attention.

Réseaux de neurones récurrents

Les RNN chainés traitent les lexèmes (tokens en anglais) séquentiellement, en maintenant un vecteur d'état qui contient une représentation des données vues après chaque lexème. Pour traiter le n-ième lexème, le modèle combine l'état représentant la séquence d'entrée jusqu'au (n-1)-ième lexème avec l'information du nouveau lexème pour créer un nouvel état représentant la séquence d'entrée jusqu'au n-ième lexème. Théoriquement, l'information d'un lexème 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 lexème. 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 une information précise à propos des premiers lexèmes.

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 lexème 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 lexème courant, fournissant ainsi une information saillante sur les lexèmes é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 lexèmes 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 RNN

Ajoutés aux RNN, 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 RNN. 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 entraîné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 lexème de l'entrée par rapport à chaque autre lexème de l'entrée et en élabore de l'information en conséquence pour produire la sortie[6]. 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 plongements (embeddings) pour chaque lexème qui contiennent non seulement de l'information sur le lexème courant lui-même, mais aussi une information pondérée des autres lexèmes pertinents.

Concrètement, pour chaque unité d'attention, le transformeur apprend trois matrices de poids ; les poids de la requête (query) W Q {\displaystyle W_{Q}} , les poids de la clé (key) W K {\displaystyle W_{K}} , et les poids de la valeur (value) W V {\displaystyle W_{V}} . Pour chaque lexème i {\displaystyle i} de la séquence d'entrée, le vecteur de plongement du mot (word embedding) x i {\displaystyle x_{i}} est multiplié avec chacune des trois matrices pour produire un vecteur de requête q i = x i W Q {\displaystyle q_{i}=x_{i}W_{Q}} , un vecteur de clé k i = x i W K {\displaystyle k_{i}=x_{i}W_{K}} , et un vecteur de valeur v i = x i W V {\displaystyle v_{i}=x_{i}W_{V}} .

Les poids d'attention sont calculés en utilisant les vecteurs de requête et de clé : le poids d'attention a i j {\displaystyle a_{ij}} du lexème i {\displaystyle i} sur le lexème j {\displaystyle j} est la résultante du produit scalaire de q i {\displaystyle q_{i}} et k j {\displaystyle k_{j}} . Les poids d'attention sont divisés par la racine carrée de la dimension des vecteurs clé, d k {\displaystyle {\sqrt {d_{k}}}} , ce qui permet d'obtenir des vecteurs de variance 1, puis passent à travers une fonction softmax qui normalise les poids de manière à ce qu'ils correspondent à une distribution de probabilité positifs et de somme 1 {\displaystyle 1} . Le fait que W Q {\displaystyle W_{Q}} et W K {\displaystyle W_{K}} soient des matrices différentes permet à l'attention d'être non symétrique: si un lexème i {\displaystyle i} affecte un autre lexème j {\displaystyle j} (i.e. que q i k j {\displaystyle q_{i}\cdot k_{j}} soit grand), cela n'implique pas forcément que le lexème j {\displaystyle j} affecte le lexème i {\displaystyle i} (i.e. q j k i {\displaystyle q_{j}\cdot k_{i}} est grand). La sortie de l'unité d'attention pour le lexème i {\displaystyle i} est la somme pondérée des vecteurs de valeurs de tous les lexèmes, pondérée par a i j {\displaystyle a_{ij}} , l'attention du lexème i {\displaystyle i} sur chaque autre lexème.

Le calcul d'attention pour l'ensemble des lexèmes peut être exprimé comme un produit matriciel, opération réalisable rapidement par les cartes graphiques, à l'aide de shaders.

Le calcul ci-avant peut alors s'écrire comme suit :

Attention ( Q , K , V ) = softmax ( Q K T d k ) V {\displaystyle {\begin{aligned}{\text{Attention}}(Q,K,V)={\text{softmax}}\left({\frac {QK^{\mathrm {T} }}{\sqrt {d_{k}}}}\right)V\end{aligned}}}

où le vecteur K {\displaystyle K} est transposé afin de rendre les dimensions compatibles.

L'attention multi-tête

Un ensemble composé des matrices ( W Q , W K , W V ) {\displaystyle \left(W_{Q},W_{K},W_{V}\right)} 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é-entraînés sur de grands ensembles de données, avant d'être affinés sur le problème visé (fine-tuning). Ce pré-entraînement 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[7], a pu dépasser la performance atteinte par les CNNs (Convolutional Neural Networks en anglais) de l'époque. Il a été pré-entraîné avec un jeu de données propriétaire de Google, JFT-3B, contenant quelque 3 milliards d'images.

Notes et références

  1. (en) Ashish Vaswani, « Attention Is All You Need »,
  2. (en) Margaret Rouse, « Large Language Model (LLM) », Techopedia,‎ (lire en ligne)
  3. (en) Yugesh Verma, « Hands-on guide to using Vision transformer for Image classification », sur Analytics India Magazine, (consulté le )
  4. (en) Aayush Mittal, « Google's Multimodal AI Gemini - A Technical Deep Dive », sur Unite.AI, (consulté le )
  5. (en) Dzmitry Bahdanau, « A Neural Machine Translation by Jointly Learning to Align and Translate »,
  6. Jay Alammar, « Le Transformer illustré »,
  7. (en) Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov et Dirk Weissenborn, « An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale », arXiv:2010.11929 [cs],‎ (lire en ligne, consulté le ).

Voir aussi

Sur les autres projets Wikimedia :

  • transformeur, sur le Wiktionnaire
  • Réseaux de neurones, sur Wikiversity

Articles connexes

  • icône décorative Portail de l'informatique théorique