Transformeur

Dans le monde d'aujourd'hui, Transformeur est devenu un sujet qui intéresse de plus en plus les personnes de tous âges et de tous horizons. Qu’il s’agisse de Transformeur sur le plan personnel, professionnel ou social, son importance et sa pertinence sont indéniables. Depuis ses origines jusqu'à son impact aujourd'hui, Transformeur a fait l'objet de débats, de réflexions et d'études de la part d'experts et de passionnés. Dans cet article, nous explorerons certains des aspects les plus pertinents et actuels de Transformeur, ainsi que son influence sur notre vie quotidienne. Préparez-vous à vous immerger dans le monde fascinant de Transformeur !

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. Elle est principalement utilisée dans le domaine du traitement automatique des langues (TAL) en servant de base aux grands modèles de langage, mais peut aussi servir à traiter d'autres modalités comme les images, les vidéos ou le son, parfois simultanément.

À 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 LSTM (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 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. 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) , les poids de la clé (key) , et les poids de la valeur (value) . Pour chaque lexème de la séquence d'entrée, le vecteur de plongement 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 lexème sur le lexème est la résultante du produit scalaire de et . Les poids d'attention sont divisés par la racine carrée de la dimension des vecteurs clé, , 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 . Le fait que et soient des matrices différentes permet à l'attention d'être non symétrique: si un lexème affecte un autre lexème (i.e. que soit grand), cela n'implique pas forcément que le lexème affecte le lexème (i.e. est grand). La sortie de l'unité d'attention pour le lexème est la somme pondérée des vecteurs de valeurs de tous les lexèmes, pondérée par , l'attention du lexème 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 :

où le vecteur est transposé afin de rendre les dimensions compatibles.

L'attention multi-tête

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é-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, 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 ,‎ (lire en ligne, consulté le ).

Voir aussi

Sur les autres projets Wikimedia :

Articles connexes