Переобучение и регуляризация

Урок объясняет переобучение и набор приёмов, удерживающих сеть от зубрёжки данных.

Переобучение (overfitting) — это когда сеть запоминает обучающие примеры вместо того, чтобы уловить общую закономерность, и потому плохо работает на новых данных.

Как распознать переобучение

Главный признак — расхождение кривых: потеря на обучении падает, а на валидации начинает расти. Сеть всё точнее на знакомых примерах, но всё хуже на незнакомых. У нейросетей с миллионами параметров на это огромный соблазн: ёмкости хватает, чтобы выучить датасет наизусть.

L2-регуляризация (weight decay)

Идея: штрафовать большие веса. К функции потерь добавляют слагаемое, пропорциональное сумме квадратов весов. Сеть вынуждена держать веса небольшими, а значит — строить более плавные, простые зависимости, которые лучше обобщаются. Управляется коэффициентом: больше коэффициент — сильнее «прижим» весов.

Dropout: случайно выключаем нейроны

На каждом шаге обучения случайно «отключают» часть нейронов слоя (например, 50%), обнуляя их выход. Сеть не может полагаться на конкретные нейроны и учится распределять знание — это как ансамбль из множества прореженных подсетей. На инференсе (предсказании) dropout выключают, все нейроны работают. Простой и очень действенный приём.

Batch normalization: нормализуем активации

Batch norm нормализует выходы слоя по текущему батчу (приводит к среднему 0 и единичному разбросу), затем масштабирует обучаемыми параметрами. Это стабилизирует распределения активаций между слоями, позволяет брать больший lr, ускоряет обучение и попутно даёт лёгкий регуляризующий эффект.

Ранняя остановка и больше данных

  • Early stopping: следить за val loss и остановить обучение, как только она перестала падать — не дать сети уйти в переобучение.
  • Больше данных / аугментация: самый надёжный способ. Чем больше и разнообразнее данные, тем труднее их «зазубрить». Для картинок их искусственно размножают поворотами, отражениями, сдвигами.
ПриёмСуть
L2 / weight decayштраф за крупные веса
dropoutслучайное отключение нейронов при обучении
batch normнормализация активаций по батчу
early stoppingостановка по росту val loss
аугментацияискусственное расширение данных

Как сочетать приёмы

На практике регуляризацию не выбирают по одной — её собирают слоями. Типичный рецепт для глубокой сети: He-инициализация, batch norm после свёрток, dropout перед финальным полносвязным слоем, небольшой weight decay в оптимизаторе и early stopping по валидации. Важно не переборщить: слишком сильная регуляризация приводит к недообучению (underfitting) — это зеркальная беда, когда сеть слишком проста и не выучивает даже обучающие данные (высокая потеря и на train, и на validation). Цель — пройти между Сциллой переобучения и Харибдой недообучения: достаточно ёмкая модель плюс ровно столько регуляризации, чтобы train и val потери падали вместе.

Полезная привычка — менять по одному приёму за раз и смотреть на кривую валидации. Если добавили dropout, а val loss улучшилась — оставляем; если стало хуже, откатываем. Так регуляризация настраивается не наугад, а по обратной связи от данных.

Итог

  • Переобучение видно по растущей val loss при падающей train loss.
  • L2 прижимает веса, dropout прореживает нейроны, batch norm стабилизирует активации.
  • Early stopping и больше данных — простые и надёжные средства обобщения.
Проверьте себя
1. По какому признаку распознают переобучение?
ATrain loss растёт
BTrain loss падает, а validation loss начинает расти
CОбе потери растут
DAccuracy всегда 100%
2. Что делает dropout во время обучения?
AУдаляет слои из сети
BСлучайно обнуляет выходы части нейронов на каждом шаге
CУменьшает learning rate
DНормализует входные данные
3. Зачем нужна L2-регуляризация?
AЧтобы увеличить веса
BШтрафовать крупные веса, делая зависимости проще и обобщаемее
CУскорить forward pass
DЗаменить функцию активации
Поддержать проект