De GPT-1 aux modèles de raisonnement : ce que chaque génération a changé pour les développeurs
Suivez l’évolution de la famille GPT, du pré-entraînement de 2018 aux modèles de raisonnement, découvrez quelles idées chaque génération a apportées, et découvrez GPT-4o Vision ainsi que Structured Outputs from Python.
Sources: The GPT Timeline: How OpenAI Built the Brains of Modern AI
Chaque appel API que vous effectuez vers un modèle de langage moderne repose sur un petit nombre d’idées qui sont apparues progressivement au fil des générations : l’entraînement préalable génératif, l’échelle de traitement, l’apprentissage in-context, l’alignement grâce aux retours des humains, la multimodalité native, ainsi que les calculs supplémentaires effectués lors de l’inférence. Connaître l’origine de chaque idée permet de comprendre plus facilement ce qu’un modèle est capable de faire, pourquoi il échoue, et quelles fonctionnalités d’API utiliser. Cette présentation retrace l’évolution de la série GPT depuis ses débuts en 2018 jusqu’aux modèles axés sur le raisonnement, et se termine par deux exemples pratiques en Python pour GPT-4o.
Avant GPT : pourquoi le Transformer était important
Jusqu’environ 2018, la plupart des systèmes de traitement du langage naturel reposaient sur les réseaux neuronaux récurrents et leur variante LSTM. Ces modèles lisaient le texte token par token, ce qui rendait difficile la mise en parallèle de l’entraînement et faisait que les informations figurant au début d’un long texte s’estompaient avant la fin.
En 2017, un article de recherche de Google intitulé « Attention Is All You Need » a présenté l’architecture Transformer. Elle a remplacé la récurrence par l’auto-attention, permettant à chaque position d’une séquence de s’intéresser directement à toutes les autres. OpenAI a développé sa série GPT (Generative Pre-trained Transformer) sur cette architecture, et en juin 2018 a publié l’article « Improving Language Understanding by Generative Pre-Training », que peu de personnes à l’époque ont reconnu comme le début d’un changement majeur dans l’informatique.
2018 à 2019 : l’entraînement préalable et les avantages de l’échelle
GPT-1 : entraînement préalable d’abord, affinage ensuite
Le premier modèle était modeste selon les standards actuels :
- 117 millions de paramètres
- un Transformer uniquement décodeur avec 12 couches
- entraîné sur BooksCorpus, soit environ 5 GB de texte
Sa contribution a été une méthode en deux étapes. D’abord, un entraînement préalable non supervisé sur du texte brut a permis au modèle d’acquérir la grammaire, les associations factuelles et la structure du langage simplement en prédisant le token suivant. Ensuite, une petite quantité d’affinage supervisé sur une tâche spécifique, comme l’analyse des sentiments ou la classification, suffisait pour obtenir des résultats de pointe, sans avoir à concevoir une architecture personnalisée pour chaque tâche.
GPT-2 : apparition d’un comportement zero-shot
La prochaine étape a porté principalement sur la taille :
- 1,5 milliard de paramètres, soit environ dix fois plus que GPT-1
Avec une ampleur suffisante, le fine-tuning est devenu optionnel pour de nombreuses tâches. GPT-2 a montré des capacités d’apprentissage zéro-shot : une instruction telle que « Traduire en français : » pouvait le diriger vers une tâche pour laquelle il n’avait jamais été explicitement entraîné, simplement parce que poursuivre ce texte impliquait logiquement la production d’une traduction.
GPT-2 est également connu pour la manière dont il a été publié. OpenAI a initialement retenu le modèle complet, se disant préoccupé par son utilisation potentielle à des fins de production massive de fausses nouvelles et de spam, et l’a mis en ligne par étapes. Cette décision a déclenché un débat public durable sur la sécurité de l’IA et sur la question de savoir si des modèles puissants devraient être publiés ouvertement.
2020 à 2022 : apprentissage in-context et alignement
GPT-3 : exemples intégrés dans l’instruction
GPT-3 a franchi le pas de la recherche vers un produit commercial :
- 175 milliards de paramètres, soit plus de cent fois ceux de GPT-2
- entraîné à partir d’un mélange de textes web filtrés, de livres et de Wikipédia, issus d’environ 45 TB de données brutes avant filtrage
Sa capacité phare était l’apprentissage à partir de quelques exemples en grande échelle. En fournissant deux ou trois exemples fonctionnels dans la demande, le modèle pouvait reprendre le schéma, que ce soit pour écrire du code, de la poésie ou extraire des informations à partir de données désordonnées. Il s’agissait d’un apprentissage in-context : le modèle s’adaptait uniquement à partir de la demande, sans mise à jour des poids.
Cependant, la version de base de GPT-3 présentait une limite sérieuse : elle n’était entraînée que pour continuer des textes, et non pour agir en assistant utile, ce qui la poussait souvent à inventer des faits, à s’éloigner du sujet ou à ignorer ce qui lui avait été demandé. Le diagramme ci-dessous résume la correction apportée par la suite : l’alignement grâce aux retours des humains transforme un prédicteur de texte brut en un modèle capable d’obéir aux instructions.
[Raw Pre-training] --> Predicts likely text continuations (often rambling or toxic)
│
▼ + RLHF (Human Feedback Alignment)
[InstructGPT Engine] --> Follows instructions safely and concisely
InstructGPT et ChatGPT : apprendre à partir des préférences humaines
La solution mise en œuvre a été l’apprentissage par renforcement à partir des retours humains (RLHF). Les utilisateurs évaluaient les sorties du modèle, un modèle de récompense apprenait ces préférences, puis le modèle de langage était optimisé pour produire des réponses que les humains préféraient. Les modèles InstructGPT résultants suivaient les instructions de manière bien plus directe et utile.
Le 30 novembre 2022, OpenAI a lancé ChatGPT, basé sur la série GPT-3.5. La combinaison de conversations à plusieurs tours avec un comportement ajusté via RLHF l’a fait qualifier comme l’application grand public à la croissance la plus rapide à ce moment-là, avec une estimation de 100 millions d’utilisateurs en environ deux mois.
2023 à 2024 : raisonnement professionnel et multimodalité
GPT-4 : raisonnement plus puissant, images et outils
GPT-4, sorti en mars 2023, a déplacé l’accent du texte fluide vers le raisonnement dans des tâches académiques et professionnelles. OpenAI a présenté des résultats tels qu’un score autour du 90e percentile dans un examen simulé Uniform Bar Exam ainsi que de bons résultats dans de nombreux examens AP. Il a également introduit la compréhension d’images, et la famille GPT-4 a acquis des fonctionnalités sur lesquelles les développeurs comptent aujourd’hui au quotidien : une sortie au format JSON, des appels de fonctions et l’utilisation d’outils tels que l’exécution de code et la recherche sur le Web.
Deux détails sont souvent mal présentés. OpenAI n’a pas officiellement publié l’architecture de GPT-4 ; l’allégation largement répandue selon laquelle il s’agirait d’un modèle de type Mixture of Experts provient de rapports non confirmés. De plus, la fenêtre de contexte de 128 k tokens est apparue avec GPT-4 Turbo plus tard en 2023, et non avec la version initiale de mars, qui offrait des fenêtres bien plus petites.
GPT-4o : un réseau pour le texte, la vision et l’audio
Les systèmes de reconnaissance vocale précédents reposaient sur des étapes successives : un modèle transcrivait la parole, un modèle de langage générait du texte, et un moteur distinct synthétisait l’audio. GPT-4o, où le « o » signifie « omni », traite le texte, les images et l’audio au sein d’un seul réseau bout en bout. L’élimination de ces étapes intermédiaires réduit la latence vocale à environ 200 ms et permet au modèle de percevoir et de produire le ton de la voix, et non seulement des mots.
Modèles de raisonnement : utilisation des ressources de calcul au moment de l’inférence
Lorsque les gains liés à des sessions d’entraînement de plus en plus longues sont devenus plus difficiles à obtenir, avec des données d’entraînement de haute qualité qui constituaient de plus en plus une contrainte, l’attention s’est tournée vers les calculs effectués au moment du test : permettre à un modèle de réfléchir avant de répondre. La différence est simple : une réponse classique de GPT commence à générer des tokens dès l’arrivée du prompt, tandis qu’un modèle de raisonnement analyse d’abord une série de réflexions internes avant de produire sa réponse finale.
Traditional GPT Response: Prompt ──> Immediate Word-by-Word Streaming
o-Series Response: Prompt ──> Internal Chain-of-Thought (Deliberation) ──> Final Answer
Les séries o1 et o3 d’OpenAI sont conçues de cette manière. Au lieu de choisir immédiatement le mot suivant, le modèle consacre des ressources supplémentaires à l’exploration de cas limites, au contrôle des étapes intermédiaires et à la débogage de son propre code, ce qui est particulièrement utile en mathématiques, en programmation compétitive et dans les problèmes nécessitant une logique à plusieurs étapes. Le prix à payer est une latence et des coûts plus élevés, il convient donc de les réserver aux problèmes qui exigent une réflexion approfondie.
Travailler avec GPT-4o en Python
L’histoire explique pourquoi GPT-4o a modifié son processus de développement quotidien : au lieu d’associer un modèle de vision, un modèle de langage et un moteur de synthèse vocale, une seule appel API peut accepter des entrées mixtes. Deux exemples illustrent les fonctionnalités les plus utiles pour les développeurs.
Envoyer une image et du texte dans une seule requête
Avec GPT-4o, vous pouvez placer du texte et des images côte à côte dans le tableau content d’un seul message utilisateur. Une image peut être transmise sous forme de URL publique ou en tant que données encodées en base64. L’exemple ci-dessous utilise le SDK officiel Python, lit la clé API à partir d’une variable d’environnement, demande au modèle d’examiner une photo de béton à la recherche de fissures et d’évaluer leur gravité, limite la réponse avec max_tokens, puis affiche le texte du premier résultat.
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# Sending a visual inspection query directly to GPT-4o
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "Analyze this image for architectural structural damage. Identify any cracks and rate severity."
},
{
"type": "image_url",
"image_url": {
"url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/Concrete_crack_example.jpg"
},
},
],
}
],
max_tokens=500,
)
print(response.choices[0].message.content)
Le contenu est une liste de champs de type défini (text et image_url), ce qui vous permet de combiner plusieurs images et instructions en une seule fois. Considérez la sortie comme un examen à examiner ; tout ce qui concerne la sécurité nécessite toujours l’intervention d’un expert.
Obtenir du JSON conforme au schéma avec les Sorties structurées
Extraiter de manière fiable du JSON à partir d’un modèle signifiait autrefois utiliser des instructions précises ainsi qu’un parsing défensif à l’aide d’expressions régulières. Les Sorties structurées résolvent ce problème au stade de la décodage : l’échantillonnage du modèle est contraint de sorte que la sortie doit respecter le schéma JSON que vous fournissez. Avec des schémas stricts, OpenAI décrit cela comme une garantie de conformité au schéma, ce qui est plus solide que le « mode JSON » ancien, qui ne garantissait qu’un JSON syntaxiquement valide.
Dans Python, la méthode la plus pratique est Pydantic. L’exemple définit un modèle Entity ainsi qu’un modèle ArticleAnalysis comprenant un titre, un résumé, une note d’opinion comprise entre -1,0 et 1,0, ainsi qu’une liste d’entités ; il passe ensuite cette classe en tant que response_format à l’outil parse du SDK. Cet outil convertit la classe en un schéma JSON, l’envoie avec la requête, et renvoie un objet typé dans message.parsed.
from openai import OpenAI
from pydantic import BaseModel, Field
from typing import List
client = OpenAI()
# Define the exact JSON schema required by your database
class Entity(BaseModel):
name: str
category: str = Field(description="Person, Organization, Location, or Date")
class ArticleAnalysis(BaseModel):
title: str
summary: str
sentiment_score: float = Field(description="Score between -1.0 and 1.0")
key_entities: List[Entity]
# Pass the schema directly into the completion request
completion = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are an automated intelligence parser."},
{"role": "user", "content": "OpenAI CEO Sam Altman announced new developer tooling in San Francisco today."}
],
response_format=ArticleAnalysis,
)
# Extract type-safe output directly as a Python object
result: ArticleAnalysis = completion.choices[0].message.parsed
print(f"Summary: {result.summary}")
print(f"Entities: {result.key_entities}")
Deux remarques pratiques. Le outil se trouvait sous client.beta lors du lancement de cette fonctionnalité, et les versions plus récentes du SDK le rendent également accessible en dehors de l’espace de noms beta, il convient donc de vérifier la version du SDK utilisée par votre projet. De plus, bien que le schéma soit garanti, les valeurs ne le sont pas : un score d’opinion sera un nombre, mais le fait qu’il s’agisse d’un nombre pertinent reste une appréciation du modèle. Gérez les refus et validez les règles métier comme vous le feriez pour toute entrée externe.
Un aperçu de la famille GPT
- GPT-1 (2018) : 117 millions de paramètres ; a démontré que l’entraînement préalable génératif associé à un léger affinage fonctionnait bien.
- GPT-2 (2019) : 1,5 milliard de paramètres ; performances sur des tâches sans exemple préalable et sortie progressive motivée par des considérations de sécurité.
- GPT-3 (2020) : 175 milliards de paramètres ; apprentissage en contexte et à grande échelle avec peu d’exemples.
Que signifie cette évolution pour votre stack
- L’échelle ne suffit plus à elle seule. Les premiers progrès provenaient du nombre de paramètres (117 M, puis 1,5 milliard, puis 175 milliards) ; les avancées ultérieures ont également été portées par des techniques d’alignement telles que RLHF, l’unification multimodale et la délibération en temps de test.
- Les modèles ont été déplacés de l’autocomplétion vers des actions concrètes. Les modèles actuels permettent de planifier, d’appeler des fonctions et de coordonner des workflows à plusieurs étapes, ce qui explique pourquoi la conception d’agents est désormais une préoccupation majeure en ingénierie.
- La prévisibilité est une fonctionnalité que vous pouvez exploiter. Les sorties structurées vous permettent d’intégrer les résultats des modèles dans des chemins de code typés suivant un schéma fixe, au lieu d’analyser du texte libre.
- L’efficacité rivalise désormais avec la taille brute. Des variantes plus petites comme GPT-4o mini ainsi que des modèles de raisonnement ciblés surpassent souvent les modèles les plus volumineux en termes de coût et de latence pour une tâche donnée ; il convient donc de choisir en fonction des besoins spécifiques plutôt que sur la base des capacités générales affichées.
Le développement avec ces modèles consiste de plus en plus à composer des systèmes composés de modèles, d’outils et de schémas, plutôt qu’à envoyer une seule requête.