- fast.ai, en ajustant finement un modèle pour le Kaggle LLM Science Exam, a observé une courbe de perte donnant l’impression qu’un LLM mémorise après avoir vu une seule fois les exemples du jeu de données
- Les réseaux de neurones classiques apprennent souvent progressivement sur plusieurs epochs, mais dans cette expérience la perte d’entraînement chutait par paliers aux frontières d’epoch, contrairement à l’expérience habituelle
- Comme un motif similaire apparaissait indépendamment de l’utilisation de Hugging Face
Trainer, de LoRA ou d’un fine-tuning complet, il devenait difficile d’y voir un simple bug de bibliothèque - Dans les expériences avec taux d’apprentissage cyclique et 1cycle, l’évolution de la perte d’entraînement, de la perte de validation et du MAP@3 correspondait globalement à l’hypothèse de mémorisation, et une dégradation de la perte de validation ne signifiait pas forcément une baisse de précision
- Si les LLM préentraînés apprennent très vite, il faut réexaminer des stratégies de fine-tuning comme le catastrophic forgetting, l’augmentation de données, le mélange de données et le dropout
Des courbes de perte différentes de l’apprentissage habituel des réseaux de neurones
- Un classifieur neuronal ajuste ses probabilités de sortie en voyant à plusieurs reprises les entrées et les étiquettes correctes
- Le passage complet sur l’ensemble des données d’entraînement s’appelle une epoch
- La perte (loss) indique à quel point le modèle se trompe, avec une pénalité plus forte pour les prédictions fausses émises avec confiance
- En général, au début de l’entraînement, la perte d’entraînement baisse rapidement puis ralentit progressivement, tandis que la perte de validation s’améliore plus lentement
- Il est courant que le début et la fin d’une epoch ne soient pas clairement visibles sur le seul graphe de perte
- L’expérience empirique suggérait qu’un réseau de neurones avait besoin de plusieurs epochs pour bien assimiler une image précise
- fast.ai a découvert un motif différent en entraînant un modèle à résoudre des QCM scientifiques sur le Kaggle LLM Science Exam
- Le modèle a été entraîné pendant 3 epochs avec le grand jeu de questions créé par Radek Osmulski
- À la fin de chaque epoch apparaissait une chute en escalier, où la perte d’entraînement baissait brusquement
Du soupçon de bug à l’hypothèse de mémorisation
- Au départ, l’équipe a soupçonné un bug dans le processus d’entraînement
- Par exemple, si le modèle continuait à apprendre pendant l’évaluation sur l’ensemble de validation, il pourrait sembler s’améliorer soudainement juste après la validation
- La possibilité d’un problème avec Hugging Face
Trainer, alors utilisé, a été examinée en premier
- Des développeurs open source du Discord Alignment Lab AI ont répondu qu’ils avaient déjà observé des courbes de perte similaires
- Comme les premières personnes à répondre utilisaient toutes
Trainer, l’hypothèse d’un bug de bibliothèque semblait plausible - Par la suite, des cas montrant la même courbe avec des boucles d’entraînement personnalisées ont été partagés
- Comme les premières personnes à répondre utilisaient toutes
- L’équipe a aussi vérifié s’il s’agissait d’un phénomène propre à LoRA, mais le même motif est apparu avec un fine-tuning complet
- Dans la communauté du fine-tuning de LLM, ce type de courbe de perte était déjà proche d’un phénomène courant
Un motif de mémorisation rapide observé dans l’expérience Kaggle
- L’interprétation proposée par les collègues open source était que la courbe de perte montrait un surapprentissage
- Cela voulait dire que le modèle apprenait au point de reconnaître les entrées après les avoir vues une ou deux fois, ce qui paraissait d’abord impossible
- Sur le premier graphe, la perte passait de 0,8 à 0,5 après la première epoch, puis de 0,5 à moins de 0,2 après la deuxième
- Au milieu des deuxième et troisième epochs, il semblait n’y avoir presque aucun nouvel apprentissage
- Si cette interprétation est correcte, le modèle avait pratiquement mémorisé l’ensemble d’entraînement en ne voyant chaque ligne que 3 fois
- Pour chaque question, le seul signal reçu par le modèle est la comparaison entre l’étiquette correcte et son propre choix
- Malgré cela, la perte d’entraînement diminuait fortement
Évolution de la perte avec un taux d’apprentissage cyclique
- Le modèle Kaggle a été entraîné pendant 2 epochs avec un planning de taux d’apprentissage cyclique, basé sur l’article de Leslie Smith de 2015, Cyclical Learning Rates for Training Neural Networks
- La courbe de la première epoch ressemblait à un motif d’apprentissage classique
- Le taux d’apprentissage était augmenté progressivement pendant les 10 % initiaux
- Ensuite, le taux d’apprentissage était réduit selon un planning cosinus
- Une fois le taux d’apprentissage suffisamment élevé, la perte d’entraînement et la perte de validation diminuaient rapidement, puis le rythme ralentissait
- Dans la deuxième epoch, comme le jeu de données n’avait pas été remélangé, les premiers lots réapparaissaient avec un faible taux d’apprentissage
- Ces lots n’avaient eux aussi été exposés qu’avec un faible taux d’apprentissage lors de la première epoch, si bien que le modèle n’avait pas beaucoup appris à partir d’eux
- Vers la fin des 10 % initiaux, les lots vus avec un taux d’apprentissage élevé lors de la première epoch réapparaissaient, et la perte d’entraînement chutait brutalement
- Sur la même section, la perte de validation empirait
- Cela peut être interprété non pas comme une meilleure généralisation du modèle, mais comme un état où il a mémorisé les données d’entraînement et devient très sûr des bonnes réponses
- Comme la fonction de perte pénalise davantage les mauvaises réponses données avec confiance, la perte de validation se dégrade
- En fin de courbe, la perte d’entraînement empirait de nouveau
- Une dégradation de la perte d’entraînement avec un taux d’apprentissage raisonnable n’est pas habituelle
- Selon l’hypothèse de mémorisation, le modèle n’a pas réussi à mémoriser efficacement les lots vus avec un faible taux d’apprentissage, tandis que son excès de confiance sur les lots précédents s’est prolongé
- Ensuite, à mesure que le modèle réajustait son niveau de confiance vers quelque chose de plus raisonnable, la perte de validation redescendait
Expérience 1cycle et différence entre métriques d’évaluation
- L’expérience suivante a utilisé le 1cycle training pendant 3 epochs
- Le taux d’apprentissage n’était augmenté progressivement qu’une seule fois, sur les 10 % de lots au début de l’entraînement
- Sur les lots restants, le taux d’apprentissage était réduit selon un planning cosinus
- Contrairement à l’expérience précédente, il n’y avait pas de répétition d’un échauffement puis d’une décroissance séparés à chaque epoch
- Le rang LoRA a été augmenté pour ralentir la vitesse d’apprentissage
- Les courbes obtenues correspondaient globalement à l’interprétation précédente, mais la hausse de la perte de validation est apparue à l’epoch 3, et non à l’epoch 2
- Dans l’expérience précédente, la perte d’entraînement descendait à environ 0,2 dès la deuxième epoch, permettant des prédictions très confiantes
- Dans l’expérience 1cycle, ce niveau de confiance n’était atteint qu’à la troisième epoch, et la hausse de la perte de validation apparaissait à ce moment-là
- Une dégradation de la perte de validation ne signifie pas forcément un véritable surapprentissage
- La métrique du leaderboard Kaggle est le Mean Average Precision @ 3, une précision fondée sur le classement des 3 premières prédictions de QCM
- Le MAP@3 de validation par lot dans l’entraînement 1cycle a continué à s’améliorer lors de la dernière epoch, même si la perte de validation se dégradait
- Des logs supplémentaires et un notebook de reproduction sont disponibles dans le rapport de Johno
Pourquoi l’apprentissage à partir d’un seul exemple pourrait être possible
- Il n’existe pas de loi fondamentale disant qu’un réseau de neurones ne peut pas reconnaître une entrée à partir d’un seul exemple
- Les chercheurs et praticiens ont simplement constaté empiriquement que les réseaux de neurones ont besoin de nombreux exemples
- Si la surface de perte explorée par la descente de gradient stochastique (SGD) est accidentée, il est difficile de se déplacer beaucoup en une seule fois
- On connaît des facteurs qui rendent la surface de perte plus lisse
- Visualizing the Loss Landscape of Neural Nets, de Li et al. 2018, traite de la relation entre les connexions résiduelles et la surface de perte
- Les LLM préentraînés peuvent avoir une surface de perte très lisse dans une région proche d’un minimum de perte
- De nombreux travaux de fine-tuning dans la communauté open source se déroulent probablement dans ce type de région
- Cela rejoint les prémisses de l’article ULMFiT de 2018
- L’idée de base d’ULMFiT était qu’un modèle performant en modélisation du langage construit en interne de riches abstractions et des couches de capacités
- Ces couches peuvent être appliquées à d’autres tâches avec peu de fine-tuning
- Les LLM actuels sont beaucoup plus grands que les modèles étudiés dans ULMFiT, et pourraient donc disposer de couches d’abstraction plus riches
- Le fine-tuning sur des QCM scientifiques peut s’apparenter à l’exploitation de capacités et de connaissances déjà présentes dans le modèle
- Les ajustements de poids nécessaires peuvent être peu nombreux
- Un modèle de langage préentraîné auquel on ajoute une petite tête de classification aléatoire peut se trouver dans une position où il se déplace en douceur vers une bonne configuration de poids
- Avec l’optimiseur Adam, des gradients cohérents et lisses peuvent augmenter le taux d’apprentissage dynamique effectif, conduisant à de grands pas
Questions soulevées pour les stratégies de fine-tuning
- Si le modèle apprend très vite, les hypothèses de base des méthodes d’entraînement existantes peuvent être remises en cause
- Un modèle qui apprend lentement peut examiner longtemps des données variées pendant plusieurs epochs et en extraire progressivement des informations généralisables
- Un modèle qui apprend vite peut mémoriser immédiatement les exemples vus, créant d’autres phénomènes
- Le catastrophic forgetting pourrait devenir plus marqué
- Après avoir vu 10 exemples d’une relation très courante puis 1 contre-exemple moins courant, le modèle peut mémoriser le contre-exemple au lieu de réduire légèrement le souvenir des 10 exemples précédents
- L’effet anti-surapprentissage de l’augmentation de données pourrait lui aussi s’affaiblir
- Si le LLM extrait bien les représentations de l’information en entrée, un mélange par paraphrase ou back-translation peut revenir à lui fournir essentiellement la même information
- Parmi les pistes d’atténuation figurent le dropout et la stochastic depth
- Le dropout est déjà un peu utilisé dans des techniques de fine-tuning comme LoRA
- Il ne semble pas encore exister de cas d’usage significatif de la stochastic depth en NLP
- Une autre approche consiste à maintenir un mélange riche de jeux de données tout au long de l’entraînement
- Llama Code a subi un catastrophic forgetting où d’autres capacités se dégradaient fortement pendant que ses performances en code s’amélioraient
- À l’époque, la part de données non-code était de 10 %
- Avec un mélange proche de 50/50, il aurait peut-être été possible de gagner en performance de programmation sans perdre les capacités existantes
1 commentaires
Avis sur Hacker News
Merci d’avoir posté cet article sur HN. Je suis l’un des coauteurs de cet article, et explorer avec Johno ce phénomène étrange de mémorisation rapide des LLM a été vraiment passionnant.
Je travaille avec les réseaux de neurones depuis 30 ans et je fais du fine-tuning de modèles de langage depuis 2017, mais ce comportement m’a beaucoup surpris. D’autres personnes ont observé des phénomènes similaires dans les LLM, mais je n’ai pas encore vu d’analyse de ce type, et il est possible que nous ayons manqué quelque chose.
Le modèle 12B perdait en moyenne -87,3 % de performance, le 84B -61,6 %, et le 562B seulement -3,9 %. J’avais l’impression qu’on était tout près d’une intuition importante, et je me demande si éviter l’oubli catastrophique ne pourrait pas être simplement une question d’échelle.
Je ne suis pas chercheur, mais il est clair que tous les LLM n’ont pas la même architecture, et même avec des architectures similaires ils peuvent évoluer de façon à se comporter fonctionnellement de manière assez différente sur les mêmes entrées. Pourtant, beaucoup d’articles semblent traiter les LLM comme s’il s’agissait d’une seule architecture et d’un seul modèle.
no_grad, tu devrais pouvoir mesurer précisément combien le modèle a appris en une étape.Tracer la différence entre la première et la deuxième perte, au niveau du batch ou de l’observation/la question, pourrait donner des résultats intéressants.
transformers, et à l’époque aussi la mémorisation nous avait semblé l’explication la plus probable. C’est bien de voir que d’autres arrivent à la même conclusion.https://github.com/huggingface/transformers/issues/18730
Je ne sais pas si les gens utilisent vraiment l’expression « over confident » dans ce sens. C’est assez trompeur, et ce qui se passe ici devrait plutôt être appelé surapprentissage.
Si l’on pense les données comme des points, un modèle qui généralise bien essaie de construire la fonction la plus simple qui ajuste assez correctement les points des données d’entraînement. Mais si l’on continue l’entraînement, les paramètres peuvent devenir très grands et la courbe de la fonction peut osciller fortement, bien au-delà de la plage réelle des données, pour passer exactement par les données d’entraînement.
Elle s’ajuste donc techniquement mieux aux données d’entraînement, mais devient une fonction étrange qui produit des sorties extrêmes sur de nouvelles données, avec une généralisation presque catastrophique. Cela dit, le surapprentissage n’est pas la même chose que la mémorisation. Un grand modèle peut mémoriser un petit jeu de données sans surapprentissage, car il a tellement de paramètres qu’il suffit de très peu de changements pour ajuster les données d’entraînement. Dans ce cas, l’entraînement s’arrête mais il n’y a pas de généralisation ; on parle alors de sous-détermination.
Certains modèles produisent aussi une sortie et un niveau de confiance, donc « excès de confiance » peut aussi signifier que le modèle a prédit à tort une confiance élevée, c’est-à-dire une faible variance d’erreur.
argmaxsur les probabilités de sortie, alors ce n’est pas du tout du surapprentissage. La précision de classification sur les données non vues, c’est-à-dire l’ensemble de validation, continue de s’améliorer.Le point clé ici est un problème de calibrage : https://en.m.wikipedia.org/wiki/Calibration_(statistics). Cela signifie que les probabilités de sortie du réseau de neurones ne reflètent pas les probabilités réellement observées. Si les probabilités sont systématiquement sous-estimées, on parle de « sous-confiance » ; si elles sont surestimées, d’« excès de confiance ».
Dans ce cas, même si le calibrage se dégrade et que la perte de validation augmente, le classifieur sur les données non vues peut tout de même continuer à s’améliorer.
Ici, la précision sur les données de validation continue de s’améliorer, mais lorsque le modèle se trompe, il se trompe avec plus de confiance qu’avant. Par exemple, s’il se trompait auparavant en étant sûr à 60 % que la réponse était X, il se trompe toujours en répondant X, mais avec une confiance plus élevée, disons 70 %. C’est donc une forme étrange de surapprentissage, et le terme plus précis d’« excès de confiance » semble bien convenir.
Je ne suis pas spécialiste des LLM, mais du point de vue général du machine learning, cela n’a rien de très surprenant.
On a déjà un modèle génératif de plusieurs milliards de paramètres qui attribue une certaine masse de probabilité aux échantillons de fine-tuning. On calcule alors le gradient qui augmente cette masse de probabilité, puis on fait un pas dans cette direction. Au fond, l’auteur s’étonne que ce seul pas augmente fortement la masse de probabilité des échantillons.
Mais les modèles génératifs sont extrêmement surparamétrés, et ils accordent déjà une certaine masse de probabilité aux échantillons de fine-tuning. Dans un espace de paramètres à plusieurs milliards de dimensions, il serait plutôt surprenant qu’il n’existe pas de direction permettant d’augmenter rapidement la probabilité d’un nombre relativement faible d’échantillons.
Ce résultat ne découlait-il pas déjà assez clairement du fait que la plupart des LLM actuels sont entraînés sur une seule époque ?
Si l’on n’entraîne que sur une époque, cela signifie qu’un simple second passage sur les données soulève déjà un risque de surapprentissage. Cela dit, cela semble quelque peu contredire les résultats de cet article [0], selon lequel les données anciennes restent aussi bonnes que les nouvelles jusqu’à au moins 4 époques.
[0] : https://arxiv.org/abs/2305.16264
Ce n’est peut-être pas lié, mais j’ai demandé à ChatGPT d’écrire du code pour contrôler par programme, dans PowerShell, les détails des filtres de colonnes d’une feuille de calcul Excel.
Tout ce qu’il a essayé ne marchait pas ; c’était presque bon, mais ça ne fonctionnait pas. Au final, j’ai trouvé du code C# qui corrigeait le problème, je l’ai collé dans ChatGPT et, après qu’il l’a lu, je lui ai demandé de corriger le problème en PowerShell ; il a dit avoir compris la solution, a modifié le script, et ça a parfaitement fonctionné.
Pour une raison ou une autre, ce comportement a été assez révélateur. En fournissant dans la question du matériel sur lequel il n’avait pas été entraîné, il a résolu le problème. Je comprends comment c’est possible du point de vue de l’apprentissage du langage, mais j’ai trouvé vraiment génial qu’un LLM puisse faire ce genre de chose.
Ces systèmes parlent et expliquent si bien qu’on les anthropomorphise facilement. Ils le font tellement bien qu’on finit par considérer comme une simple brique de base ce qui est un immense accomplissement quasi magique d’ingénierie statistique. Mais cette brique est en or.
Traduire, éditer, résumer, étendre et extrapoler du langage naturel vers du code, du texte vers de l’audio, d’une image vers une autre image, d’une langue naturelle vers une autre : c’est ce que font ces modèles. La « connaissance » intrinsèque n’est que du contexte.
Je vois les embeddings vectoriels un peu différemment : c’est une forme de catalogage sémantique, comme la classification décimale de Dewey, qui permet la recherche. Mais faire directement dans le modèle de la récupération de données du type « qui était président des États-Unis en 1984 ? » ne m’intéresse personnellement pas beaucoup.
Je me demande si des LLM ont déjà été utilisés pour enrichir leurs propres données d’entraînement.
Je me demande ce qui se passerait si l’on entraînait un LLM avec peu d’entrées, puis qu’on générait beaucoup d’entrées synthétiques pour les ajouter aux données d’entraînement. Je vois ça comme une sorte de « rêve ». Peut-être que ça ne ferait qu’ajouter du bruit, mais les LLM peuvent enrichir eux-mêmes le contexte et améliorer leur sortie en « pensant à voix haute » ; je me demande donc s’ils ne pourraient pas faire la même chose pour les données d’entraînement.
En revanche, il est courant de générer des données d’entraînement synthétiques avec un grand modèle pour entraîner un autre modèle plus petit. On peut ainsi transférer les connaissances d’un modèle vers un autre.
Je trouve que le titre prête à confusion.
Dans le contexte de l’apprentissage, apprendre à partir d’un seul exemple est souhaitable, alors que la mémorisation ne l’est pas, non ? Le premier est l’objectif que l’on vise pour se rapprocher de la façon dont les animaux apprennent, tandis que la seconde est un mode de défaillance fréquent. L’article semble montrer un cas de mémorisation inexpliquée, pas d’apprentissage.
En entraînant un ViT depuis zéro, j’ai vu des courbes de perte similaires ; cela m’a toujours intrigué, mais j’avais de plus gros problèmes et je ne me suis pas penché dessus en profondeur.
La différence, c’est que la perte d’entraînement augmente pendant chaque époque. Les chutes brutales entre les époques sont suffisamment importantes pour que, globalement, la perte d’entraînement baisse, et la perte de validation continue aussi de baisser. Le modèle arrive assez près de l’état de l’art, donc ça semble « normal ».
Je n’ai jamais entraîné de réseau de neurones convolutif à cette échelle, donc je ne sais pas si on y verrait le même phénomène, mais si c’était le cas, quelqu’un l’aurait sans doute mentionné. Je me dis donc que ce type de courbe de perte étrange pourrait être propre aux modèles fondés sur les Transformers.
Pendant longtemps, le modèle ne va quasiment nulle part et semble totalement inutile, puis, à un moment donné, après plusieurs cycles d’entraînement, quand les poids trouvent un certain minimum sur la surface d’erreur, il se met soudain à faire correctement le travail. C’est parce que le Transformer a appris une abstraction qui fonctionne sur toutes les données d’entrée du point de vue du mécanisme d’attention. Il suffit de penser à la façon dont on parcourt une phrase en la lisant. J’explique cela de mémoire à partir d’un article vu autrefois sur HN, donc ce n’est pas une explication parfaite.
Je me demande maintenant si cela signifie qu’il serait efficace, en termes de calcul, d’apprendre ou de mémoriser à la volée des informations comme le contexte du chat en cours dans une partie des poids du modèle.
L’encodage one-shot, que l’hippocampe fait très bien, permet de transformer une expérience en souvenir récupérable, relié à des concepts sémantiques appris auparavant. En fait, cela s’améliore entre l’enfance et l’âge adulte, à mesure que la conceptualisation sémantique des événements devient plus riche.
Si la mémorisation d’événements par les LLM est accélérée par ce cadre sémantique profond, cela pourrait-il ouvrir une voie vers de longues fenêtres de contexte ?
Avec un modèle local plus petit que GPT-3.5/4, cela pourrait être possible. Il faudrait aussi décider ce qui doit rester en mémoire à long terme et ce qui doit rester en mémoire à court terme.
Si c’est vrai, cela étaye l’idée que des jeux de données sélectionnés par des humains, bien plus petits que les jeux de données synthétiques générés par des LLM, ont une valeur bien supérieure.
On peut citer Apple Sim comme exemple. C’est un dépôt de modèles 3D d’intérieurs : en contrôlant le moteur de rendu, on peut générer plusieurs niveaux d’information, puis les utiliser sur de vraies photos. Comme cette approche est employée dans l’image de manière générale, l’espace vectoriel est assez naturel pour les embeddings. Dit de façon algébrique, il n’est pas nécessaire d’ajouter beaucoup de structure.
Si le domaine a une forte nature algébrique, on peut aussi générer arbitrairement de bons exemples, et je recommanderais ce type de situation à tout le monde.
Cela dit, je pense qu’un jour le principe selon lequel il n’y a pas de repas gratuit finira par s’appliquer, et les données synthétiques ne se préoccupent pas toujours du processus de génération des données pour les valeurs aberrantes.
ChatGPT 4 est déjà utilisé comme modèle oracle pour entraîner des modèles d’IA courants. Un modèle oracle véritablement gigantesque rendra l’essentiel superflu, à l’exception d’une très petite part d’intervention humaine.