L'architecture du transformateur : une analyse approfondie du fonctionnement réel des LLM

DEV - 27/12
Publié à l'origine sur pranaybathini.com/learn/llm-fundamentals/transformer-architecture Après...

Publié à l'origine sur pranaybathini.com/learn/llm-fundamentals/transformer-architecture

Après avoir passé des mois à étudier les architectures de transformateurs et à créer des applications LLM, j'ai réalisé quelque chose : la plupart des explications sont écrasantes ou manquent de détails. Cet article est ma tentative de combler cette lacune en expliquant les transformateurs comme j'aurais aimé que quelqu'un me les explique.

Pour une introduction à ce que signifie le Large Language Model (LLM), reportez-vous à cet article que j'ai publié précédemment.

À la fin de cette leçon, vous serez en mesure d'examiner n'importe quel diagramme d'architecture LLM et de comprendre ce qui se passe.

Il ne s'agit pas uniquement de connaissances académiques : comprendre l'architecture de Transformer vous aidera à prendre de meilleures décisions concernant la sélection de modèles, à optimiser vos invites et à déboguer les problèmes lorsque vos applications LLM se comportent de manière inattendue.

Comment lire cette leçon : Vous n'avez pas besoin de tout absorber en une seule lecture. Parcourez d'abord, revenez plus tard : cette leçon est conçue pour s'accumuler au fil du temps. Les concepts s’appuient les uns sur les autres, alors revenez si vous avez besoin d’une compréhension plus approfondie.

Ce que vous apprendrez

  • L'architecture complète du Transformer, de l'entrée à la sortie
  • Comment les codages positionnels permettent aux modèles de comprendre l'ordre des mots
  • La différence entre les modèles à encodeur uniquement, à décodeur uniquement et à encodeur-décodeur
  • Pourquoi la normalisation des couches et les connexions résiduelles sont importantes
  • Comment lire et interpréter des diagrammes d'architecture
  • Implications pratiques pour choisir le bon type de modèle

Ne vous inquiétez pas si certains de ces termes vous semblent peu familiers : nous expliquerons chaque concept étape par étape, en commençant par les bases. À la fin de cette leçon, ces termes techniques prendront tout leur sens, même si vous débutez dans l'architecture d'apprentissage automatique.

La grande image

Commençons par une simple analogie. Imaginez que vous lisez un livre et que vous essayez de comprendre une phrase :

"L'animal n'a pas traversé la rue car il était trop fatigué."

Pour comprendre cela, votre cerveau fait plusieurs choses :

  1. Reconnaît les mots – Vous savez ce que signifient « animal », « rue » et « fatigué ».
  2. Comprend l'ordre des mots – « L'animal était fatigué » signifie quelque chose de différent de « L'animal était fatigué »
  3. Relie les mots apparentés - Vous comprenez que « ça » fait référence à « animal » et non à « rue ».
  4. Saisir le sens global - La fatigue de l'animal l'a empêché de traverser

Un Transformer fait quelque chose de remarquablement similaire, mais en utilisant les mathématiques. Laissez-moi vous expliquer simplement comment cela fonctionne :

Ce qui entre : Texte divisé en morceaux (appelés jetons)

Qu'est-ce qu'un jeton ? Considérez les jetons comme les éléments de base que les modèles de langage comprennent :

  • Parfois, un jeton est un mot complet (comme « chat » ou « le »)
  • Parfois, cela fait partie d'un mot (comme « sous » et « stand » pour « comprendre »)
  • Même les signes de ponctuation et les espaces peuvent être leurs propres jetons
  • Par exemple, « J'aime l'IA ! » peut être divisé en jetons : ["I", " love", " AI", "!"]

Ce qui se passe à l'intérieur : Le modèle traite ce texte en plusieurs étapes (nous explorerons chacune en détail) :

  1. Convertit les mots en nombres (car les ordinateurs ne comprennent que les mathématiques)
  2. Ajoute des informations sur les positions des mots (1er mot, 2ème mot, etc.)
  3. Détermine quels mots sont liés les uns aux autres
  4. Renforce une compréhension plus profonde en répétant ce processus plusieurs fois

Ce qui en résulte : Cela dépend de ce dont vous avez besoin :

  • Comprendre le texte (alias : encodage) : une représentation mathématique qui capture le sens (utile pour : "Cet e-mail est-il du spam ?" ou "Trouver des articles similaires")
  • Génération de texte (alias : décodage) : prédiction du mot qui devrait suivre (utile pour : ChatGPT, complétion de code, traduction)

Pensez à un transformateur comme à une chaîne de montage où chaque station affine le produit. Les matières premières (les mots) entrent, chaque station ajoute quelque chose (informations de position, relations, sens) et le produit final ressort plus raffiné à chaque étape.

Un voyage visuel rapide

Voici comment le texte circule dans un Transformer :

Le diagramme montre comment une phrase simple comme « Le chat était assis sur le tapis » est traitée à travers l'architecture du transformateur - de la tokenisation à la sortie finale. Les étapes clés comprennent l'intégration des jetons dans des vecteurs, l'ajout d'informations de position, l'application de l'auto-attention pour comprendre les relations entre les mots et la répétition des étapes d'attention et de traitement plusieurs fois pour affiner la compréhension.

Les LLM modernes répètent plusieurs fois les étapes d'attention et de traitement :

  • Petits modèles : 12 répétitions (comme BERT)
  • Grands modèles : plus de 120 répétitions (comme GPT-4)
  • Chaque répétition = une « couche » qui approfondit la compréhension

Examinons maintenant chaque étape en détail, en commençant par le tout début.

Étape 1 : Tokenisation et intégrations

Avant que le modèle puisse traiter du texte, il doit résoudre deux problèmes : diviser le texte en morceaux (tokénisation) et convertir ces morceaux en nombres (incorporations).

Partie A : Tokenisation – Briser le texte en morceaux

Le problème : comment diviser le texte en morceaux gérables ? Vous pourriez penser « simplement diviser par espaces en mots », mais c'est trop simple.

Pourquoi ne pas simplement utiliser des mots ?

Considérez ces défis :

  • « course » et « courses » sont liés, mais les traiter comme des mots complètement séparés gaspille la capacité du modèle
  • De nouveaux mots comme « ChatGPT » apparaissent constamment : vous ne pouvez pas avoir un vocabulaire infini
  • Différentes langues n'utilisent pas d'espaces (chinois, japonais)

La solution : la tokenisation des sous-mots

Les modèles modernes divisent le texte en sous-mots – des morceaux plus petits que les mots mais plus grands que les caractères individuels. Pensez-y comme aux blocs Lego : au lieu d’avoir besoin d’une pièce unique pour chaque structure possible, vous réutilisez des blocs communs.

Exemple simple :

Texte : "Je joue joyeusement" Divisé par des espaces (approche naïve) : ["Je", "je suis", "joue", "heureusement"] Problème : Besoin d'entrées séparées pour "jouer", "jouer", "joué", "joueur", "joue"... Tokenisation des sous-mots (approche intelligente) : ["Je", "je suis", "jouer", "##ing", "heureux", "##ly"] Mieux : Réutiliser "play" et "##ing" pour "play", "running", "jumping" Réutilisez "happy" et "##ly" pour "heureusement", "malheureusement", "rapidement"
Entrer en mode plein écran Quitter le mode plein écran

Pourquoi c’est important – exemples concrets :

  1. Gestion des mots apparentés :

    • "malheur" → ["un", "##happy", "##ness"]
    • Maintenant, le modèle sait : "un" = négatif, "heureux" = émotion, "ness" = état
    • Quand il voit « inconfortable », il reconnaît que « un » signifie négatif !
  2. Gestion des mots rares/nouveaux :

    • Imaginez que le mot « se désabonner » n'était pas en formation
    • Le modèle le décompose : ["un", "##subscribe"]
    • Il peut deviner le sens des éléments qu'il connaît : "un" (annuler) + "subscribe" (rejoindre)
  3. Efficacité du vocabulaire :

    • 50 000 jetons peuvent représenter des millions de combinaisons de mots
    • C'est comme avoir 1 000 pièces Lego qui créent des structures infinies

Exemple réel d’impact de la tokenisation :

Entrée : "L'animal n'a pas traversé la rue parce qu'il était fatigué" Jetons (ce que le modèle voit réellement) : ["Le", "animal", "n'a pas", "'", "t", "traverse", "la", "rue", "parce que", "il", "était", "fatigué"] Remarque : - "n'a pas" → ["n'a pas", "'", "t"] (divisé pour gérer les contractions) - Chaque jeton est ensuite converti en nombres (intégrations)
Entrer en mode plein écran Quitter le mode plein écran

Partie B : Incorporations – Conversion de jetons en nombres

Le problème : les ordinateurs ne comprennent pas les jetons. Ils ne travaillent qu'avec des chiffres. Alors, comment pouvons-nous convertir « chat » en quelque chose qu'un ordinateur peut traiter ?

Comprendre les dimensions avec une analogie simple

Avant de plonger dans le vif du sujet, comprenons ce que signifient les « dimensions » avec un exemple familier :

Décrire une personne en 3 dimensions :

  • Hauteur : 5,8 pieds
  • Poids : 150 livres
  • Âge : 30 ans

Ces 3 nombres (dimensions) nous donnent une manière mathématique de représenter une personne. Maintenant, que se passe-t-il si nous voulons représenter mathématiquement un mot ?

Décrire un mot nécessite bien plus de dimensions :

Pour tout capturer sur le mot « chat », nous avons besoin de centaines de nombres :

  • Dimension 1 : Dans quelle mesure ce mot ressemble-t-il à un animal ? (0,9 - très animal)
  • Dimension 2 : À quel point est-ce « petit » ? (0,7 - assez petit)
  • Dimension 3 : Dans quelle mesure est-ce « domestique » ? (0,8 - très domestique)
  • Dimension 4 : À quel point est-ce « moelleux » ? (0,6 - un peu moelleux)
  • ... (et des centaines d'au...
    [Courte citation de 8% de l'article original]
Loading...