Урок по треку Глубокое обучение 6 мин

Регуляризация нейросетей за 6 минут

Dropout, weight decay, аугментации, early stopping, label smoothing и как диагностировать переобучение.

Нейросети легко запоминают обучающую выборку. На собесе спрашивают, как это заметить и какие инструменты против этого есть, а в код-ревью любят ловить dropout и аугментации на валидации.

Как выглядит переобучение

Loss на трейне продолжает падать, а на валидации после минимума растёт. Сначала убедитесь, что валидация честная: без пересечений с трейном, из того же распределения, в режиме model.eval().

Данные и аугментации

Больше данных лучше любой регуляризации. Если их нет, аугментации создают новые варианты объектов, сохраняющие метку:

  • картинки: кропы, отражения, повороты, цвет, RandAugment, mixup, CutMix;
  • тексты: обратный перевод, маскирование, замена синонимов;
  • звук: шум, сдвиги, SpecAugment.

Аугментация не должна менять класс: поворот на 180° превращает 6 в 9, отражение ломает текст на картинке.

Только на трейне. Валидация детерминирована: Resize, CenterCrop, та же нормализация, что на обучении.

Dropout

На обучении случайно обнуляет долю p активаций и масштабирует оставшиеся на 1/(1 - p). На инференсе выключен. При p = 0.2 множитель 1.25. Сеть не может полагаться на конкретные нейроны; можно думать о нём как об ансамбле подсетей.

Weight decay

Стягивает веса к нулю на каждом шаге. В AdamW отделён от адаптивного шага, типичные значения 0.01-0.1.

Early stopping

Следим за валидацией, останавливаемся, когда она не улучшается patience эпох, возвращаемся к лучшему чекпоинту. Валидация участвует в выборе, поэтому финальная оценка на тесте.

Label smoothing и mixup

  • Label smoothing ε = 0.1 на 10 классов: цель 0.91 для верного класса и 0.01 для остальных. Модель меньше переуверена, часто лучше калибровка.
  • Mixup: x = λx₁ + (1 - λ)x₂ и так же метки. CutMix вставляет кусок одной картинки в другую, метки смешивает по площади.

Что где используют

  • CNN: аугментации главное, плюс weight decay, label smoothing, mixup, stochastic depth.
  • Трансформеры среднего размера: dropout в attention и MLP, weight decay.
  • Предобучение LLM: данных так много, что переобучения почти нет, dropout часто нулевой, weight decay остаётся.
  • Fine-tuning на малых данных: маленький lr, weight decay, dropout, early stopping, LoRA.

Валидация в коде

model.eval()
correct = 0
with torch.no_grad():
    for x, y in val_loader:
        pred = model(x.to(device)).argmax(1)
        correct += (pred == y.to(device)).sum().item()
accuracy = correct / len(val_loader.dataset)
model.train()

Частые ошибки

  • Случайные аугментации на валидации.
  • Забытый model.eval(): dropout делает метрику случайной.
  • Аугментации, меняющие метку.
  • Итоговая метрика как максимум по эпохам на валидации.

Что спросят на собесе

  • Как работает dropout и почему на инференсе его выключают.
  • Чем отличаются weight decay и L2 в Adam.
  • Какие аугментации допустимы и почему не на валидации.
  • Что такое label smoothing и mixup.
  • План действий при переобучении.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.