LLM, Transformers, GPT, RAG et Agents
Introduction aux LLM
Avec la démocratisation d’outils comme ChatGPT, de nombreuses personnes s’intéressent aux modèles génératifs. Notons qu’un tel outil s’appuie et conjugue deux applications différentes : le modèle génératif (ici nommé GPT, pour Generative Pre-trained Transformer) et l’interface avec l’utilisateur, qui gère le dialogue avec celui-ci sans perdre le contexte de la conversation (le "chat").
Les Large Language Models (LLM), comme les GPT, sont de grands modèles génératifs linguistiques qui étendent les capacités des techniques NLP (Natural Language Processing) que nous avons abordées dans le chapitre dédié. Ils s’appuient sur les concepts des réseaux neuronaux, mais ces modèles dépassent de loin la complexité des réseaux neuronaux récurrents traditionnels.

Fonctionnement itératif simplifié d’un réseau récurrent (avant les LLM)
Vous trouverez l’explication des mathématiques réseaux neuronaux récurrents (RNN) et les Long Short-Term Memory (LSTM) dans notre ouvrage aux Éditions ENI : TensorFlow et Keras - L’intelligence artificielle appliquée à la robotique humanoïde.
Les LLM actuels sont multifonctionnels, capables d’effectuer...
Entraînement des modèles LLM
Nous sommes dans le cas d’un modèle supervisé ayant des caractéristiques héritées des réseaux neuronaux que nous avons déjà abordés. On utilise les techniques du NLP (typiquement la tokenisation et l’embedding) pour préparer les données. Il faudra déterminer plusieurs tableaux de poids, car les modèles utilisent souvent des mécanismes qui consistent à opposer les résultats d’un réseau neuronal vis-à-vis d’un autre.
Les modèles "fondation" nécessitent des puissances machines importantes et le nombre de paramètres est considérable. De plus, les volumes de données à manipuler sont énormes (millions de documents). Sauf si vous êtes dans une organisation puissante et riche, il est peu probable que vous ayez la capacité de les construire. À l’inverse, vous pourrez améliorer ces modèles au travers de différentes techniques comme le RAG (Retrieval-Augmented Generation), ou tout simplement les utiliser comme composants (agents) dans votre chaîne de traitement, ou leur ajouter des agents spécifiques qui multiplieront leurs capacités.
Comme pour tous les modèles de Machine Learning, vous devrez vous intégrer dans un processus d’apprentissage comme celui...
LLM basés sur l’architecture Transformer
Les modèles de langage modernes (LLM) utilisent principalement l’architecture Transformer explorée par Vaswani et al. en 2017. Cela marque un changement de paradigme par rapport aux modèles séquentiels récurrents.
L’état de l’art (SOTA, State of the Art) donne la primauté à ces architectures à base de Transformers, mais on voit apparaître d’autres initiatives équivalentes mathématiquement qui pourraient nous surprendre dans notre course vers une IA générale, aujourd’hui réputée inaccessible via nos architectures actuelles.
1. Synthèse de l’architecture Transformers
L’architecture Transformer est optimisée pour capturer des dépendances globales au sein de séquences. La " confrontation " entre un encodeur et un décodeur présente dans d’autres architectures de Deep Learning, ainsi que le mécanisme nommé "attention" y ont été remodelés pour créer une efficacité exceptionnelle qui a dépassé nos espérances. Vu globalement, le mécanisme est le suivant :
-
Un encodeur transforme une séquence d’entrée X en une représentation vectorielle Z.
-
Un décodeur utilise Z et les tokens précédemment générés pour produire une séquence de sortie Y.
-
Un générateur applique une fonction softmax pour obtenir une probabilité pour chaque token dans le vocabulaire cible.
-
Il suffit alors de prendre un échantillon (sampling) pour générer le résultat.
Mais de nombreuses subtilités rendent l’architecture Transformer particulièrement efficace, en particulier pour de grandes quantités de données séquentielles.
a. Encodeur
Après l’étape habituelle d’embedding, l’encodeur intervient comme une séquence de N couches identiques. Chaque couche applique les opérations suivantes :
-
Mécanisme d’attention "multi-têtes" :
-
L’entrée est une séquence de vecteurs X=[x_1,x_2,…,x_n].
-
Chaque x_i est une représentation vectorielle d’un token.
-
La variable...
Création d’un modèle GPT from scratch
Pour créer un modèle GPT from scratch, par exemple en copiant le modèle GPT-2 de OpenAI, qui était open source, il vous suffit d’assembler les briques disponibles dans nos frameworks. En utilisant ces technologies, vous pouvez entraîner un tel modèle sur un gros dataset de données textuelles très spécifiques à votre activité. Vous pourrez alors le spécialiser pour répondre à des questions, générer des textes et le faire travailler de concert avec les modèles des grands offreurs de LLM en utilisant des techniques de fine-tuning ou utilisant votre GPT-2 spécialisé comme un agent local dans votre application.
La structure suivante serait un bon point de départ pour un modèle GPT-2 :

Agencement des briques de base pour un GPT-2 simple
La fonction d’activation GELU (Gaussian Error Linear Unit) utilisée est une fonction d’activation non linéaire qui lisse la fonction ReLU. Elle est apparue dans les modèles de transformation tels que BERT et les variantes de GPT.

En étudiant le schéma précédent, remarquez le lien direct situé entre les embeddings et sommations de résidus. Celui-ci pourrait sembler difficile à implémenter, mais nous disposons heureusement de composants existants pour utiliser les connexions résiduelles : n’hésitez pas à utiliser ces briques dans vos nouveaux modèles, y compris dans des modèles de Machine Learning plus simples ou des CNN.
Nous avons de la chance, les couches d’attention multi-head et les couches d’embedding sont déjà disponibles dans les frameworks de Deep Learning.
Il existe de nombreux modèles LLM open-sources disponibles. Vous pourrez vous en inspirer à loisir.
En français, embedding se traduit par "plongement" ou "plongement lexical"...
Utilisation d’un LLM en local
1. Ollama
Vous pouvez utiliser les modèles LLM comme ChatGPT ou Mistral en vous connectant sur leur site. On peut aussi jouer avec les différents modèles en utilisant du code abrité sur un cloud dédié ou pas (Huggingface, Azure…). Il est également possible d’invoquer des LLM dans votre code au travers d’une API, l’API d’OpenAI par exemple. Toutes ces options sont payantes à partir du moment où l’on en fait un usage répété.
Nous vous proposons d’utiliser vos LLM après les avoir téléchargés localement, c’est satisfaisant, économe et cela permet de tester vos méthodes sans stress financier. Si certaines réponses à vos prompts sont moins pertinentes que celles que vous attendez, typiquement parce que les modèles que vous téléchargez sont allégés en termes de nombre de paramètres et d’encodage, vous pourrez toujours utiliser des API pour compléter vos réponses ou basculer sur un cloud payant.
Vous avez sans doute noté que les noms des modèles téléchargeables sont qualifiés avec une mention comme "7B, 13B…", cela correspond au nombre de paramètres impliqués dans une version du modèle (B = milliard). Globalement, vous devez dédier à vos processus au moins 8 Go de mémoire pour utiliser les modèles 7B, 16 Go pour les modèles 13B et 32 Go pour les modèles 33B. Pour avoir un minimum de confort, la quantité de mémoire de votre GPU doit être équivalente. Votre facteur limitant sera également le nombre d’utilisateurs simultanés de votre application. De nombreux professionnels développent les algorithmes et les interfaces de leurs applications localement. Ils utilisent des GPU de 24 Go ou plus et une grosse mémoire RAM (192 Go sous Windows pro) et un bon micro-processeur, mais on peut travailler avec beaucoup moins de mémoire, comme une configuration de "gamer" moyen, si l’on est un peu patient…
Pour illustrer notre propos, nous avons choisi la solution "Ollama", mais d’autres outils open sources vous permettent d’utiliser un LLM open source...
Améliorer les réponses du LLM via le RAG
1. Le RAG (Retrieval Augmented Generation)
Les grands modèles de langage (LLM), comme ChatGPT, sont évidemment limités par le choix des données qui ont servi à les entraîner. Le RAG vise alors à générer des réponses plus précises et actualisées que ces modèles très génériques.
Le RAG est une forme de "tuning" de votre modèle, mais il ne faut pas le confondre avec la notion de "fine tuning" des modèles qui correspond à une action beaucoup plus lourde consistant à travailler sur les poids d’un modèle. Il ne faut pas non plus le confondre avec la notion de "distillation de connaissances (KG)", qui consiste globalement à entraîner un modèle en utilisant un autre modèle pour lui injecter des données d’entraînement générées (synthetic data generation utilisées pour un nouveau training).
Introduit en 2020, le RAG (Retrieval-Augmented Generation) est une technique hybride qui exploite des bases de données externes (dont Internet…) en conjonction avec un modèle génératif que l’on veut améliorer ou spécialiser au regard d’un contexte particulier (un sujet précis, les documents confidentiels d’une organisation…). Il s’agit d’intégrer de nouvelles données dans le modèle déjà entraîné sans entacher sa cohérence ou son efficacité. On aimerait limiter par ailleurs les biais de l’IA au travers du RAG, mais il n’est pas certain que cela soit systématiquement efficace.
Cette technique est peu coûteuse et à la portée de toutes les organisations, car elle ne mobilise pas les moyens informatiques monstrueux nécessaires à l’entraînement, ou même parfois au fine tuning d’un modèle génératif fondamental et polyvalent ("foundation model") comme les GPT, les LLama…
Les principales étapes d’un tel processus sont la récupération d’informations pertinentes (retriever), puis la génération augmentée par ces informations.
Rappelons que pour manipuler...
Utilisation d’agents pour améliorer les IA basées sur les LLM
1. Les agents sont vos amis
L’utilisation d’agents dans le contexte des LLM présente de nombreux avantages dans la mesure où ils peuvent effectuer des actions concrètes non directement accessibles par le LLM :
-
rechercher des informations sur le Web ou dans des bases de données ;
-
exécuter un algorithme ;
-
effectuer des calculs mathématiques ;
-
transformer des données pour les rendre exploitables par le LLM ;
-
interagir avec des API ;
-
accéder à des informations actualisées après l’entraînement du LLM !
Après avoir exécuté une action et obtenu un retour (réponse d’un outil, résultat d’un calcul, etc.), un agent ou son superviseur (orchestrateur) peut réévaluer ses hypothèses et affiner ses choix.
Les agents peuvent être "spécialisés" dans un domaine particulier et invoquer des LLM de façon connexe avec des prompts adéquats.
Les architectures basées sur des agents permettent également d’invoquer des LLM de plus petites tailles et de composer leurs réponses pour travailler sur des infrastructures plus légères, ou même très légères comme des téléphones, des raspberry Pi…
Malheureusement, cette orchestration effectuée "à la main" s’avère moins générique et donc soumise à l’introduction de bugs ou d’hallucinations qui reflètent souvent les a priori des développeurs ou de leurs clients.
En tout état de cause, l’utilisation d’agent a souvent tendance à surdéterminer le modèle résultant de cette orchestration (overfitting), puisque ces architectures visent souvent à se spécialiser à un contexte donné.
Construire de bons templates de prompt et de bonnes architectures d’agent font partie des activités quotidiennes du data scientist lors des phases de développement de ses projets.
Dans le contexte des LLM, les agents observent, agissent et s’interfacent avec l’extérieur dans un contexte donné (prompt utilisateur, informations externes, réponse d’un...
En guise de conclusion
Vous avez en main assez de connaissances et d’outils simples pour produire dès à présent une application d’intelligence artificielle tout à fait honorable.
Vous avez appris à interroger et moduler un LLM sans être dépendant d’une API commerciale. Vous disposez d’assez de pistes pour contrôler les réactions et la pertinence de vos IA et vous savez y adjoindre des agents pour améliorer ses réponses. Ces agents pourront hériter de toutes les techniques de Machine Learning que nous avons explorées dans ce livre. Vous pourrez les combiner pour obtenir des résultats très performants au point de vue fonctionnel.
Votre application pourra être déployée sur Internet, un serveur local, une architecture Docker, via votre API, ou encore de façon interactive via Shiny ou même en mode batch sur un gros calculateur.
Avouons-le, il vous reste un peu de travail :
-
Techniquement parlant, vous aurez à vous confronter à des problèmes de performance, de coût ou de sécurité et vous devrez vous familiariser avec des outils de déploiement et de monitoring.
-
Pratiquement et quotidiennement, vous aurez à vous confronter à la recherche de données pertinentes et de qualité, ainsi qu’à leur mise à jour et à...