Logo ChatGPT

Mais en fait, ChatGPT, comment ça marche au juste ?

On dit qu'il est intelligent, on dit qu'il est bête... qu'en est-il ?

Il a impressionné les foules à sa sortie. Il a, à lui tout seul, généré l'intérêt de tout un public envers l'IA jusqu'alors largement ignorée. Il a pour ainsi dire révolutionné une industrie... le moins que l'on puisse dire, c'est que ChatGPT n'a pas laissé indifférent. Mais peu de gens savent comment le chatbot développé par OpenAI fonctionne réellement. Sa capacité à répondre à toutes sortes de questions, à résoudre des problèmes, à générer du code, à faire des maths, et bien d'autres choses sont tout à fait scotchantes. Pour la première fois, on a réellement l'impression de parler à un chatbot réellement intelligent. Mais est-il vraiment matheux ? Vraiment intelligent ?

Pour y répondre, il faut en revenir aux bases.

Au cœur de ChatGPT, les grands modèles de langages

L'aspect le plus fondamental de ChatGPT, c'est ce qu'on appelle un large language model (LLM), ou grand modèle de langage. Il s'agit d'un réseau de neurones entraîné sur une gigantesque quantité de textes pour inférer des relations statistiques entre les mots.

Un LLM a donc "appris" à parler l'humain en s'abreuvant de textes pour être capables de les imiter. Cela en fait un modèle d'abord statistique. Les données sont traitées à l'échelle non pas du mot, mais de ce qu'on appelle un token, c'est-à-dire une unité d'information qui peut être égale à un mot (surtout pour les mots courts) ou une partie d'un mot. Par exemple, le mot "animaux" est constitué de deux tokens : "anim" et "aux".

L'art d'un LLM, en gros et pour résumer, c'est de prédire les tokens les plus probables à partir du contexte, c'est-à-dire à partir de tous les tokens précédents.

Si vous lui posez la question "Les animaux sont-ils des végétaux ?" Il va prédire que, statistiquement, le mot le plus probable juste après cette suite de mots est "Non." Puis, à partir de "Les animaux sont-ils des végétaux ? Non." il va prédire que le mot suivant le plus probable est "Les". Et ainsi de suite, comme ceci :

Les animaux sont-ils des végétaux ?
⮡ Les animaux sont-ils des végétaux ? Non,
⮡ Les animaux sont-ils des végétaux ? Non, les
⮡ Les animaux-sont-ils des végétaux ? Non, les anim
⮡ Les animaux sont-ils des végétaux ? Non, les animaux
⮡ Les animaux sont-ils des végétaux ? Non, les animaux ne

Et ainsi de suite. À chaque étape, il se sert du contexte non-seulement de votre question (le contexte en entrée), mais y compris de ce que lui-même vous a déjà répondu : il se donne lui-même du contexte. Ainsi, à partir du moment où il a écrit "les", il se conditionne à écrire "animaux" au pluriel. Parce que statistiquement, après "les" vient généralement un pluriel. Il n'y était pas forcément prédisposé au départ, il aurait pu formuler la réponse autrement. Mais il s'est finalement créé ce contexte-là.

Un grand modèle de langage ne fait que compléter le texte. Il n'est pas spécialement programmé pour répondre à des questions. Il le fait, pour ainsi dire, "par accident", parce que statistiquement, le plus probable après une question, c'est que vienne une réponse. 

Et il vous donnera souvent de bonnes réponses, parce que statistiquement, à partir des centaines de milliards de textes qu'il a engrangé, le plus probable est que la réponse à "Les animaux sont-ils des végétaux ?" soit "Non, les animaux ne sont pas des végétaux" plutôt que "Oui, bien-sûr, les animaux et même les cailloux sont des végétaux".

Mais c'est aussi pour cela que les LLM ont une fâcheuse tendance à "halluciner" ou qu'ils n'hésitent pas à se contredire d'une phrase à l'autre sans constater l'apparente contradiction : si le sujet que vous abordez est un sujet que le modèle a trop peu vu dans ses données d'entraînement, ses inférences statistiques sur ce que doit être la réponse seront de moins bonne qualité. Et à ce moment-là, il commencera à donner des réponses qui sont "plausibles" en tant que suites logiques de déroulé d'une pensée, mais pas forcément correctes.

Car en tant que prédicteur de texte, il n'est pas spécialement armé pour savoir qu'il a raison, tort, ou qu'il n'est pas sûr. Une prédiction de token est une prédiction de token. Pour lui, ça ne fait pas vraiment de différence que le signifié de sa réponse soit basée sur des certitudes ou non.

Paradoxalement, s'il s'avère qu'un LLM vous dit "Voilà une réponse, mais en réalité ce n'est pas certain et c'est encore beaucoup sujet à débat", c'est signe non pas qu'il n'a presque jamais vu la question/réponse et qu'il vous fait donc part de son incertitude à lui, mais plutôt signe que, dans ses données d'entraînement, sur des forums, des réseaux sociaux ou des FAQ de sites Internet, il a souvent vu votre question... mais qu'elle était généralement accompagnée d'une réponse de type "on sait pas trop, c'est en débat." 

C'est paradoxal mais c'est vrai : un LLM qui vous dit qu'il ne sait pas trop... le fait souvent avec un haut degré de certitude, basé sur une grande quantité de données. Alors qu'un LLM qui vous dit quelque chose avec aplomb... peut le faire alors qu'il manque cruellement de données sur le sujet.

La fenêtre de contexte

Enfin, il est à noter que le contexte dont dispose le LLM n'est pas infini. Sa mémoire à court terme est limitée. Ainsi, GPT-3.5, utilisé dans la version gratuite de ChatGPT, a une "mémoire" (on parle de fenêtre de contexte) de 4096 tokens. Cela peut paraître beaucoup, et c'est en effet suffisant pour garder en mémoire une question même assez longue, et la réponse même détaillée jusqu'au dernier token. Mais cela devient vite limitant si vous voulez lui demander d'écrire un long morceau de code et que vous lui fournissez un cahier des charges détaillé... et cela devient encore plus limitant si vous souhaitez tenir une conversation sur le long cours, car au bout de quelques échanges, il aura déjà oublié votre première question et sa propre première réponse.

GPT 4, utilisé dans la version payante de ChatGPT, étend cette fenêtre de contexte à 128 000 tokens. C'est déjà beaucoup mieux, mais cela peut encore s'avérer insuffisant dans certains contextes professionnels.

Pour mitiger un peu les effets de cette limite de mémoire, une astuce supplémentaire est utilisée : lorsque les données arrivent en "fin de vie", il en conserve une version résumée ou quelques points essentiels, et il oublie le reste, afin de se faire de la place dans sa mémoire sans pour autant tout oublier du sujet de la conversation.

Dans un LLM, finalement, tout est affaire de contexte.

Un simple prédicteur statistique ?

Oui et non. Il est très important de comprendre qu'un LLM n'a pas de cognitions, ni de représentation interne du monde. Partant, il n'a pas réellement de logique propre. Néanmoins, son entraînement à associer statistiquement des données écrites lui permettent d'aller plus loin que de prédire le mot le plus cohérent dans une phrase donnée. Un LLM n'est pas un simple générateur de chaînes de Markhov amélioré. Il est capable de manipuler des concepts.

C'est pour cela que ChatGPT, et d'autres IA basées sur des LLM, sont capables de réaliser des opérations mathématiques, même lorsque le modèle n'est pas du tout spécialisé dans ce domaine : lorsqu'ils sont suffisamment volumineux, les modèles de langage sont capables d'apprendre des corrélations entre des chiffres, des opérateurs et des résultats, et cela leur permet de prédire un résultat qui s'avèrera le plus souvent exact pour des calculs simples. Pour autant, il n'a pas connaissance des règles mathématiques au sens où les humains le font, et il ne fonctionne pas non plus comme le fait une calculatrice. Raison pour laquelle même un modèle de langage entraîné aux mathématiques ne donnera pas toujours la bonne réponse à une multiplication un peu longue. Et ChatGPT se plantera presque systématiquement.

Néanmoins, leur maîtrise du langage leur permettent de généraliser à partir d'exemples et de créer des exemples à partir de généralités.

Nous disions plus haut qu'il donnait la bonne réponse parce qu'elle était la plus probable... c'est en réalité un peu plus compliqué que cela. Si un LLM parvient à résoudre un problème, ce n'est pas parce qu'il a vu ce problème 10 000 fois sur Internet, et que 9 000 fois la réponse était correcte. Cela se vérifie assez bien en lui imposant des problèmes que vous avez inventés et qu'il ne peut pas avoir déjà vus. Typiquement : lui faire générer du code. En revanche, il a intégré les relations statistiques entre des concepts, des structures. Il ne connaît pas que les relations statistiques directes entre des mots, mais aussi des schémas. Il est donc capable d'émuler une forme de logique.

Mais ce n'est qu'une émulation. Seulement, cette émulation est faite sur une quantité tellement astronomique de données qu'elle en devient réellement convaincante. Convaincante, mais pas forcément efficace dans tous les domaines : si certains LLM sont étonnamment efficaces pour générer un snippet python ou un code javascript, la plupart semblent toujours de très mauvais matheux : GPT-4, par exemple, sur lequel est basé la version payante de ChatGPT, reste à ce jour incapable de multiplier deux nombres à quatre chiffres de façon fiable. 

C'est tout le paradoxe des LLM : ils peuvent être à la fois capables d'effectuer des tâches dignes d'un professionnel diplômé du supérieur en un temps record, et en même temps incapables de reproduire correctement une tâche de niveau CE2...

Au-delà du LLM, "l'habillage" de ChatGPT

On a vu (rapidement) ce qu'est un LLM, mais si le LLM est au cœur de ChatGPT, il serait erroné de décrire ChatGPT comme étant simplement un LLM. Autour d'un noyau, il y a d'autres éléments qui sont importants pour arriver jusqu'au produit final.

Du next-token au chatbot

Le premier point, et le plus simple à concevoir, c'est que n'importe qui peut constater que ChatGPT ne se contente pas de prédire le mot, ou le token, suivant (tâche dite de "next-token"). Eh oui, quand on y pense c'est évident : dans l'absolu, il y a toujours un mot suivant. On l'a vu, un LLM n'a pas de logique ou de représentation du monde. Il n'est pas capable de penser "là je suis content de ce que j'ai fourni comme réponse, je pense que j'ai bien fait le tour du sujet, je peux donc me taire et laisser la parole à mon interlocuteur". Il est fondamentalement incapable d'une réflexion de ce type. Il ne sait même pas qu'il dialogue avec un interlocuteur. Sans un surcroît de règles, il continuerait donc à bavarder sans interruption et finirait sans doute par tenir des propos de plus en plus incohérents, à mesure qu'il arrive au bout des choses pertinentes à dire et qu'il perd même le fil de sa propre réflexion, d'autant que sa mémoire à court terme n'est pas illimitée.

Le cœur de ChatGPT est, dans l'absolu, plutôt un moteur de monologue qu'un agent conversationnel. Une partie de l'art d'OpenAI a donc été d'ajouter des règles pour que GPT se "taise" et rende la parole. Ainsi, vous pouvez lui répondre, c'est-à-dire en fait ajouter un nouveau contexte, au lieu de le laisser seul dans cette tâche d'ajout de contexte. Ce qui va permettre, sans même que vous ne le réalisiez, de le remettre sur de bons rails. 

Mais cela va surtout le rendre plus utile, puisque sa prise en compte du contexte "votre réponse" émule très très bien une réelle compréhension du texte (même si, on le répète, ChatGPT ne "comprend" pas au sens d'une cognition humaine). Ainsi, vous avez la sensation d'avoir un véritable échange.

Ces règles qui régissent la manière dont ChatGPT va échanger la parole avec vous dépassent déjà le cadre du LLM. Elles sont une première surcouche.

Le RLHF : une méthode de fine-tuning indispensable

Croyez-le ou non, le modèle GPT (3.5 ou 4) de base n'est pas particulièrement bon aux tâches de conversation qui font toute la célébrité de ChatGPT. Pour en faire un bon chatbot, il a fallu le fine-tuner, c'est-à-dire affiner son modèle via un entraînement ciblé. La méthode choisie par OpenAI et qui semble avoir fait ses preuves s'appelle RLHF, pour reinforcement learning from human feedback, c'est-à-dire apprentissage par renforcement à partir du feedback humain.

Le principe est simple comme bonjour. Et s'il est simple à concevoir, c'est que les humains s'en servent entre eux tous les jours : il s'agit de modifier le comportement d'un agent (humain, animal ou IA) en fonction de la réponse de l'environnement. Si l'on veut renforcer ce comportement, c'est-à-dire augmenter la probabilité que l'agent le répète, on le récompense. Si l'on veut l'éteindre, c'est-à-dire éviter qu'il le reproduise, on le punit.

Pour ChatGPT, comme pour des élèves d'âge scolaire, la récompense prend la forme d'une bonne note, et la punition celle d'une mauvaise note. Bien-sûr, un ordinateur n'a pas de sentiments ou d'émotions, il ne peut être "content" de recevoir de bonne note et reproduire son comportement dans "l'espoir" d'en recevoir à nouveau. GPT est juste programmé pour "savoir" que la bonne note signifie "renforce ça".

Ensuite, il n'y a plus qu'à faire interagir le modèle avec un humain : face à un prompt, GPT va proposer plusieurs résultats. Un humain classera ces résultats en fonction de leur qualité. Cela permet notamment d'éviter les cas rencontrés sur d'anciens moteurs de discussion par IA qui avaient rapidement tourné cacao, des internautes s'étant vite amusés à les pousser à dire des horreurs. Les LLM étant entraînés sur des milliards de textes aspirés d'Internet, le pire côtoie le meilleur dans ses données d'entraînement... il est donc quasiment indispensable de renforcer le meilleur et de décourager le pire.

Ainsi, avant d'être accessible au public, OpenAI à affiné le moteur en sous-traitant à de nombreuses petites mains le classement des réponses de GPT. L'humain pouvait, par exemple, poser une question, puis classer les différentes réponses proposées en fonction de leur pertinence, de leur acceptabilité sociale, de leur orthographe, et ainsi de suite. Les réponses hors-sujet, fausses ou immorales sont ainsi "punies" et moins susceptibles de ressortir par la suite. Les réponses de qualité sont "récompensées" et deviennent plus probables.

Et là encore, attention à bien comprendre ce qui se joue : l'enjeu n'est pas seulement de s'assurer qu'il répondra correctement à la question "Que s'est-il passé en 1515 ?". Si ce n'était que cela, l'entraînement serait peu efficace, car même en payant des dizaines de milliers de petites mains à plein temps pendant des années, on ne pourrait s'assurer de la justesse des réponses de GPT que sur une infime partie de l'infinité de questions qui peuvent lui être posées.

Mais cet entraînement lui permet aussi de renforcer statistiquement des schémas de réponse. Ainsi, par ce renforcement, il apprend par exemple qu'une réponse à une question est considérée comme de meilleure qualité si elle commence par une affirmation générale, suivie de détails accompagnés d'exemples, pour finir par une conclusion. Et c'est un savoir qui est généralisable à tous types de questions, même des questions qu'il n'a vues à aucune étape de son entraînement.

En résumé : Next-token + RLHF = ChatGPT ?

En gros, oui. Insistons néanmoins sur le "En gros", ce qui signifie qu'il y a bien d'autres subtilités qui sortent un peu de la portée d'un tel article de vulgarisation. Ce qu'il faut retenir, en première approximation, c'est que :

  • ChatGPT ne "pense" pas. Il n'a pas de cognitions, c'est-à-dire de briques de la pensée, ni de représentation mentale du monde. Il n'a (évidemment) encore moins de sentiments ou de morale. Et il n'est absolument pas conscient.
  • Le cœur de ChatGPT est de prédire le mot suivant selon des règles statistiques, mais il ne faut pas sous-estimer l'efficacité de cette tâche pour résoudre des problèmes complexes : sa capacité à prédire le mot suivant ne repose pas seulement sur des réponses à des questions déjà posées 1000 fois et qu'il répèterait après les avoir vues sur Internet : elle repose aussi sur sa capacité à avoir enregistré des schémas, des dépendances et corrélations entre les concepts, ce qui lui permet de répondre à des questions ou de résoudre des problèmes jamais rencontrés.
  • Il y a toute une surcouche ajoutée autour du LLM qui lui permet d'être plus efficace dans ses interactions avec les humains. Aussi accessoire qu'elle puisse paraître, elle compte pour beaucoup dans "l'effet waouh" que peut provoquer ChatGPT lorsque l'on interagit avec lui.

 

ChatGPT n'est donc pas "intelligent", au sens où on l'entend pour un humain. Mais sa technique pour faire semblant d'être intelligent est si poussée, et si efficace, qu'elle peut remplacer efficacement l'intelligence dans diverses tâches. C'est étonnant, fascinant, mais attention à ne pas prendre les vessies pour des lanternes : ChatGPT n'est pas plus humain que ne l'était Clippy, le trombone de MS Office, dans les années 90. Il fait juste (beaucoup) mieux semblant.