中文翻译暂不可用,显示俄语原文。
Как вы предотвращаете catastrophic forgetting при fine-tuning?
Краткий тезис
Catastrophic forgetting (катастрофическое забывание) — потеря ранее усвоенных знаний при дообучении модели на новой задаче. Для предотвращения используют комбинацию методов: параметрически fine-tuning|эффективное дообучение (LoRA), регуляризацию важных весов (EWC), воспроизведение исходных данных (replay buffer) и контроль числа эпох. Ключевая практика: всегда проверять, не разучилась ли модель отвечать на базовые вопросы после fine-tuning.
1. Термин: Catastrophic forgetting
Catastrophic forgetting — явление, при котором нейронная сеть, обучаемая на новой задаче, резко теряет способность решать предыдущие. Это происходит из-за перезаписи весов, критически важных для старых знаний. В контексте fine-tuning LLM это особенно опасно: модель может «разучиться» отвечать на общие вопросы или следовать инструкциям, если дообучать её только на узкой предметной области.
Почему это важно:
- Продуктовая модель должна сохранять базовые знания (факты, грамматику, безопасность).
- Пользователи ожидают, что после fine-tuning модель не станет хуже на общих запросах.
- Catastrophic forgetting может привести к деградации качества и репутационным рискам.
2. LoRA (Low-Rank Adaptation) как основной инструмент
LoRA — метод параметрически эффективного дообучения (PEFT). Вместо обновления всех весов модели вносятся низкоранговые адаптеры (матрицы A и B), которые добавляются к исходным весам. Число обучаемых параметров сокращается в сотни раз.
Почему LoRA помогает от забывания:
- Оригинальные веса модели остаются замороженными, изменяются только адаптеры.
- Адаптеры имеют низкую ёмкость, поэтому вынуждены запоминать только новую задачу, не перезаписывая старые знания.
- При инференсе можно отключить адаптеры и вернуться к исходной модели.
Сравнение LoRA и Full fine-tuning:
| Характеристика | Full fine-tuning | LoRA |
|---|---|---|
| Число обучаемых параметров | 100% | 0.1–1% |
| Риск catastrophic forgetting | Высокий | Низкий |
| Скорость обучения | Медленно | Быстро |
| Память (VRAM) | Много | Мало |
| Возможность переключать задачи | Нет (одна версия) | Да (адаптеры) |
На практике fine-tuning LLM почти всегда делают через LoRA или его варианты (QLoRA, DoRA).
3. Elastic Weight Consolidation (EWC)
EWC — метод регуляризации, который добавляет штраф за изменение весов, важных для предыдущих задач. Идея: оценить важность каждого веса (через диагональ матрицы Фишера) и при обучении на новой задаче увеличивать потери при изменении важных весов.
Формула потерь:
L_total = L_new + λ * Σ_i F_i * (θ_i - θ_A_i)^2
где:
L_new— loss на новой задаче,F_i— важность параметра θ_i (диагональ матрицы Фишера),θ_A_i— значение параметра после обучения на предыдущей задаче,- λ — коэффициент регуляризации.
Плюсы: теоретически обоснован, работает для последовательного обучения. Минусы: требует хранения важности для каждой задачи, увеличивает вычислительную нагрузку, может быть избыточным при LoRA.
EWC чаще применяется в continuous learning, но может быть комбинирован с LoRA для дополнительной защиты.
4. Replay buffer (воспроизведение исходных данных)
Replay buffer — техника, при которой во время fine-tuning в батчи подмешиваются примеры из исходного обучающего датасета (или из репрезентативной выборки). Это заставляет модель «вспоминать» старые знания.
Варианты реализации:
- Experience Replay: хранить буфер с примерами из оригинального обучения (если доступен исходный датасет).
- Generative Replay: использовать генеративную модель (например, саму LLM) для синтеза примеров старых задач.
- Task-specific Replay: для fine-tuning на одном домене добавлять универсальные датасеты (например, OpenAssistant, Dolly).
Практический совет: смешивать данные в пропорции 80% новых / 20% исходных. Это снижает забывание без сильного замедления сходимости.
5. SLERP при смешивании адаптеров
SLERP (Spherical Linear Interpolation) — метод интерполяции между двумя наборами весов (адаптерами) на сфере. Используется для объединения адаптеров, обученных на разных задачах.
Как это помогает:
- После fine-tuning на новой задаче можно смешать новый адаптер с исходным (пустым) адаптером с весовым коэффициентом.
- SLERP даёт более гладкий переход, чем линейная интерполяция, сохраняя норму и направление.
- Позволяет контролировать степень влияния нового fine-tuning, уменьшая риск забывания.
Пример кода:
import torch
def slerp(t, v0, v1):
# v0, v1 — веса, t ∈ [0,1]
omega = torch.acos(torch.clamp(torch.dot(v0, v1), -1, 1))
if omega == 0:
return v0 * (1 - t) + v1 * t
return (torch.sin((1 - t) * omega) / torch.sin(omega)) * v0 + (torch.sin(t * omega) / torch.sin(omega)) * v1
SLERP часто применяется при merging адаптеров или при пост-обработке fine-tuned моделей.
6. Ограничение числа эпоф (1–3)
Большое число эпох — прямой путь к overfitting на новой задаче и забыванию старой. Для LLM fine-tuning достаточно 1–3 эпоф на большинстве датасетов.
Почему мало эпоф:
- LLM уже имеет обширные знания; новая задача — лишь адаптация.
- Каждая дополнительная эпоха увеличивает риск переобучения.
- Используйте early stopping по метрике на валидационном наборе, который включает как новую задачу, так и общие вопросы.
7. Проверка на здравомыслие (sanity check)
После fine-tuning обязательно тестируйте модель на наборе базовых вопросов, не связанных с дообучаемой задачей. Примеры:
- "Кто президент США?"
- "Сколько будет 2+2?"
- "Напиши короткое стихотворение."
Если качество ответов на эти вопросы упало — catastrophic forgetting произошёл. В таком случае:
- Уменьшите число эпоф или learning rate.
- Увеличьте долю replay данных.
- Проверьте, не слишком ли велик rank LoRA.
- Рассмотрите использование EWC.
Создайте eval set из 50–100 универсальных вопросов и отслеживайте метрики до/после fine-tuning.
8. Дополнительные методы
- Progressive Neural Networks: отдельные сети для каждой задачи (память велика, редко используется в LLM).
- Memory Aware Synapses (MAS): похож на EWC, но оценивает важность по чувствительности выхода.
- Learning without Forgetting (LwF): дистилляция — используем старую модель как teacher для новой.
- Regularization: L2-регуляризация на отклонение от исходных весов (weight decay, delta regularization).
На практике комбинируют 2–3 метода: LoRA + replay buffer + sanity check.
9. Практический чек-лист для предотвращения catastrophic forgetting
- Использовать LoRA (или QLoRA) вместо full fine-tuning.
- Ограничить 1–3 эпохи, применить early stopping.
- Подмешивать 20% исходных данных в батчи (replay).
- Настроить learning rate (обычно 1e-4 для LoRA).
- После обучения провести sanity check на универсальных вопросах.
- При необходимости применить SLERP с исходным адаптером.
- Если забывание сильное — добавить EWC или увеличить λ.
Пет-проект для закрепления
Задача: Дообучить небольшую LLM (например, GPT-2 или DistilBERT) на датасете с медицинскими вопросами и проверить, не забыла ли она отвечать на общие вопросы.
Инструменты: Python, Hugging Face Transformers, PEFT (LoRA), Datasets, PyTorch.
Шаги:
- Взять предобученную модель (distilgpt2).
- Подготовить датасет: 1000 медицинских вопросов-ответов (можно взять из MedQuad).
- Собрать sanity set: 50 общих вопросов (например, "What is the capital of France?").
- Замерить baseline — точность на sanity set до fine-tuning.
- Обучить LoRA адаптер на медицинском датасете (3 эпохи, LR=5e-4).
- Оценить модель на sanity set после fine-tuning. Если точность упала — применить replay (добавить 20% общих вопросов в тренировочный микс) и переобучить.
- Сравнить результаты: таблица метрик до, после, после с replay.
Ожидаемый результат: Модель должна сохранить >90% точности на общих вопросах, но улучшить точность на медицинских.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 25 | Основы fine-tuning LLM |
| 27 | Выбор данных для fine-tuning |
| 28 | Гиперпараметры fine-tuning |
| 30 | Смешивание и слияние адаптеров |
| 31 | Оценка fine-tuned модели |
| 32 | Развертывание fine-tuned моделей |
Навигация
- Предыдущий: 25
- Следующий: 27
- Индекс: 00. Индекс разборов