Le problème

Vous avez déjà vu un LLM répéter la même phrase en boucle ? C'est un phénomène plus courant qu'on ne le pense. Le modèle se retrouve coincé dans une zone étroite de son espace latent -- une sorte de cul-de-sac où les probabilités de génération tournent en rond.

Ce problème m'arrive de temps en temps avec tous les moteurs d'inférence. Il touche aussi bien les modèles locaux que les grands services cloud.


Comment fonctionne la génération de texte

Les Large Language Models (LLMs) fonctionnent en prédisant à chaque étape le token le plus probable à ajouter à la suite d'un texte, en se basant sur les probabilités apprises lors de leur entraînement. Ce mécanisme de génération mot par mot est fondamental pour comprendre pourquoi des boucles ou répétitions peuvent apparaître.


Les causes principales

Réponse inadéquate à une consigne ambiguë

Lorsqu'une instruction n'est pas claire ou que le contexte fourni n'est pas suffisamment spécifique, le modèle peut échouer à apporter une réponse satisfaisante et répéter le même schéma dans l'espoir d'atteindre une solution.

Problèmes dans l'algorithme de génération

Les paramètres utilisés lors de l'inférence -- temperature, top-k sampling, top-p -- influencent la diversité et la spontanéité des réponses. Des réglages inadaptés rendent le modèle plus susceptible de répéter les mêmes mots ou phrases, car il privilégie trop fortement les choix les plus probables.

Limites de l'entraînement ou des données

Lorsqu'un LLM manque de diversité dans ses données d'entraînement, il peut développer des biais de répétition : il recycle sans fin des structures apprises, surtout sur des sujets peu couverts ou sur des consignes fréquemment rencontrées.

Boucles d'écho cognitives

Le modèle peut être amené à reformuler des variantes proches d'une même idée parce qu'il s'enferme dans une "chambre d'écho" logique, recombinant en boucle son savoir plutôt que de produire de la nouveauté.


L'espace latent : la clé du problème

L'espace latent est une représentation abstraite et compressée des données dans un modèle d'IA. C'est un espace caché où les informations complexes (textes, images, etc.) sont transformées en une forme simplifiée, souvent sous forme de vecteurs de nombres dans un espace à plusieurs dimensions.

Dans le cas d'un LLM :

Quand un LLM génère du texte, il navigue dans cet espace pour prédire le token suivant. Parfois, il se retrouve coincé dans une région où les probabilités favorisent une séquence répétitive. Cela arrive quand :


Le rôle des embeddings

Les embeddings sont le pont entre le monde humain (mots, phrases) et le monde numérique des LLMs. Ils transforment les tokens en vecteurs dans un espace latent, permettant au modèle de comprendre et générer du texte.

Quelques propriétés clés :


Ma solution dans mAIstrow

Dans mon moteur d'inférence pour mAIstrow (conçu en Rust et assembleur), j'ai ajouté un hack simple, presque "low-tech" : j'insère des tokens de perturbation dans l'input quand mon algorithme détecte une boucle.

Ces "bumpers" forcent le modèle à sortir de la boucle et à reprendre une trajectoire plus variée -- sans casser la cohérence de la réponse.

Techniquement, ces tokens modifient les vecteurs d'embedding d'entrée, ce qui perturbe les calculs d'attention et redirige le modèle vers des régions plus diversifiées de l'espace latent. C'est une forme d'ingénierie de prompt dynamique : on ajuste l'input pour guider le comportement du modèle sans toucher à son architecture.

C'est une solution intuitive, temporaire, mais qui fonctionne étonnamment bien.

L'importance des logs

Le problème avec ce genre de bug, c'est qu'il faut parvenir à les reproduire. C'est la raison pour laquelle j'insiste lourdement sur les logs. Il faut sauver le contexte et en particulier le seed pour pouvoir reproduire le problème. Ma solution est intuitive et je ne suis pas certain de ne pas rencontrer le bug à nouveau, mais au moins je suis paré pour faire des tests.

Souvent, le coupable est le sampler

Le véritable coupable n'est pas toujours aussi "neuronal" qu'on le pense : c'est souvent le sampler. Les paramètres de sampling (temperature, top-k, top-p) ont un impact direct sur la tendance du modèle à tourner en boucle. J'en parlerai plus en détail dans un prochain article.


Solutions techniques connues

Paramétrage de génération

Ajuster la temperature ou le top-p lors de l'inférence peut réduire la probabilité de répétition en diversifiant les propositions du modèle.

Fine-tuning

Un affinement sur des corpus plus variés ou récents permet au modèle de corriger certains biais de répétition et d'élargir ses capacités contextuelles.

Surveillance humaine et apprentissage par renforcement

Inclure une étape de validation par l'humain ou utiliser des techniques d'apprentissage par renforcement peut aider à sortir le modèle de ses schémas répétitifs, surtout sur des tâches complexes ou mal structurées.


En synthèse

Les LLMs tournent parfois en boucle à cause de la combinaison entre leur logique probabiliste, des réglages mal adaptés, des limitations des données d'entraînement et l'absence de vraie compréhension contextuelle humaine. La supervision, l'amélioration continue, et l'affinement des paramètres d'inférence sont autant de pistes pour limiter ce phénomène.

Je préfère une solution simple qui marche maintenant, et qui me permet de creuser ensuite, plutôt qu'une complexité prématurée.