Catastrophic Forgetting
L’oubli catastrophique est la perte brutale de compétences acquises précédemment lorsqu’un réseau neuronal s’entraîne sur de nouvelles données. Découvre pourquoi il se produit, avec des exemples et des mesures d’atténuation.
L’oubli catastrophique, également appelé interférence catastrophique, est la perte brutale de compétences acquises précédemment lorsqu’un réseau neuronal est entraîné sur de nouvelles données qui ne contiennent plus d’exemples de l’ancienne tâche. L’entraînement met à jour les mêmes poids du modèle qui stockaient les connaissances antérieures, et rien dans la nouvelle fonction de perte n’incite à les conserver ; la précision sur la tâche d’origine peut donc s’effondrer en quelques centaines de mises à jour. McCloskey et Cohen ont décrit ce phénomène en 1989 dans des réseaux qui apprenaient des faits arithmétiques en séquence ; il reste le principal obstacle à l’apprentissage continu et un risque courant lors du fine-tuning.
Pourquoi l’oubli catastrophique se produit#
Les connaissances d’un réseau neuronal sont distribuées : chaque poids contribue à de nombreuses sorties, et chaque sortie dépend de nombreux poids. L’entraînement sur une nouvelle tâche déplace les poids dans la direction où sa perte diminue le plus rapidement, sans terme qui mesure l’ancienne tâche ; le modèle s’éloigne donc de la région où cette tâche fonctionnait. La classification accentue l’effet dans la couche de sortie. Lorsque seules de nouvelles classes apparaissent dans les données d’entraînement, chaque étape réduit les scores des classes absentes, jusqu’à ce que le modèle cesse complètement de les prédire. Un petit réseau entraîné d’abord sur des chiffres manuscrits de 0 à 4, puis sur des chiffres de 5 à 9, illustre ce phénomène et montre comment la réutilisation d’un petit échantillon d’anciennes données le limite :
import torch
from sklearn.datasets import load_digits
torch.manual_seed(0)
X, y = load_digits(return_X_y=True)
X, y = torch.tensor(X / 16, dtype=torch.float32), torch.tensor(y)
train = torch.arange(len(y)) < 1400 # hold out the last 397 images for testing
task_a, task_b, test_a = train & (y < 5), train & (y >= 5), ~train & (y < 5)
replay = task_a & (torch.rand(len(y)) < 0.1) # keep 10% of task A for replay
for name, second_task in [("task B only", task_b), ("task B + 10% replay", task_b | replay)]:
model = torch.nn.Sequential(torch.nn.Linear(64, 64), torch.nn.ReLU(), torch.nn.Linear(64, 10))
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# Train on digits 0-4 (task A), then on digits 5-9 (task B)
for mask in (task_a, second_task):
for _ in range(200):
loss = torch.nn.functional.cross_entropy(model(X[mask]), y[mask])
optimizer.zero_grad()
loss.backward()
optimizer.step()
accuracy = (model(X[test_a]).argmax(1) == y[test_a]).float().mean()
print(f"{name}: held-out digits 0-4 accuracy {accuracy:.1%}")Après la tâche A, le réseau classe correctement 92,4 % des 198 chiffres de 0 à 4 mis de côté. L’entraînement sur les seuls chiffres de 5 à 9 fait chuter ce taux à 0,0 %, car le modèle ne prédit désormais que les nouvelles classes. L’ajout de 66 images réutilisées de la tâche A lors de la deuxième étape maintient la précision à 74,7 %.
L’oubli catastrophique en pratique#
- Détection d’objets : Un détecteur entraîné sur des piétons et des panneaux de signalisation, puis ajusté uniquement sur des images de nouveaux panneaux de chantier, cesse de détecter les piétons. Tout piéton apparaissant sans étiquette dans les nouvelles images est activement appris comme faisant partie de l’arrière-plan, ce qui accélère l’oubli.
- Grands modèles de langage : Lors d’un ajustement continu des instructions de LLM comptant de 1 à 7 milliards de paramètres, les connaissances du domaine, le raisonnement et la compréhension écrite se sont tous détériorés, et l’oubli s’est accentué avec la taille du modèle dans cette plage. Le fine-tuning de modèles alignés, même sur des données bénignes, peut affaiblir leur comportement de sécurité.
Oubli catastrophique et notions connexes#
- Apprentissage continu : Domaine de recherche qui étudie comment apprendre une séquence de tâches sans oublier les précédentes. L’oubli catastrophique est le problème auquel il s’attaque.
- Effondrement des modèles : Perte progressive de qualité et de diversité lorsque des modèles sont entraînés sur des données générées par des modèles antérieurs, même pour la même tâche.
- Surapprentissage : Ajustement si précis au bruit des données d’entraînement actuelles que les performances diminuent sur de nouvelles données issues de la même tâche. L’oubli correspond à la perte d’une tâche antérieure.
- Désapprentissage automatique : Suppression délibérée de données ou de connaissances précises d’un modèle entraîné, pendant intentionnel de l’oubli.
- Dilemme stabilité-plasticité : Le compromis entre la préservation des anciennes connaissances et une plasticité suffisante pour apprendre de nouvelles tâches, que chaque méthode d’atténuation équilibre différemment.
Comment réduire l’oubli catastrophique#
Les méthodes d’atténuation se répartissent en trois familles — rejeu, régularisation et isolation des paramètres — et les contraintes du projet déterminent généralement celle qui convient :
- Rejeu : Mélanger des exemples stockés de tâches antérieures aux nouvelles données d’entraînement est la solution la plus fiable, comme le montre l’exemple des chiffres. Pour les détecteurs YOLO26, les fichiers YAML de données d’Ultralytics acceptent une liste de dossiers d’images d’entraînement ; le rejeu consiste donc à ajouter un échantillon des images d’origine aux nouvelles, dans une même liste de classes.
- Régularisation : La consolidation élastique des poids (EWC) pénalise les modifications de chaque poids proportionnellement à son importance pour les tâches antérieures, estimée à partir de l’information de Fisher. Learning without Forgetting utilise plutôt la distillation de connaissances et entraîne le modèle à conserver les mêmes sorties qu’auparavant sur les nouvelles données.
- Isolation des paramètres : Le gel des couches partagées, l’ajout de têtes propres à chaque tâche ou l’entraînement d’adaptateurs comme LoRA laisse les poids d’origine intacts. Pour les tâches de programmation et de mathématiques, LoRA a moins appris que le fine-tuning complet, mais a moins oublié ; le fine-tuning complet a appris des modifications de poids dont le rang était de 10 à 100 fois supérieur à celui des configurations LoRA habituelles.










