Как бороться с переобучением в задачах CV?
Переобучение (overfitting) — это ситуация, когда модель показывает отличные результаты на обучающих данных, но плохо обобщается на новых, ранее не виденных примерах. В задачах компьютерного зрения (CV) переобучение особенно актуально, поскольку изображения могут иметь множество мелких деталей и легко «запоминаться» моделью. Борьба с переобучением — это систематическое применение различных техник, которые помогают улучшить обобщающую способность модели.
1. Аугментация данных (Data Augmentation)
Позволяет увеличить разнообразие обучающих данных, не меняя их сути.
Техники:
-
Геометрические трансформации: поворот, отражение, сдвиг, масштабирование, обрезка, perspective warp
-
Фотометрические: изменение яркости, контрастности, насыщенности, гамма-коррекция, шум
-
Эластичная деформация (особенно полезна в медицине)
-
Cutout / Random Erasing: случайное замазывание фрагментов изображения
-
MixUp / CutMix: линейное или пространственное смешивание изображений и их меток
Инструменты: Albumentations, torchvision.transforms, Keras ImageDataGenerator
2. Регуляризация
Методы, ограничивающие сложность модели.
L2-регуляризация (weight decay)
Добавляет штраф за большие веса:
Loss=OriginalLoss+λ∑w2\text{Loss} = \text{OriginalLoss} + \lambda \sum w^2
-
Предотвращает чрезмерно «острые» решения.
-
Обычно включается как параметр оптимизатора.
Dropout
-
Случайное "обнуление" нейронов во время обучения с вероятностью p (например, 0.5).
-
Предотвращает избыточную зависимость от отдельных нейронов.
-
Используется в основном в fully-connected слоях, но возможно и в сверточных (SpatialDropout).
Label Smoothing
-
Вместо one-hot метки используется смягчённая:
- Например, вместо [0, 1, 0] → [0.1, 0.8, 0.1]
-
Делает модель менее уверенной и улучшает обобщение.
3. Контроль за обучением
Early Stopping
-
Прекращение обучения, если метрика на валидации не улучшается в течение N эпох.
-
Требует выделенной валидационной выборки.
-
Помогает избежать переобучения на поздних этапах.
Меньше эпох
-
Иногда модель начинает переобучаться после достижения минимума ошибки.
-
Регулярное логгирование метрик помогает это отследить.
4. Архитектурные приёмы
Простая архитектура
-
Не всегда глубокая и сложная сеть — это лучше.
-
Меньшее количество параметров → ниже риск переобучения.
Батч-нормализация (BatchNorm)
-
Стабилизирует распределение активаций.
-
Улучшает сходимость и даёт лёгкую регуляризацию.
-
Часто заменяет или дополняет Dropout.
5. Больше данных
Собрать больше изображений
-
Идеальный способ предотвратить переобучение — это увеличение размера датасета.
-
Можно использовать веб-краулеры, синтетические данные (SMOTE, GANs), генераторы 3D-рендеров.
Transfer Learning
-
Использование предобученных моделей (например, ResNet, EfficientNet) с дообучением на целевой задаче.
-
Позволяет уменьшить требования к размеру датасета.
-
Возможные режимы:
-
Тонкая настройка (fine-tuning)
-
Фиксация всех слоёв, кроме последнего
-
6. Кросс-валидация (Cross-validation)
-
Разбиение датасета на несколько частей и обучение на разных подмножествах.
-
Особенно важно при малом объёме данных.
-
K-Fold или StratifiedKFold — для сбалансированного представления классов.
7. Сбалансированные данные
Решение проблемы дисбаланса классов
-
Переобучение может происходить на доминирующих классах.
-
Методы:
-
Oversampling редких классов (копирование, аугментация)
-
Undersampling частых классов
-
Взвешивание loss-функции (class_weight, pos_weight)
-
Focal Loss — фокусирует внимание на сложных примерах
-
8. Корректная выборка данных
Разделение train/val/test
-
Перекрёстное попадание изображений или похожих картинок (например, разных обрезок одного изображения) может привести к ложному росту метрик.
-
Используйте stratified split, избегайте утечек данных (data leakage).
Учет источников
-
Не смешивайте изображения с разных датчиков/камер без нормализации.
-
Возможно введение domain adaptation при разных распределениях источников.
9. Мониторинг и логгирование
-
Используйте TensorBoard, Weights & Biases, Neptune или аналогичные системы.
-
Отслеживайте:
-
Loss на train/val
-
Метрики (accuracy, mIoU, dice и т. д.)
-
Overfitting gap — разрыв между train и val
-
10. Выбор правильной loss-функции
-
Некорректный выбор loss может приводить к переобучению.
-
Для задач сегментации, например, лучше использовать Dice Loss или комбинации (0.5 * BCE + 0.5 * Dice).
-
В классификации — Focal Loss при дисбалансе.
11. Ensemble моделей
-
Объединение предсказаний нескольких моделей (или разных эпох одной модели).
-
Типы ансамблей:
-
Бэггинг (Bagging): модели обучаются на разных подвыборках
-
Стекинг (Stacking): используется мета-модель
-
Snapshot Ensembles: ансамбли по лучшим эпохам
-
Это снижает вариативность и риск переобучения отдельной модели.
12. Использование синтетических данных
-
В задачах, где получить реальные изображения сложно (например, медицина, космос, робототехника), можно использовать:
-
GANs для генерации реалистичных изображений
-
3D-рендеринг и генерация сцен
-
Домены с шумом или стилевыми трансформациями (style transfer, domain randomization)
-
Синтетика повышает обобщение за счёт разнообразия.
13. Distillation (дистилляция знаний)
-
Обучение «маленькой» модели (student) на выходах «большой» модели (teacher).
-
Дает меньшую модель с хорошим обобщением.
-
Смягчает уверенность teacher'а, что снижает риск переобучения.
14. Тонкая настройка гиперпараметров
-
Неправильный выбор learning rate, batch size, weight decay и др. может приводить к переобучению.
-
Используйте:
-
Grid Search
-
Random Search
-
Optuna / Hyperopt / Ray Tune
-
15. Примеры практического обнаружения переобучения
-
Training loss ↓, Validation loss ↑ — признак переобучения
-
**Accuracy на train > 95%, а на test < 70%
** - **Метрики падают после определённой эпохи
** - **Модель слишком уверена (softmax близок к 1.0), но часто ошибается
**
Переобучение — это не просто "слишком долгое обучение", а сигнал того, что модель запоминает, а не учится. В CV-задачах эффективная борьба с этим включает не только архитектурные меры, но и подходы к данным, метрикам и обучению.