Модуль I·Статья III·~3 мин чтения

Регуляризация и предотвращение переобучения

Основы нейронных сетей

Превратить статью в подкаст

Выберите голоса, формат и длину — AI запишет аудио

Регуляризация и предотвращение переобучения

Нейронные сети с миллионами параметров могут «запомнить» обучающую выборку полностью — переобучиться. Разрыв между train и test ошибкой — главный враг на практике. Регуляризация — набор техник, снижающих переобучение без потери выразительности модели.

Bias-Variance Tradeoff

Обобщение через разложение ошибки:

E[L(y, f̂(x))] = Bias²(f̂) + Var(f̂) + σ²_noise

Простая модель: высокое смещение, низкая дисперсия. Сложная модель (DNN): низкое смещение (может аппроксимировать всё), но высокая дисперсия (чувствительна к данным).

Double descent: При современных переопараметризованных сетях классический U-трейдоф нарушается — при числе параметров ≫ n ошибка снова уменьшается.

L2 регуляризация (Weight Decay)

Штраф: L_reg = L + λ/2 · ||θ||² = L + λ/2 · Σᵢ θᵢ². Обновление SGD: θ ← θ − α·∇L − αλθ = θ(1 − αλ) − α·∇L. «Затухание весов» (weight decay): каждый шаг уменьшает веса в (1−αλ) раз — тянет к нулю.

Байесовская интерпретация: MAP-оценка при Гауссовском приоре N(0, 1/λ) на параметры. L2 — предположение, что «истинные» веса малы.

Практика: λ = 10⁻⁴ ... 10⁻² — типичные значения. AdamW реализует weight decay правильно (не через градиент).

L1 регуляризация (LASSO)

Штраф: L + λ||θ||₁ = L + λΣᵢ|θᵢ|. Создаёт разреженность: многие θᵢ → 0. Байесовская: MAP при двойной экспоненциальной (Лаплас) приоре. Применяется реже в нейросетях — субдифференцируем, не так стабилен.

Dropout (Srivastava et al., 2014)

Идея: При обучении каждый нейрон «выключается» с вероятностью p (обычно p = 0.5 для FC, p = 0.1 для свёрток). Маска мult: zˡ = aˡ⊙m, m_i ~ Bernoulli(1−p). При инференсе: все нейроны активны, выходы масштабируются на (1−p). Инвертированный dropout (PyTorch default): при обучении делим на (1−p).

Интерпретации dropout:

  1. Ансамблевая: обучаем экспоненциально много «разреженных» подсетей, при инференсе — усредняем (приближённо через масштабирование).
  2. Регуляризационная: нейроны не могут «полагаться» на конкретных партнёров → более независимые признаки.
  3. Шумовая: добавляет шум к активациям → регуляризация через стохастичность.

Dropout нарушает batch statistics → несовместим с Batch Normalization. В современных архитектурах: BN заменяет dropout в свёрточных частях.

Batch Normalization (Ioffe & Szegedy, 2015)

Идея: Нормализуем активации по батчу перед применением активации. Для батча B = {x₁,...,xₘ}:

x̂ᵢ = (xᵢ − μB)/√(σB² + ε), yᵢ = γx̂ᵢ + β

Здесь μB = (1/m)Σᵢxᵢ, σB² = (1/m)Σᵢ(xᵢ−μB)², γ и β — обучаемые параметры (affine transform).

Преимущества: стабилизация обучения, позволяет бо́льшие learning rates, уменьшает чувствительность к инициализации. Регуляризационный эффект (через шум батч-статистики). При инференсе: используем running mean/variance (экспоненциальное скользящее среднее).

Ограничения: эффективен при batch size ≥ 16. Для малых батчей — Group Normalization, Instance Normalization.

Data Augmentation

Идея: Расширяем обучающий набор через «синтетические» трансформации, не меняющие класс. Для изображений: горизонтальный flip (50%), случайный crop, цветовой jitter, rotation ±15°, cutout (случайное прямоугольное маскирование).

Mixup (Zhang et al., 2018): x_mix = λx_i + (1−λ)x_j, y_mix = λy_i + (1−λ)y_j, λ ~ Beta(α,α). Обучаем на «смешанных» примерах → более плавные предсказания, лучшее обобщение.

CutMix (2019): вырезаем и вставляем патчи между изображениями → labels соответственно смешиваются.

RandAugment (Cubuk et al., 2019): случайно выбираем N из K аугментаций с силой M. Упрощает поиск политики аугментации.

Ранняя остановка (Early Stopping)

Алгоритм: Обучаем, периодически оцениваем val loss. Сохраняем лучшие веса (checkpoint) при минимальном val loss. Останавливаем при превышении терпения (patience = 10–20 эпох без улучшения).

Теоретически: Early stopping эквивалентна L2 регуляризации при достаточных условиях (Bishop, 2006). Число итераций ≈ 1/λ.

Численный пример

ResNet-50 на CIFAR-10 (50K train, 10K test):

  • Без регуляризации: train acc 99%, test acc 88% (переобучение 11%)
    • L2 (λ=1e-4): test acc 91%
    • Dropout(p=0.5 перед FC): test acc 91.5%
    • Data augmentation (flip+crop): test acc 93.2%
    • Mixup (α=1.0): test acc 94.1%
  • Все вместе: test acc 95.3%

Задание: Воспроизведите эксперимент на CIFAR-10: (1) Базовая CNN (без регуляризации) — зафиксируйте train/val accuracy. (2) Добавляйте по одной: L2 λ=1e-4, dropout p=0.3, BN, augmentation. (3) Постройте график: epochs vs val accuracy для каждой конфигурации. (4) Реализуйте early stopping с patience=10. Через сколько эпох останавливается обучение в каждом случае?

§ Акт · что дальше