Модуль 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:
- Ансамблевая: обучаем экспоненциально много «разреженных» подсетей, при инференсе — усредняем (приближённо через масштабирование).
- Регуляризационная: нейроны не могут «полагаться» на конкретных партнёров → более независимые признаки.
- Шумовая: добавляет шум к активациям → регуляризация через стохастичность.
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. Через сколько эпох останавливается обучение в каждом случае?
§ Акт · что дальше