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.
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.
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 :
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 :
Ce qui se passe à l'intérieur : Le modèle traite ce texte en plusieurs étapes (nous explorerons chacune en détail) :
Ce qui en résulte : Cela dépend de ce dont vous avez besoin :
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.
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 :
Examinons maintenant chaque étape en détail, en commençant par le tout début.
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).
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 :
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"Pourquoi c’est important – exemples concrets :
Gestion des mots apparentés :
Gestion des mots rares/nouveaux :
Efficacité du vocabulaire :
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)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 ?
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 :
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 :