Catastrophic Forgetting
Катастрофическое забывание — это резкая утрата ранее освоенных навыков, когда нейросеть обучается на новых данных. Разбираем, почему это происходит, приводим примеры и способы смягчить проблему.
Катастрофическое забывание, также называемое катастрофической интерференцией, — это резкая потеря ранее усвоенных навыков, когда нейронную сеть обучают на новых данных, не содержащих примеров старой задачи. При обучении обновляются те же общие веса модели, в которых хранятся прежние знания, а новая функция потерь никак не поощряет их сохранение. Поэтому точность на исходной задаче может упасть до нуля всего за несколько сотен обновлений. Макклоски и Коэн описали этот эффект в 1989 году на примере сетей, последовательно усваивавших арифметические факты. Он и сегодня остаётся главным препятствием для непрерывного обучения и постоянным риском при дообучении.
Почему происходит катастрофическое забывание#
Знания в нейронной сети распределены: каждый вес влияет на множество выходов, а каждый выход зависит от множества весов. При обучении новой задаче веса перемещаются в направлении наиболее быстрого снижения её функции потерь, и никакой член функции не учитывает старую задачу, поэтому модель уходит из области, в которой старая задача решалась успешно. При классификации этот эффект усиливается на выходном слое. Если в обучающих данных представлены только новые классы, на каждом шаге оценки отсутствующих классов снижаются, пока модель совсем не перестанет их предсказывать. Это можно увидеть на небольшой сети, обученной сначала на рукописных цифрах 0–4, а затем на цифрах 5–9; пример также показывает, как повторное предъявление небольшой выборки старых данных ограничивает забывание:
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%}")После задачи A сеть правильно классифицирует 92.4% из 198 отложенных изображений цифр 0–4. Обучение только на цифрах 5–9 снижает точность до 0.0%, потому что теперь модель предсказывает лишь новые классы. Если на втором этапе добавить 66 повторно предъявленных изображений задачи A, точность сохранится на уровне 74.7%.
Катастрофическое забывание на практике#
- Обнаружение объектов: детектор обучили распознавать пешеходов и дорожные знаки, а затем дообучили только на изображениях новых дорожных знаков. В результате он перестал обнаруживать пешеходов. Любой пешеход на новых изображениях, не размеченный как отдельный класс, фактически обучает модель считать его фоном, ускоряя забывание.
- Крупные языковые модели: при непрерывной настройке инструкциями LLM с 1 до 7 миллиардов параметров ухудшились знания в предметной области, рассуждения и понимание прочитанного, причём в этом диапазоне забывание усиливалось с ростом модели. Дообучение моделей с выравниванием, даже на безвредных данных, может ослабить их защитное поведение.
Катастрофическое забывание и смежные понятия#
- Непрерывное обучение: область исследований, изучающая, как обучать модели последовательности задач, не забывая предыдущие. Катастрофическое забывание — проблема, которую решает эта область.
- Коллапс модели: постепенная потеря качества и разнообразия, когда модели обучаются на данных, сгенерированных предыдущими моделями, даже если решают ту же задачу.
- Переобучение: слишком точная подгонка под шум текущих обучающих данных, из-за которой результаты на новых данных для той же задачи ухудшаются. Забывание — это потеря знаний о предыдущей задаче.
- Удаление данных из модели: целенаправленное удаление из обученной модели конкретных данных или знаний — преднамеренная противоположность забыванию.
- Дилемма стабильности и пластичности: компромисс между сохранением прежних знаний и достаточной пластичностью для освоения новых задач, для которого каждый метод снижения забывания находит свой баланс.
Как уменьшить катастрофическое забывание#
Методы борьбы делятся на три группы: повторное предъявление данных, регуляризация и изоляция параметров. Обычно подход определяют ограничения проекта:
- Повторное предъявление данных: добавление сохранённых примеров предыдущих задач в новые обучающие данные — наиболее надёжное решение, как показывает пример с цифрами. Для детекторов YOLO26 файлы данных Ultralytics в формате YAML принимают список папок с обучающими изображениями. Поэтому для повторного предъявления нужно указать образцы исходных изображений вместе с новыми и использовать для них общий список классов.
- Регуляризация: эластичное закрепление весов (EWC) штрафует за изменение каждого веса пропорционально его важности для предыдущих задач, оцениваемой с помощью информации Фишера. В методе Learning without Forgetting вместо этого применяется дистилляция знаний: модель обучают сохранять соответствие прежним выходам на новых данных.
- Изоляция параметров: заморозка общих слоёв, добавление специализированных для отдельных задач голов или обучение адаптеров, например LoRA, позволяют не менять исходные веса. В задачах программирования и математики LoRA обучалась хуже полного дообучения, но и меньше забывала; при полном дообучении изменения весов имели ранг в 10–100 раз выше, чем обычно у конфигураций LoRA.










