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 :
- Les mots ou phrases d'entrée sont convertis en tokens, puis projetés dans cet espace latent via des embeddings (des vecteurs numériques).
- Cet espace représente des relations sémantiques : des mots ou concepts proches en sens (ex. "chat" et "félin") sont proches dans l'espace latent.
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 modèle sur-optimise une certaine trajectoire dans l'espace latent.
- Le contexte d'entrée manque de diversité, limitant les options.
- Des boucles apparaissent dans les probabilités conditionnelles, souvent à cause d'un entraînement imparfait ou de biais dans les données.
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 :
- Dimension : typiquement entre 100 et 4096, selon le modèle (768 pour BERT, 4096 pour certains GPT).
- Similarité : la distance cosinus entre deux embeddings mesure leur similarité sémantique.
- Contexte : les modèles modernes (BERT, GPT) génèrent des embeddings contextuels -- le même mot aura un embedding différent selon la phrase.
- Transférabilité : les embeddings pré-entraînés peuvent être réutilisés pour d'autres tâches (classification, recherche sémantique).
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.