Andrej Karpathy

L'état de GPT et l'écosystème des LLM

25 mai 2023

Intelligence Artificielle
Illustration de Andrej Karpathy

Introduction

?

Veuillez accueillir Andrej Karpathy, chercheur en IA et membre fondateur d'OpenAI.

Andrej Karpathy

Bonjour à tous. Je suis ravi d'être ici pour vous parler de l'état de GPT et, plus généralement, de l'écosystème en pleine croissance des grands modèles de langage.

Andrej Karpathy

J'aimerais diviser cet exposé en deux parties. Dans la première partie, je voudrais vous expliquer comment nous entraînons les assistants GPT. Ensuite, dans la deuxième partie, nous verrons comment nous pouvons utiliser ces assistants de manière efficace pour vos applications.

La recette de l'entraînement des assistants GPT

Andrej Karpathy

Tout d'abord, examinons la recette émergente pour l'entraînement de ces assistants, et gardez à l'esprit que tout cela est très récent et évolue encore rapidement. Jusqu'à présent, la recette ressemble à ceci.

Andrej Karpathy

C'est une diapositive compliquée, je vais donc l'expliquer étape par étape. Grosso modo, nous avons quatre étapes majeures : le pré-entraînement, l'ajustement fin supervisé, la modélisation de la récompense et l'apprentissage par renforcement, et elles se succèdent en série.

Andrej Karpathy

À chaque étape, nous avons un ensemble de données qui alimente cette étape. Nous avons un algorithme qui, pour nos besoins, sera un objectif pour l'entraînement du réseau neuronal. Ensuite, nous avons un modèle résultant et quelques notes en bas.

Andrej Karpathy

La première étape par laquelle nous allons commencer est l'étape de pré-entraînement. Cette étape est spéciale dans ce diagramme, et ce diagramme n'est pas à l'échelle, car c'est à cette étape que se fait pratiquement tout le travail de calcul. Cela représente 99 % du temps de calcul et des flops de l'entraînement.

Andrej Karpathy

C'est ici que nous traitons des ensembles de données à l'échelle d'Internet avec des milliers de GPU dans un supercalculateur et potentiellement des mois d'entraînement. Les trois autres étapes sont des étapes d'ajustement fin qui se situent bien plus dans l'ordre d'un petit nombre de GPU et d'heures ou de jours.

Andrej Karpathy

Jetons un coup d'œil à l'étape de pré-entraînement pour obtenir un modèle de base.

Étape 1 : Le pré-entraînement

Andrej Karpathy

Tout d'abord, nous allons rassembler une grande quantité de données. Voici un exemple de ce que nous appelons un mélange de données, tiré de cet article publié par Meta lors de la sortie de ce modèle de base LLaMA.

Andrej Karpathy

Vous pouvez voir approximativement les types d'ensembles de données qui entrent dans ces collections. Nous avons CommonCrawl, qui est une capture du Web, C4, qui est aussi CommonCrawl, puis quelques ensembles de données de haute qualité également. Par exemple, GitHub, Wikipedia, des livres, ArXiv, StackExchange, et ainsi de suite.

Andrej Karpathy

Tout cela est mélangé puis échantillonné selon certaines proportions données, et cela constitue l'ensemble d'entraînement pour le GPT.

Andrej Karpathy

Avant de pouvoir réellement nous entraîner sur ces données, nous devons passer par une étape supplémentaire de prétraitement : la tokenisation. Il s'agit d'une traduction du texte brut que nous avons récupéré sur Internet en séquences d'entiers, car c'est la représentation native sur laquelle les GPT fonctionnent.

Andrej Karpathy

Il s'agit d'une traduction sans perte entre des morceaux de texte et des jetons et des entiers. Il existe un certain nombre d'algorithmes pour cette étape. Typiquement, vous pourriez utiliser quelque chose comme le codage par paires d'octets (byte pair encoding), qui fusionne de manière itérative de petits morceaux de texte et les regroupe en jetons.

Andrej Karpathy

Ici, je montre quelques exemples de morceaux de ces jetons et la séquence d'entiers brute que nous allons réellement fournir à un transformateur.

Andrej Karpathy

Ici, je montre deux exemples d'hyperparamètres qui régissent cette étape. Pour GPT-4, nous n'avons pas publié beaucoup d'informations sur la façon dont il a été entraîné, j'utilise donc les chiffres de GPT-3, bien que GPT-3 ait environ trois ans maintenant. LLaMA est un modèle assez récent de Meta.

Andrej Karpathy

Voici en gros les ordres de grandeur auxquels nous avons affaire lors du pré-entraînement. La taille du vocabulaire est généralement de quelques dizaines de milliers de jetons. La longueur du contexte est généralement de l'ordre de 2 000, 4 000 ou, de nos jours, même 100 000. Cela régit le nombre maximum d'entiers que le GPT examinera lorsqu'il tentera de prédire l'entier suivant dans une séquence.

Andrej Karpathy

Vous pouvez voir que le nombre de paramètres est de 65 milliards pour LLaMA. Même si LLaMA n'a que 65 milliards de paramètres par rapport aux 175 milliards de paramètres de GPT-3, LLaMA est un modèle nettement plus puissant. Intuitivement, c'est parce que le modèle est entraîné beaucoup plus longtemps — dans ce cas, 1,4 billion de jetons au lieu de 300 milliards de jetons. Vous ne devriez pas juger la puissance d'un modèle uniquement par le nombre de paramètres qu'il contient.

Andrej Karpathy

Ci-dessous, je montre quelques tableaux d'hyperparamètres qui servent généralement à spécifier le réseau neuronal transformateur : le nombre de têtes, la taille de la dimension, le nombre de couches, et ainsi de suite. En bas, je montre quelques hyperparamètres d'entraînement.

Andrej Karpathy

Pour entraîner le modèle 65B, Meta a utilisé 2 000 GPU, environ 21 jours d'entraînement et environ plusieurs millions de dollars. Ce sont les ordres de grandeur approximatifs que vous devriez avoir à l'esprit pour l'étape de pré-entraînement.

Le fonctionnement technique du transformateur

Andrej Karpathy

Lors du pré-entraînement, nous allons prendre nos jetons et les disposer en lots de données (batches). Nous avons ces tableaux que nous allons fournir au transformateur, et ces tableaux sont B, la taille du lot, et ce sont tous des exemples indépendants empilés en lignes.

Andrej Karpathy

B par T, T étant la longueur maximale du contexte. Dans mon illustration, je n'en ai que 10, mais c'est la longueur du contexte, donc cela pourrait être 2 000, 4 000, etc. Ce sont des lignes extrêmement longues. Nous prenons ces documents, nous les emballons dans des lignes et nous les délimitons avec ces jetons spéciaux de fin de texte, indiquant en gros au transformateur où commence un nouveau document.

Andrej Karpathy

Ici, j'ai quelques exemples de documents et je les ai étirés dans cette entrée.

Andrej Karpathy

Nous allons injecter tous ces nombres dans le transformateur. Permettez-moi de me concentrer sur une seule cellule, mais la même chose se produira pour chaque cellule de ce diagramme. Regardons la cellule verte.

Andrej Karpathy

La cellule verte va examiner tous les jetons qui la précèdent — tous les jetons en jaune — et nous allons injecter tout ce contexte dans le réseau neuronal transformateur. Le transformateur va essayer de prédire le jeton suivant dans une séquence, dans ce cas en rouge.

Andrej Karpathy

Le transformateur n'est qu'un gros amas de composants de réseau neuronal pour nos besoins et il possède généralement plusieurs dizaines de milliards de paramètres. À mesure que vous ajustez ces paramètres, vous obtenez des distributions prédites légèrement différentes pour chacune de ces cellules.

Andrej Karpathy

Si la taille de notre vocabulaire est de 50 257 jetons, alors nous allons avoir autant de nombres because nous devons spécifier une distribution de probabilité pour ce qui vient ensuite. En gros, nous avons une probabilité pour tout ce qui peut suivre.

Andrej Karpathy

Dans cet exemple spécifique pour cette cellule, 513 viendra ensuite, et nous pouvons donc utiliser cela comme source de supervision pour mettre à jour les poids de notre transformateur. Nous appliquons cela fondamentalement sur chaque cellule en parallèle et nous continuons à échanger des lots et à essayer d'amener le transformateur à faire les prédictions correctes sur le jeton qui suit dans une séquence.

Andrej Karpathy

Laissez-moi vous montrer plus concrètement à quoi cela ressemble quand on entraîne l'un de ces modèles. Cela vient du New York Times, et ils ont entraîné un petit GPT sur du Shakespeare. Voici un petit extrait de Shakespeare et ils ont entraîné un GPT dessus.

Andrej Karpathy

Au début, lors de l'initialisation, le GPT commence avec des poids complètement aléatoires, donc vous obtenez des résultats complètement aléatoires. Au fil du temps, à mesure que vous entraînez le GPT plus longtemps, vous obtenez des échantillons plus cohérents et constants du modèle.

Andrej Karpathy

La façon dont vous échantillonnez est la suivante : vous prédisez ce qui vient ensuite, vous échantillonnez à partir de cette distribution et vous réinjectez cela dans le processus. Vous pouvez ainsi échantillonner de longues séquences. À la fin, vous voyez que le transformateur a appris les mots, où mettre des espaces et des virgules, et ainsi de suite. Nous faisons des prédictions de plus en plus cohérentes au fil du temps.

Évolution des modèles : du pré-entraînement au prompting

Andrej Karpathy

Voici le genre de graphiques que vous examinez lors du pré-entraînement d'un modèle. En fait, nous regardons la fonction de perte (loss) au fil du temps pendant l'entraînement, et une perte faible signifie que notre transformateur donne une probabilité plus élevée au jeton entier correct suivant dans une séquence.

Andrej Karpathy

Qu'allons-nous faire de ce modèle une fois entraîné ? La première chose que le domaine a remarquée est que ces modèles apprennent des représentations générales très puissantes, et qu'il est possible de les ajuster très efficacement pour n'importe quelle tâche en aval arbitraire qui pourrait vous intéresser.

Andrej Karpathy

Par exemple, si vous vous intéressez à la classification de sentiments, l'approche habituelle consistait à collecter un tas de positifs et de négatifs, puis à entraîner un modèle de TAL (NLP) pour cela. La nouvelle approche est : ignorez la classification de sentiments, faites un pré-entraînement de grand modèle de langage, entraînez un grand transformateur, puis vous n'aurez peut-être besoin que de quelques exemples pour ajuster très efficacement votre modèle pour cette tâche.

Andrej Karpathy

Cela fonctionne très bien en pratique. La raison en est que le transformateur est forcé de réaliser une multitude de tâches simultanément dans la tâche de modélisation du langage car, rien qu'en termes de prédiction du jeton suivant, il est obligé de comprendre beaucoup de choses sur la structure du texte et tous les différents concepts qu'il contient.

Andrej Karpathy

C'était GPT-1. Vers l'époque de GPT-2, on a remarqué que, mieux encore que l'ajustement fin, on peut en fait solliciter ces modèles très efficacement. Ce sont des modèles de langage et ils veulent compléter des documents. Vous pouvez en fait les inciter à accomplir des tâches simplement en organisant ces faux documents.

Andrej Karpathy

Dans cet exemple, nous avons un passage, puis nous faisons QA, QA, QA. C'est ce qu'on appelle le prompting en quelques exemples (few-shot prompting). Ensuite, nous posons Q, et comme le transformateur essaie de compléter le document, il répond en fait à notre question. C'est un exemple d'ingénierie d'incitation (prompt engineering) sur un modèle de base, en lui faisant croire qu'il imite un document pour lui faire accomplir une tâche.

Andrej Karpathy

C'est ainsi qu'a commencé l'ère du prompting plutôt que de l'ajustement fin, montrant que cela peut réellement fonctionner extrêmement bien sur de nombreux problèmes, even sans entraîner de réseaux neuronaux ni faire d'ajustement fin.

Andrej Karpathy

Depuis lors, nous avons vu tout un arbre généalogique de modèles de base que tout le monde a entraînés. Tous ces modèles ne sont pas disponibles. Par exemple, le modèle de base de GPT-4 n'a jamais été publié. Le modèle GPT-4 avec lequel vous interagissez via l'API n'est pas un modèle de base ; c'est un modèle assistant, et nous allons voir comment les obtenir dans un instant.

Andrej Karpathy

Le modèle de base GPT-3 est disponible via l'API sous le nom DaVinci, et le modèle de base GPT-2 est disponible même sous forme de poids sur notre dépôt GitHub. Actuellement, le meilleur modèle de base disponible est probablement la série LLaMA de Meta, bien qu'il ne soit pas sous licence commerciale.

Andrej Karpathy

Une chose à souligner est que les modèles de base ne sont pas des assistants. Ils ne veulent pas répondre aux questions ; ils veulent simplement compléter des documents. Si vous leur demandez d'écrire un poème sur le pain et le fromage, ils répondront aux questions par d'autres questions. Ils ne font que compléter ce qu'ils pensent être un document.

Étape 2 : L'ajustement fin supervisé (SFT)

Andrej Karpathy

Cependant, vous pouvez les solliciter d'une manière spécifique pour les modèles de base qui a plus de chances de fonctionner. Par exemple : voici un poème sur le pain et le fromage. Dans ce cas, il complétera correctement.

Andrej Karpathy

On peut même inciter des modèles de base à devenir des assistants. Pour ce faire, vous créeriez une incitation spécifique en quelques exemples qui donne l'impression d'un document entre un humain et un assistant échangeant des informations. En bas, vous mettez votre requête à la fin et le modèle de base se conditionnera pour devenir un assistant utile et répondra.

Andrej Karpathy

Mais ce n'est pas très fiable et cela ne fonctionne pas super bien en pratique, même si c'est faisable. Au lieu de cela, nous avons une voie différente pour créer de réels assistants GPT, et pas seulement des compléteurs de documents de type modèle de base.

Andrej Karpathy

Cela nous mène à l'ajustement fin supervisé (SFT). Dans l'étape d'ajustement fin supervisé, nous allons collecter des ensembles de données petits mais de haute qualité. Dans ce cas, nous allons demander à des prestataires humains de rassembler des données sous la forme d'une incitation (prompt) et d'une réponse idéale. Nous allons en collecter des dizaines de milliers.

Andrej Karpathy

Nous allons toujours faire de la modélisation de langage sur ces données, donc rien n'a changé sur le plan algorithmique ; nous changeons simplement l'ensemble d'entraînement. Auparavant, il s'agissait de documents Internet, de grande quantité mais de faible qualité, pour passer à des données de type incitation-réponse, de faible quantité mais de haute qualité.

Andrej Karpathy

Nous faisons toujours de la modélisation de langage et, après l'entraînement, nous obtenons un modèle SFT. Vous pouvez réellement déployer ces modèles et ce sont de véritables assistants qui fonctionnent dans une certaine mesure. Laissez-moi vous montrer à quoi pourrait ressembler un exemple de démonstration.

Andrej Karpathy

Voici quelque chose qu'un prestataire humain pourrait proposer. Voici une incitation aléatoire : pouvez-vous écrire une brève introduction sur la pertinence du terme monopsonie ou quelque chose comme ça ? Et puis le prestataire écrit également une réponse idéale.

Andrej Karpathy

Lorsqu'ils rédigent ces réponses, ils suivent une documentation d'étiquetage exhaustive et on leur demande d'être utiles, véridiques et inoffensifs. Ces instructions d'étiquetage sont longues et il s'agit simplement de personnes suivant des instructions et essayant de compléter ces incitations.

Andrej Karpathy

C'est à cela que ressemble l'ensemble de données et vous pouvez entraîner ces modèles, ce qui fonctionne dans une certaine mesure.

Étape 3 & 4 : RLHF (Modélisation de la récompense et Apprentissage par renforcement)

Andrej Karpathy

Vous pouvez en fait poursuivre le processus à partir de là et passer au RLHF, l'apprentissage par renforcement à partir de rétroactions humaines, qui consiste à la fois en une modélisation de la récompense et un apprentissage par renforcement.

Andrej Karpathy

Laissez-moi aborder cela, puis je reviendrai sur les raisons pour lesquelles vous pourriez vouloir passer par ces étapes supplémentaires et comment cela se compare aux simples modèles SFT. Dans l'étape de modélisation de la récompense, ce que nous allons faire, c'est orienter notre collecte de données vers des comparaisons.

Andrej Karpathy

Voici un exemple de ce à quoi ressemblera notre ensemble de données. J'ai la même incitation en haut, demandant à l'assistant d'écrire un programme ou une fonction qui vérifie si une chaîne de caractères donnée est un palindrome.

Andrej Karpathy

Ensuite, ce que nous faisons, c'est prendre le modèle SFT, que nous avons déjà entraîné, et nous créons plusieurs complétions. Dans ce cas, nous avons trois complétions créées par le modèle. Ensuite, nous demandons à des personnes de classer ces complétions.

Andrej Karpathy

Ce sont des choses très difficiles à faire que de comparer certaines de ces prédictions et cela peut prendre des heures pour une seule paire incitation-complétion, mais disons que nous avons décidé que l'une d'elles est bien meilleure que les autres et nous les classons.

Andrej Karpathy

Ensuite, we pouvons faire suivre cela de quelque chose qui ressemble à une classification binaire sur toutes les paires possibles entre ces complétions. Ce que nous faisons maintenant, c'est disposer notre incitation en lignes, l'incitation étant identique sur les trois lignes ici, mais les complétions varient.

Andrej Karpathy

Les jetons jaunes proviennent du modèle SFT. Ensuite, nous ajoutons un autre jeton spécial de lecture de récompense à la fin et nous ne supervisons pratiquement le transformateur que sur ce seul jeton vert. Le transformateur prédira une certaine récompense pour la qualité de cette complétion pour cette incitation.

Andrej Karpathy

En gros, il fait une estimation sur la qualité de chaque complétion et une fois qu'il a fait une estimation pour chacune d'elles, nous avons aussi la vérité terrain, qui nous donne le classement. Nous pouvons imposer que certains de ces nombres soient beaucoup plus élevés que d'autres.

Andrej Karpathy

Nous formulons cela dans une fonction de perte et nous entraînons notre modèle à faire des prédictions de récompense cohérentes avec la vérité terrain provenant des comparaisons de tous ces prestataires. C'est ainsi que nous entraînons un modèle de récompense, ce qui nous permet de noter la qualité d'une complétion pour une incitation donnée.

Andrej Karpathy

Une fois que nous avons un modèle de récompense, nous ne pouvons pas le déployer car il n'est pas utile en tant qu'assistant par lui-même, mais il est très utile pour l'étape d'apprentissage par renforcement qui suit. Comme nous avons un modèle de récompense, nous pouvons noter la qualité de n'importe quelle complétion arbitraire pour n'importe quelle incitation donnée.

Andrej Karpathy

Ce que nous faisons pendant l'apprentissage par renforcement consiste essentiellement à obtenir une large collection d'incitations et maintenant nous effectuons un apprentissage par renforcement par rapport au modèle de récompense. Nous prenons une seule incitation, la disposons en lignes, et utilisons le modèle que nous aimerions entraîner, qui est initialisé au modèle SFT, pour créer des complétions en jaune.

Andrej Karpathy

Ensuite, nous ajoutons à nouveau le jeton de récompense et nous lisons la récompense selon le modèle de récompense, qui est maintenant maintenu fixe. Le modèle de récompense nous indique la qualité de chaque complétion pour chaque incitation.

Andrej Karpathy

Ce que nous pouvons faire maintenant, c'est simplement appliquer la même fonction de perte de modélisation de langage, mais nous nous entraînons actuellement sur les jetons jaunes et nous pondérons l'objectif de modélisation de langage par les récompenses indiquées par le modèle de récompense.

Andrej Karpathy

Par exemple, sur la première ligne, le modèle de récompense a dit que c'était une complétion avec un score assez élevé, et donc tous les jetons que nous avons échantillonnés sur la première ligne vont être renforcés et auront des probabilités plus élevées pour le futur.

Andrej Karpathy

À l'inverse, sur la deuxième ligne, le modèle de récompense n'a vraiment pas aimé cette complétion, -1,2, et par conséquent chaque jeton que nous avons échantillonnés dans cette deuxième ligne va avoir une probabilité légèrement plus élevée pour le futur. Nous faisons cela maintes et maintes fois sur de nombreuses incitations et lots, et nous obtenons fondamentalement une politique qui crée des jetons jaunes obtenant un score élevé selon le modèle de récompense que nous avons entraîné à l'étape précédente.

Andrej Karpathy

C'est ainsi que nous entraînons — c'est ce qu'est le pipeline RLHF. À la fin, vous obtenez un modèle que vous pouvez déployer. Par exemple, ChatGPT est un modèle RLHF. Mais certains autres modèles que vous pourriez rencontrer, comme Vicuna 13B, sont des modèles SFT.

Pourquoi utiliser le RLHF ?

Andrej Karpathy

Nous avons donc des modèles de base, des modèles SFT et des modèles RLHF, et c'est l'état actuel des choses. Pourquoi voudriez-vous faire du RLHF ? Une réponse qui n'est pas très excitante est que cela fonctionne simplement mieux. Cela vient de l'article InstructGPT.

Andrej Karpathy

Selon ces expériences, ces modèles PPO sont du RLHF et nous voyons qu'ils sont préférés dans de nombreuses comparaisons lorsque nous les soumettons à des humains. Les humains préfèrent simplement les jetons provenant des modèles RLHF par rapport aux modèles SFT, par rapport à un modèle de base incité à être un assistant.

Andrej Karpathy

Cela fonctionne tout simplement mieux. Mais on peut se demander pourquoi ? Je ne pense pas qu'il y ait une seule réponse géniale sur laquelle la communauté se soit accordée, mais je vais proposer une raison potentielle. Cela a trait à l'asymétrie entre la facilité informatique de comparaison par rapport à la génération.

Andrej Karpathy

Prenez l'exemple de la génération d'un haïku. Supposons que je demande à un modèle d'écrire un haïku sur les trombones. Si vous êtes un prestataire essayant de fournir des données d'entraînement pour l'étape SFT, comment êtes-vous censé créer un joli haïku pour un trombone ? Vous n'êtes peut-être pas très doué pour cela.

Andrej Karpathy

Mais si je vous donne quelques exemples de haïkus, vous pourriez être en mesure d'en apprécier certains beaucoup plus que d'autres. Juger lequel est bon est une tâche beaucoup plus facile. Cette asymétrie fait des comparaisons un meilleur moyen de tirer potentiellement parti de votre jugement en tant qu'humain pour créer un meilleur modèle.

Andrej Karpathy

Les modèles RLHF ne sont pas strictement une amélioration des modèles de base dans certains cas. En particulier, nous avons remarqué par exemple qu'ils perdent un peu d'entropie. Cela signifie qu'ils donnent des résultats plus tranchés. Ils peuvent produire des échantillons avec moins de variation qu'un modèle de base.

Andrej Karpathy

Un modèle de base a beaucoup d'entropie et donnera des résultats diversifiés. Par exemple, un cas où je préfère encore utiliser un modèle de base est une configuration où vous avez N choses et que vous voulez générer d'autres choses similaires.

Andrej Karpathy

Voici un exemple que j'ai concocté. Je veux générer des noms de Pokémon sympas. J'ai donné sept noms de Pokémon et j'ai demandé au modèle de base de compléter le document, et il m'a donné beaucoup plus de noms de Pokémon. Ceux-ci sont fictifs ; je ne pense pas que ce soient de vrais Pokémon.

Andrej Karpathy

C'est le genre de tâche pour laquelle un modèle de base serait bon car il a encore beaucoup d'entropie et vous donnera des choses diverses et cool qui ressemblent à ce que vous lui avez donné auparavant.

Andrej Karpathy

Ceci dit, ce sont les modèles assistants qui sont probablement à votre disposition en ce moment. Il y a une équipe à Berkeley qui a classé un grand nombre de modèles assistants disponibles et leur a attribué des notes ELO.

Andrej Karpathy

Actuellement, certains des meilleurs modèles sont GPT-4 de loin, suivi par Claude, GPT-3.5, puis un certain nombre de modèles dont certains pourraient être disponibles sous forme de poids comme Vicuna, Koala, etc. Les trois premières lignes ici sont toutes des modèles RLHF et tous les autres modèles, à ma connaissance, sont des modèles SFT.

Utilisation efficace des assistants GPT : Comparaison avec le cerveau humain

Andrej Karpathy

C'est ainsi que nous entraînons ces modèles à un haut niveau. Maintenant, je vais changer de sujet et examiner comment nous pouvons appliquer au mieux un modèle assistant GPT à vos problèmes. Travaillons avec un exemple concret.

Andrej Karpathy

Disons que vous travaillez sur un article ou un billet de blog et que vous allez écrire cette phrase à la fin : La population de la Californie est 53 fois supérieure à celle de l'Alaska. Pour une raison quelconque, vous voulez comparer les populations de ces deux États.

Andrej Karpathy

Pensez au riche monologue interne, à l'utilisation d'outils et à la quantité de travail qui se passe réellement par calcul dans votre cerveau pour générer cette seule phrase finale. Voici peut-être à quoi cela pourrait ressembler dans votre cerveau. D'accord, pour cette prochaine étape de mon blog, comparons ces deux populations.

Andrej Karpathy

Tout d'abord, je vais devoir obtenir ces deux populations. Je sais que je ne connais probablement pas ces populations par cœur, donc je suis conscient de ce que je sais ou ne sais pas — mes connaissances personnelles. J'utilise un outil, je vais sur Wikipédia et je cherche la population de la Californie et celle de l'Alaska.

Andrej Karpathy

Je devrais diviser les deux, mais je sais que diviser 39,2 par 0,74 a très peu de chances de réussir. Ce n'est pas le genre de chose que je peux faire de tête. Par conséquent, je vais m'appuyer sur une calculatrice. Je vais utiliser une calculatrice, taper les chiffres et voir que le résultat est d'environ 53.

Andrej Karpathy

Ensuite, je fais peut-être une réflexion et des vérifications de cohérence dans mon cerveau. Est-ce que 53 a du sens ? Eh bien, c'est une fraction assez importante, mais après tout, la Californie est l'État le plus peuplé, donc cela semble correct. Ensuite, j'ai toutes les informations dont je pourrais avoir besoin et je passe maintenant à la partie créative de l'écriture.

Andrej Karpathy

Je pourrais commencer à écrire quelque chose comme La Californie a 53X fois plus, puis je me dis que c'est une formulation vraiment maladroite. Laissez-moi effacer cela et essayer à nouveau. Pendant que j'écris, j'ai ce processus séparé qui inspecte presque ce que j'écris et juge si c'est bon ou non.

Andrej Karpathy

Ensuite, je l'efface peut-être et je le reformule, puis je suis peut-être satisfait de ce qui en ressort. Des tonnes de choses se passent sous le capot en termes de monologue interne lorsque vous créez des phrases comme celle-ci. Mais à quoi ressemble une phrase comme celle-ci lorsque nous entraînons un GPT dessus ?

Andrej Karpathy

Du point de vue du GPT, ce n'est qu'une séquence de jetons. Un GPT, lorsqu'il lit ou génère ces jetons, avance bloc par bloc. Chaque bloc représente à peu près la même quantité de travail de calcul pour chaque jeton.

Andrej Karpathy

Ces transformateurs ne sont pas des réseaux superficiels ; ils ont environ 80 couches de raisonnement, mais 80, ce n'est pas encore énorme. Ce transformateur va faire de son mieux pour imiter, mais bien sûr, le processus ici semble très différent du processus que vous avez suivi.

Andrej Karpathy

Dans nos artefacts finaux, dans les ensembles de données que nous créons et que nous finissons par fournir aux LLM, tout ce dialogue interne est complètement supprimé. Contrairement à vous, le GPT examinera chaque jeton et consacrera la même quantité de calcul à chacun d'eux.

Andrej Karpathy

Vous ne pouvez pas attendre de lui qu'il fasse trop de travail par jeton. De plus, en particulier, ces transformateurs ne sont que des simulateurs de jetons. Ils ne savent pas ce qu'ils ne savent pas ; ils imitent simplement le jeton suivant.

Andrej Karpathy

Ils ne savent pas en quoi ils sont bons ou non ; ils font juste de leur mieux pour imiter le jeton suivant. Ils ne réfléchissent pas en boucle, ils ne vérifient pas la cohérence de quoi que ce soit, ils ne corrigent pas leurs erreurs en cours de route par défaut ; ils échantillonnent simplement des séquences de jetons. Ils n'ont pas de flux de monologues internes séparés dans leur tête évaluant ce qui se passe.

Andrej Karpathy

Ils ont tout de même certains avantages cognitifs : ils possèdent une très grande connaissance factuelle dans un vaste nombre de domaines car ils ont plusieurs dizaines de milliards de paramètres, ce qui représente beaucoup de stockage pour les faits.

Andrej Karpathy

Et ils ont aussi une mémoire de travail relativement grande et parfaite. Tout ce qui tient dans la fenêtre de contexte est immédiatement disponible pour le transformateur via son mécanisme d'auto-attention interne. C'est comme une mémoire parfaite mais de taille finie. Le transformateur y a un accès direct et peut se souvenir sans perte de tout ce qui se trouve à l'intérieur de sa fenêtre de contexte.

Andrej Karpathy

C'est ainsi que je comparerais les deux. La raison pour laquelle j'aborde tout cela est que je pense que, dans une large mesure, le prompting consiste simplement à compenser cette différence cognitive entre ces deux architectures — nos cerveaux et les cerveaux des LLM.

Techniques de prompting et raisonnement (Système 2)

Andrej Karpathy

Voici une chose que les gens ont trouvée et qui fonctionne assez bien en pratique. Surtout si vos tâches nécessitent du raisonnement, vous ne pouvez pas vous attendre à ce que le transformateur fasse trop de raisonnement par jeton. Vous devez vraiment étaler le raisonnement sur davantage de jetons.

Andrej Karpathy

Par exemple, vous ne pouvez pas poser une question très compliquée à un transformateur et vous attendre à ce qu'il trouve la réponse en un seul jeton ; il n'y a tout simplement pas assez de temps pour cela. Ces transformateurs ont besoin de jetons pour réfléchir. Voici quelques-unes des choses qui fonctionnent bien.

Andrej Karpathy

Vous pouvez avoir une incitation en quelques exemples qui montre au transformateur qu'il doit détailler son travail lorsqu'il répond à une question. Si vous donnez quelques exemples, le transformateur imitera ce modèle et cela finira par mieux fonctionner en termes d'évaluation.

Andrej Karpathy

De plus, vous pouvez susciter ce genre de comportement de la part du transformateur en disant « réfléchissons étape par étape », car cela conditionne le transformateur à détailler son travail. Comme il passe en mode détail de son travail, il va faire moins de travail de calcul par jeton et a plus de chances de réussir car il effectue un raisonnement plus lent au fil du temps.

Andrej Karpathy

Voici un autre exemple appelé auto-cohérence (self-consistency). Nous avons vu que nous avions la capacité de commencer à écrire et si cela ne fonctionnait pas, je peux essayer plusieurs fois et sélectionner celle qui a le mieux fonctionné.

Andrej Karpathy

Dans ce genre d'approches, vous pouvez échantillonner plusieurs fois, puis avoir un processus pour trouver celles qui sont bonnes et ne conserver que ces échantillons ou effectuer un vote à la majorité.

Andrej Karpathy

Fondamentalement, ces transformateurs, lorsqu'ils prédisent le jeton suivant, tout comme vous, peuvent ne pas avoir de chance et échantillonner un jeton pas très bon et s'engager dans une impasse en termes de raisonnement. Contrairement à vous, ils ne peuvent pas s'en remettre. Ils sont coincés avec chaque jeton qu'ils échantillonnent et continueront la séquence même s'ils savent que cette séquence ne va pas aboutir.

Andrej Karpathy

Donnez-leur la capacité de regarder en arrière, d'inspecter ou d'essayer d'échantillonner autour.

Andrej Karpathy

Voici une technique également : il s'avère que les LLM savent quand ils se sont trompés. Par exemple, supposons que vous demandiez au modèle de générer un poème qui ne rime pas et qu'il vous donne un poème mais qu'il rime réellement.

Andrej Karpathy

Il s'avère que, surtout pour les modèles plus volumineux comme GPT-4, vous pouvez simplement lui demander : « as-tu respecté la consigne ? ». GPT-4 sait très bien qu'il n'a pas respecté la consigne ; il a juste manqué de chance dans son échantillonnage. Il vous dira : « no, je n'ai pas vraiment respecté la consigne, laisse-moi essayer encore ».

Andrej Karpathy

Sans que vous ne l'incitiez, il ne sait même pas qu'il doit réexaminer. Vous devez compenser cela dans vos incitations. Vous devez l'amener à vérifier. Si vous ne lui demandez pas de vérifier, il ne vérifiera pas de lui-même ; c'est juste un simulateur de jetons.

Andrej Karpathy

Je pense que plus généralement, beaucoup de ces techniques entrent dans la catégorie de la recréation de notre système 2. Vous connaissez peut-être la pensée système 1 / système 2 pour les humains. Le système 1 est un processus automatique rapide et correspond à un LLM qui échantillonne simplement des jetons.

Andrej Karpathy

Le système 2 est la partie de planification délibérée plus lente de votre cerveau. C'est un article de la semaine dernière intitulé Tree of Thought (Arbre de pensée). Dans Tree of Thought, les auteurs ont proposé de maintenir plusieurs complétions pour toute incitation donnée.

Nouvelles approches : Tree of Thought et agents

Andrej Karpathy

Ils les notent également en cours de route et gardent celles qui se passent bien. Beaucoup de gens s'amusent avec le prompt engineering pour ramener fondamentalement certaines de ces capacités que nous avons dans notre cerveau pour les LLM.

Andrej Karpathy

Une chose que j'aimerais noter est que ce n'est pas seulement une incitation. Ce sont des incitations utilisées avec du code de liaison Python car vous devez réellement maintenir plusieurs incitations et utiliser un algorithme de recherche arborescente pour déterminer quelle incitation développer.

Andrej Karpathy

C'est une symbiose de code de liaison Python et d'incitations individuelles qui sont appelées dans une boucle while ou dans un algorithme plus vaste. Je pense aussi qu'il y a un parallèle vraiment cool ici avec AlphaGo. AlphaGo a une politique pour placer la pierre suivante lorsqu'il joue au Go et cette politique a été entraînée à l'origine en imitant les humains.

Andrej Karpathy

En plus de cette politique, il effectue également une recherche arborescente de Monte-Carlo et joue un certain nombre de possibilités dans sa tête, les évalue toutes et ne garde que celles qui fonctionnent bien. Je pense que c'est un équivalent d'AlphaGo mais pour le texte.

Andrej Karpathy

Tout comme Tree of Thought, plus généralement, les gens commencent à explorer des techniques plus générales qui ne sont pas de simples incitations de type question-réponse, mais quelque chose qui ressemble beaucoup plus à du code de liaison Python enchaînant de nombreuses incitations.

Andrej Karpathy

À droite, j'ai un exemple tiré de cet article appelé ReAct où ils structurent la réponse à une incitation comme une séquence de pensée, action, observation, pensée, action, observation, et c'est un processus de réflexion complet pour répondre à la requête. Dans ces actions, le modèle est également autorisé à utiliser des outils.

Andrej Karpathy

À gauche, j'ai un exemple d'AutoGPT. AutoGPT est un projet qui a fait l'objet de beaucoup de battage médiatique récemment, mais je le trouve toujours intéressant sur le plan de l'inspiration. C'est un projet qui permet à un LLM de tenir en quelque sorte une liste de tâches et de décomposer récursivement les tâches.

Andrej Karpathy

Je ne pense pas que cela fonctionne très bien actuellement et je ne conseillerais pas aux gens de l'utiliser dans des applications pratiques. Je pense simplement que c'est une source d'inspiration générale en termes de direction que cela prend au fil du temps.

Andrej Karpathy

C'est donner à notre modèle une pensée de type système 2.

Psychologie des LLM et utilisation d'outils

Andrej Karpathy

La chose suivante que je trouve intéressante est cette particularité psychologique suivante des LLM : les LLM ne veulent pas réussir ; ils veulent imiter. Vous, vous voulez réussir et vous devriez le demander.

Andrej Karpathy

Ce que je veux dire par là, c'est que lorsque les transformateurs sont entraînés, ils ont des ensembles d'entraînement. Il peut y avoir tout un spectre de qualités de performance dans leurs données d'entraînement. Par exemple, il pourrait y avoir une solution d'étudiant à une question de physique qui est complètement fausse.

Andrej Karpathy

Mais il peut aussi y avoir une réponse d'expert qui est extrêmement juste. Les transformateurs ne peuvent pas faire la différence — ils connaissent les solutions de basse qualité et les solutions de haute qualité, mais par défaut, ils veulent tout imiter parce qu'ils sont juste entraînés à la modélisation du langage.

Andrej Karpathy

Au moment du test, vous devez en fait demander une bonne performance. Dans cet exemple, ils ont essayé diverses incitations, et « réfléchissons étape par étape » a été très puissant car cela a étalé le raisonnement sur de nombreux jetons, mais ce qui a encore mieux fonctionné est « résolvons cela étape par étape pour être sûrs d'avoir la bonne réponse ».

Andrej Karpathy

Cela conditionne l'obtention d'une bonne réponse et cela permet réellement au transformateur de mieux fonctionner car il n'a plus besoin de disperser sa masse de probabilité sur des solutions de basse qualité, aussi ridicule que cela puisse paraître. En gros, n'ayez pas peur de demander une solution solide.

Andrej Karpathy

Dites quelque chose comme : « tu es un expert de premier plan sur ce sujet, fais comme si tu avais un QI de 120 », etc. Mais n'essayez pas de demander trop de QI car si vous demandez un QI de 400, vous pourriez sortir de la distribution des données ou, pire encore, vous retrouver dans la distribution de données de science-fiction et il commencera à adopter un jeu de rôle de science-fiction. Vous devez trouver la bonne dose de QI.

Andrej Karpathy

Ensuite, comme nous l'avons vu, lorsque nous essayons de résoudre des problèmes, nous savons en quoi nous sommes bons et en quoi nous ne le sommes pas et nous nous appuyons sur des outils de calcul. Vous voulez faire de même avec vos LLM. En particulier, nous pourrions vouloir leur donner des calculatrices, des interpréteurs de code, et ainsi de suite, la capacité d'effectuer des recherches.

Andrej Karpathy

Il existe de nombreuses techniques pour cela. Une chose à garder à l'esprit est que ces transformateurs, par défaut, peuvent ne pas savoir ce qu'ils ne savent pas. Vous pouvez même dire au transformateur dans une incitation : « tu n'es pas très bon en calcul mental. Chaque fois que tu as besoin de faire une addition de très grands nombres, une multiplication ou autre, utilise plutôt cette calculatrice ».

Andrej Karpathy

Voici comment utiliser la calculatrice, utilise cette combinaison de jetons, et ainsi de suite. Vous devez réellement l'expliquer car le modèle, par défaut, ne sait pas en quoi il est bon ou non, tout comme vous et moi.

Mémoire de travail et génération augmentée par récupération (RAG)

Andrej Karpathy

Ensuite, je pense que quelque chose de très intéressant est que nous sommes passés d'un monde qui n'était que de la récupération à l'autre extrême où il n'y a que de la mémoire dans les LLM. Mais en fait, il y a tout cet espace entre les deux de ces modèles augmentés par récupération et cela fonctionne extrêmement bien en pratique.

Andrej Karpathy

Comme je l'ai mentionné, la fenêtre de contexte d'un transformateur est sa mémoire de travail. Si vous pouvez charger la mémoire de travail avec n'importe quelle information pertinente pour la tâche, le modèle fonctionnera extrêmement bien car il peut accéder immédiatement à toute cette mémoire. Je pense que beaucoup de gens sont vraiment intéressés par la génération augmentée par récupération.

Andrej Karpathy

En bas, j'ai un exemple de LlamaIndex, qui est un connecteur de données vers de nombreux types de données différents, et vous pouvez indexer toutes ces données et les rendre accessibles aux LLM. La recette émergente est la suivante : vous prenez les documents pertinents, vous les divisez en morceaux, vous les intégrez (embed) tous et vous obtenez fondamentalement des vecteurs d'intégration qui représentent ces données.

Andrej Karpathy

Vous stockez cela dans une base de données vectorielle, puis, au moment du test, vous effectuez une sorte de requête dans votre base vectorielle et vous récupérez des morceaux qui pourraient être pertinents pour votre tâche, vous les insérez dans l'incitation, puis vous générez. Cela peut très bien fonctionner en pratique. C'est similaire à la façon dont vous et moi résolvons des problèmes.

Andrej Karpathy

Vous pouvez tout faire de mémoire et les transformateurs ont une mémoire étendue, mais cela aide vraiment de se référer à des documents originaux. Chaque fois que vous retournez à un manuel ou à la documentation d'une bibliothèque pour chercher quelque chose, les transformateurs veulent absolument le faire aussi.

Andrej Karpathy

Vous avez un souvenir du fonctionnement de la documentation d'une bibliothèque, mais il est bien mieux de vérifier. La même chose s'applique ici.

Prompting contraint et ajustement fin (Fine-tuning)

Andrej Karpathy

Ensuite, je voulais brièvement parler du prompting contraint. Je trouve cela aussi très intéressant. Ce sont fondamentalement des techniques pour forcer un certain modèle dans les sorties des LLM. Guidance est un exemple de Microsoft. Ici, nous imposons que la sortie du LLM soit du JSON.

Andrej Karpathy

Cela garantira réellement que la sortie prendra cette forme car ils manipulent les probabilités des différents jetons qui sortent du transformateur et ils bloquent ces jetons. Le transformateur ne fait que remplir les blancs. Vous pouvez imposer des restrictions supplémentaires sur ce qui pourrait aller dans ces blancs.

Andrej Karpathy

Cela pourrait être vraiment utile et je pense que ce genre d'échantillonnage contraint est également extrêmement intéressant.

Andrej Karpathy

Je voulais aussi dire quelques mots sur l'ajustement fin. Il est vrai que l'on peut aller très loin avec le prompt engineering, mais il est également possible de penser à ajuster finement vos modèles. Ajuster finement les modèles signifie que vous allez réellement modifier les poids du modèle. Il devient beaucoup plus accessible de le faire en pratique.

Andrej Karpathy

Et c'est grâce à un certain nombre de techniques qui ont été développées récemment. Par exemple, les techniques d'ajustement fin efficaces en paramètres comme LoRA garantissent que vous n'entraînez que de petits morceaux clairsemés de votre modèle. La majeure partie du modèle est maintenue fixée au modèle de base et certains morceaux sont autorisés à changer, et cela fonctionne toujours assez bien de manière empirique.

Andrej Karpathy

Cela signifie également que, puisque la majeure partie de votre modèle est fixée, vous pouvez utiliser une inférence de très basse précision pour calculer ces parties car elles ne seront pas mises à jour par la descente de gradient, ce qui rend tout beaucoup plus efficace également.

Andrej Karpathy

De plus, we avons un certain nombre de modèles de base de haute qualité en open source. Actuellement, je pense que LLaMA est assez bien, bien qu'il ne soit pas sous licence commerciale pour le moment. Une chose à garder à l'esprit est que l'ajustement fin est beaucoup plus complexe techniquement. Cela nécessite plus d'expertise technique pour être bien fait.

Andrej Karpathy

Cela nécessite des prestataires de données humains pour les ensembles de données ou des pipelines de données synthétiques qui peuvent être assez compliqués. Cela ralentira certainement beaucoup votre cycle d'itération. À un haut niveau, le SFT est réalisable car il s'agit simplement de poursuivre la tâche de modélisation du langage ; c'est relativement simple.

Andrej Karpathy

Mais le RLHF relève tout à fait du domaine de la recherche et est encore beaucoup plus difficile à faire fonctionner. Je ne conseillerais probablement pas à quelqu'un d'essayer de lancer sa propre implémentation de RLHF. Ces choses sont assez instables, très difficiles à entraîner et ce n'est pas quelque chose de très accessible aux débutants pour le moment ; cela risque également de changer encore assez rapidement.

Recommandations pratiques et limitations

Andrej Karpathy

Je pense que ce sont mes recommandations par défaut pour le moment. Je diviserais votre tâche en deux parties majeures : Premièrement, atteindre votre performance maximale et deuxièmement, optimiser votre performance, dans cet ordre. La meilleure performance proviendra actuellement du modèle GPT-4 ; c'est le modèle le plus capable de loin.

Andrej Karpathy

Utilisez des incitations très détaillées, elles ont beaucoup de contexte sur la tâche, des informations et des instructions pertinentes. Pensez à ce que vous diriez à un prestataire de tâches s'il ne pouvait pas vous répondre par e-mail. Gardez à l'esprit qu'un prestataire de tâches est un humain, qu'il a un monologue interne et qu'il est très intelligent. Les LLM ne possèdent pas ces qualités.

Andrej Karpathy

Assurez-vous donc de réfléchir à la psychologie du LLM et d'adapter les incitations en conséquence. Récupérez et ajoutez tout contexte et information pertinents à ces incitations. En gros, référez-vous aux techniques de prompt engineering. J'en ai souligné quelques-unes dans les diapositives ci-dessus, mais c'est aussi un domaine très vaste et je vous conseillerais simplement de chercher des techniques de prompt engineering en ligne.

Andrej Karpathy

Il y a beaucoup de choses à couvrir. Expérimentez avec des exemples en quelques exemples. Vous ne voulez pas seulement dire, vous voulez montrer chaque fois que c'est possible. Donnez-lui des exemples de tout ; cela l'aide vraiment à comprendre ce que vous voulez dire. Expérimentez avec des outils et des plugins pour décharger les tâches qui sont difficiles nativement pour les LLM.

Andrej Karpathy

Ne pensez pas seulement à une seule incitation et une réponse, pensez à des chaînes potentielles, à la réflexion, à la façon dont vous les liez ensemble et à la façon dont vous pourriez potentiellement faire plusieurs échantillons.

Andrej Karpathy

Enfin, si vous pensez avoir épuisé le prompt engineering, avec lequel vous devriez rester pendant un certain temps, envisagez éventuellement d'ajuster finement un modèle pour votre application.

Andrej Karpathy

Mais attendez-vous à ce que ce soit plus lent et plus complexe. Il y a une zone de recherche fragile d'experts ici, qui est le RLHF, qui fonctionne actuellement un peu mieux que le SFT si vous arrivez à le faire fonctionner, mais encore une fois, c'est assez complexe. Pour optimiser vos coûts, essayez d'explorer des modèles de moindre capacité ou des incitations plus courtes.

Andrej Karpathy

Je voulais aussi dire quelques mots sur les cas d'utilisation pour lesquels les LLM sont actuellement bien adaptés. Notez en particulier qu'il existe un grand nombre de limitations aux LLM à ce jour, je garderais donc cela définitivement à l'esprit pour toutes vos applications. Cela pourrait faire l'objet d'un exposé entier, je n'ai donc pas le temps de le couvrir en détail.

Andrej Karpathy

Les modèles peuvent être biaisés, ils peuvent fabriquer des informations, ils peuvent faire des erreurs de raisonnement, ils peuvent éprouver des difficultés dans des catégories entières d'applications, ils ont des dates de coupure de connaissances, ils peuvent donc ne connaître aucune information postérieure à septembre 2021. Ils sont sensibles à un large éventail d'attaques, notamment l'injection d'incitation, les attaques de type jailbreak, les attaques par empoisonnement des données, etc.

Andrej Karpathy

Ma recommandation actuelle est d'utiliser les LLM dans des applications à faibles enjeux, combinez-les toujours avec une supervision humaine, utilisez-les comme source d'inspiration et de suggestions, et pensez copilotes au lieu d'agents complètement autonomes effectuant une tâche quelque part. Il n'est tout simplement pas certain que les modèles en soient là pour le moment.

Conclusion et message de GPT-4

Andrej Karpathy

Je voulais conclure en disant que GPT-4 est un artefact incroyable. Je suis très reconnaissant qu'il existe. Il possède une tonne de connaissances dans tant de domaines. Il peut faire des maths, du code, et ainsi de suite.

Andrej Karpathy

De plus, il y a cet écosystème florissant de tout le reste qui est construit et incorporé dans l'écosystème ; j'ai parlé de certaines de ces choses.

Andrej Karpathy

Toute cette puissance est accessible au bout de vos doigts. Voici tout ce qui est nécessaire en termes de code pour poser une question à GPT-4, pour l'inciter et obtenir une réponse.

Andrej Karpathy

Dans ce cas, j'ai dit : « Peux-tu dire quelque chose pour inspirer le public du Microsoft Build 2023 ? » Et j'ai juste tapé cela en Python et mot pour mot, GPT-4 a répondu ce qui suit.

Andrej Karpathy

Je ne savais pas qu'ils utilisaient cette astuce dans la conférence d'ouverture, donc je pensais être malin, mais il est vraiment doué pour ça.

Andrej Karpathy

Il dit : « Mesdames et messieurs, innovateurs et pionniers de Microsoft Build 2023, bienvenue à un rassemblement d'esprits brillants sans pareil. Vous êtes les architectes du futur, les visionnaires qui façonnent le domaine numérique dans lequel l'humanité s'épanouit. Embrassez les possibilités illimitées de la technologie et laissez vos idées s'envoler aussi haut que votre imagination. Ensemble, créons un monde plus connecté, remarquable et inclusif pour les générations à venir. Préparez-vous à libérer votre créativité, à explorer l'inconnu et à transformer les rêves en réalité. Votre voyage commence aujourd'hui. »

Andrej Karpathy

Merci.