Модуль II·Статья II·~3 мин чтения
Оптимизация в глубоком обучении
Математические основы Deep Learning
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Оптимизация нейронных сетей
Обучение нейронной сети — это решение задачи оптимизации min_θ L(θ) в пространстве с миллиардами переменных. Ландшафт функции потерь L(θ) сложен: седловые точки, плоские плато, овраги. Понимание методов оптимизации — ключ к успешному обучению глубоких моделей.
Стохастический градиентный спуск (SGD)
Полный градиент ∇L(θ) = (1/n)Σᵢ ∇lᵢ(θ) дорог при n = миллионы. Стохастическая аппроксимация: берём мини-батч B ⊂ {1,...,n} и аппроксимируем: ĝₜ = (1/|B|) Σᵢ∈B ∇lᵢ(θₜ). Обновление: θₜ₊₁ = θₜ − αₜ ĝₜ.
Ключевое свойство: E[ĝₜ] = ∇L(θₜ) — несмещённая оценка. Дисперсия Var[ĝₜ] = σ²/|B| убывает с размером батча.
Теорема сходимости (выпуклый случай): При убывающем lr αₜ = O(1/√t) и L-гладкой выпуклой функции: E[L(θ_T)] − L(θ*) ≤ O(1/√T). Для μ-сильно выпуклой при αₜ = O(1/t): O(σ²/(μT)).
Проблемы SGD: (1) Овраги (ill-conditioned): если кривизна резко отличается по разным направлениям (Гессе H имеет большое число обусловленности), SGD «колеблется» в узком направлении и медленно движется в широком. (2) Локальные минимумы (не проблема для DL — они почти одинаково хороши). (3) Седловые точки: ∇L = 0, но не минимум — теоретически проблема, практически SGD уходит от них быстро из-за стохастичности.
Адаптивные методы
Momentum (Polyak, 1964): накапливаем «скорость» в направлении градиента: vₜ = β vₜ₋₁ − α ∇L(θₜ), θₜ₊₁ = θₜ + vₜ
Физическая аналогия: шарик катится по поверхности потерь, набирая скорость в постоянных направлениях и замедляясь при смене направления. β = 0.9 — стандарт.
RMSProp (Hinton, 2012): Адаптивный learning rate для каждого параметра: vₜ = β vₜ₋₁ + (1−β) (∇L)², θₜ₊₁ = θₜ − α ∇L / √(vₜ + ε)
vₜ — экспоненциально взвешенное среднее квадрата градиента. Параметры с большим градиентом получают меньший эффективный lr. Полезно при разреженных градиентах (NLP).
Adam (Kingma & Ba, 2014): объединяет momentum и RMSProp:
mₜ = β₁ mₜ₋₁ + (1−β₁) gₜ (первый момент — среднее) vₜ = β₂ vₜ₋₁ + (1−β₂) gₜ² (второй момент — дисперсия) m̂ₜ = mₜ/(1−β₁ᵗ), v̂ₜ = vₜ/(1−β₂ᵗ) (bias correction) θₜ₊₁ = θₜ − α m̂ₜ/√(v̂ₜ + ε)
β₁ = 0.9, β₂ = 0.999 — стандарт. Bias correction важна в начале: без неё m̂₁ = (1−β₁)g₁ ≪ g₁.
AdamW: Adam с правильной weight decay: θ ← θ(1−αλ) − α·∇_correction. Стандарт для трансформеров.
Learning Rate Schedules
Learning rate — наиболее критичный гиперпараметр. Слишком большой: расходимость. Слишком малый: медленная сходимость.
Cosine annealing: αₜ = α_min + (α_max − α_min)/2 · (1 + cos(πt/T)). Плавно снижает lr от α_max до α_min за T шагов.
Warmup + cosine (BERT, ViT): первые W шагов: линейное нарастание lr от 0 до α_max. Затем cosine decay. Warmup критичен для трансформеров: без него — нестабильность из-за большого lr на случайно инициализированных весах.
1-cycle policy (Smith, 2017): lr нарастает от base_lr до max_lr (warmup), затем снижается до base_lr/100 (cosine). Быстрая сходимость — можно обучить за 1 эпоху то, что раньше требовало 10.
Нормализация
Batch Normalization (Ioffe & Szegedy, 2015): для батча X: x̂ = (x − μ)/√(σ² + ε), y = γx̂ + β (γ, β — обучаемые). Преимущества: стабилизация активаций → большие lr, регуляризационный эффект (шум от батч-статистики).
Layer Normalization: нормировка по признакам (не по батчу) — нужна для NLP (переменная длина). RMS Norm (без центрирования): x̂ = x/RMS(x) — LLaMA, Mistral.
Численный пример
Простая задача: обучаем y = w·x + b, MSE, x ∈ [−1,1], w* = 2, b* = 1. α = 0.1, батч = 16. После 100 итераций SGD: w ≈ 1.95, b ≈ 0.99 (небольшой шум). Adam с β₁=0.9, β₂=0.999 за те же 100 итераций: w ≈ 1.999, b ≈ 1.000. Adam сходится точнее и быстрее на этой задаче из-за адаптивных lr.
Задание: Обучите ResNet-20 на CIFAR-10 с тремя оптимизаторами: SGD+momentum, Adam, AdamW. Для каждого: подберите lr через grid search {0.001, 0.01, 0.1}. Постройте кривые val accuracy vs эпохи. Реализуйте cosine annealing + warmup. Какой оптимизатор + schedule даёт наилучшую val accuracy?
§ Акт · что дальше